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

suppress sending telemetry of error details #1036

Merged
merged 3 commits into from
May 25, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 67 additions & 17 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -583,7 +583,7 @@
"node-usb-native": "^0.0.13",
"properties": "^1.2.1",
"uuid": "^3.0.1",
"vscode-extension-telemetry": "0.0.18",
"vscode-extension-telemetry": "0.1.6",
"winreg": "^1.2.3",
"winston": "^2.3.1"
}
Expand Down
20 changes: 13 additions & 7 deletions src/logger/logger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ import * as winston from "winston";
import TelemetryTransport from "./telemetry-transport";
import UserNotificationTransport from "./user-notification-transport";

export enum LogLevel {
Info = "info",
Warn = "warn",
Error = "error",
}

function FilterErrorPath(line: string): string {
if (line) {
const values: string[] = line.split("/out/");
Expand All @@ -21,9 +27,9 @@ function FilterErrorPath(line: string): string {
export function configure(context: vscode.ExtensionContext) {
winston.configure({
transports: [
new (winston.transports.File)({ level: "warn", filename: context.asAbsolutePath("arduino.log") }),
new TelemetryTransport({ level: "info", context }),
new UserNotificationTransport({ level: "info" }),
new (winston.transports.File)({ level: LogLevel.Warn, filename: context.asAbsolutePath("arduino.log") }),
new TelemetryTransport({ level: LogLevel.Info, context }),
new UserNotificationTransport({ level: LogLevel.Info }),
],
});
}
Expand Down Expand Up @@ -54,7 +60,7 @@ export function silly(message: string, metadata?: any) {

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

function traceErrorOrWarning(level: string, message: string, error: Error, metadata?: any) {
Expand All @@ -68,15 +74,15 @@ function traceErrorOrWarning(level: string, message: string, error: Error, metad
firstLine = FilterErrorPath(firstLine ? firstLine.replace(/\\/g, "/") : "");
}
}
winston.log(level, "error", { ...metadata, message: error.message, errorLine: firstLine, telemetry: true });
winston.log(level, message, { ...metadata, message: error.message, errorLine: firstLine, telemetry: true });
}

export function traceError(message: string, error: Error, metadata?: any) {
traceErrorOrWarning("error", message, error, metadata);
traceErrorOrWarning(LogLevel.Error, message, error, metadata);
}

export function traceWarning(message: string, error: Error, metadata?: any) {
traceErrorOrWarning("warn", message, error, metadata);
traceErrorOrWarning(LogLevel.Warn, message, error, metadata);
}

export function notifyAndThrowUserError(errorCode: string, error: Error, message?: string) {
Expand Down
9 changes: 7 additions & 2 deletions src/logger/telemetry-transport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import * as vscode from "vscode";
import TelemetryReporter from "vscode-extension-telemetry";
import * as winston from "winston";
import { LogLevel } from "./logger";
interface IPackageInfo {
name: string;
version: string;
Expand Down Expand Up @@ -39,7 +40,7 @@ export class TelemetryTransport extends winston.Transport {
winston.error("Failed to initialize telemetry due to no aiKey in package.json.");
return;
}
this.reporter = new TelemetryReporter(packageInfo.name, packageInfo.version, packageInfo.aiKey);
this.reporter = new TelemetryReporter(packageInfo.name, packageInfo.version, packageInfo.aiKey, true);
}

protected log(level: string, message: string, metadata?: any, callback?: (arg1, arg2) => void) {
Expand All @@ -60,7 +61,11 @@ export class TelemetryTransport extends winston.Transport {
}
}
}
this.reporter.sendTelemetryEvent(message, properties, measures);
if (level === LogLevel.Info) {
this.reporter.sendTelemetryEvent(message, properties, measures);
} else {
this.reporter.sendTelemetryErrorEvent(message, properties, measures, ["message", "notification", "errorLine"]);
}
} catch (telemetryErr) {
// If sending telemetry event fails ignore it so it won"t break the extension
winston.error("Failed to send telemetry event. error: " + telemetryErr);
Expand Down
5 changes: 3 additions & 2 deletions src/logger/user-notification-transport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import * as vscode from "vscode";
import * as winston from "winston";
import { LogLevel } from "./logger";

export default class UserNotificationTransport extends winston.Transport {

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