-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.ts
111 lines (106 loc) · 2.92 KB
/
index.ts
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import * as os from "node:os";
import * as vscode from "vscode";
import {
ExtendedError,
Faro,
InternalLoggerLevel,
Stacktrace,
initializeFaro,
} from "@grafana/faro-core";
import { FetchTransport } from "@grafana/faro-web-sdk";
import Logger from "../logger";
type Properties = {
extensionversion: string;
machineid: string;
sessionid: string;
vscodeversion: string;
osrelease: string;
osplatform: NodeJS.Platform;
osarchitecture: string;
osmachine: string;
oscpu: string;
osram: string;
};
class FirecoderTelemetrySender implements vscode.TelemetrySender {
private faro?: Faro;
private properties?: Properties;
constructor() {}
public init(context: vscode.ExtensionContext) {
this.properties = this.getProperties(context);
try {
this.faro = initializeFaro({
app: {
name: "firecoder-vscode",
version: "1.0.0",
environment: "production",
},
transports: [
new FetchTransport({
url: "https://faro-collector-prod-eu-west-0.grafana.net/collect/33a834c252bb6b780b5d242def445bbd",
}),
],
sessionTracking: {
enabled: false,
},
dedupe: false,
globalObjectKey: "firecoder-vscode",
internalLoggerLevel: InternalLoggerLevel.ERROR,
isolate: true,
instrumentations: [],
metas: [],
parseStacktrace: function (err: ExtendedError): Stacktrace {
return {
frames: [],
};
},
paused: false,
preventGlobalExposure: false,
unpatchedConsole: console,
});
} catch (error) {
Logger.error(error);
}
}
private getProperties(context: vscode.ExtensionContext) {
const properties = {
extensionversion: context.extension.packageJSON.version as string,
machineid: vscode.env.machineId,
sessionid: vscode.env.sessionId,
vscodeversion: vscode.version,
osrelease: os.release(),
osplatform: os.platform(),
osarchitecture: os.arch(),
osmachine: os.machine(),
oscpu: os.cpus()?.[0]?.model,
osram: String(os.totalmem()),
};
return properties;
}
public sendEventData(eventName: string, data?: Record<string, any>) {
if (vscode.env.isTelemetryEnabled) {
this.faro?.api.pushEvent(eventName, {
...this.properties,
...(data || {}),
});
}
}
public sendErrorData(error: Error, data?: Record<string, any>) {
if (vscode.env.isTelemetryEnabled) {
this.faro?.api.pushError(error, {
context: {
...this.properties,
...(data || {}),
},
});
}
}
public sendLogText(text: string, data?: Record<string, any>) {
if (vscode.env.isTelemetryEnabled) {
this.faro?.api.pushLog([text], {
context: this.properties,
...(data || {}),
});
}
}
}
export const FirecoderTelemetrySenderInstance = new FirecoderTelemetrySender();