blob: 4070b43c98c50d014bd69cb2a76289a1a92a578d [file] [log] [blame]
/*---------------------------------------------------------
* Copyright (C) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------*/
import vscode = require('vscode');
import TelemetryReporter from 'vscode-extension-telemetry';
export const extensionId: string = 'golang.go-nightly';
const extension = vscode.extensions.getExtension(extensionId);
const extensionVersion: string = extension ? extension.packageJSON.version : '';
const aiKey: string = ''; // Empty aiKey disables telemetry.
export function sendTelemetryEventForModulesUsage() {
/* __GDPR__
"modules" : {}
*/
sendTelemetryEvent('modules');
}
export function sendTelemetryEventForAddImportCmd(arg: { importPath: string; from: string }) {
/* __GDPR__
"addImportCmd" : {
"from" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
sendTelemetryEvent('addImportCmd', { from: (arg && arg.from) || 'cmd' });
}
export function sendTelemetryEventForGopkgs(timeTaken: number) {
/* __GDPR__
"gopkgs" : {
"tool" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"timeTaken": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }
}
*/
sendTelemetryEvent('gopkgs', {}, { timeTaken });
}
export function sendTelemetryEventForFormatting(formatTool: string, timeTaken: number) {
/* __GDPR__
"format" : {
"tool" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"timeTaken": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }
}
*/
sendTelemetryEvent('format', { tool: formatTool }, { timeTaken });
}
export function sendTelemetryEventForDebugConfiguration(debugConfiguration: vscode.DebugConfiguration) {
/* __GDPR__
"debugConfiguration" : {
"request" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"mode" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"useApiV<NUMBER>": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"apiVersion": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"stopOnEntry": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
sendTelemetryEvent('debugConfiguration', {
request: debugConfiguration.request,
mode: debugConfiguration.mode,
useApiV1: debugConfiguration.useApiV1,
apiVersion: debugConfiguration.apiVersion,
stopOnEntry: debugConfiguration.stopOnEntry
});
}
export function sendTelemetryEventForConfig(goConfig: vscode.WorkspaceConfiguration) {
/* __GDPR__
"goConfig" : {
"buildOnSave" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"buildFlags": { "classification": "CustomerContent", "purpose": "FeatureInsight" },
"buildTags": { "classification": "CustomerContent", "purpose": "FeatureInsight" },
"formatTool": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"formatFlags": { "classification": "CustomerContent", "purpose": "FeatureInsight" },
"generateTestsFlags": { "classification": "CustomerContent", "purpose": "FeatureInsight" },
"lintOnSave": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"lintFlags": { "classification": "CustomerContent", "purpose": "FeatureInsight" },
"lintTool": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"vetOnSave": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"vetFlags": { "classification": "CustomerContent", "purpose": "FeatureInsight" },
"testOnSave": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"testFlags": { "classification": "CustomerContent", "purpose": "FeatureInsight" },
"coverOnSave": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"coverOnTestPackage": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"coverageDecorator": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"coverageOptions": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"gopath": { "classification": "CustomerContent", "purpose": "FeatureInsight" },
"goroot": { "classification": "CustomerContent", "purpose": "FeatureInsight" },
"inferGopath": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"toolsGopath": { "classification": "CustomerContent", "purpose": "FeatureInsight" },
"gocodeAutoBuild": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"gocodePackageLookupMode": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"useCodeSnippetsOnFunctionSuggest": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"useCodeSnippetsOnFunctionSuggestWithoutType": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"autocompleteUnimportedPackages": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"docsTool": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"useLanguageServer": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"languageServerExperimentalFeatures": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"includeImports": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"addTags": { "classification": "CustomerContent", "purpose": "FeatureInsight" },
"removeTags": { "classification": "CustomerContent", "purpose": "FeatureInsight" },
"editorContextMenuCommands": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"liveErrors": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"codeLens": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"alternateTools": { "classification": "CustomerContent", "purpose": "FeatureInsight" },
"useGoProxyToCheckForToolUpdates": { "classification": "CustomerContent", "purpose": "FeatureInsight" }
}
*/
sendTelemetryEvent('goConfig', {
buildOnSave: goConfig['buildOnSave'] + '',
buildFlags: goConfig['buildFlags'],
buildTags: goConfig['buildTags'],
formatOnSave: goConfig['formatOnSave'] + '',
formatTool: goConfig['formatTool'],
formatFlags: goConfig['formatFlags'],
lintOnSave: goConfig['lintOnSave'] + '',
lintFlags: goConfig['lintFlags'],
lintTool: goConfig['lintTool'],
generateTestsFlags: goConfig['generateTestsFlags'],
vetOnSave: goConfig['vetOnSave'] + '',
vetFlags: goConfig['vetFlags'],
testOnSave: goConfig['testOnSave'] + '',
testFlags: goConfig['testFlags'],
coverOnSave: goConfig['coverOnSave'] + '',
coverOnTestPackage: goConfig['coverOnTestPackage'] + '',
coverageDecorator: goConfig['coverageDecorator'],
coverageOptions: goConfig['coverageOptions'],
gopath: goConfig['gopath'] ? 'set' : '',
goroot: goConfig['goroot'] ? 'set' : '',
inferGopath: goConfig['inferGopath'] + '',
toolsGopath: goConfig['toolsGopath'] ? 'set' : '',
gocodeAutoBuild: goConfig['gocodeAutoBuild'] + '',
gocodePackageLookupMode: goConfig['gocodePackageLookupMode'] + '',
useCodeSnippetsOnFunctionSuggest: goConfig['useCodeSnippetsOnFunctionSuggest'] + '',
useCodeSnippetsOnFunctionSuggestWithoutType: goConfig['useCodeSnippetsOnFunctionSuggestWithoutType'] + '',
autocompleteUnimportedPackages: goConfig['autocompleteUnimportedPackages'] + '',
docsTool: goConfig['docsTool'],
useLanguageServer: goConfig['useLanguageServer'] + '',
languageServerExperimentalFeatures: JSON.stringify(goConfig['languageServerExperimentalFeatures']),
includeImports: goConfig['gotoSymbol'] && goConfig['gotoSymbol']['includeImports'] + '',
addTags: JSON.stringify(goConfig['addTags']),
removeTags: JSON.stringify(goConfig['removeTags']),
editorContextMenuCommands: JSON.stringify(goConfig['editorContextMenuCommands']),
liveErrors: JSON.stringify(goConfig['liveErrors']),
codeLens: JSON.stringify(goConfig['enableCodeLens']),
alternateTools: JSON.stringify(goConfig['alternateTools']),
useGoProxyToCheckForToolUpdates: goConfig['useGoProxyToCheckForToolUpdates'] + ''
});
}
export function sendTelemetryEventForKillingProcess(msg: any, matches: any) {
/* __GDPR__
"errorKillingProcess" : {
"message" : { "classification": "CallstackOrException", "purpose": "PerformanceAndHealth" },
"stack": { "classification": "CallstackOrException", "purpose": "PerformanceAndHealth" }
}
*/
sendTelemetryEvent('errorKillingProcess', { message: msg, stack: matches });
}
export function sendTelemetryEventForGoVersion(goVersion: string) {
/* __GDPR__
"getGoVersion" : {
"version" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
sendTelemetryEvent('getGoVersion', { version: `${goVersion}` });
}
export function disposeTelemetryReporter(): Promise<any> {
if (telemtryReporter) {
return telemtryReporter.dispose();
}
return Promise.resolve(null);
}
let telemtryReporter: TelemetryReporter;
function sendTelemetryEvent(
eventName: string,
properties?: { [key: string]: string },
measures?: { [key: string]: number }
): void {
if (!aiKey) {
return; // cannot enable telemetry
}
telemtryReporter = telemtryReporter
? telemtryReporter
: new TelemetryReporter(extensionId, extensionVersion, aiKey);
telemtryReporter.sendTelemetryEvent(eventName, properties, measures);
}