提交 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> {
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<void> {
try {
await main.run(argv);
// Flush the remaining data in AI adapter.
await combinedAppender(...appenders).flush();
} finally {
disposables.dispose();
}
......
......@@ -33,17 +33,17 @@ export const NullTelemetryService = new class implements ITelemetryService {
export interface ITelemetryAppender {
log(eventName: string, data: any): void;
dispose(): Promise<any> | undefined;
flush(): Promise<any>;
}
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<any> {
flush(): Promise<any> {
return Promise.resolve(undefined);
}
......
......@@ -73,7 +73,7 @@ export class AppInsightsAppender implements ITelemetryAppender {
});
}
dispose(): Promise<any> | undefined {
flush(): Promise<any> {
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);
}
}
......@@ -37,7 +37,8 @@ export class TelemetryAppenderClient implements ITelemetryAppender {
return Promise.resolve(null);
}
dispose(): any {
flush(): Promise<void> {
// TODO
return Promise.resolve();
}
}
......@@ -84,7 +84,7 @@ suite('AIAdapter', () => {
});
teardown(() => {
adapter.dispose();
return adapter.flush();
});
test('Simple event', () => {
......
......@@ -30,7 +30,7 @@ class TestTelemetryAppender implements ITelemetryAppender {
return this.events.length;
}
public dispose(): Promise<any> {
public flush(): Promise<any> {
this.isDisposed = true;
return Promise.resolve(null);
}
......
......@@ -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');
......
......@@ -104,7 +104,7 @@ export class WebTelemetryAppender implements ITelemetryAppender {
this._aiClient.trackEvent('monacoworkbench/' + eventName, data.properties, data.measurements);
}
dispose(): Promise<any> | undefined {
flush(): Promise<void> {
if (this._aiClient) {
return new Promise(resolve => {
this._aiClient!.flush();
......@@ -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.
先完成此消息的编辑!
想要评论请 注册