From 4f848c355e127f407368f847a680426abeb131ab Mon Sep 17 00:00:00 2001 From: Charles Gagnon Date: Fri, 21 Feb 2020 08:41:06 -0800 Subject: [PATCH] Remove all custom events (#1596) * Remove all custom telemetry events * Remove unneeded timer Co-authored-by: Aditya Bist --- gulpfile.js | 2 +- package.json | 1 - src/controllers/connectionManager.ts | 49 -------- src/controllers/mainController.ts | 41 ++----- src/languageservice/serviceclient.ts | 12 -- src/models/contracts/languageService.ts | 21 ---- src/models/resultsSerializer.ts | 3 - src/models/telemetry.ts | 149 ------------------------ test/config.test.ts | 5 - test/initialization.test.ts | 5 - test/perFileConnection.test.ts | 5 - test/platform.test.ts | 6 - test/statusView.test.ts | 5 - test/telemetry.test.ts | 22 ---- typings/vscode-extension-telemetry.d.ts | 6 - yarn.lock | 80 +------------ 16 files changed, 13 insertions(+), 399 deletions(-) delete mode 100644 src/models/telemetry.ts delete mode 100644 test/telemetry.test.ts delete mode 100644 typings/vscode-extension-telemetry.d.ts diff --git a/gulpfile.js b/gulpfile.js index 24829620..ac01276c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -265,7 +265,7 @@ gulp.task('ext:test', (done) => { console.log(`stdout: ${process.stdout}`); console.log(`stderr: ${process.stderr}`); console.error(`exec error: ${error}`); - throw(error); + done(error); }); } }) diff --git a/package.json b/package.json index 79b8e57a..590ae0df 100644 --- a/package.json +++ b/package.json @@ -131,7 +131,6 @@ "semver": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", "tmp": "^0.0.28", "underscore": "^1.8.3", - "vscode-extension-telemetry": "^0.1.1", "vscode-languageclient": "5.2.1", "vscode-nls": "^2.0.2", "zone.js": "^0.6.26" diff --git a/src/controllers/connectionManager.ts b/src/controllers/connectionManager.ts index 8ebc1ddb..75c0526b 100644 --- a/src/controllers/connectionManager.ts +++ b/src/controllers/connectionManager.ts @@ -16,7 +16,6 @@ import { ConnectionUI } from '../views/connectionUI'; import StatusView from '../views/statusView'; import SqlToolsServerClient from '../languageservice/serviceclient'; import { IPrompter } from '../prompts/question'; -import Telemetry from '../models/telemetry'; import VscodeWrapper from './vscodeWrapper'; import {NotificationHandler} from 'vscode-languageclient'; import {Runtime, PlatformInformation} from '../models/platform'; @@ -49,21 +48,6 @@ export class ConnectionInfo { */ public serverInfo: ConnectionContracts.ServerInfo; - /** - * Timer for tracking extension connection time. - */ - public extensionTimer: Utils.Timer; - - /** - * Timer for tracking service connection time. - */ - public serviceTimer: Utils.Timer; - - /** - * Timer for tracking intelliSense activation time. - */ - public intelliSenseTimer: Utils.Timer; - /** * Whether the connection is in the process of connecting. */ @@ -256,21 +240,12 @@ export default class ConnectionManager { self._statusView.languageServiceStatusChanged(event.ownerUri, LocalizedConstants.intelliSenseUpdatedStatus); let connection = self.getConnectionInfo(event.ownerUri); if (connection !== undefined) { - connection.intelliSenseTimer.end(); - let duration = connection.intelliSenseTimer.getDuration(); let numberOfCharacters: number = 0; if (this.vscodeWrapper.activeTextEditor !== undefined && this.vscodeWrapper.activeTextEditor.document !== undefined) { let document = this.vscodeWrapper.activeTextEditor.document; numberOfCharacters = document.getText().length; } - Telemetry.sendTelemetryEvent('IntelliSenseActivated', - { - isAzure: connection.serverInfo && connection.serverInfo.isCloud ? '1' : '0'}, - { - duration: duration, - fileSize: numberOfCharacters - }); } }; } @@ -306,7 +281,6 @@ export default class ConnectionManager { return async (result: ConnectionContracts.ConnectionCompleteParams): Promise => { let fileUri = result.ownerUri; let connection = self.getConnectionInfo(fileUri); - connection.serviceTimer.end(); connection.connecting = false; // Convert to credentials if it's a connection string based connection if (connection.credentials.connectionString) { @@ -368,20 +342,6 @@ export default class ConnectionManager { this._vscodeWrapper.logToOutputChannel( Utils.formatString(LocalizedConstants.msgConnectedServerInfo, connection.credentials.server, fileUri, JSON.stringify(connection.serverInfo)) ); - - connection.extensionTimer.end(); - - Telemetry.sendTelemetryEvent('DatabaseConnected', { - connectionType: connection.serverInfo ? (connection.serverInfo.isCloud ? 'Azure' : 'Standalone') : '', - serverVersion: connection.serverInfo ? connection.serverInfo.serverVersion : '', - serverEdition: connection.serverInfo ? connection.serverInfo.serverEdition : '', - serverOs: connection.serverInfo ? this.getIsServerLinux(connection.serverInfo.osVersion) : '' - }, { - isEncryptedConnection: connection.credentials.encrypt ? 1 : 0, - isIntegratedAuthentication: connection.credentials.authenticationType === 'Integrated' ? 1 : 0, - extensionConnectionTime: connection.extensionTimer.getDuration() - connection.serviceTimer.getDuration(), - serviceConnectionTime: connection.serviceTimer.getDuration() - }); } private async handleConnectionErrors(fileUri: string, connection: ConnectionInfo, result: ConnectionContracts.ConnectionCompleteParams): Promise { @@ -511,8 +471,6 @@ export default class ConnectionManager { self.disconnect(fileUri).then( () => { self.connect(fileUri, newDatabaseCredentials).then( () => { - Telemetry.sendTelemetryEvent('UseDatabase'); - self.vscodeWrapper.logToOutputChannel( Utils.formatString( LocalizedConstants.msgChangedDatabase, @@ -547,7 +505,6 @@ export default class ConnectionManager { } await self.disconnect(fileUri); await self.connect(fileUri, newDatabaseCredentials); - Telemetry.sendTelemetryEvent('UseDatabase'); self.vscodeWrapper.logToOutputChannel( Utils.formatString( LocalizedConstants.msgChangedDatabase, @@ -605,8 +562,6 @@ export default class ConnectionManager { self.statusView.notConnected(fileUri); } if (result) { - Telemetry.sendTelemetryEvent('DatabaseDisconnected'); - self.vscodeWrapper.logToOutputChannel( Utils.formatString(LocalizedConstants.msgDisconnected, fileUri) ); @@ -730,8 +685,6 @@ export default class ConnectionManager { const self = this; let connectionPromise = new Promise(async (resolve, reject) => { let connectionInfo: ConnectionInfo = new ConnectionInfo(); - connectionInfo.extensionTimer = new Utils.Timer(); - connectionInfo.intelliSenseTimer = new Utils.Timer(); connectionInfo.credentials = connectionCreds; connectionInfo.connecting = true; this._connections[fileUri] = connectionInfo; @@ -761,8 +714,6 @@ export default class ConnectionManager { connectParams.ownerUri = fileUri; connectParams.connection = connectionDetails; - connectionInfo.serviceTimer = new Utils.Timer(); - // send connection request message to service host this._uriToConnectionPromiseMap.set(connectParams.ownerUri, promise); try { diff --git a/src/controllers/mainController.ts b/src/controllers/mainController.ts index 2debd201..21c7e1ee 100644 --- a/src/controllers/mainController.ts +++ b/src/controllers/mainController.ts @@ -16,7 +16,6 @@ import ConnectionManager from './connectionManager'; import SqlToolsServerClient from '../languageservice/serviceclient'; import { IPrompter } from '../prompts/question'; import CodeAdapter from '../prompts/adapter'; -import Telemetry from '../models/telemetry'; import VscodeWrapper from './vscodeWrapper'; import UntitledSqlDocumentService from './untitledSqlDocumentService'; import { ISelectionData, IConnectionProfile, IConnectionCredentials } from './../models/interfaces'; @@ -109,16 +108,15 @@ export default class MainController implements vscode.Disposable { */ public activate(): Promise { const self = this; - let activationTimer = new Utils.Timer(); // initialize the language client then register the commands - return this.initialize(activationTimer).then((didInitialize) => { + return this.initialize().then((didInitialize) => { if (didInitialize) { // register VS Code commands this.registerCommand(Constants.cmdConnect); - this._event.on(Constants.cmdConnect, () => { self.runAndLogErrors(self.onNewConnection(), 'onNewConnection'); }); + this._event.on(Constants.cmdConnect, () => { self.runAndLogErrors(self.onNewConnection()); }); this.registerCommand(Constants.cmdDisconnect); - this._event.on(Constants.cmdDisconnect, () => { self.runAndLogErrors(self.onDisconnect(), 'onDisconnect'); }); + this._event.on(Constants.cmdDisconnect, () => { self.runAndLogErrors(self.onDisconnect()); }); this.registerCommand(Constants.cmdRunQuery); this._event.on(Constants.cmdRunQuery, () => { self.onRunQuery(); }); this.registerCommand(Constants.cmdManageConnectionProfiles); @@ -126,15 +124,15 @@ export default class MainController implements vscode.Disposable { this.registerCommand(Constants.cmdRunCurrentStatement); this._event.on(Constants.cmdManageConnectionProfiles, async () => { await self.onManageProfiles(); }); this.registerCommand(Constants.cmdChooseDatabase); - this._event.on(Constants.cmdChooseDatabase, () => { self.runAndLogErrors(self.onChooseDatabase(), 'onChooseDatabase') ; } ); + this._event.on(Constants.cmdChooseDatabase, () => { self.runAndLogErrors(self.onChooseDatabase()) ; } ); this.registerCommand(Constants.cmdChooseLanguageFlavor); - this._event.on(Constants.cmdChooseLanguageFlavor, () => { self.runAndLogErrors(self.onChooseLanguageFlavor(), 'onChooseLanguageFlavor') ; } ); + this._event.on(Constants.cmdChooseLanguageFlavor, () => { self.runAndLogErrors(self.onChooseLanguageFlavor()) ; } ); this.registerCommand(Constants.cmdCancelQuery); this._event.on(Constants.cmdCancelQuery, () => { self.onCancelQuery(); }); this.registerCommand(Constants.cmdShowGettingStarted); this._event.on(Constants.cmdShowGettingStarted, () => { self.launchGettingStartedPage(); }); this.registerCommand(Constants.cmdNewQuery); - this._event.on(Constants.cmdNewQuery, () => self.runAndLogErrors(self.onNewQuery(), 'onNewQuery')); + this._event.on(Constants.cmdNewQuery, () => self.runAndLogErrors(self.onNewQuery())); this.registerCommand(Constants.cmdRebuildIntelliSenseCache); this._event.on(Constants.cmdRebuildIntelliSenseCache, () => { self.onRebuildIntelliSense(); }); this.registerCommandWithArgs(Constants.cmdLoadCompletionExtension); @@ -201,13 +199,11 @@ export default class MainController implements vscode.Disposable { /** * Initializes the extension */ - public initialize(activationTimer: Utils.Timer): Promise { + public initialize(): Promise { const self = this; // initialize language service client return new Promise( (resolve, reject) => { - // Ensure telemetry is disabled - Telemetry.disable(); SqlToolsServerClient.instance.initialize(self._context).then(serverResult => { // Init status bar self._statusview = new StatusView(self._vscodeWrapper); @@ -221,12 +217,6 @@ export default class MainController implements vscode.Disposable { // Init connection manager and connection MRU self._connectionMgr = new ConnectionManager(self._context, self._statusview, self._prompter); - activationTimer.end(); - - // telemetry for activation - Telemetry.sendTelemetryEvent('ExtensionActivated', {}, - { activationTime: activationTimer.getDuration(), serviceInstalled: serverResult.installedBeforeInitializing ? 1 : 0 } - ); self.showReleaseNotesPrompt(); @@ -240,7 +230,6 @@ export default class MainController implements vscode.Disposable { self._initialized = true; resolve(true); }).catch(err => { - Telemetry.sendTelemetryEventForException(err, 'initialize'); reject(err); }); }); @@ -505,10 +494,9 @@ export default class MainController implements vscode.Disposable { } try { let uri = this._vscodeWrapper.activeTextEditorUri; - Telemetry.sendTelemetryEvent('CancelQuery'); this._outputContentProvider.cancelQuery(uri); } catch (err) { - Telemetry.sendTelemetryEventForException(err, 'onCancelQuery'); + console.warn(`Unexpected error cancelling query : ${err}`); } } @@ -559,7 +547,6 @@ export default class MainController implements vscode.Disposable { */ public async onManageProfiles(): Promise { if (this.canRunCommand()) { - Telemetry.sendTelemetryEvent('ManageProfiles'); await this._connectionMgr.onManageProfiles(); return; } @@ -627,8 +614,6 @@ export default class MainController implements vscode.Disposable { return; } - Telemetry.sendTelemetryEvent('RunCurrentStatement'); - let editor = self._vscodeWrapper.activeTextEditor; let uri = self._vscodeWrapper.activeTextEditorUri; let title = path.basename(editor.document.fileName); @@ -648,7 +633,7 @@ export default class MainController implements vscode.Disposable { await self._outputContentProvider.runCurrentStatement(self._statusview, uri, querySelection, title); } catch (err) { - Telemetry.sendTelemetryEventForException(err, 'onRunCurrentStatement'); + console.warn(`Unexpected error running current statement : ${err}`); } } @@ -695,12 +680,9 @@ export default class MainController implements vscode.Disposable { if (editor.document.getText(selectionToTrim).trim().length === 0) { return; } - - Telemetry.sendTelemetryEvent('RunQuery'); - await self._outputContentProvider.runQuery(self._statusview, uri, querySelection, title); } catch (err) { - Telemetry.sendTelemetryEventForException(err, 'onRunQuery'); + console.warn(`Unexpected error running query : ${err}`); } } @@ -741,11 +723,10 @@ export default class MainController implements vscode.Disposable { /** * Executes a callback and logs any errors raised */ - private runAndLogErrors(promise: Promise, handlerName: string): Promise { + private runAndLogErrors(promise: Promise): Promise { let self = this; return promise.catch(err => { self._vscodeWrapper.showErrorMessage(LocalizedConstants.msgError + err); - Telemetry.sendTelemetryEventForException(err, handlerName); return undefined; }); } diff --git a/src/languageservice/serviceclient.ts b/src/languageservice/serviceclient.ts index 1ee6d256..00c74e14 100644 --- a/src/languageservice/serviceclient.ts +++ b/src/languageservice/serviceclient.ts @@ -11,7 +11,6 @@ import { } from 'vscode-languageclient'; import * as path from 'path'; import VscodeWrapper from '../controllers/vscodeWrapper'; -import Telemetry from '../models/telemetry'; import * as Utils from '../models/utils'; import { VersionRequest } from '../models/contracts'; import { Logger } from '../models/logger'; @@ -59,8 +58,6 @@ class LanguageClientErrorHandler { * @memberOf LanguageClientErrorHandler */ showOnErrorPrompt(): void { - Telemetry.sendTelemetryEvent('SqlToolsServiceCrash'); - this.vscodeWrapper.showErrorMessage( Constants.sqlToolsServiceCrashMessage, Constants.sqlToolsServiceCrashButton).then(action => { @@ -169,7 +166,6 @@ export default class SqlToolsServiceClient { this._logger.append(`Platform: ${platformInfo.toString()}`); if (!platformInfo.isValidRuntime()) { Utils.showErrorMsg(Constants.unsupportedPlatformErrorMessage); - Telemetry.sendTelemetryEvent('UnsupportedPlatform', { platform: platformInfo.toString() }); reject('Invalid Platform'); } else { if (platformInfo.runtimeId) { @@ -200,7 +196,6 @@ export default class SqlToolsServiceClient { }).catch(err => { Utils.logDebug(Constants.serviceLoadingFailed + ' ' + err); Utils.showErrorMsg(Constants.serviceLoadingFailed); - Telemetry.sendTelemetryEvent('ServiceInitializingFailed'); reject(err); }); } @@ -299,7 +294,6 @@ export default class SqlToolsServiceClient { client.onReady().then(() => { this.checkServiceCompatibility(); - client.onNotification(LanguageServiceContracts.TelemetryNotification.type, this.handleLanguageServiceTelemetryNotification()); client.onNotification(LanguageServiceContracts.StatusChangedNotification.type, this.handleLanguageServiceStatusNotification()); }); @@ -320,12 +314,6 @@ export default class SqlToolsServiceClient { return client; } - private handleLanguageServiceTelemetryNotification(): NotificationHandler { - return (event: LanguageServiceContracts.TelemetryParams): void => { - Telemetry.sendTelemetryEvent(event.params.eventName, event.params.properties, event.params.measures); - }; - } - /** * Public for testing purposes only. */ diff --git a/src/models/contracts/languageService.ts b/src/models/contracts/languageService.ts index 0fc00103..f7037e3f 100644 --- a/src/models/contracts/languageService.ts +++ b/src/models/contracts/languageService.ts @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ import {NotificationType, RequestType} from 'vscode-languageclient'; -import {Telemetry} from '../telemetry'; // ------------------------------- < IntelliSense Ready Event > ------------------------------------ @@ -43,27 +42,7 @@ export class RebuildIntelliSenseParams { } // ------------------------------- ---------------------------------- -// ------------------------------- < Telemetry Sent Event > ------------------------------------ -/** - * Event sent when the language service send a telemetry event - */ -export namespace TelemetryNotification { - export const type = new NotificationType('telemetry/sqlevent'); -} - -/** - * Update event parameters - */ -export class TelemetryParams { - public params: { - eventName: string; - properties: Telemetry.ITelemetryEventProperties; - measures: Telemetry.ITelemetryEventMeasures; - }; -} - -// ------------------------------- ---------------------------------- // ------------------------------- < Status Event > ------------------------------------ /** diff --git a/src/models/resultsSerializer.ts b/src/models/resultsSerializer.ts index c5d64ea8..44e1c668 100644 --- a/src/models/resultsSerializer.ts +++ b/src/models/resultsSerializer.ts @@ -12,7 +12,6 @@ import { RequestType } from 'vscode-languageclient'; import VscodeWrapper from '../controllers/vscodeWrapper'; import SqlToolsServerClient from '../languageservice/serviceclient'; import * as Contracts from '../models/contracts'; -import Telemetry from '../models/telemetry'; import * as Utils from '../models/utils'; let opener = require('opener'); @@ -190,8 +189,6 @@ export default class ResultsSerializer { self._vscodeWrapper.logToOutputChannel(LocalizedConstants.msgSaveSucceeded + filePath); self.openSavedFile(self._filePath, format); } - // telemetry for save results - Telemetry.sendTelemetryEvent('SavedResults', { 'type': format }); }, error => { self._vscodeWrapper.showErrorMessage(LocalizedConstants.msgSaveFailed + error.message); diff --git a/src/models/telemetry.ts b/src/models/telemetry.ts deleted file mode 100644 index dd95299f..00000000 --- a/src/models/telemetry.ts +++ /dev/null @@ -1,149 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -'use strict'; -import vscode = require('vscode'); -import TelemetryReporter from 'vscode-extension-telemetry'; -import Utils = require('./utils'); -import { PlatformInformation } from './platform'; - -export namespace Telemetry { - let reporter: TelemetryReporter; - let userId: string; - let platformInformation: PlatformInformation; - let disabled: boolean; - - // Get the unique ID for the current user of the extension - function getUserId(): Promise { - return new Promise(resolve => { - // Generate the user id if it has not been created already - if (typeof userId === 'undefined') { - let id = Utils.generateUserId(); - id.then( newId => { - userId = newId; - resolve(userId); - }); - } else { - resolve(userId); - } - }); - } - - function getPlatformInformation(): Promise { - if (platformInformation) { - return Promise.resolve(platformInformation); - } else { - return new Promise(resolve => { - PlatformInformation.getCurrent().then(info => { - platformInformation = info; - resolve(platformInformation); - }); - }); - } - } - - export interface ITelemetryEventProperties { - [key: string]: string; - } - - export interface ITelemetryEventMeasures { - [key: string]: number; - } - - /** - * Disable telemetry reporting - */ - export function disable(): void { - disabled = true; - } - - /** - * Initialize the telemetry reporter for use. - */ - export function initialize(context: vscode.ExtensionContext): void { - if (typeof reporter === 'undefined') { - // Check if the user has opted out of telemetry - if (!vscode.workspace.getConfiguration('telemetry').get('enableTelemetry', true)) { - disable(); - return; - } - - let packageInfo = Utils.getPackageInfo(context); - reporter = new TelemetryReporter('vscode-mssql', packageInfo.version, packageInfo.aiKey); - } - } - - /** - * Filters error paths to only include source files. Exported to support testing - */ - export function filterErrorPath(line: string): string { - if (line) { - let values: string[] = line.split('/out/'); - if (values.length <= 1) { - // Didn't match expected format - return line; - } else { - return values[1]; - } - } - } - - /** - * Send a telemetry event for an exception - */ - export function sendTelemetryEventForException( - err: any, methodName: string): void { - try { - let stackArray: string[]; - let firstLine: string = ''; - if ( err !== undefined && err.stack !== undefined) { - stackArray = err.stack.split('\n'); - if (stackArray !== undefined && stackArray.length >= 2) { - firstLine = stackArray[1]; // The fist line is the error message and we don't want to send that telemetry event - firstLine = filterErrorPath(firstLine); - } - } - - // Only adding the method name and the fist line of the stack trace. We don't add the error message because it might have PII - Telemetry.sendTelemetryEvent('Exception', {methodName: methodName, errorLine: firstLine}); - Utils.logDebug('Unhandled Exception occurred. error: ' + err + ' method: ' + methodName ); - } catch (telemetryErr) { - // If sending telemetry event fails ignore it so it won't break the extension - Utils.logDebug('Failed to send telemetry event. error: ' + telemetryErr ); - } - } - - /** - * Send a telemetry event using application insights - */ - export function sendTelemetryEvent( - eventName: string, - properties?: ITelemetryEventProperties, - measures?: ITelemetryEventMeasures): void { - - if (typeof disabled === 'undefined') { - disabled = false; - } - if (disabled || typeof(reporter) === 'undefined') { - // Don't do anything if telemetry is disabled - return; - } - - if (!properties || typeof properties === 'undefined') { - properties = {}; - } - - // Augment the properties structure with additional common properties before sending - Promise.all([getUserId(), getPlatformInformation()]).then(() => { - properties['userId'] = userId; - properties['distribution'] = (platformInformation && platformInformation.distribution) ? - `${platformInformation.distribution.name}, ${platformInformation.distribution.version}` : ''; - - reporter.sendTelemetryEvent(eventName, properties, measures); - }); - } -} - -export default Telemetry; diff --git a/test/config.test.ts b/test/config.test.ts index e43062a0..ca27ed13 100644 --- a/test/config.test.ts +++ b/test/config.test.ts @@ -6,13 +6,8 @@ import assert = require('assert'); import Config from '../src/configurations/config'; -import Telemetry from '../src/models/telemetry'; suite('Config Tests', () => { - setup(() => { - // Ensure that telemetry is disabled while testing - Telemetry.disable(); - }); test('getSqlToolsServiceDownloadUrl should return valid value', (done) => { return new Promise((resolve, reject) => { diff --git a/test/initialization.test.ts b/test/initialization.test.ts index b7d101e4..c8c4cf8f 100644 --- a/test/initialization.test.ts +++ b/test/initialization.test.ts @@ -9,7 +9,6 @@ import vscode = require('vscode'); import * as Extension from '../src/extension'; import ConnectionManager from '../src/controllers/connectionManager'; import MainController from '../src/controllers/mainController'; -import Telemetry from '../src/models/telemetry'; function ensureExtensionIsActive(): Promise { return new Promise((resolve, reject) => { @@ -27,10 +26,6 @@ function waitForExtensionToBeActive(resolve): void { } suite('Initialization Tests', () => { - setup(() => { - // Ensure that telemetry is disabled while testing - Telemetry.disable(); - }); test('Connection manager is initialized properly', (done) => { // Wait for the extension to activate diff --git a/test/perFileConnection.test.ts b/test/perFileConnection.test.ts index f6942f1a..b1b120d0 100644 --- a/test/perFileConnection.test.ts +++ b/test/perFileConnection.test.ts @@ -18,7 +18,6 @@ import MainController from '../src/controllers/mainController'; import * as Interfaces from '../src/models/interfaces'; import { ConnectionStore } from '../src/models/connectionStore'; import StatusView from '../src/views/statusView'; -import Telemetry from '../src/models/telemetry'; import * as Utils from '../src/models/utils'; import { TestExtensionContext, TestPrompter } from './stubs'; import VscodeWrapper from '../src/controllers/vscodeWrapper'; @@ -106,10 +105,6 @@ function createTestListDatabasesResult(): ConnectionContracts.ListDatabasesResul } suite('Per File Connection Tests', () => { - setup(() => { - // Ensure that telemetry is disabled while testing - Telemetry.disable(); - }); test('onNewConnection should ask user for different credentials if connection failed because of invalid credentials', done => { let vscodeWrapperMock: TypeMoq.IMock = TypeMoq.Mock.ofType(VscodeWrapper); diff --git a/test/platform.test.ts b/test/platform.test.ts index 110b9bbc..cf941003 100644 --- a/test/platform.test.ts +++ b/test/platform.test.ts @@ -6,7 +6,6 @@ import assert = require('assert'); import { expect } from 'chai'; import {Runtime, PlatformInformation, LinuxDistribution} from '../src/models/platform'; -import Telemetry from '../src/models/telemetry'; function getPlatform(): Promise { return PlatformInformation.getCurrent().then (platformInfo => { @@ -16,11 +15,6 @@ function getPlatform(): Promise { suite('Platform Tests', () => { - setup(() => { - // Ensure that telemetry is disabled while testing - Telemetry.disable(); - }); - test('getCurrentPlatform should return valid value', (done) => { getPlatform().then(platform => { assert.notEqual(platform, Runtime.UnknownRuntime); diff --git a/test/statusView.test.ts b/test/statusView.test.ts index 18d04349..8945c403 100644 --- a/test/statusView.test.ts +++ b/test/statusView.test.ts @@ -7,13 +7,8 @@ import assert = require('assert'); import StatusView from '../src/views/statusView'; import LocalizedConstants = require('../src/constants/localizedConstants'); -import Telemetry from '../src/models/telemetry'; suite('Status View Tests', () => { - setup(() => { - // Ensure that telemetry is disabled while testing - Telemetry.disable(); - }); test('updateStatusMessage should not immediately update status message for definition request', (done) => { return new Promise((resolve, reject) => { diff --git a/test/telemetry.test.ts b/test/telemetry.test.ts deleted file mode 100644 index 62873873..00000000 --- a/test/telemetry.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* -------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - * ------------------------------------------------------------------------------------------ */ - -import assert = require('assert'); -import Telemetry from '../src/models/telemetry'; - -suite('Telemetry Tests', () => { - test('Path before /out/ is stripped', () => { - let errorString = '/User/myuser/vscode/extensions/ms-mssql.mssql-0.1.5/out/src/controller/mainController.js:216.45'; - let expectedErrorString = 'src/controller/mainController.js:216.45'; - let actualErrorString = Telemetry.filterErrorPath(errorString); - assert.equal(actualErrorString, expectedErrorString); - }); - - test('Path without /out/ is retained', () => { - let errorString = '/User/should/never/happen/src/controller/mainController.js:216.45'; - let actualErrorString = Telemetry.filterErrorPath(errorString); - assert.equal(actualErrorString, errorString); - }); -}); diff --git a/typings/vscode-extension-telemetry.d.ts b/typings/vscode-extension-telemetry.d.ts deleted file mode 100644 index 6fd00413..00000000 --- a/typings/vscode-extension-telemetry.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -declare module 'vscode-extension-telemetry' { - export default class TelemetryReporter { - constructor(extensionId: string,extensionVersion: string, key: string); - sendTelemetryEvent(eventName: string, properties?: { [key: string]: string }, measures?: { [key: string]: number }): void; - } -} diff --git a/yarn.lock b/yarn.lock index e36cb5e9..234a3934 100644 --- a/yarn.lock +++ b/yarn.lock @@ -241,16 +241,6 @@ append-buffer@^1.0.2: dependencies: buffer-equal "^1.0.0" -applicationinsights@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-1.4.0.tgz#e17e436427b6e273291055181e29832cca978644" - integrity sha512-TV8MYb0Kw9uE2cdu4V/UvTKdOABkX2+Fga9iDz0zqV7FLrNXfmAugWZmmdTx4JoynYkln3d5CUHY3oVSUEbfFw== - dependencies: - cls-hooked "^4.2.2" - continuation-local-storage "^3.2.1" - diagnostic-channel "0.2.0" - diagnostic-channel-publishers "^0.3.2" - aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -433,21 +423,6 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== -async-hook-jl@^1.7.6: - version "1.7.6" - resolved "https://registry.yarnpkg.com/async-hook-jl/-/async-hook-jl-1.7.6.tgz#4fd25c2f864dbaf279c610d73bf97b1b28595e68" - integrity sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg== - dependencies: - stack-chain "^1.3.7" - -async-listener@^0.6.0: - version "0.6.10" - resolved "https://registry.yarnpkg.com/async-listener/-/async-listener-0.6.10.tgz#a7c97abe570ba602d782273c0de60a51e3e17cbc" - integrity sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw== - dependencies: - semver "^5.3.0" - shimmer "^1.1.0" - async-settle@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b" @@ -1032,15 +1007,6 @@ cloneable-readable@^1.0.0: process-nextick-args "^2.0.0" readable-stream "^2.3.5" -cls-hooked@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/cls-hooked/-/cls-hooked-4.2.2.tgz#ad2e9a4092680cdaffeb2d3551da0e225eae1908" - integrity sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw== - dependencies: - async-hook-jl "^1.7.6" - emitter-listener "^1.0.1" - semver "^5.4.1" - code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -1151,14 +1117,6 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -continuation-local-storage@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz#11f613f74e914fe9b34c92ad2d28fe6ae1db7ffb" - integrity sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA== - dependencies: - async-listener "^0.6.0" - emitter-listener "^1.1.1" - convert-source-map@1.X, convert-source-map@^1.1.1, convert-source-map@^1.5.0, convert-source-map@^1.5.1: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -1499,18 +1457,6 @@ detect-newline@2.X: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= -diagnostic-channel-publishers@^0.3.2: - version "0.3.3" - resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.3.3.tgz#376b7798f4fa90f37eb4f94d2caca611b0e9c330" - integrity sha512-qIocRYU5TrGUkBlDDxaziAK1+squ8Yf2Ls4HldL3xxb/jzmWO2Enux7CvevNKYmF2kDXZ9HiRqwjPsjk8L+i2Q== - -diagnostic-channel@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/diagnostic-channel/-/diagnostic-channel-0.2.0.tgz#cc99af9612c23fb1fff13612c72f2cbfaa8d5a17" - integrity sha1-zJmvlhLCP7H/8TYSxy8sv6qNWhc= - dependencies: - semver "^5.3.0" - didyoumean@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.1.tgz#e92edfdada6537d484d73c0172fd1eba0c4976ff" @@ -1649,13 +1595,6 @@ ejs@^2.6.2: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.2.tgz#749037c4c09bd57626a6140afbe6b7e650661614" integrity sha512-rHGwtpl67oih3xAHbZlpw5rQAt+YV1mSCu2fUZ9XNrfaGEhom7E+AUiMci+ByP4aSfuAWx7hE0BPuJLMrpXwOw== -emitter-listener@^1.0.1, emitter-listener@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/emitter-listener/-/emitter-listener-1.1.2.tgz#56b140e8f6992375b3d7cb2cab1cc7432d9632e8" - integrity sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ== - dependencies: - shimmer "^1.2.0" - emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -4955,7 +4894,7 @@ semver-greatest-satisfied-range@^1.1.0: dependencies: sver-compat "^1.5.0" -"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: +"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -4989,11 +4928,6 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -shimmer@^1.1.0, shimmer@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" - integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== - sigmund@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" @@ -5177,11 +5111,6 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -stack-chain@^1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/stack-chain/-/stack-chain-1.3.7.tgz#d192c9ff4ea6a22c94c4dd459171e3f00cea1285" - integrity sha1-0ZLJ/06moiyUxN1FkXHj8AzqEoU= - stack-trace@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" @@ -6040,13 +5969,6 @@ vsce@^1.58.0: yauzl "^2.3.1" yazl "^2.2.2" -vscode-extension-telemetry@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.1.2.tgz#049207f5453930888ff68ca925b07bab08f2c955" - integrity sha512-FSbaZKlIH3VKvBJsKw7v5bESWHXzltji2rtjaJeJglpQH4tfClzwHMzlMXUZGiblV++djEzb1gW8mb5E+wxFsg== - dependencies: - applicationinsights "1.4.0" - vscode-jsonrpc@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz#a7bf74ef3254d0a0c272fab15c82128e378b3be9"