Skip to content
This repository was archived by the owner on Oct 1, 2024. It is now read-only.

Commit 1c391dd

Browse files
authored
Merge pull request #1036 from microsoft/telemetry_patch
suppress sending telemetry of error details
2 parents 21ad8ca + ca8acbe commit 1c391dd

File tree

5 files changed

+91
-29
lines changed

5 files changed

+91
-29
lines changed

package-lock.json

+67-17
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,7 @@
583583
"node-usb-native": "^0.0.13",
584584
"properties": "^1.2.1",
585585
"uuid": "^3.0.1",
586-
"vscode-extension-telemetry": "0.0.18",
586+
"vscode-extension-telemetry": "0.1.6",
587587
"winreg": "^1.2.3",
588588
"winston": "^2.3.1"
589589
}

src/logger/logger.ts

+13-7
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ import * as winston from "winston";
66
import TelemetryTransport from "./telemetry-transport";
77
import UserNotificationTransport from "./user-notification-transport";
88

9+
export enum LogLevel {
10+
Info = "info",
11+
Warn = "warn",
12+
Error = "error",
13+
}
14+
915
function FilterErrorPath(line: string): string {
1016
if (line) {
1117
const values: string[] = line.split("/out/");
@@ -21,9 +27,9 @@ function FilterErrorPath(line: string): string {
2127
export function configure(context: vscode.ExtensionContext) {
2228
winston.configure({
2329
transports: [
24-
new (winston.transports.File)({ level: "warn", filename: context.asAbsolutePath("arduino.log") }),
25-
new TelemetryTransport({ level: "info", context }),
26-
new UserNotificationTransport({ level: "info" }),
30+
new (winston.transports.File)({ level: LogLevel.Warn, filename: context.asAbsolutePath("arduino.log") }),
31+
new TelemetryTransport({ level: LogLevel.Info, context }),
32+
new UserNotificationTransport({ level: LogLevel.Info }),
2733
],
2834
});
2935
}
@@ -54,7 +60,7 @@ export function silly(message: string, metadata?: any) {
5460

5561
export function traceUserData(message: string, metadata?: any) {
5662
// use `info` as the log level and add a special flag in metadata
57-
winston.log("info", message, { ...metadata, telemetry: true });
63+
winston.log(LogLevel.Info, message, { ...metadata, telemetry: true });
5864
}
5965

6066
function traceErrorOrWarning(level: string, message: string, error: Error, metadata?: any) {
@@ -68,15 +74,15 @@ function traceErrorOrWarning(level: string, message: string, error: Error, metad
6874
firstLine = FilterErrorPath(firstLine ? firstLine.replace(/\\/g, "/") : "");
6975
}
7076
}
71-
winston.log(level, "error", { ...metadata, message: error.message, errorLine: firstLine, telemetry: true });
77+
winston.log(level, message, { ...metadata, message: error.message, errorLine: firstLine, telemetry: true });
7278
}
7379

7480
export function traceError(message: string, error: Error, metadata?: any) {
75-
traceErrorOrWarning("error", message, error, metadata);
81+
traceErrorOrWarning(LogLevel.Error, message, error, metadata);
7682
}
7783

7884
export function traceWarning(message: string, error: Error, metadata?: any) {
79-
traceErrorOrWarning("warn", message, error, metadata);
85+
traceErrorOrWarning(LogLevel.Warn, message, error, metadata);
8086
}
8187

8288
export function notifyAndThrowUserError(errorCode: string, error: Error, message?: string) {

src/logger/telemetry-transport.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import * as vscode from "vscode";
55
import TelemetryReporter from "vscode-extension-telemetry";
66
import * as winston from "winston";
7+
import { LogLevel } from "./logger";
78
interface IPackageInfo {
89
name: string;
910
version: string;
@@ -39,7 +40,7 @@ export class TelemetryTransport extends winston.Transport {
3940
winston.error("Failed to initialize telemetry due to no aiKey in package.json.");
4041
return;
4142
}
42-
this.reporter = new TelemetryReporter(packageInfo.name, packageInfo.version, packageInfo.aiKey);
43+
this.reporter = new TelemetryReporter(packageInfo.name, packageInfo.version, packageInfo.aiKey, true);
4344
}
4445

4546
protected log(level: string, message: string, metadata?: any, callback?: (arg1, arg2) => void) {
@@ -60,7 +61,11 @@ export class TelemetryTransport extends winston.Transport {
6061
}
6162
}
6263
}
63-
this.reporter.sendTelemetryEvent(message, properties, measures);
64+
if (level === LogLevel.Info) {
65+
this.reporter.sendTelemetryEvent(message, properties, measures);
66+
} else {
67+
this.reporter.sendTelemetryErrorEvent(message, properties, measures, ["message", "notification", "errorLine"]);
68+
}
6469
} catch (telemetryErr) {
6570
// If sending telemetry event fails ignore it so it won"t break the extension
6671
winston.error("Failed to send telemetry event. error: " + telemetryErr);

src/logger/user-notification-transport.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import * as vscode from "vscode";
55
import * as winston from "winston";
6+
import { LogLevel } from "./logger";
67

78
export default class UserNotificationTransport extends winston.Transport {
89

@@ -13,9 +14,9 @@ export default class UserNotificationTransport extends winston.Transport {
1314
protected log(level: string, message: string, metadata?: any, callback?: (arg1, arg2) => void) {
1415
if (metadata && metadata.showUser) {
1516
const notification = (metadata && metadata.notification) ? metadata.notification : message;
16-
if (level === "warn") {
17+
if (level === LogLevel.Warn) {
1718
vscode.window.showWarningMessage(notification);
18-
} else if (level === "error") {
19+
} else if (level === LogLevel.Error) {
1920
vscode.window.showErrorMessage(notification);
2021
} else {
2122
winston.error(`Invalid error level '${level}' for user notification.`);

0 commit comments

Comments
 (0)