Skip to content

Commit

Permalink
Implement sending of errors to telemetry
Browse files Browse the repository at this point in the history
  • Loading branch information
RedMickey committed Jun 16, 2020
1 parent bb76fcf commit bd79be0
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 18 deletions.
22 changes: 13 additions & 9 deletions src/common/telemetryHelper.ts
Expand Up @@ -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 = <IHasErrorCode> <Record<string, any>> 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);
}

Expand Down Expand Up @@ -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 = <IHasErrorCode> <Record<string, any>> 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;
Expand Down
35 changes: 26 additions & 9 deletions src/extension/experimentService/experimentService.ts
Expand Up @@ -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",
Expand All @@ -31,6 +32,7 @@ export interface ExperimentParameters extends ExperimentConfig {
export interface ExperimentResult {
resultStatus: ExperimentStatuses;
updatedExperimentParameters: ExperimentParameters;
error?: Error;
}

export class ExperimentService implements vscode.Disposable {
Expand Down Expand Up @@ -102,6 +104,7 @@ export class ExperimentService implements vscode.Disposable {
expResult = {
resultStatus: ExperimentStatuses.FAILED,
updatedExperimentParameters: expConfig,
error: err,
};
}
} else {
Expand Down Expand Up @@ -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);
}
}

0 comments on commit bd79be0

Please sign in to comment.