Files
azuredatastudio/src/vs/platform/telemetry/browser/errorTelemetry.ts
Anthony Dresser 0b7e7ddbf9 Merge from vscode 8e0f348413f4f616c23a88ae30030efa85811973 (#6381)
* Merge from vscode 8e0f348413f4f616c23a88ae30030efa85811973

* disable strict null check
2019-07-15 22:35:46 -07:00

55 lines
1.6 KiB
TypeScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { toDisposable } from 'vs/base/common/lifecycle';
import { globals } from 'vs/base/common/platform';
import BaseErrorTelemetry, { ErrorEvent } from '../common/errorTelemetry';
export default class ErrorTelemetry extends BaseErrorTelemetry {
protected installErrorListeners(): void {
let oldOnError: Function;
let that = this;
if (typeof globals.onerror === 'function') {
oldOnError = globals.onerror;
}
globals.onerror = function (message: string, filename: string, line: number, column?: number, e?: any) {
that._onUncaughtError(message, filename, line, column, e);
if (oldOnError) {
oldOnError.apply(this, arguments);
}
};
this._disposables.add(toDisposable(() => {
if (oldOnError) {
globals.onerror = oldOnError;
}
}));
}
private _onUncaughtError(msg: string, file: string, line: number, column?: number, err?: any): void {
let data: ErrorEvent = {
callstack: msg,
msg,
file,
line,
column
};
if (err) {
let { name, message, stack } = err;
data.uncaught_error_name = name;
if (message) {
data.uncaught_error_msg = message;
}
if (stack) {
data.callstack = Array.isArray(err.stack)
? err.stack = err.stack.join('\n')
: err.stack;
}
}
this._enqueue(data);
}
}