Skip to content

Commit be22964

Browse files
authored
Send telemetry for addDatabaseSourceToWorkspace setting (#3238)
1 parent db3550a commit be22964

File tree

5 files changed

+55
-5
lines changed

5 files changed

+55
-5
lines changed

extensions/ql-vscode/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## [UNRELEASED]
44

5+
- Enable collection of telemetry for the `codeQL.addingDatabases.addDatabaseSourceToWorkspace` setting. [#3238](https://github.com/github/vscode-codeql/pull/3238)
56
- In the CodeQL model editor, you can now select individual method rows and save changes to only the selected rows, instead of having to save the entire library model. [#3156](https://github.com/github/vscode-codeql/pull/3156)
67
- If you run a query without having selected a database, we show a more intuitive prompt to help you select a database. [#3214](https://github.com/github/vscode-codeql/pull/3214)
78
- The UI for browsing and running CodeQL tests has moved to use VS Code's built-in test UI. This makes the CodeQL test UI more consistent with the test UIs for other languages.

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,22 @@ export class ExtensionTelemetryListener
212212
this.reporter.sendTelemetryErrorEvent("error", properties, {});
213213
}
214214

215+
sendConfigInformation(config: Record<string, string>): void {
216+
if (!this.reporter) {
217+
return;
218+
}
219+
220+
this.reporter.sendTelemetryEvent(
221+
"config",
222+
{
223+
...config,
224+
isCanary: isCanary().toString(),
225+
cliVersion: this.cliVersionStr,
226+
},
227+
{},
228+
);
229+
}
230+
215231
/**
216232
* Displays a popup asking the user if they want to enable telemetry
217233
* for this extension.

extensions/ql-vscode/src/config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -653,7 +653,7 @@ export function allowHttp(): boolean {
653653
);
654654
}
655655

656-
const ADD_DATABASE_SOURCE_TO_WORKSPACE_SETTING = new Setting(
656+
export const ADD_DATABASE_SOURCE_TO_WORKSPACE_SETTING = new Setting(
657657
"addDatabaseSourceToWorkspace",
658658
ADDING_DATABASES_SETTING,
659659
);

extensions/ql-vscode/src/extension.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import {
2323
} from "./common/vscode/archive-filesystem-provider";
2424
import { CliVersionConstraint, CodeQLCliServer } from "./codeql-cli/cli";
2525
import {
26+
ADD_DATABASE_SOURCE_TO_WORKSPACE_SETTING,
27+
addDatabaseSourceToWorkspace,
2628
CliConfigListener,
2729
DistributionConfigListener,
2830
GitHubDatabaseConfigListener,
@@ -302,6 +304,14 @@ const codeQlVersionRange = DEFAULT_DISTRIBUTION_VERSION_RANGE;
302304
// before silently being refused to upgrade.
303305
const MIN_VERSION = "1.82.0";
304306

307+
function sendConfigTelemetryData() {
308+
const config: Record<string, string> = {};
309+
config[ADD_DATABASE_SOURCE_TO_WORKSPACE_SETTING.qualifiedName] =
310+
addDatabaseSourceToWorkspace().toString();
311+
312+
telemetryListener?.sendConfigInformation(config);
313+
}
314+
305315
/**
306316
* Returns the CodeQLExtensionInterface, or an empty object if the interface is not
307317
* available after activation is complete. This will happen if there is no cli
@@ -329,6 +339,8 @@ export async function activate(
329339

330340
const app = new ExtensionApp(ctx);
331341

342+
sendConfigTelemetryData();
343+
332344
const quickEvalCodeLensProvider = new QuickEvalCodeLensProvider();
333345
languages.registerCodeLensProvider(
334346
{ scheme: "file", language: "ql" },

extensions/ql-vscode/test/vscode-tests/no-workspace/telemetry.test.ts

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ describe("telemetry reporting", () => {
450450
expect(showInformationMessageSpy).toHaveBeenCalledTimes(1);
451451
});
452452

453-
it("should send a ui-interaction telementry event", async () => {
453+
it("should send a ui-interaction telemetry event", async () => {
454454
await telemetryListener.initialize();
455455

456456
telemetryListener.sendUIInteraction("test");
@@ -467,7 +467,7 @@ describe("telemetry reporting", () => {
467467
expect(sendTelemetryErrorEventSpy).not.toHaveBeenCalled();
468468
});
469469

470-
it("should send a ui-interaction telementry event with a cli version", async () => {
470+
it("should send a ui-interaction telemetry event with a cli version", async () => {
471471
await telemetryListener.initialize();
472472

473473
telemetryListener.cliVersion = new SemVer("1.2.3");
@@ -485,7 +485,7 @@ describe("telemetry reporting", () => {
485485
expect(sendTelemetryErrorEventSpy).not.toHaveBeenCalled();
486486
});
487487

488-
it("should send an error telementry event", async () => {
488+
it("should send an error telemetry event", async () => {
489489
await telemetryListener.initialize();
490490

491491
telemetryListener.sendError(redactableError`test`);
@@ -503,7 +503,7 @@ describe("telemetry reporting", () => {
503503
);
504504
});
505505

506-
it("should send an error telementry event with a cli version", async () => {
506+
it("should send an error telemetry event with a cli version", async () => {
507507
await telemetryListener.initialize();
508508
telemetryListener.cliVersion = new SemVer("1.2.3");
509509

@@ -543,6 +543,27 @@ describe("telemetry reporting", () => {
543543
);
544544
});
545545

546+
it("should send config telemetry event", async () => {
547+
await telemetryListener.initialize();
548+
549+
telemetryListener.sendConfigInformation({
550+
testKey: "testValue",
551+
testKey2: "42",
552+
});
553+
554+
expect(sendTelemetryEventSpy).toHaveBeenCalledWith(
555+
"config",
556+
{
557+
testKey: "testValue",
558+
testKey2: "42",
559+
isCanary: "false",
560+
cliVersion: "not-set",
561+
},
562+
{},
563+
);
564+
expect(sendTelemetryErrorEventSpy).not.toHaveBeenCalled();
565+
});
566+
546567
async function enableTelemetry(section: string, value: boolean | undefined) {
547568
await workspace
548569
.getConfiguration(section)

0 commit comments

Comments
 (0)