Skip to content

Commit 036c60b

Browse files
committed
Add notification when enabling telemetry
1 parent 52beaed commit 036c60b

File tree

2 files changed

+64
-1
lines changed

2 files changed

+64
-1
lines changed

extensions/ql-vscode/src/common/vscode/telemetry.ts

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { Extension, ExtensionContext } from "vscode";
2+
import { ConfigurationTarget, env, Uri, window } from "vscode";
23
import TelemetryReporter from "vscode-extension-telemetry";
3-
import { LOG_TELEMETRY, isCanary } from "../../config";
4+
import { ENABLE_TELEMETRY, isCanary, LOG_TELEMETRY } from "../../config";
45
import type { TelemetryClient } from "applicationinsights";
56
import { extLogger } from "../logging/vscode";
67
import { UserCancellationException } from "./progress";
@@ -159,6 +160,45 @@ export class ExtensionTelemetryListener implements AppTelemetry, Disposable {
159160
}
160161
}
161162

163+
async function notifyTelemetryChange() {
164+
const continueItem = { title: "Continue", isCloseAffordance: false };
165+
const vsCodeTelemetryItem = {
166+
title: "More Information about VS Code Telemetry",
167+
isCloseAffordance: false,
168+
};
169+
const codeqlTelemetryItem = {
170+
title: "More Information about CodeQL Telemetry",
171+
isCloseAffordance: false,
172+
};
173+
let chosenItem;
174+
175+
do {
176+
chosenItem = await window.showInformationMessage(
177+
"The CodeQL extension now follows VS Code's telemetry settings. VS Code telemetry is currently enabled. Learn how to update your telemetry settings by clicking the links below.",
178+
{ modal: true },
179+
continueItem,
180+
vsCodeTelemetryItem,
181+
codeqlTelemetryItem,
182+
);
183+
if (chosenItem === vsCodeTelemetryItem) {
184+
await env.openExternal(
185+
Uri.parse(
186+
"https://code.visualstudio.com/docs/getstarted/telemetry",
187+
true,
188+
),
189+
);
190+
}
191+
if (chosenItem === codeqlTelemetryItem) {
192+
await env.openExternal(
193+
Uri.parse(
194+
"https://docs.github.com/en/code-security/codeql-for-vs-code/using-the-advanced-functionality-of-the-codeql-for-vs-code-extension/telemetry-in-codeql-for-visual-studio-code",
195+
true,
196+
),
197+
);
198+
}
199+
} while (chosenItem !== continueItem);
200+
}
201+
162202
/**
163203
* The global Telemetry instance
164204
*/
@@ -172,11 +212,28 @@ export async function initializeTelemetry(
172212
if (telemetryListener !== undefined) {
173213
throw new Error("Telemetry is already initialized");
174214
}
215+
216+
if (ENABLE_TELEMETRY.getValue<boolean | undefined>() === false) {
217+
if (env.isTelemetryEnabled) {
218+
// Await this so that the user is notified before any telemetry is sent
219+
await notifyTelemetryChange();
220+
}
221+
222+
// Remove the deprecated telemetry setting
223+
ENABLE_TELEMETRY.updateValue(undefined, ConfigurationTarget.Global);
224+
ENABLE_TELEMETRY.updateValue(undefined, ConfigurationTarget.Workspace);
225+
ENABLE_TELEMETRY.updateValue(
226+
undefined,
227+
ConfigurationTarget.WorkspaceFolder,
228+
);
229+
}
230+
175231
telemetryListener = new ExtensionTelemetryListener(
176232
extension.id,
177233
extension.packageJSON.version,
178234
key,
179235
);
180236
ctx.subscriptions.push(telemetryListener);
237+
181238
return telemetryListener;
182239
}

extensions/ql-vscode/src/config.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,12 @@ const TELEMETRY_SETTING = new Setting("telemetry", ROOT_SETTING);
166166

167167
export const LOG_TELEMETRY = new Setting("logTelemetry", TELEMETRY_SETTING);
168168

169+
// Legacy setting that is no longer used, but is used for showing a message when the user upgrades.
170+
export const ENABLE_TELEMETRY = new Setting(
171+
"enableTelemetry",
172+
TELEMETRY_SETTING,
173+
);
174+
169175
// Distribution configuration
170176
const DISTRIBUTION_SETTING = new Setting("cli", ROOT_SETTING);
171177
export const CUSTOM_CODEQL_PATH_SETTING = new Setting(

0 commit comments

Comments
 (0)