From b60c26abfc22b0a5cf1c9b2b7ed4bab0530d2b9d Mon Sep 17 00:00:00 2001 From: mustard Date: Tue, 1 Nov 2022 09:09:38 +0000 Subject: [PATCH] Add checker for in operator --- extensions/gitpod-remote/src/ports.ts | 3 ++- extensions/gitpod-shared/src/common/utils.ts | 6 ++++++ extensions/gitpod-shared/src/features.ts | 11 ++++++----- extensions/gitpod-web/src/extension.ts | 3 ++- 4 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 extensions/gitpod-shared/src/common/utils.ts diff --git a/extensions/gitpod-remote/src/ports.ts b/extensions/gitpod-remote/src/ports.ts index b46461fdfd4e19..3e9aec6df2c78c 100644 --- a/extensions/gitpod-remote/src/ports.ts +++ b/extensions/gitpod-remote/src/ports.ts @@ -7,6 +7,7 @@ import * as util from 'util'; import { GitpodExtensionContext, GitpodWorkspacePort } from 'gitpod-shared'; import { PortsStatus, PortsStatusRequest, PortsStatusResponse } from '@gitpod/supervisor-api-grpc/lib/status_pb'; import { RetryAutoExposeRequest, TunnelVisiblity } from '@gitpod/supervisor-api-grpc/lib/port_pb'; +import { isGRPCErrorStatus } from 'gitpod-shared/src/common/utils'; export async function getSupervisorPorts(context: GitpodExtensionContext) { let supervisorPortList: PortsStatus.AsObject[] = []; @@ -41,7 +42,7 @@ export function observePortsStatus(context: GitpodExtensionContext): [vscode.Eve evts.on('data', (resp: PortsStatusResponse) => onPortUpdate.fire(resp.getPortsList().map(p => p.toObject()))); }); } catch (err) { - if (!('code' in err && err.code === grpc.status.CANCELLED)) { + if (!isGRPCErrorStatus(err, grpc.status.CANCELLED)) { context.logger.error('cannot maintain connection to supervisor', err); console.error('cannot maintain connection to supervisor', err); } diff --git a/extensions/gitpod-shared/src/common/utils.ts b/extensions/gitpod-shared/src/common/utils.ts new file mode 100644 index 00000000000000..9634b43457b1d4 --- /dev/null +++ b/extensions/gitpod-shared/src/common/utils.ts @@ -0,0 +1,6 @@ + +import * as grpc from '@grpc/grpc-js'; + +export function isGRPCErrorStatus(err: any, status: T): boolean { + return err && typeof err === 'object' && 'code' in err && err.code === status; +} diff --git a/extensions/gitpod-shared/src/features.ts b/extensions/gitpod-shared/src/features.ts index 83cd5b74165fbb..8948e5ebf6cb54 100644 --- a/extensions/gitpod-shared/src/features.ts +++ b/extensions/gitpod-shared/src/features.ts @@ -39,6 +39,7 @@ import * as uuid from 'uuid'; import { RemoteTrackMessage } from '@gitpod/gitpod-protocol/lib/analytics'; import Log from './common/logger'; import { TunnelPortRequest, TunnelVisiblity } from '@gitpod/supervisor-api-grpc/lib/port_pb'; +import { isGRPCErrorStatus } from './common/utils'; export class SupervisorConnection { readonly deadlines = { @@ -686,10 +687,10 @@ export function registerNotifications(context: GitpodExtensionContext): void { }); }); } catch (err) { - if ('code' in err && err.code === grpc.status.UNIMPLEMENTED) { + if (isGRPCErrorStatus(err, grpc.status.UNIMPLEMENTED)) { console.warn('supervisor does not implement the notification server'); run = false; - } else if (!('code' in err && err.code === grpc.status.CANCELLED)) { + } else if (!isGRPCErrorStatus(err, grpc.status.CANCELLED)) { console.error('cannot maintain connection to supervisor', err); } } finally { @@ -822,7 +823,7 @@ export async function registerTasks(context: GitpodExtensionContext): Promise { }); }); } catch (err) { - if (!('code' in err && err.code === grpc.status.CANCELLED)) { + if (!isGRPCErrorStatus(err, grpc.status.CANCELLED)) { context.logger.error('cannot maintain connection to supervisor', err); console.error('cannot maintain connection to supervisor', err); }