提交 92f31bf7 编写于 作者: S Sandeep Somavarapu

Call flush instead of dispose for flushing telemetry appenders

Wait until data is flushed in cli
上级 06c2853f
...@@ -354,8 +354,6 @@ export async function main(argv: ParsedArgs): Promise<void> { ...@@ -354,8 +354,6 @@ export async function main(argv: ParsedArgs): Promise<void> {
services.set(ITelemetryService, new SyncDescriptor(TelemetryService, [config])); services.set(ITelemetryService, new SyncDescriptor(TelemetryService, [config]));
// Dispose the AI adapter so that remaining data gets flushed.
disposables.add(combinedAppender(...appenders));
} else { } else {
services.set(ITelemetryService, NullTelemetryService); services.set(ITelemetryService, NullTelemetryService);
} }
...@@ -365,6 +363,8 @@ export async function main(argv: ParsedArgs): Promise<void> { ...@@ -365,6 +363,8 @@ export async function main(argv: ParsedArgs): Promise<void> {
try { try {
await main.run(argv); await main.run(argv);
// Flush the remaining data in AI adapter.
await combinedAppender(...appenders).flush();
} finally { } finally {
disposables.dispose(); disposables.dispose();
} }
......
...@@ -33,17 +33,17 @@ export const NullTelemetryService = new class implements ITelemetryService { ...@@ -33,17 +33,17 @@ export const NullTelemetryService = new class implements ITelemetryService {
export interface ITelemetryAppender { export interface ITelemetryAppender {
log(eventName: string, data: any): void; log(eventName: string, data: any): void;
dispose(): Promise<any> | undefined; flush(): Promise<any>;
} }
export function combinedAppender(...appenders: ITelemetryAppender[]): ITelemetryAppender { export function combinedAppender(...appenders: ITelemetryAppender[]): ITelemetryAppender {
return { return {
log: (e, d) => appenders.forEach(a => a.log(e, d)), 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 { export class LogAppender implements ITelemetryAppender {
...@@ -51,7 +51,7 @@ export class LogAppender implements ITelemetryAppender { ...@@ -51,7 +51,7 @@ export class LogAppender implements ITelemetryAppender {
private commonPropertiesRegex = /^sessionID$|^version$|^timestamp$|^commitHash$|^common\./; private commonPropertiesRegex = /^sessionID$|^version$|^timestamp$|^commitHash$|^common\./;
constructor(@ILogService private readonly _logService: ILogService) { } constructor(@ILogService private readonly _logService: ILogService) { }
dispose(): Promise<any> { flush(): Promise<any> {
return Promise.resolve(undefined); return Promise.resolve(undefined);
} }
......
...@@ -73,7 +73,7 @@ export class AppInsightsAppender implements ITelemetryAppender { ...@@ -73,7 +73,7 @@ export class AppInsightsAppender implements ITelemetryAppender {
}); });
} }
dispose(): Promise<any> | undefined { flush(): Promise<any> {
if (this._aiClient) { if (this._aiClient) {
return new Promise(resolve => { return new Promise(resolve => {
this._aiClient!.flush({ this._aiClient!.flush({
...@@ -85,6 +85,6 @@ export class AppInsightsAppender implements ITelemetryAppender { ...@@ -85,6 +85,6 @@ export class AppInsightsAppender implements ITelemetryAppender {
}); });
}); });
} }
return undefined; return Promise.resolve(undefined);
} }
} }
...@@ -37,7 +37,8 @@ export class TelemetryAppenderClient implements ITelemetryAppender { ...@@ -37,7 +37,8 @@ export class TelemetryAppenderClient implements ITelemetryAppender {
return Promise.resolve(null); return Promise.resolve(null);
} }
dispose(): any { flush(): Promise<void> {
// TODO // TODO
return Promise.resolve();
} }
} }
...@@ -84,7 +84,7 @@ suite('AIAdapter', () => { ...@@ -84,7 +84,7 @@ suite('AIAdapter', () => {
}); });
teardown(() => { teardown(() => {
adapter.dispose(); return adapter.flush();
}); });
test('Simple event', () => { test('Simple event', () => {
......
...@@ -30,7 +30,7 @@ class TestTelemetryAppender implements ITelemetryAppender { ...@@ -30,7 +30,7 @@ class TestTelemetryAppender implements ITelemetryAppender {
return this.events.length; return this.events.length;
} }
public dispose(): Promise<any> { public flush(): Promise<any> {
this.isDisposed = true; this.isDisposed = true;
return Promise.resolve(null); return Promise.resolve(null);
} }
......
...@@ -8,7 +8,7 @@ import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppen ...@@ -8,7 +8,7 @@ import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppen
import { TelemetryAppenderChannel } from 'vs/platform/telemetry/node/telemetryIpc'; import { TelemetryAppenderChannel } from 'vs/platform/telemetry/node/telemetryIpc';
const appender = new AppInsightsAppender(process.argv[2], JSON.parse(process.argv[3]), process.argv[4]); 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 channel = new TelemetryAppenderChannel(appender);
const server = new Server('telemetry'); const server = new Server('telemetry');
......
...@@ -104,7 +104,7 @@ export class WebTelemetryAppender implements ITelemetryAppender { ...@@ -104,7 +104,7 @@ export class WebTelemetryAppender implements ITelemetryAppender {
this._aiClient.trackEvent('monacoworkbench/' + eventName, data.properties, data.measurements); this._aiClient.trackEvent('monacoworkbench/' + eventName, data.properties, data.measurements);
} }
dispose(): Promise<any> | undefined { flush(): Promise<void> {
if (this._aiClient) { if (this._aiClient) {
return new Promise(resolve => { return new Promise(resolve => {
this._aiClient!.flush(); this._aiClient!.flush();
...@@ -113,7 +113,7 @@ export class WebTelemetryAppender implements ITelemetryAppender { ...@@ -113,7 +113,7 @@ export class WebTelemetryAppender implements ITelemetryAppender {
}); });
} }
return undefined; return Promise.resolve();
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册