From d780c2499454fc003465e55314b87d44f3b8610e Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 1 Feb 2023 11:15:51 +0000 Subject: [PATCH] Don't send new telemetry data unless opted-in --- extensions/ql-vscode/src/config.ts | 9 ++++++ extensions/ql-vscode/src/telemetry.ts | 5 +++ .../no-workspace/telemetry.test.ts | 32 +++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/extensions/ql-vscode/src/config.ts b/extensions/ql-vscode/src/config.ts index e8c9a6965..c753165d4 100644 --- a/extensions/ql-vscode/src/config.ts +++ b/extensions/ql-vscode/src/config.ts @@ -92,6 +92,15 @@ export const GLOBAL_ENABLE_TELEMETRY = new Setting( GLOBAL_TELEMETRY_SETTING, ); +const ENABLE_NEW_TELEMETRY = new Setting( + "enableNewTelemetry", + TELEMETRY_SETTING, +); + +export function newTelemetryEnabled(): boolean { + return ENABLE_NEW_TELEMETRY.getValue(); +} + // Distribution configuration const DISTRIBUTION_SETTING = new Setting("cli", ROOT_SETTING); export const CUSTOM_CODEQL_PATH_SETTING = new Setting( diff --git a/extensions/ql-vscode/src/telemetry.ts b/extensions/ql-vscode/src/telemetry.ts index 948b13c90..1a5e34ac6 100644 --- a/extensions/ql-vscode/src/telemetry.ts +++ b/extensions/ql-vscode/src/telemetry.ts @@ -13,6 +13,7 @@ import { LOG_TELEMETRY, isIntegrationTestMode, isCanary, + newTelemetryEnabled, } from "./config"; import * as appInsights from "applicationinsights"; import { extLogger } from "./common"; @@ -172,6 +173,10 @@ export class TelemetryListener extends ConfigListener { return; } + if (!newTelemetryEnabled()) { + return; + } + this.reporter.sendTelemetryEvent( "ui-interaction", { diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/telemetry.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/telemetry.test.ts index 7be66b2ee..12f446e95 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/telemetry.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/telemetry.test.ts @@ -11,6 +11,7 @@ import { } from "../../../src/telemetry"; import { UserCancellationException } from "../../../src/commandRunner"; import { ENABLE_TELEMETRY } from "../../../src/config"; +import * as Config from "../../../src/config"; import { createMockExtensionContext } from "./index"; // setting preferences can trigger lots of background activity @@ -388,6 +389,37 @@ describe("telemetry reporting", () => { expect(showInformationMessageSpy).toBeCalledTimes(1); }); + describe("when new telementry is not enabled", () => { + it("should not send a telementry event", async () => { + await telemetryListener.initialize(); + + telemetryListener.sendUIInteraction("test"); + + expect(sendTelemetryEventSpy).not.toBeCalled(); + }); + }); + + describe("when new telementry is enabled", () => { + beforeEach(async () => { + jest.spyOn(Config, "newTelemetryEnabled").mockReturnValue(true); + }); + + it("should not send a telementry event", async () => { + await telemetryListener.initialize(); + + telemetryListener.sendUIInteraction("test"); + + expect(sendTelemetryEventSpy).toHaveBeenCalledWith( + "ui-interaction", + { + name: "test", + isCanary, + }, + {}, + ); + }); + }); + async function enableTelemetry(section: string, value: boolean | undefined) { await workspace .getConfiguration(section)