Skip to content

Commit 5c53856

Browse files
committed
Allow disabling agent telemetry dynamically
1 parent 7c63284 commit 5c53856

11 files changed

Lines changed: 42 additions & 2 deletions

File tree

src/vs/editor/standalone/browser/simpleServices.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,9 @@ export class StandaloneTelemetryService implements ITelemetryService {
496496

497497
public isOptedIn = false;
498498

499+
public setEnabled(value: boolean): void {
500+
}
501+
499502
public publicLog(eventName: string, data?: any): Promise<void> {
500503
return Promise.resolve(undefined);
501504
}

src/vs/platform/telemetry/common/telemetry.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ export interface ITelemetryService {
2929
*/
3030
publicLog(eventName: string, data?: ITelemetryData, anonymizeFilePaths?: boolean): Promise<void>;
3131

32+
setEnabled(value: boolean): void;
33+
3234
getTelemetryInfo(): Promise<ITelemetryInfo>;
3335

3436
isOptedIn: boolean;

src/vs/platform/telemetry/common/telemetryService.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export class TelemetryService implements ITelemetryService {
3131
private _commonProperties: Promise<{ [name: string]: any; }>;
3232
private _piiPaths: string[];
3333
private _userOptIn: boolean;
34+
private _enabled: boolean;
3435

3536
private _disposables: IDisposable[] = [];
3637
private _cleanupPatterns: RegExp[] = [];
@@ -43,6 +44,7 @@ export class TelemetryService implements ITelemetryService {
4344
this._commonProperties = config.commonProperties || Promise.resolve({});
4445
this._piiPaths = config.piiPaths || [];
4546
this._userOptIn = true;
47+
this._enabled = true;
4648

4749
// static cleanup pattern for: `file:///DANGEROUS/PATH/resources/app/Useful/Information`
4850
this._cleanupPatterns = [/file:\/\/\/.*?\/resources\/app\//gi];
@@ -74,13 +76,17 @@ export class TelemetryService implements ITelemetryService {
7476
}
7577
}
7678

79+
setEnabled(value: boolean): void {
80+
this._enabled = value;
81+
}
82+
7783
private _updateUserOptIn(): void {
7884
const config = this._configurationService.getValue<any>(TELEMETRY_SECTION_ID);
7985
this._userOptIn = config ? config.enableTelemetry : this._userOptIn;
8086
}
8187

8288
get isOptedIn(): boolean {
83-
return this._userOptIn;
89+
return this._userOptIn && this._enabled;
8490
}
8591

8692
getTelemetryInfo(): Promise<ITelemetryInfo> {
@@ -100,7 +106,7 @@ export class TelemetryService implements ITelemetryService {
100106

101107
publicLog(eventName: string, data?: ITelemetryData, anonymizeFilePaths?: boolean): Promise<any> {
102108
// don't send events when the user is optout
103-
if (!this._userOptIn) {
109+
if (!this.isOptedIn) {
104110
return Promise.resolve(undefined);
105111
}
106112

src/vs/platform/telemetry/common/telemetryUtils.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export const NullTelemetryService = new class implements ITelemetryService {
1414
publicLog(eventName: string, data?: ITelemetryData) {
1515
return Promise.resolve(undefined);
1616
}
17+
setEnabled() { }
1718
isOptedIn: true;
1819
getTelemetryInfo(): Promise<ITelemetryInfo> {
1920
return Promise.resolve({

src/vs/workbench/browser/nodeless.simpleservices.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,9 @@ export class SimpleTelemetryService implements ITelemetryService {
821821
return Promise.resolve(undefined);
822822
}
823823

824+
setEnabled(value: boolean): void {
825+
}
826+
824827
getTelemetryInfo(): Promise<ITelemetryInfo> {
825828
return Promise.resolve({
826829
instanceId: 'someValue.instanceId',

src/vs/workbench/services/remote/common/abstractRemoteAgentService.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,16 @@ export abstract class AbstractRemoteAgentService extends Disposable implements I
5656

5757
return Promise.resolve(undefined);
5858
}
59+
60+
disableTelemetry(): Promise<void> {
61+
const connection = this.getConnection();
62+
if (connection) {
63+
const client = new RemoteExtensionEnvironmentChannelClient(connection.getChannel('remoteextensionsenvironment'));
64+
return client.disableTelemetry();
65+
}
66+
67+
return Promise.resolve(undefined);
68+
}
5969
}
6070

6171
export class RemoteAgentConnection extends Disposable implements IRemoteAgentConnection {

src/vs/workbench/services/remote/common/remoteAgentEnvironmentChannel.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,8 @@ export class RemoteExtensionEnvironmentChannelClient {
6161
getDiagnosticInfo(options: IDiagnosticInfoOptions): Promise<IDiagnosticInfo> {
6262
return this.channel.call<IDiagnosticInfo>('getDiagnosticInfo', options);
6363
}
64+
65+
disableTelemetry(): Promise<void> {
66+
return this.channel.call<void>('disableTelemetry');
67+
}
6468
}

src/vs/workbench/services/remote/common/remoteAgentService.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export interface IRemoteAgentService {
1919
getConnection(): IRemoteAgentConnection | null;
2020
getEnvironment(bail?: boolean): Promise<IRemoteAgentEnvironment | null>;
2121
getDiagnosticInfo(options: IDiagnosticInfoOptions): Promise<IDiagnosticInfo | undefined>;
22+
disableTelemetry(): Promise<void>;
2223
}
2324

2425
export interface IRemoteAgentConnection {

src/vs/workbench/services/telemetry/electron-browser/telemetryService.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ export class TelemetryService extends Disposable implements ITelemetryService {
4747
}
4848
}
4949

50+
setEnabled(value: boolean): void {
51+
return this.impl.setEnabled(value);
52+
}
53+
5054
get isOptedIn(): boolean {
5155
return this.impl.isOptedIn;
5256
}

src/vs/workbench/test/electron-browser/quickopen.perf.integrationTest.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,9 @@ class TestTelemetryService implements ITelemetryService {
164164

165165
public events: any[] = [];
166166

167+
public setEnabled(value: boolean): void {
168+
}
169+
167170
public publicLog(eventName: string, data?: any): Promise<void> {
168171
this.events.push({ name: eventName, data: data });
169172
return Promise.resolve(undefined);

0 commit comments

Comments
 (0)