Skip to content

Commit 713bdc2

Browse files
committed
Update isNotRunning check
1 parent 5a9e367 commit 713bdc2

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

src/remoteConnector.ts

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { LocalAppClient } from '@gitpod/local-app-api-grpcweb/lib/localapp_pb_se
99
import { NodeHttpTransport } from '@improbable-eng/grpc-web-node-http-transport';
1010
import { grpc } from '@improbable-eng/grpc-web';
1111
import { Workspace, WorkspaceInstanceStatus_Phase } from '@gitpod/public-api/lib/gitpod/experimental/v1/workspaces_pb';
12-
import { UserSSHPublicKeyValue, WorkspaceInfo, WorkspaceInstancePhase } from '@gitpod/gitpod-protocol';
12+
import { UserSSHPublicKeyValue, WorkspaceInfo } from '@gitpod/gitpod-protocol';
1313
import * as cp from 'child_process';
1414
import * as fs from 'fs';
1515
import * as http from 'http';
@@ -110,7 +110,7 @@ class LocalAppError extends Error {
110110
}
111111

112112
class NoRunningInstanceError extends Error {
113-
constructor(readonly workspaceId: string, phase?: WorkspaceInstancePhase) {
113+
constructor(readonly workspaceId: string, readonly phase?: string) {
114114
super(`Failed to connect to ${workspaceId} Gitpod workspace, workspace not running: ${phase}`);
115115
}
116116
}
@@ -480,11 +480,16 @@ export class RemoteConnector extends Disposable {
480480
sshKeysSupported ? (this.publicApi ? this.publicApi.getSSHKeys() : service.server.getSSHPublicKeys()) : undefined
481481
]), this.logger);
482482

483-
const isRunning = this.publicApi
484-
? (workspaceInfo as Workspace)?.status?.instance?.status?.phase === WorkspaceInstanceStatus_Phase.RUNNING
485-
: (workspaceInfo as WorkspaceInfo).latestInstance?.status?.phase === 'running';
486-
if (!isRunning) {
487-
throw new NoRunningInstanceError(workspaceId);
483+
const isNotRunning = this.publicApi
484+
? !((workspaceInfo as Workspace)?.status?.instance) || (workspaceInfo as Workspace)?.status?.instance?.status?.phase === WorkspaceInstanceStatus_Phase.STOPPING || (workspaceInfo as Workspace)?.status?.instance?.status?.phase === WorkspaceInstanceStatus_Phase.STOPPED
485+
: !((workspaceInfo as WorkspaceInfo).latestInstance) || (workspaceInfo as WorkspaceInfo).latestInstance?.status?.phase === 'stopping' || (workspaceInfo as WorkspaceInfo).latestInstance?.status?.phase === 'stopped';
486+
if (isNotRunning) {
487+
throw new NoRunningInstanceError(
488+
workspaceId,
489+
this.publicApi
490+
? (workspaceInfo as Workspace)?.status?.instance?.status?.phase ? WorkspaceInstanceStatus_Phase[(workspaceInfo as Workspace)?.status?.instance?.status?.phase!] : undefined
491+
: (workspaceInfo as WorkspaceInfo).latestInstance?.status?.phase
492+
);
488493
}
489494

490495
const workspaceUrl = this.publicApi
@@ -747,7 +752,7 @@ export class RemoteConnector extends Disposable {
747752
let sshDestination: SSHDestination | undefined;
748753
if (!forceUseLocalApp) {
749754
const openSSHVersion = await getOpenSSHVersion();
750-
const gatewayFlow = { kind: 'gateway', openSSHVersion, userOverride, ...sshFlow };
755+
const gatewayFlow: UserFlowTelemetry = { kind: 'gateway', openSSHVersion, userOverride, ...sshFlow };
751756
try {
752757
this.telemetry.sendUserFlowStatus('connecting', gatewayFlow);
753758

@@ -775,6 +780,7 @@ export class RemoteConnector extends Disposable {
775780
// Do nothing and continue execution
776781
} else if (e instanceof NoRunningInstanceError) {
777782
this.logger.error('No Running instance:', e);
783+
gatewayFlow['phase'] = e.phase;
778784
this.notifications.showErrorMessage(`Failed to connect to ${e.workspaceId} Gitpod workspace: workspace not running`, { flow: gatewayFlow, id: 'no_running_instance' });
779785
return;
780786
} else {
@@ -1027,7 +1033,7 @@ export class RemoteConnector extends Disposable {
10271033

10281034
const workspaceInfo = await withServerApi(session!.accessToken, connectionInfo.gitpodHost, service => service.server.getWorkspace(connectionInfo.workspaceId), this.logger);
10291035

1030-
if (workspaceInfo.latestInstance?.status?.phase !== 'running') {
1036+
if (!workspaceInfo.latestInstance || workspaceInfo.latestInstance?.status?.phase === 'stopping' || workspaceInfo.latestInstance?.status?.phase === 'stopped') {
10311037
throw new NoRunningInstanceError(connectionInfo.workspaceId, workspaceInfo.latestInstance?.status?.phase);
10321038
}
10331039

@@ -1071,12 +1077,13 @@ export class RemoteConnector extends Disposable {
10711077

10721078
vscode.commands.executeCommand('setContext', 'gitpod.inWorkspace', true);
10731079
} catch (e) {
1074-
const remoteFlow = { ...connectionInfo, userId: session?.account.id, flow: 'remote_window' };
1080+
const remoteFlow: UserFlowTelemetry = { ...connectionInfo, userId: session?.account.id, flow: 'remote_window' };
10751081
if (e instanceof NoRunningInstanceError) {
10761082
this.logger.error('No Running instance:', e);
10771083
const workspaceUrl = new URL(connectionInfo.gitpodHost);
10781084
workspaceUrl.pathname = '/start';
10791085
workspaceUrl.hash = connectionInfo.workspaceId;
1086+
remoteFlow['phase'] = e.phase;
10801087
this.showWsNotRunningDialog(connectionInfo.workspaceId, workspaceUrl.toString(), remoteFlow);
10811088
return;
10821089
}

0 commit comments

Comments
 (0)