Add AppTelemetry interface

This commit is contained in:
Koen Vlaswinkel
2023-06-14 11:00:49 +02:00
parent 08786055e3
commit fefb2f6694
3 changed files with 24 additions and 10 deletions

View File

@@ -0,0 +1,10 @@
import { RedactableError } from "../pure/errors";
export interface AppTelemetry {
sendCommandUsage(name: string, executionTime: number, error?: Error): void;
sendUIInteraction(name: string): void;
sendError(
error: RedactableError,
extraProperties?: { [key: string]: string },
): void;
}

View File

@@ -20,6 +20,7 @@ import { UserCancellationException } from "./progress";
import { showBinaryChoiceWithUrlDialog } from "./dialog";
import { RedactableError } from "../../pure/errors";
import { SemVer } from "semver";
import { AppTelemetry } from "../telemetry";
// Key is injected at build time through the APP_INSIGHTS_KEY environment variable.
const key = "REPLACE-APP-INSIGHTS-KEY";
@@ -54,7 +55,10 @@ const baseDataPropertiesToRemove = [
const NOT_SET_CLI_VERSION = "not-set";
export class TelemetryListener extends ConfigListener {
export class ExtensionTelemetryListener
extends ConfigListener
implements AppTelemetry
{
static relevantSettings = [ENABLE_TELEMETRY, CANARY_FEATURES];
private reporter?: TelemetryReporter;
@@ -152,7 +156,7 @@ export class TelemetryListener extends ConfigListener {
void this.reporter?.dispose();
}
sendCommandUsage(name: string, executionTime: number, error?: Error) {
sendCommandUsage(name: string, executionTime: number, error?: Error): void {
if (!this.reporter) {
return;
}
@@ -174,7 +178,7 @@ export class TelemetryListener extends ConfigListener {
);
}
sendUIInteraction(name: string) {
sendUIInteraction(name: string): void {
if (!this.reporter) {
return;
}
@@ -193,7 +197,7 @@ export class TelemetryListener extends ConfigListener {
sendError(
error: RedactableError,
extraProperties?: { [key: string]: string },
) {
): void {
if (!this.reporter) {
return;
}
@@ -272,16 +276,16 @@ export class TelemetryListener extends ConfigListener {
/**
* The global Telemetry instance
*/
export let telemetryListener: TelemetryListener | undefined;
export let telemetryListener: ExtensionTelemetryListener | undefined;
export async function initializeTelemetry(
extension: Extension<any>,
ctx: ExtensionContext,
): Promise<TelemetryListener> {
): Promise<ExtensionTelemetryListener> {
if (telemetryListener !== undefined) {
throw new Error("Telemetry is already initialized");
}
telemetryListener = new TelemetryListener(
telemetryListener = new ExtensionTelemetryListener(
extension.id,
extension.packageJSON.version,
key,

View File

@@ -6,7 +6,7 @@ import {
window,
} from "vscode";
import {
TelemetryListener,
ExtensionTelemetryListener,
telemetryListener as globalTelemetryListener,
} from "../../../src/common/vscode/telemetry";
import { UserCancellationException } from "../../../src/common/vscode/progress";
@@ -25,7 +25,7 @@ describe("telemetry reporting", () => {
let originalTelemetryGlobal: boolean | undefined;
let isCanary: string;
let ctx: ExtensionContext;
let telemetryListener: TelemetryListener;
let telemetryListener: ExtensionTelemetryListener;
let sendTelemetryEventSpy: jest.SpiedFunction<
typeof TelemetryReporter.prototype.sendTelemetryEvent
@@ -81,7 +81,7 @@ describe("telemetry reporting", () => {
await enableTelemetry("telemetry", true);
await enableTelemetry("codeQL.telemetry", true);
telemetryListener = new TelemetryListener(
telemetryListener = new ExtensionTelemetryListener(
"my-id",
"1.2.3",
"fake-key",