From 6df82bca9c42f1e0344aa0bb66825046fd98a37d Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Mon, 25 Sep 2017 16:48:07 +0800 Subject: [PATCH] add telemetry to send usage data (#45) * periodically query usage data * add back license * increase usage data query interval to 60s * query usage data when terminating debug session --- package.json | 6 +++++- src/commands.ts | 30 ++++++++++++++++-------------- src/extension.ts | 29 ++++++++++++++++++++++++++++- 3 files changed, 49 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 630f960..2227486 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "version": "0.1.0", "publisher": "vscjava", "preview": true, + "aiKey": "67d4461e-ccba-418e-8082-1bd0acfe8516", "icon": "logo.png", "keywords": [ "java", @@ -13,7 +14,7 @@ "debugger" ], "engines": { - "vscode": "^1.14.0" + "vscode": "^1.15.0" }, "categories": [ "Debuggers" @@ -199,5 +200,8 @@ "tslint": "^5.7.0", "typescript": "^2.0.3", "vscode": "^1.1.5" + }, + "dependencies": { + "vscode-extension-telemetry": "0.0.8" } } diff --git a/src/commands.ts b/src/commands.ts index 8055969..55f9e3e 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -1,14 +1,16 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -export const VSCODE_STARTDEBUG = "vscode.startDebug"; - -export const VSCODE_ADD_DEBUGCONFIGURATION = "debug.addConfiguration"; - -export const JAVA_START_DEBUGSESSION = "vscode.java.startDebugSession"; - -export const JAVA_RESOLVE_CLASSPATH = "vscode.java.resolveClasspath"; - -export const JAVA_BUILD_WORKSPACE = "vscode.java.buildWorkspace"; - -export const JAVA_EXECUTE_WORKSPACE_COMMAND = "java.execute.workspaceCommand"; +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +export const VSCODE_STARTDEBUG = "vscode.startDebug"; + +export const VSCODE_ADD_DEBUGCONFIGURATION = "debug.addConfiguration"; + +export const JAVA_START_DEBUGSESSION = "vscode.java.startDebugSession"; + +export const JAVA_RESOLVE_CLASSPATH = "vscode.java.resolveClasspath"; + +export const JAVA_BUILD_WORKSPACE = "vscode.java.buildWorkspace"; + +export const JAVA_EXECUTE_WORKSPACE_COMMAND = "java.execute.workspaceCommand"; + +export const JAVA_FETCH_USAGE_DATA = "vscode.java.fetchUsageData"; diff --git a/src/extension.ts b/src/extension.ts index f3cbc0e..d4b4422 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -4,6 +4,7 @@ import * as path from "path"; import * as vscode from "vscode"; import * as commands from "./commands"; +import TelemetryReporter from "vscode-extension-telemetry"; const status: any = {}; @@ -61,6 +62,28 @@ export function activate(context: vscode.ExtensionContext) { } } }); + + // Telemetry. + const extensionPackage = require(context.asAbsolutePath("./package.json")); + if (extensionPackage) { + const packageInfo = { + name: extensionPackage.name, + version: extensionPackage.version, + aiKey: extensionPackage.aiKey, + }; + if (packageInfo.aiKey) { + const reporter = new TelemetryReporter(packageInfo.name, packageInfo.version, packageInfo.aiKey); + vscode.debug.onDidTerminateDebugSession(() => { + fetchUsageData().then(ret => { + if (Array.isArray(ret) && ret.length) { + ret.forEach(entry => { + reporter.sendTelemetryEvent("usageData", entry, {}); + }); + } + }); + }); + } + } } // this method is called when your extension is deactivated @@ -75,6 +98,10 @@ function resolveClasspath(mainClass, projectName) { return executeJavaLanguageServerCommand(commands.JAVA_RESOLVE_CLASSPATH, mainClass, projectName); } +function fetchUsageData() { + return executeJavaLanguageServerCommand(commands.JAVA_FETCH_USAGE_DATA); +} + function executeJavaLanguageServerCommand(...rest) { return vscode.commands.executeCommand(commands.JAVA_EXECUTE_WORKSPACE_COMMAND, ...rest); -} +} \ No newline at end of file