forked from DonJayamanne/pythonVSCode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtelemetry.ts
More file actions
72 lines (67 loc) · 2.4 KB
/
telemetry.ts
File metadata and controls
72 lines (67 loc) · 2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import { extensions } from "vscode";
import TelemetryReporter from "vscode-extension-telemetry";
// Borrowed from omnisharpServer.ts (omnisharp-vscode)
export class Delays {
immediateDelays: number = 0; // 0-25 milliseconds
nearImmediateDelays: number = 0; // 26-50 milliseconds
shortDelays: number = 0; // 51-250 milliseconds
mediumDelays: number = 0; // 251-500 milliseconds
idleDelays: number = 0; // 501-1500 milliseconds
nonFocusDelays: number = 0; // 1501-3000 milliseconds
bigDelays: number = 0; // 3000+ milliseconds
private startTime: number = Date.now();
public stop() {
let endTime = Date.now();
let elapsedTime = endTime - this.startTime;
if (elapsedTime <= 25) {
this.immediateDelays += 1;
}
else if (elapsedTime <= 50) {
this.nearImmediateDelays += 1;
}
else if (elapsedTime <= 250) {
this.shortDelays += 1;
}
else if (elapsedTime <= 500) {
this.mediumDelays += 1;
}
else if (elapsedTime <= 1500) {
this.idleDelays += 1;
}
else if (elapsedTime <= 3000) {
this.nonFocusDelays += 1;
}
else {
this.bigDelays += 1;
}
}
public toMeasures(): { [key: string]: number } {
return {
immedateDelays: this.immediateDelays,
nearImmediateDelays: this.nearImmediateDelays,
shortDelays: this.shortDelays,
mediumDelays: this.mediumDelays,
idleDelays: this.idleDelays,
nonFocusDelays: this.nonFocusDelays
};
}
}
const extensionId = "donjayamanne.python";
const extension = extensions.getExtension(extensionId);
const extensionVersion = extension.packageJSON.version;
const aiKey = "AIF-d9b70cd4-b9f9-4d70-929b-a071c400b217";
let reporter: TelemetryReporter;
/**
* Sends a telemetry event
* @param {string} eventName The event name
* @param {object} properties An associative array of strings
* @param {object} measures An associative array of numbers
*/
export function sendTelemetryEvent(eventName: string, properties?: {
[key: string]: string;
}, measures?: {
[key: string]: number;
}) {
reporter = reporter ? reporter : new TelemetryReporter(extensionId, extensionVersion, aiKey);
reporter.sendTelemetryEvent.apply(reporter, arguments);
}