From 89d8d7c7bd0399571e7f72d367169d900131862b Mon Sep 17 00:00:00 2001 From: Jean Pierre Date: Sat, 9 Jul 2022 06:23:52 +0000 Subject: [PATCH] Add a command to cancel heartbeat so gitpod-desktop can take care of it --- extensions/gitpod-remote/src/extension.ts | 46 ++++++++++++++--------- extensions/gitpod-shared/src/analytics.ts | 2 + extensions/gitpod-shared/src/features.ts | 2 + 3 files changed, 33 insertions(+), 17 deletions(-) diff --git a/extensions/gitpod-remote/src/extension.ts b/extensions/gitpod-remote/src/extension.ts index 4ad8803d1e493..51469f36d5e38 100644 --- a/extensions/gitpod-remote/src/extension.ts +++ b/extensions/gitpod-remote/src/extension.ts @@ -26,13 +26,20 @@ export async function activate(context: vscode.ExtensionContext) { } return; } - if (openWorkspaceLocation(gitpodContext)) { - return; - } registerTasks(gitpodContext); installInitialExtensions(gitpodContext); - registerHearbeat(gitpodContext); + + // We are moving the heartbeat to gitpod-desktop extension, + // so we register a command to cancel the heartbeat on the gitpod-remote extension + // and then gitpod-desktop will take care of it. + const toDispose = registerHearbeat(gitpodContext); + context.subscriptions.push(toDispose); + context.subscriptions.push(vscode.commands.registerCommand('__gitpod.cancelGitpodRemoteHeartbeat', () => { + toDispose.dispose(); + gitpodContext?.logger.info('__gitpod.cancelGitpodRemoteHeartbeat command executed'); + return true; + })); registerCLI(gitpodContext); // configure task terminals if Gitpod Code Server is running @@ -83,15 +90,6 @@ export function registerCLI(context: GitpodExtensionContext): void { context.environmentVariableCollection.replace('GITPOD_REMOTE_CLI_IPC', ipcHookCli); } -export function openWorkspaceLocation(context: GitpodExtensionContext): boolean { - if (vscode.workspace.workspaceFolders) { - return false; - } - const workspaceUri = vscode.Uri.file(context.info.getWorkspaceLocationFile() || context.info.getWorkspaceLocationFolder()); - vscode.commands.executeCommand('vscode.openFolder', workspaceUri, { forceReuseWindow: true }); - return true; -} - export async function installInitialExtensions(context: GitpodExtensionContext): Promise { context.logger.info('installing initial extensions...'); const extensions: (vscode.Uri | string)[] = []; @@ -151,7 +149,9 @@ export async function installInitialExtensions(context: GitpodExtensionContext): context.logger.info('initial extensions installed'); } -export function registerHearbeat(context: GitpodExtensionContext): void { +export function registerHearbeat(context: GitpodExtensionContext): vscode.Disposable { + const disposables: vscode.Disposable[] = []; + let lastActivity = 0; const updateLastActivitiy = () => { lastActivity = new Date().getTime(); @@ -173,7 +173,16 @@ export function registerHearbeat(context: GitpodExtensionContext): void { }; sendHeartBeat(); if (!context.devMode) { - context.pendingWillCloseSocket.push(() => sendHeartBeat(true)); + const sendCloseHeartbeat = () => sendHeartBeat(true); + context.pendingWillCloseSocket.push(sendCloseHeartbeat); + disposables.push({ + dispose() { + const idx = context.pendingWillCloseSocket.indexOf(sendCloseHeartbeat); + if (idx >= 0) { + context.pendingWillCloseSocket.splice(idx, 1); + } + } + }); } const activityInterval = 10000; @@ -184,9 +193,10 @@ export function registerHearbeat(context: GitpodExtensionContext): void { } sendHeartBeat(); }, activityInterval); - context.subscriptions.push( + + disposables.push( { - dispose: () => { + dispose() { clearInterval(heartBeatHandle); } }, @@ -237,4 +247,6 @@ export function registerHearbeat(context: GitpodExtensionContext): void { } }) ); + + return vscode.Disposable.from(...disposables); } diff --git a/extensions/gitpod-shared/src/analytics.ts b/extensions/gitpod-shared/src/analytics.ts index 05db336956168..2f324805a0afe 100644 --- a/extensions/gitpod-shared/src/analytics.ts +++ b/extensions/gitpod-shared/src/analytics.ts @@ -16,6 +16,8 @@ export interface BaseGitpodAnalyticsEventPropeties { devMode: boolean; version: string; timestamp: number; + 'common.extname': string; + 'common.extversion': string; } interface GAET { diff --git a/extensions/gitpod-shared/src/features.ts b/extensions/gitpod-shared/src/features.ts index 08a1a6dc3ed01..8e09ade52a5a4 100644 --- a/extensions/gitpod-shared/src/features.ts +++ b/extensions/gitpod-shared/src/features.ts @@ -185,6 +185,8 @@ export class GitpodExtensionContext implements vscode.ExtensionContext { devMode: this.devMode, version: vscode.version, timestamp: Date.now(), + 'common.extname': this.extension.id, + 'common.extversion': this.extension.packageJSON.version }; const msg: RemoteTrackMessage = { event: eventName,