Skip to content

Commit

Permalink
Merge pull request #75 from radeksimko/f-raw-telemetry-event
Browse files Browse the repository at this point in the history
Introduce `sendRawTelemetryEvent`
  • Loading branch information
lramos15 committed Oct 8, 2021
2 parents c4d17f1 + 92d1291 commit 7174c44
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 8 deletions.
14 changes: 14 additions & 0 deletions lib/telemetryReporter.d.ts
Expand Up @@ -5,6 +5,11 @@
export interface TelemetryEventProperties {
readonly [key: string]: string;
}

export interface RawTelemetryEventProperties {
readonly [key: string]: any;
}

export interface TelemetryEventMeasurements {
readonly [key: string]: number;
}
Expand All @@ -19,12 +24,21 @@ export default class TelemetryReporter {

/**
* Sends a telemetry event with the given properties and measurements
* Properties are sanitized on best-effort basis to remove sensitive data prior to sending.
* @param eventName The name of the event
* @param properties The set of properties to add to the event in the form of a string key value pair
* @param measurements The set of measurements to add to the event in the form of a string key number value pair
*/
sendTelemetryEvent(eventName: string, properties?: TelemetryEventProperties, measurements?: TelemetryEventMeasurements): void;

/**
* Sends a raw (unsanitized) telemetry event with the given properties and measurements
* @param eventName The name of the event
* @param properties The set of properties to add to the event in the form of a string key value pair
* @param measurements The set of measurements to add to the event in the form of a string key number value pair
*/
sendRawTelemetryEvent(eventName: string, properties?: RawTelemetryEventProperties, measurements?: TelemetryEventMeasurements): void;

/**
* Sends a telemetry error event with the given properties, measurements, and errorProps
* @param eventName The name of the event
Expand Down
4 changes: 2 additions & 2 deletions src/browser/telemetryReporter.ts
Expand Up @@ -3,7 +3,7 @@
*--------------------------------------------------------*/

import type { ApplicationInsights } from "@microsoft/applicationinsights-web";
import { AppenderData, BaseTelemtryReporter, ITelemetryAppender } from "../common/baseTelemetryReporter";
import { AppenderData, BaseTelemetryReporter, ITelemetryAppender } from "../common/baseTelemetryReporter";
import { getTelemetryLevel, TelemetryLevel } from "../common/util";

class WebAppInsightsAppender implements ITelemetryAppender {
Expand Down Expand Up @@ -75,7 +75,7 @@ class WebAppInsightsAppender implements ITelemetryAppender {
}
}

export default class TelemetryReporter extends BaseTelemtryReporter {
export default class TelemetryReporter extends BaseTelemetryReporter {
constructor(extensionId: string, extensionVersion: string, key: string, firstParty?: boolean) {
const appender = new WebAppInsightsAppender(key);
if (key && key.indexOf("AIF-") === 0) {
Expand Down
22 changes: 18 additions & 4 deletions src/common/baseTelemetryReporter.ts
Expand Up @@ -3,11 +3,11 @@
*--------------------------------------------------------*/

import * as vscode from "vscode";
import type { TelemetryEventMeasurements, TelemetryEventProperties } from "../../lib/telemetryReporter";
import type { TelemetryEventMeasurements, TelemetryEventProperties, RawTelemetryEventProperties } from "../../lib/telemetryReporter";
import { getTelemetryLevel, TelemetryLevel } from "./util";

export interface AppenderData {
properties?: TelemetryEventProperties,
properties?: RawTelemetryEventProperties,
measurements?: TelemetryEventMeasurements
}
export interface ITelemetryAppender {
Expand All @@ -17,7 +17,7 @@ export interface ITelemetryAppender {
instantiateAppender(): void;
}

export class BaseTelemtryReporter {
export class BaseTelemetryReporter {
private firstParty = false;
private userOptIn = false;
private errorOptIn = false;
Expand Down Expand Up @@ -261,7 +261,8 @@ export class BaseTelemtryReporter {
}

/**
* Given an event name, some properties, and measurements sends a teleemtry event
* Given an event name, some properties, and measurements sends a telemetry event.
* Properties are sanitized on best-effort basis to remove sensitive data prior to sending.
* @param eventName The name of the event
* @param properties The properties to send with the event
* @param measurements The measurements (numeric values) to send with the event
Expand All @@ -274,6 +275,19 @@ export class BaseTelemtryReporter {
}
}

/**
* Given an event name, some properties, and measurements sends a raw (unsanitized) telemetry event
* @param eventName The name of the event
* @param properties The properties to send with the event
* @param measurements The measurements (numeric values) to send with the event
*/
public sendRawTelemetryEvent(eventName: string, properties?: RawTelemetryEventProperties, measurements?: TelemetryEventMeasurements): void {
if (this.userOptIn && eventName !== "") {
properties = { ...properties, ...this.getCommonProperties() };
this.telemetryAppender.logEvent(`${this.extensionId}/${eventName}`, { properties, measurements });
}
}

/**
* Given an event name, some properties, and measurements sends an error event
* @param eventName The name of the event
Expand Down
4 changes: 2 additions & 2 deletions src/node/telemetryReporter.ts
Expand Up @@ -5,7 +5,7 @@
import * as os from "os";
import * as vscode from "vscode";
import type { TelemetryClient } from "applicationinsights";
import { AppenderData, BaseTelemtryReporter, ITelemetryAppender } from "../common/baseTelemetryReporter";
import { AppenderData, BaseTelemetryReporter, ITelemetryAppender } from "../common/baseTelemetryReporter";
import { getTelemetryLevel, TelemetryLevel } from "../common/util";

class AppInsightsAppender implements ITelemetryAppender {
Expand Down Expand Up @@ -88,7 +88,7 @@ class AppInsightsAppender implements ITelemetryAppender {
}


export default class TelemetryReporter extends BaseTelemtryReporter {
export default class TelemetryReporter extends BaseTelemetryReporter {
constructor(extensionId: string, extensionVersion: string, key: string, firstParty?: boolean) {
const appender = new AppInsightsAppender(key);
if (key && key.indexOf("AIF-") === 0) {
Expand Down

0 comments on commit 7174c44

Please sign in to comment.