diff --git a/package-lock.json b/package-lock.json index 54081f4..7b35011 100644 --- a/package-lock.json +++ b/package-lock.json @@ -456,7 +456,7 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", "dev": true }, "arr-map": { @@ -608,6 +608,14 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "requires": { + "follow-redirects": "^1.10.0" + } + }, "bach": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", @@ -1860,6 +1868,11 @@ "readable-stream": "^2.3.6" } }, + "follow-redirects": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", + "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==" + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -4480,6 +4493,14 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, + "tas-client": { + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/tas-client/-/tas-client-0.1.16.tgz", + "integrity": "sha512-ZMGg7dGXiYVJHYusDpUb/Ilg+iPNYZdKJSIA2ADn0f2RovHWM0TpNVe2YHPEc0hdFMsUwWKS5pCRzLnlUqcqGg==", + "requires": { + "axios": "^0.21.1" + } + }, "terser": { "version": "5.5.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", @@ -4937,9 +4958,9 @@ } }, "vscode-extension-telemetry-wrapper": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/vscode-extension-telemetry-wrapper/-/vscode-extension-telemetry-wrapper-0.8.0.tgz", - "integrity": "sha512-z+PAc7QAMeTZU0Kq0oBn7DVinJDLtyK5DNZV0dSkclXPYlIVAalE5iEWBChXgANxaMWCyJQqCEI60zlZ7r7C/A==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/vscode-extension-telemetry-wrapper/-/vscode-extension-telemetry-wrapper-0.9.0.tgz", + "integrity": "sha512-QQvCn40hryS1U0Vob/fxqDX+kc7oYn+viiYpq0QOMp7q6aNaFFmjL9Wv5QfBIC/h2Jb083LFF0Xz38hhX8nCVQ==", "requires": { "uuid": "^3.4.0", "vscode-extension-telemetry": "^0.1.6" @@ -4952,6 +4973,14 @@ } } }, + "vscode-tas-client": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/vscode-tas-client/-/vscode-tas-client-0.1.17.tgz", + "integrity": "sha512-5uqMeg7sjsu1/QkmuRtBOXtZnnrCXAMEihbOSxan3bk2NdA/nZvhfhfLh8gd9FlBBL56QH69I8Zn25B2yGPRng==", + "requires": { + "tas-client": "0.1.16" + } + }, "vscode-test": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.2.0.tgz", diff --git a/package.json b/package.json index d5e7935..0d3a140 100644 --- a/package.json +++ b/package.json @@ -786,6 +786,7 @@ "lodash": "^4.17.20", "uuid": "^8.3.1", "vscode-extension-telemetry": "^0.1.6", - "vscode-extension-telemetry-wrapper": "^0.8.0" + "vscode-extension-telemetry-wrapper": "^0.9.0", + "vscode-tas-client": "^0.1.17" } } diff --git a/src/experimentationService.ts b/src/experimentationService.ts new file mode 100644 index 0000000..c896676 --- /dev/null +++ b/src/experimentationService.ts @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +import * as vscode from "vscode"; +import { addContextProperty, sendInfo } from "vscode-extension-telemetry-wrapper"; +import { getExperimentationService, IExperimentationService, IExperimentationTelemetry, TargetPopulation } from "vscode-tas-client"; + +class ExperimentationTelemetry implements IExperimentationTelemetry { + + public setSharedProperty(name: string, value: string): void { + addContextProperty(name, value); + } + + public postEvent(eventName: string, props: Map): void { + const payload: any = { __event_name__: eventName }; + for (const [key, value] of props) { + payload[key] = value; + } + + sendInfo("", payload); + } +} + +let expService: IExperimentationService; + +export function getExpService() { + return expService; +} + +export function initExpService(context: vscode.ExtensionContext): void { + const packageJson: {[key: string]: any} = require("../package.json"); + // tslint:disable: no-string-literal + const extensionName = `${packageJson["publisher"]}.${packageJson["name"]}`; + const extensionVersion = packageJson["version"]; + // tslint:enable: no-string-literal + expService = getExperimentationService(extensionName, extensionVersion, + TargetPopulation.Public, new ExperimentationTelemetry(), context.globalState); +} diff --git a/src/extension.ts b/src/extension.ts index 1ae270c..01fc735 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -12,6 +12,7 @@ import { JavaDebugConfigurationProvider } from "./configurationProvider"; import { HCR_EVENT, JAVA_LANGID, USER_NOTIFICATION_EVENT } from "./constants"; import { NotificationBar } from "./customWidget"; import { initializeCodeLensProvider, startDebugging } from "./debugCodeLensProvider"; +import { initExpService } from "./experimentationService"; import { handleHotCodeReplaceCustomEvent, initializeHotCodeReplace, NO_BUTTON, YES_BUTTON } from "./hotCodeReplace"; import { JavaDebugAdapterDescriptorFactory } from "./javaDebugAdapterDescriptorFactory"; import { logJavaException, logJavaInfo } from "./javaLogger"; @@ -36,6 +37,7 @@ function initializeExtension(_operationId: string, context: vscode.ExtensionCont // Deprecated logger.initialize(context, true); + initExpService(context); registerDebugEventListener(context); context.subscriptions.push(logger); context.subscriptions.push(vscode.window.registerTerminalLinkProvider(new JavaTerminalLinkProvder()));