Skip to content

Commit fb89c1c

Browse files
authored
Add crash count telemetry. (#6851)
* Add crash count telemetry.
1 parent fdda9c2 commit fb89c1c

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

Extension/src/LanguageServer/extension.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1106,10 +1106,10 @@ function reportMacCrashes(): void {
11061106
fs.readFile(path.resolve(crashFolder, filename), 'utf8', (err, data) => {
11071107
if (err) {
11081108
// Try again?
1109-
fs.readFile(path.resolve(crashFolder, filename), 'utf8', handleCrashFileRead);
1109+
fs.readFile(path.resolve(crashFolder, filename), 'utf8', handleMacCrashFileRead);
11101110
return;
11111111
}
1112-
handleCrashFileRead(err, data);
1112+
handleMacCrashFileRead(err, data);
11131113
});
11141114
}, 5000);
11151115
});
@@ -1120,15 +1120,22 @@ function reportMacCrashes(): void {
11201120
}
11211121
}
11221122

1123-
function logCrashTelemetry(data: string): void {
1123+
let previousMacCrashData: string;
1124+
let previousMacCrashCount: number = 0;
1125+
1126+
function logMacCrashTelemetry(data: string): void {
11241127
const crashObject: { [key: string]: string } = {};
1128+
const crashCountObject: { [key: string]: number } = {};
11251129
crashObject["CrashingThreadCallStack"] = data;
1126-
telemetry.logLanguageServerEvent("MacCrash", crashObject, undefined);
1130+
previousMacCrashCount = data === previousMacCrashData ? previousMacCrashCount + 1 : 0;
1131+
previousMacCrashData = data;
1132+
crashCountObject["CrashCount"] = previousMacCrashCount;
1133+
telemetry.logLanguageServerEvent("MacCrash", crashObject, crashCountObject);
11271134
}
11281135

1129-
function handleCrashFileRead(err: NodeJS.ErrnoException | undefined | null, data: string): void {
1136+
function handleMacCrashFileRead(err: NodeJS.ErrnoException | undefined | null, data: string): void {
11301137
if (err) {
1131-
return logCrashTelemetry("readFile: " + err.code);
1138+
return logMacCrashTelemetry("readFile: " + err.code);
11321139
}
11331140

11341141
// Extract the crashing process version, because the version might not match
@@ -1145,15 +1152,15 @@ function handleCrashFileRead(err: NodeJS.ErrnoException | undefined | null, data
11451152
const crashStart: string = " Crashed:";
11461153
let startCrash: number = data.indexOf(crashStart);
11471154
if (startCrash < 0) {
1148-
return logCrashTelemetry("No crash start");
1155+
return logMacCrashTelemetry("No crash start");
11491156
}
11501157
startCrash += crashStart.length + 1; // Skip past crashStart.
11511158
let endCrash: number = data.indexOf("Thread ", startCrash);
11521159
if (endCrash < 0) {
11531160
endCrash = data.length - 1; // Not expected, but just in case.
11541161
}
11551162
if (endCrash <= startCrash) {
1156-
return logCrashTelemetry("No crash end");
1163+
return logMacCrashTelemetry("No crash end");
11571164
}
11581165
data = data.substr(startCrash, endCrash - startCrash);
11591166

@@ -1191,7 +1198,7 @@ function handleCrashFileRead(err: NodeJS.ErrnoException | undefined | null, data
11911198
data = data.substr(0, 8189) + "...";
11921199
}
11931200

1194-
logCrashTelemetry(data);
1201+
logMacCrashTelemetry(data);
11951202
}
11961203

11971204
export function deactivate(): Thenable<void> {

0 commit comments

Comments
 (0)