Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/platform/dataChannel/browser/forwardingTelemetryService.ts
4777 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { ClassifiedEvent, OmitMetadata, IGDPRProperty, StrictPropertyCheck } from '../../telemetry/common/gdprTypings.js';
7
import { ITelemetryData, ITelemetryService, TelemetryLevel } from '../../telemetry/common/telemetry.js';
8
import { IDataChannelService } from '../common/dataChannel.js';
9
10
export class InterceptingTelemetryService implements ITelemetryService {
11
_serviceBrand: undefined;
12
13
constructor(
14
private readonly _baseService: ITelemetryService,
15
private readonly _intercept: (eventName: string, data?: ITelemetryData) => void,
16
) { }
17
18
get telemetryLevel(): TelemetryLevel {
19
return this._baseService.telemetryLevel;
20
}
21
22
get sessionId(): string {
23
return this._baseService.sessionId;
24
}
25
26
get machineId(): string {
27
return this._baseService.machineId;
28
}
29
30
get sqmId(): string {
31
return this._baseService.sqmId;
32
}
33
34
get devDeviceId(): string {
35
return this._baseService.devDeviceId;
36
}
37
38
get firstSessionDate(): string {
39
return this._baseService.firstSessionDate;
40
}
41
42
get msftInternal(): boolean | undefined {
43
return this._baseService.msftInternal;
44
}
45
46
get sendErrorTelemetry(): boolean {
47
return this._baseService.sendErrorTelemetry;
48
}
49
50
publicLog(eventName: string, data?: ITelemetryData): void {
51
this._intercept(eventName, data);
52
this._baseService.publicLog(eventName, data);
53
}
54
55
publicLog2<E extends ClassifiedEvent<OmitMetadata<T>> = never, T extends IGDPRProperty = never>(eventName: string, data?: StrictPropertyCheck<T, E>): void {
56
this._intercept(eventName, data);
57
this._baseService.publicLog2(eventName, data);
58
}
59
60
publicLogError(errorEventName: string, data?: ITelemetryData): void {
61
this._intercept(errorEventName, data);
62
this._baseService.publicLogError(errorEventName, data);
63
}
64
65
publicLogError2<E extends ClassifiedEvent<OmitMetadata<T>> = never, T extends IGDPRProperty = never>(eventName: string, data?: StrictPropertyCheck<T, E>): void {
66
this._intercept(eventName, data);
67
this._baseService.publicLogError2(eventName, data);
68
}
69
70
setExperimentProperty(name: string, value: string): void {
71
this._baseService.setExperimentProperty(name, value);
72
}
73
}
74
75
export interface IEditTelemetryData {
76
eventName: string;
77
data: Record<string, unknown>;
78
}
79
80
export class DataChannelForwardingTelemetryService extends InterceptingTelemetryService {
81
constructor(
82
@ITelemetryService telemetryService: ITelemetryService,
83
@IDataChannelService dataChannelService: IDataChannelService,
84
) {
85
super(telemetryService, (eventName, data) => {
86
// filter for extension
87
let forward = true;
88
if (data && shouldForwardToChannel in data) {
89
forward = Boolean(data[shouldForwardToChannel]);
90
}
91
92
if (forward) {
93
dataChannelService.getDataChannel<IEditTelemetryData>('editTelemetry').sendData({ eventName, data: data ?? {} });
94
}
95
});
96
}
97
}
98
99
const shouldForwardToChannel = Symbol('shouldForwardToChannel');
100
export function forwardToChannelIf(value: boolean): Record<string, unknown> {
101
return {
102
// This will not be sent via telemetry, it is just a marker
103
[shouldForwardToChannel]: value
104
};
105
}
106
107
export function isCopilotLikeExtension(extensionId: string | undefined): boolean {
108
if (!extensionId) {
109
return false;
110
}
111
const extIdLowerCase = extensionId.toLowerCase();
112
return extIdLowerCase === 'github.copilot' || extIdLowerCase === 'github.copilot-chat';
113
}
114
115