Skip to content

Commit 8ddd005

Browse files
authored
Use new vscode.LogOutputChannel api (#33)
1 parent de02eea commit 8ddd005

17 files changed

+47
-118
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"url": "https://github.com/gitpod-io/gitpod/issues"
1515
},
1616
"engines": {
17-
"vscode": "^1.63.0"
17+
"vscode": "^1.74.0"
1818
},
1919
"categories": [
2020
"Other"
@@ -146,7 +146,7 @@
146146
"@types/ssh2": "^0.5.52",
147147
"@types/tmp": "^0.2.1",
148148
"@types/uuid": "8.0.0",
149-
"@types/vscode": "^1.63.0",
149+
"@types/vscode": "1.74.0",
150150
"@types/webpack": "^5.28.0",
151151
"@types/ws": "^7.4.7",
152152
"@types/yazl": "^2.4.2",

src/authentication.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import * as vscode from 'vscode';
77
import { v4 as uuid } from 'uuid';
88
import Keychain from './common/keychain';
99
import GitpodServer from './gitpodServer';
10-
import Log from './common/logger';
1110
import { arrayEquals } from './common/utils';
1211
import { Disposable } from './common/dispose';
1312
import TelemetryReporter from './telemetryReporter';
@@ -27,7 +26,6 @@ interface SessionData {
2726

2827
export default class GitpodAuthenticationProvider extends Disposable implements vscode.AuthenticationProvider {
2928
private _sessionChangeEmitter = new vscode.EventEmitter<vscode.AuthenticationProviderAuthenticationSessionsChangeEvent>();
30-
private _logger: Log;
3129
private _telemetry: TelemetryReporter;
3230

3331
private _gitpodServer!: GitpodServer;
@@ -40,13 +38,12 @@ export default class GitpodAuthenticationProvider extends Disposable implements
4038

4139
constructor(
4240
private readonly context: vscode.ExtensionContext,
43-
logger: Log,
41+
private readonly _logger: vscode.LogOutputChannel,
4442
telemetry: TelemetryReporter,
4543
private readonly notifications: NotificationService
4644
) {
4745
super();
4846

49-
this._logger = logger;
5047
this._telemetry = telemetry;
5148

5249
this.reconcile();

src/common/keychain.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,12 @@
66
// keytar depends on a native module shipped in vscode, so this is
77
// how we load it
88
import * as vscode from 'vscode';
9-
import Log from './logger';
109

1110
export default class Keychain {
1211
constructor(
1312
private readonly context: vscode.ExtensionContext,
1413
private readonly serviceId: string,
15-
private readonly logger: Log
14+
private readonly logger: vscode.LogOutputChannel
1615
) { }
1716

1817
async setToken(token: string): Promise<void> {

src/common/logger.ts

Lines changed: 0 additions & 71 deletions
This file was deleted.

src/experiments.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import * as vscode from 'vscode';
77
import * as configcat from 'configcat-node';
88
import * as configcatcommon from 'configcat-common';
99
import * as semver from 'semver';
10-
import Log from './common/logger';
1110

1211
const EXPERTIMENTAL_SETTINGS = [
1312
'gitpod.remote.useLocalApp'
@@ -21,7 +20,7 @@ export class ExperimentalSettings {
2120
key: string,
2221
extensionVersion: string,
2322
private readonly context: vscode.ExtensionContext,
24-
private readonly logger: Log
23+
private readonly logger: vscode.LogOutputChannel
2524
) {
2625
this.configcatClient = configcat.createClientWithLazyLoad(key, {
2726
baseUrl: new URL('/configcat', this.context.extensionMode === vscode.ExtensionMode.Production ? 'https://gitpod.io' : 'https://gitpod-staging.com').href,

src/extension.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import * as os from 'os';
77
import * as vscode from 'vscode';
88
import fetch, { Headers, Request, Response, AbortError, FetchError } from 'node-fetch-commonjs';
99
import GitpodAuthenticationProvider from './authentication';
10-
import Log from './common/logger';
1110
import { UserFlowTelemetry } from './common/telemetry';
1211
import { ExperimentalSettings } from './experiments';
1312
import { exportLogs } from './exportLogs';
@@ -40,7 +39,15 @@ export async function activate(context: vscode.ExtensionContext) {
4039
// sync between machines
4140
context.globalState.setKeysForSync([ReleaseNotes.RELEASE_NOTES_LAST_READ_KEY]);
4241

43-
const logger = new Log('Gitpod');
42+
const logger = vscode.window.createOutputChannel('Gitpod', { log: true });
43+
context.subscriptions.push(logger);
44+
45+
const onDidChangeLogLevel = (logLevel: vscode.LogLevel) => {
46+
logger.appendLine(`Log level: ${vscode.LogLevel[logLevel]}`);
47+
};
48+
context.subscriptions.push(logger.onDidChangeLogLevel(onDidChangeLogLevel));
49+
onDidChangeLogLevel(logger.logLevel);
50+
4451
logger.info(`${extensionId}/${packageJSON.version} (${os.release()} ${os.platform()} ${os.arch()}) vscode/${vscode.version} (${vscode.env.appName})`);
4552

4653
const experiments = new ExperimentalSettings('gitpod', packageJSON.version, context, logger);

src/featureSupport.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
*--------------------------------------------------------------------------------------------*/
55
import * as vscode from 'vscode';
66
import * as semver from 'semver';
7-
import Log from './common/logger';
87
import { retry } from './common/async';
98

109
export class GitpodVersion {
@@ -37,7 +36,7 @@ export class GitpodVersion {
3736
}
3837

3938
let cacheGitpodVersion: { host: string; version: GitpodVersion } | undefined;
40-
async function getOrFetchVersionInfo(serviceUrl: string, logger: Log) {
39+
async function getOrFetchVersionInfo(serviceUrl: string, logger: vscode.LogOutputChannel) {
4140
if (serviceUrl === 'https://gitpod.io') {
4241
// SaaS default allow all features, should proper handle SaaS feature support if needed in the future
4342
return {
@@ -83,7 +82,7 @@ async function getOrFetchVersionInfo(serviceUrl: string, logger: Log) {
8382
return cacheGitpodVersion;
8483
}
8584

86-
export async function getGitpodVersion(gitpodHost: string, logger: Log) {
85+
export async function getGitpodVersion(gitpodHost: string, logger: vscode.LogOutputChannel) {
8786
const serviceUrl = new URL(gitpodHost).toString().replace(/\/$/, '');
8887
const versionInfo = await getOrFetchVersionInfo(serviceUrl, logger);
8988
return versionInfo.version;

src/gitpodServer.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import * as vscode from 'vscode';
7-
import Log from './common/logger';
87
import { PromiseAdapter, promiseFromEvent } from './common/utils';
98
import { withServerApi } from './internalApi';
109
import pkceChallenge from 'pkce-challenge';
@@ -21,7 +20,7 @@ interface ExchangeTokenResponse {
2120
scope: string;
2221
}
2322

24-
async function getUserInfo(token: string, serviceUrl: string, logger: Log) {
23+
async function getUserInfo(token: string, serviceUrl: string, logger: vscode.LogOutputChannel) {
2524
const user = await withServerApi(token, serviceUrl, service => service.server.getLoggedInUser(), logger);
2625
return {
2726
id: user.id,
@@ -41,7 +40,7 @@ export default class GitpodServer extends Disposable {
4140

4241
constructor(
4342
serviceUrl: string,
44-
private readonly _logger: Log,
43+
private readonly _logger: vscode.LogOutputChannel,
4544
private readonly notifications: NotificationService
4645
) {
4746
super();

src/heartbeat.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { WorkspaceInfo } from '@gitpod/gitpod-protocol';
77
import { Workspace, WorkspaceInstanceStatus_Phase } from '@gitpod/public-api/lib/gitpod/experimental/v1/workspaces_pb';
88
import * as vscode from 'vscode';
99
import { Disposable } from './common/dispose';
10-
import Log from './common/logger';
1110
import { withServerApi } from './internalApi';
1211
import { GitpodPublicApi } from './publicApi';
1312
import TelemetryReporter from './telemetryReporter';
@@ -28,7 +27,7 @@ export class HeartbeatManager extends Disposable {
2827
readonly debugWorkspace: boolean,
2928
private readonly accessToken: string,
3029
private readonly publicApi: GitpodPublicApi | undefined,
31-
private readonly logger: Log,
30+
private readonly logger: vscode.LogOutputChannel,
3231
private readonly telemetry: TelemetryReporter
3332
) {
3433
super();
@@ -79,7 +78,7 @@ export class HeartbeatManager extends Disposable {
7978
}
8079
}));
8180

82-
this.logger.trace(`Heartbeat manager for workspace ${workspaceId} (${instanceId}) - ${gitpodHost} started`);
81+
this.logger.debug(`Heartbeat manager for workspace ${workspaceId} (${instanceId}) - ${gitpodHost} started`);
8382

8483
// Start heartbeating interval
8584
this.sendHeartBeat();
@@ -103,7 +102,6 @@ export class HeartbeatManager extends Disposable {
103102
}
104103

105104
private async sendHeartBeat(wasClosed?: true) {
106-
const suffix = wasClosed ? 'closed heartbeat' : 'heartbeat';
107105
try {
108106
await withServerApi(this.accessToken, this.gitpodHost, async service => {
109107
const workspaceInfo = this.publicApi
@@ -118,15 +116,18 @@ export class HeartbeatManager extends Disposable {
118116
: await service.server.sendHeartBeat({ instanceId: this.instanceId, wasClosed });
119117
if (wasClosed) {
120118
this.telemetry.sendTelemetryEvent('ide_close_signal', { workspaceId: this.workspaceId, instanceId: this.instanceId, gitpodHost: this.gitpodHost, clientKind: 'vscode', debugWorkspace: String(!!this.debugWorkspace) });
121-
this.logger.trace('Send ' + suffix);
119+
this.logger.trace(`Send closed heartbeat`);
120+
} else {
121+
this.logger.trace(`Send heartbeat, triggered by ${this.lastActivityEvent} event`);
122122
}
123123
} else {
124124
this.logger.trace('Stopping heartbeat as workspace is not running');
125125
this.stopHeartbeat();
126126
}
127127
}, this.logger);
128128
} catch (err) {
129-
this.logger.error(`Failed to send ${suffix} with event ${this.lastActivityEvent}:`, err);
129+
const suffix = wasClosed ? 'closed heartbeat' : 'heartbeat';
130+
this.logger.error(`Failed to send ${suffix}, triggered by ${this.lastActivityEvent} event:`, err);
130131
}
131132
}
132133

src/internalApi.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import { listen as doListen } from 'vscode-ws-jsonrpc';
99
import WebSocket, { ErrorEvent } from 'ws';
1010
import ReconnectingWebSocket from 'reconnecting-websocket';
1111
import * as vscode from 'vscode';
12-
import Log from './common/logger';
1312

1413
type UsedGitpodFunction = ['getLoggedInUser', 'getWorkspace', 'getOwnerToken', 'getSSHPublicKeys', 'sendHeartBeat'];
1514
type Union<Tuple extends any[], Union = never> = Tuple[number] | Union;
@@ -26,7 +25,7 @@ class GitpodServerApi extends vscode.Disposable {
2625
private readonly onErrorEmitter = new vscode.EventEmitter<Error>();
2726
readonly onError = this.onErrorEmitter.event;
2827

29-
constructor(accessToken: string, serviceUrl: string, private readonly logger: Log) {
28+
constructor(accessToken: string, serviceUrl: string, readonly logger: vscode.LogOutputChannel) {
3029
super(() => this.internalDispose());
3130

3231
serviceUrl = serviceUrl.replace(/\/$/, '');
@@ -59,7 +58,12 @@ class GitpodServerApi extends vscode.Disposable {
5958

6059
doListen({
6160
webSocket: (webSocket as any),
62-
logger: this.logger,
61+
logger: {
62+
error(m: string) { logger.error(m); },
63+
warn(m: string) { logger.warn(m); },
64+
info(m: string) { logger.info(m); },
65+
log(m: string) { logger.info(m); }
66+
},
6367
onConnection: connection => factory.listen(connection),
6468
});
6569
this.webSocket = webSocket;
@@ -71,7 +75,7 @@ class GitpodServerApi extends vscode.Disposable {
7175
}
7276
}
7377

74-
export function withServerApi<T>(accessToken: string, serviceUrl: string, cb: (service: GitpodConnection) => Promise<T>, logger: Log): Promise<T> {
78+
export function withServerApi<T>(accessToken: string, serviceUrl: string, cb: (service: GitpodConnection) => Promise<T>, logger: vscode.LogOutputChannel): Promise<T> {
7579
const api = new GitpodServerApi(accessToken, serviceUrl, logger);
7680
return Promise.race([
7781
cb(api.service),

0 commit comments

Comments
 (0)