diff --git a/extensions/ql-vscode/src/common/vscode/telemetry.ts b/extensions/ql-vscode/src/common/vscode/telemetry.ts index eb4a0f407..59d4685e2 100644 --- a/extensions/ql-vscode/src/common/vscode/telemetry.ts +++ b/extensions/ql-vscode/src/common/vscode/telemetry.ts @@ -13,6 +13,7 @@ import { LOG_TELEMETRY, isIntegrationTestMode, isCanary, + GLOBAL_TELEMETRY_LEVEL, } from "../../config"; import * as appInsights from "applicationinsights"; import { extLogger } from "../logging/vscode"; @@ -93,7 +94,8 @@ export class ExtensionTelemetryListener ): Promise { if ( e.affectsConfiguration("codeQL.telemetry.enableTelemetry") || - e.affectsConfiguration("telemetry.enableTelemetry") + e.affectsConfiguration("telemetry.enableTelemetry") || + e.affectsConfiguration("telemetry.telemetryLevel") ) { await this.initialize(); } @@ -224,7 +226,7 @@ export class ExtensionTelemetryListener // if global telemetry is disabled, avoid showing the dialog or making any changes let result = undefined; if ( - GLOBAL_ENABLE_TELEMETRY.getValue() && + isGlobalTelemetryEnabled() && // Avoid showing the dialog if we are in integration test mode. !isIntegrationTestMode() ) { @@ -297,3 +299,21 @@ export async function initializeTelemetry( ctx.subscriptions.push(telemetryListener); return telemetryListener; } + +function isGlobalTelemetryEnabled(): boolean { + // If "enableTelemetry" is set to false, no telemetry will be sent regardless of the value of "telemetryLevel" + const enableTelemetry: boolean | undefined = + GLOBAL_ENABLE_TELEMETRY.getValue(); + if (enableTelemetry === false) { + return false; + } + + // If a value for "telemetry.telemetryLevel" is provided, then use that + const telemetryLevel: string | undefined = GLOBAL_TELEMETRY_LEVEL.getValue(); + if (telemetryLevel !== undefined) { + return telemetryLevel === "error" || telemetryLevel === "on"; + } + + // Otherwise fall back to the deprecated "telemetry.enableTelemetry" setting + return !!enableTelemetry; +} diff --git a/extensions/ql-vscode/src/config.ts b/extensions/ql-vscode/src/config.ts index bb9b145df..3ebdb8fa3 100644 --- a/extensions/ql-vscode/src/config.ts +++ b/extensions/ql-vscode/src/config.ts @@ -86,6 +86,10 @@ export const GLOBAL_ENABLE_TELEMETRY = new Setting( "enableTelemetry", GLOBAL_TELEMETRY_SETTING, ); +export const GLOBAL_TELEMETRY_LEVEL = new Setting( + "telemetryLevel", + GLOBAL_TELEMETRY_SETTING, +); // Distribution configuration const DISTRIBUTION_SETTING = new Setting("cli", ROOT_SETTING);