From bd79be0d0ea1e6b9d154a792bd8c08f68c61a135 Mon Sep 17 00:00:00 2001 From: RedMickey Date: Tue, 16 Jun 2020 16:32:45 +0300 Subject: [PATCH] Implement sending of errors to telemetry --- src/common/telemetryHelper.ts | 22 +++++++----- .../experimentService/experimentService.ts | 35 ++++++++++++++----- 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/src/common/telemetryHelper.ts b/src/common/telemetryHelper.ts index fb845cbfb..107e526b7 100644 --- a/src/common/telemetryHelper.ts +++ b/src/common/telemetryHelper.ts @@ -53,15 +53,7 @@ export class TelemetryHelper { public static sendErrorEvent(eventName: string, error: Error, errorDescription?: string, isPii: boolean = true) { const event = TelemetryHelper.createTelemetryEvent(eventName); - let errorWithErrorCode: IHasErrorCode = > error; - if (errorWithErrorCode.errorCode) { - this.addTelemetryEventProperty(event, "error.code", errorWithErrorCode.errorCode, false); - if (errorDescription) { - this.addTelemetryEventProperty(event, "error.message", errorDescription, false); - } - } else { - this.addTelemetryEventProperty(event, "error.message", error.message, isPii); - } + TelemetryHelper.addTelemetryEventErrorProperty(event, error, errorDescription, "", isPii); Telemetry.send(event); } @@ -89,6 +81,18 @@ export class TelemetryHelper { } } + public static addTelemetryEventErrorProperty(event: Telemetry.TelemetryEvent, error: Error, errorDescription?: string, errorPropPrefix: string = "", isPii: boolean = true): void { + let errorWithErrorCode: IHasErrorCode = > error; + if (errorWithErrorCode.errorCode) { + this.addTelemetryEventProperty(event, `${errorPropPrefix}error.code`, errorWithErrorCode.errorCode, false); + if (errorDescription) { + this.addTelemetryEventProperty(event, `${errorPropPrefix}error.message`, errorDescription, false); + } + } else { + this.addTelemetryEventProperty(event, `${errorPropPrefix}error.message`, error.message, isPii); + } + } + public static addPropertiesFromOptions(telemetryProperties: ICommandTelemetryProperties, knownOptions: any, commandOptions: { [flag: string]: any }, nonPiiOptions: string[] = []): ICommandTelemetryProperties { // We parse only the known options, to avoid potential private information that may appear on the command line let unknownOptionIndex: number = 1; diff --git a/src/extension/experimentService/experimentService.ts b/src/extension/experimentService/experimentService.ts index 15ee6330f..1055e6e98 100644 --- a/src/extension/experimentService/experimentService.ts +++ b/src/extension/experimentService/experimentService.ts @@ -10,6 +10,7 @@ import { getFileNameWithoutExtension } from "../../common/utils"; import { IExperiment } from "./IExperiment"; import { PromiseUtil } from "../../common/node/promise"; import { TelemetryHelper } from "../../common/telemetryHelper"; +import { Telemetry } from "../../common/telemetry"; export enum ExperimentStatuses { ENABLED = "enabled", @@ -31,6 +32,7 @@ export interface ExperimentParameters extends ExperimentConfig { export interface ExperimentResult { resultStatus: ExperimentStatuses; updatedExperimentParameters: ExperimentParameters; + error?: Error; } export class ExperimentService implements vscode.Disposable { @@ -102,6 +104,7 @@ export class ExperimentService implements vscode.Disposable { expResult = { resultStatus: ExperimentStatuses.FAILED, updatedExperimentParameters: expConfig, + error: err, }; } } else { @@ -161,15 +164,29 @@ export class ExperimentService implements vscode.Disposable { } private sendExperimentTelemetry(experimentsResults: ExperimentResult[]): void { - const telemetryProps = experimentsResults.reduce((tProps, expResult) => { - return Object.assign( - tProps, - { - [expResult.updatedExperimentParameters.experimentName]: expResult.resultStatus, - } - ); - }, {}); + const runExperimentsEvent = TelemetryHelper.createTelemetryEvent("runExperiments"); + + experimentsResults.forEach(expResult => { + if ( + expResult.resultStatus === ExperimentStatuses.FAILED + && expResult.error + ) { + TelemetryHelper.addTelemetryEventErrorProperty( + runExperimentsEvent, + expResult.error, + undefined, + `${expResult.updatedExperimentParameters.experimentName}.` + ); + } else { + TelemetryHelper.addTelemetryEventProperty( + runExperimentsEvent, + expResult.updatedExperimentParameters.experimentName, + expResult.resultStatus, + false + ); + } + }); - TelemetryHelper.sendSimpleEvent("runExperiments", telemetryProps); + Telemetry.send(runExperimentsEvent); } }