Skip to content

Commit 0fae00a

Browse files
Add telemetry to legacy
1 parent 4404066 commit 0fae00a

File tree

4 files changed

+69
-15
lines changed

4 files changed

+69
-15
lines changed

package-lock.json

Lines changed: 36 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"onView:PowerShellCommands"
4040
],
4141
"dependencies": {
42+
"vscode-extension-telemetry": "~0.1.1",
4243
"vscode-languageclient": "~5.2.1"
4344
},
4445
"devDependencies": {

src/main.ts

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import path = require("path");
88
import vscode = require("vscode");
9+
import TelemetryReporter from "vscode-extension-telemetry";
910
import { DocumentSelector } from "vscode-languageclient";
1011
import { IFeature } from "./feature";
1112
import { CodeActionsFeature } from "./features/CodeActions";
@@ -35,23 +36,33 @@ import Settings = require("./settings");
3536
import { PowerShellLanguageId } from "./utils";
3637
import utils = require("./utils");
3738

39+
// The most reliable way to get the name and version of the current extension.
40+
// tslint:disable-next-line: no-var-requires
41+
const PackageJSON: any = require("../../package.json");
42+
3843
// NOTE: We will need to find a better way to deal with the required
3944
// PS Editor Services version...
4045
const requiredEditorServicesVersion = "1.12.1";
4146

47+
// the application insights key (also known as instrumentation key) used for telemetry.
48+
const AI_KEY: string = "AIF-d9b70cd4-b9f9-4d70-929b-a071c400b217";
49+
4250
let logger: Logger;
4351
let sessionManager: SessionManager;
4452
let extensionFeatures: IFeature[] = [];
53+
let telemetryReporter: TelemetryReporter;
4554

4655
const documentSelector: DocumentSelector = [
4756
{ language: "powershell", scheme: "file" },
4857
{ language: "powershell", scheme: "untitled" },
4958
];
5059

5160
export function activate(context: vscode.ExtensionContext): void {
52-
5361
checkForUpdatedVersion(context);
5462

63+
// create telemetry reporter on extension activation
64+
telemetryReporter = new TelemetryReporter(PackageJSON.name, PackageJSON.version, AI_KEY);
65+
5566
vscode.languages.setLanguageConfiguration(
5667
PowerShellLanguageId,
5768
{
@@ -115,7 +126,9 @@ export function activate(context: vscode.ExtensionContext): void {
115126
sessionManager =
116127
new SessionManager(
117128
requiredEditorServicesVersion,
118-
logger, documentSelector);
129+
logger,
130+
documentSelector,
131+
telemetryReporter);
119132

120133
// Create features
121134
extensionFeatures = [
@@ -153,23 +166,15 @@ function checkForUpdatedVersion(context: vscode.ExtensionContext) {
153166

154167
const showReleaseNotes = "Show Release Notes";
155168
const powerShellExtensionVersionKey = "powerShellExtensionVersion";
156-
157-
const extensionVersion: string =
158-
vscode
159-
.extensions
160-
.getExtension("ms-vscode.PowerShell")
161-
.packageJSON
162-
.version;
163-
164169
const storedVersion = context.globalState.get(powerShellExtensionVersionKey);
165170

166171
if (!storedVersion) {
167172
// TODO: Prompt to show User Guide for first-time install
168-
} else if (extensionVersion !== storedVersion) {
173+
} else if (PackageJSON.version !== storedVersion) {
169174
vscode
170175
.window
171176
.showInformationMessage(
172-
`The PowerShell extension has been updated to version ${extensionVersion}!`,
177+
`The PowerShell extension has been updated to version ${PackageJSON.version}!`,
173178
showReleaseNotes)
174179
.then((choice) => {
175180
if (choice === showReleaseNotes) {
@@ -182,7 +187,7 @@ function checkForUpdatedVersion(context: vscode.ExtensionContext) {
182187

183188
context.globalState.update(
184189
powerShellExtensionVersionKey,
185-
extensionVersion);
190+
PackageJSON.version);
186191
}
187192

188193
export function deactivate(): void {
@@ -196,4 +201,7 @@ export function deactivate(): void {
196201

197202
// Dispose of the logger
198203
logger.dispose();
204+
205+
// Dispose of telemetry reporter
206+
telemetryReporter.dispose();
199207
}

src/session.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import fs = require("fs");
88
import net = require("net");
99
import os = require("os");
1010
import path = require("path");
11-
import { StringDecoder } from "string_decoder";
1211
import vscode = require("vscode");
12+
import TelemetryReporter from "vscode-extension-telemetry";
1313
import { Message } from "vscode-jsonrpc";
1414
import { IFeature } from "./feature";
1515
import { Logger } from "./logging";
@@ -56,6 +56,7 @@ export class SessionManager implements Middleware {
5656
private sessionSettings: Settings.ISettings = undefined;
5757
private sessionDetails: utils.IEditorServicesSessionDetails;
5858
private bundledModulesPath: string;
59+
private telemetryReporter: TelemetryReporter;
5960

6061
// When in development mode, VS Code's session ID is a fake
6162
// value of "someValue.machineId". Use that to detect dev
@@ -66,9 +67,11 @@ export class SessionManager implements Middleware {
6667
constructor(
6768
private requiredEditorServicesVersion: string,
6869
private log: Logger,
69-
private documentSelector: DocumentSelector) {
70+
private documentSelector: DocumentSelector,
71+
private reporter: TelemetryReporter) {
7072

7173
this.platformDetails = getPlatformDetails();
74+
this.telemetryReporter = reporter;
7275

7376
// Get the current version of this extension
7477
this.hostVersion =
@@ -591,6 +594,12 @@ export class SessionManager implements Middleware {
591594
.then(
592595
(versionDetails) => {
593596
this.versionDetails = versionDetails;
597+
598+
if (!this.inDevelopmentMode) {
599+
this.telemetryReporter.sendTelemetryEvent("powershellVersionCheck",
600+
{ powershellVersion: versionDetails.version });
601+
}
602+
594603
this.setSessionStatus(
595604
this.versionDetails.architecture === "x86"
596605
? `${this.versionDetails.displayVersion} (${this.versionDetails.architecture})`

0 commit comments

Comments
 (0)