From 92f31bf748a72df6826fd03512273449b1511d3b Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Wed, 24 Jul 2019 11:14:59 +0200 Subject: [PATCH] Call flush instead of dispose for flushing telemetry appenders Wait until data is flushed in cli --- src/vs/code/node/cliProcessMain.ts | 4 ++-- src/vs/platform/telemetry/common/telemetryUtils.ts | 8 ++++---- src/vs/platform/telemetry/node/appInsightsAppender.ts | 4 ++-- src/vs/platform/telemetry/node/telemetryIpc.ts | 3 ++- .../test/electron-browser/appInsightsAppender.test.ts | 2 +- .../test/electron-browser/telemetryService.test.ts | 2 +- src/vs/workbench/contrib/debug/node/telemetryApp.ts | 2 +- .../services/telemetry/browser/telemetryService.ts | 4 ++-- 8 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/vs/code/node/cliProcessMain.ts b/src/vs/code/node/cliProcessMain.ts index cd4f1f85dc9..032287a3b5d 100644 --- a/src/vs/code/node/cliProcessMain.ts +++ b/src/vs/code/node/cliProcessMain.ts @@ -354,8 +354,6 @@ export async function main(argv: ParsedArgs): Promise { services.set(ITelemetryService, new SyncDescriptor(TelemetryService, [config])); - // Dispose the AI adapter so that remaining data gets flushed. - disposables.add(combinedAppender(...appenders)); } else { services.set(ITelemetryService, NullTelemetryService); } @@ -365,6 +363,8 @@ export async function main(argv: ParsedArgs): Promise { try { await main.run(argv); + // Flush the remaining data in AI adapter. + await combinedAppender(...appenders).flush(); } finally { disposables.dispose(); } diff --git a/src/vs/platform/telemetry/common/telemetryUtils.ts b/src/vs/platform/telemetry/common/telemetryUtils.ts index e2fca2ba8c6..f8990d64a32 100644 --- a/src/vs/platform/telemetry/common/telemetryUtils.ts +++ b/src/vs/platform/telemetry/common/telemetryUtils.ts @@ -33,17 +33,17 @@ export const NullTelemetryService = new class implements ITelemetryService { export interface ITelemetryAppender { log(eventName: string, data: any): void; - dispose(): Promise | undefined; + flush(): Promise; } export function combinedAppender(...appenders: ITelemetryAppender[]): ITelemetryAppender { return { log: (e, d) => appenders.forEach(a => a.log(e, d)), - dispose: () => Promise.all(appenders.map(a => a.dispose())) + flush: () => Promise.all(appenders.map(a => a.flush())) }; } -export const NullAppender: ITelemetryAppender = { log: () => null, dispose: () => Promise.resolve(null) }; +export const NullAppender: ITelemetryAppender = { log: () => null, flush: () => Promise.resolve(null) }; export class LogAppender implements ITelemetryAppender { @@ -51,7 +51,7 @@ export class LogAppender implements ITelemetryAppender { private commonPropertiesRegex = /^sessionID$|^version$|^timestamp$|^commitHash$|^common\./; constructor(@ILogService private readonly _logService: ILogService) { } - dispose(): Promise { + flush(): Promise { return Promise.resolve(undefined); } diff --git a/src/vs/platform/telemetry/node/appInsightsAppender.ts b/src/vs/platform/telemetry/node/appInsightsAppender.ts index 2ed0150ac1f..f9c012cd344 100644 --- a/src/vs/platform/telemetry/node/appInsightsAppender.ts +++ b/src/vs/platform/telemetry/node/appInsightsAppender.ts @@ -73,7 +73,7 @@ export class AppInsightsAppender implements ITelemetryAppender { }); } - dispose(): Promise | undefined { + flush(): Promise { if (this._aiClient) { return new Promise(resolve => { this._aiClient!.flush({ @@ -85,6 +85,6 @@ export class AppInsightsAppender implements ITelemetryAppender { }); }); } - return undefined; + return Promise.resolve(undefined); } } diff --git a/src/vs/platform/telemetry/node/telemetryIpc.ts b/src/vs/platform/telemetry/node/telemetryIpc.ts index 8e1b68eb364..b49a3a23142 100644 --- a/src/vs/platform/telemetry/node/telemetryIpc.ts +++ b/src/vs/platform/telemetry/node/telemetryIpc.ts @@ -37,7 +37,8 @@ export class TelemetryAppenderClient implements ITelemetryAppender { return Promise.resolve(null); } - dispose(): any { + flush(): Promise { // TODO + return Promise.resolve(); } } diff --git a/src/vs/platform/telemetry/test/electron-browser/appInsightsAppender.test.ts b/src/vs/platform/telemetry/test/electron-browser/appInsightsAppender.test.ts index c891f9b894b..ee732ab653f 100644 --- a/src/vs/platform/telemetry/test/electron-browser/appInsightsAppender.test.ts +++ b/src/vs/platform/telemetry/test/electron-browser/appInsightsAppender.test.ts @@ -84,7 +84,7 @@ suite('AIAdapter', () => { }); teardown(() => { - adapter.dispose(); + return adapter.flush(); }); test('Simple event', () => { diff --git a/src/vs/platform/telemetry/test/electron-browser/telemetryService.test.ts b/src/vs/platform/telemetry/test/electron-browser/telemetryService.test.ts index 9f728745344..86a5f5203ed 100644 --- a/src/vs/platform/telemetry/test/electron-browser/telemetryService.test.ts +++ b/src/vs/platform/telemetry/test/electron-browser/telemetryService.test.ts @@ -30,7 +30,7 @@ class TestTelemetryAppender implements ITelemetryAppender { return this.events.length; } - public dispose(): Promise { + public flush(): Promise { this.isDisposed = true; return Promise.resolve(null); } diff --git a/src/vs/workbench/contrib/debug/node/telemetryApp.ts b/src/vs/workbench/contrib/debug/node/telemetryApp.ts index affab685550..52507e4fd20 100644 --- a/src/vs/workbench/contrib/debug/node/telemetryApp.ts +++ b/src/vs/workbench/contrib/debug/node/telemetryApp.ts @@ -8,7 +8,7 @@ import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppen import { TelemetryAppenderChannel } from 'vs/platform/telemetry/node/telemetryIpc'; const appender = new AppInsightsAppender(process.argv[2], JSON.parse(process.argv[3]), process.argv[4]); -process.once('exit', () => appender.dispose()); +process.once('exit', () => appender.flush()); const channel = new TelemetryAppenderChannel(appender); const server = new Server('telemetry'); diff --git a/src/vs/workbench/services/telemetry/browser/telemetryService.ts b/src/vs/workbench/services/telemetry/browser/telemetryService.ts index 13af5766086..652aaf3a2de 100644 --- a/src/vs/workbench/services/telemetry/browser/telemetryService.ts +++ b/src/vs/workbench/services/telemetry/browser/telemetryService.ts @@ -104,7 +104,7 @@ export class WebTelemetryAppender implements ITelemetryAppender { this._aiClient.trackEvent('monacoworkbench/' + eventName, data.properties, data.measurements); } - dispose(): Promise | undefined { + flush(): Promise { if (this._aiClient) { return new Promise(resolve => { this._aiClient!.flush(); @@ -113,7 +113,7 @@ export class WebTelemetryAppender implements ITelemetryAppender { }); } - return undefined; + return Promise.resolve(); } } -- GitLab