diff --git a/extensions/mssql/src/objectManagement/commands.ts b/extensions/mssql/src/objectManagement/commands.ts index 5a765d7201..92218bd764 100644 --- a/extensions/mssql/src/objectManagement/commands.ts +++ b/extensions/mssql/src/objectManagement/commands.ts @@ -130,7 +130,13 @@ async function handleNewObjectDialogCommand(context: azdata.ObjectExplorerContex objectExplorerContext: context }; const dialog = getDialog(service, options); + const startTime = Date.now(); await dialog.open(); + TelemetryReporter.sendTelemetryEvent(TelemetryActions.OpenNewObjectDialog, { + objectType: objectType + }, { + elapsedTimeMs: Date.now() - startTime + }); } catch (err) { TelemetryReporter.createErrorEvent2(ObjectManagementViewName, TelemetryActions.OpenNewObjectDialog, err).withAdditionalProperties({ @@ -159,7 +165,13 @@ async function handleObjectPropertiesDialogCommand(context: azdata.ObjectExplore objectExplorerContext: context }; const dialog = getDialog(service, options); + const startTime = Date.now(); await dialog.open(); + TelemetryReporter.sendTelemetryEvent(TelemetryActions.OpenPropertiesDialog, { + objectType: object.type + }, { + elapsedTimeMs: Date.now() - startTime + }); } catch (err) { TelemetryReporter.createErrorEvent2(ObjectManagementViewName, TelemetryActions.OpenPropertiesDialog, err).withAdditionalProperties({ @@ -297,7 +309,13 @@ async function handleDetachDatabase(context: azdata.ObjectExplorerContext, servi objectExplorerContext: context }; const dialog = new DetachDatabaseDialog(service, options); + const startTime = Date.now(); await dialog.open(); + TelemetryReporter.sendTelemetryEvent(TelemetryActions.OpenDetachDatabaseDialog, { + objectType: object.type + }, { + elapsedTimeMs: Date.now() - startTime + }); } catch (err) { TelemetryReporter.createErrorEvent2(ObjectManagementViewName, TelemetryActions.OpenDetachDatabaseDialog, err).withAdditionalProperties({ @@ -325,7 +343,13 @@ async function handleAttachDatabase(context: azdata.ObjectExplorerContext, servi objectExplorerContext: context }; const dialog = new AttachDatabaseDialog(service, options); + const startTime = Date.now(); await dialog.open(); + TelemetryReporter.sendTelemetryEvent(TelemetryActions.OpenAttachDatabaseDialog, { + objectType: ObjectManagement.NodeType.Database + }, { + elapsedTimeMs: Date.now() - startTime + }); } catch (err) { TelemetryReporter.createErrorEvent2(ObjectManagementViewName, TelemetryActions.OpenAttachDatabaseDialog, err).withAdditionalProperties({ @@ -357,7 +381,13 @@ async function handleDropDatabase(context: azdata.ObjectExplorerContext, service objectExplorerContext: context }; const dialog = new DropDatabaseDialog(service, options); + const startTime = Date.now(); await dialog.open(); + TelemetryReporter.sendTelemetryEvent(TelemetryActions.OpenDropDatabaseDialog, { + objectType: object.type + }, { + elapsedTimeMs: Date.now() - startTime + }); } catch (err) { TelemetryReporter.createErrorEvent2(ObjectManagementViewName, TelemetryActions.OpenDropDatabaseDialog, err).withAdditionalProperties({ diff --git a/extensions/mssql/src/objectManagement/constants.ts b/extensions/mssql/src/objectManagement/constants.ts index bef7fbe02d..b23477f550 100644 --- a/extensions/mssql/src/objectManagement/constants.ts +++ b/extensions/mssql/src/objectManagement/constants.ts @@ -54,7 +54,9 @@ export const enum TelemetryActions { UpdateObject = 'UpdateObject', OpenDetachDatabaseDialog = 'OpenDetachDatabaseDialog', OpenAttachDatabaseDialog = 'OpenAttachDatabaseDialog', - OpenDropDatabaseDialog = 'OpenDropDatabaseDialog' + OpenDropDatabaseDialog = 'OpenDropDatabaseDialog', + AttachDatabase = 'AttachDatabase', + DetachDatabase = 'DetachDatabase' } export const ObjectManagementViewName = 'ObjectManagement'; diff --git a/extensions/mssql/src/objectManagement/ui/attachDatabaseDialog.ts b/extensions/mssql/src/objectManagement/ui/attachDatabaseDialog.ts index ae6e3e4e03..2031a5bbad 100644 --- a/extensions/mssql/src/objectManagement/ui/attachDatabaseDialog.ts +++ b/extensions/mssql/src/objectManagement/ui/attachDatabaseDialog.ts @@ -7,7 +7,7 @@ import * as azdata from 'azdata'; import { ObjectManagementDialogBase, ObjectManagementDialogOptions } from './objectManagementDialogBase'; import { DatabaseFileData, IObjectManagementService, ObjectManagement } from 'mssql'; import { Database, DatabaseViewInfo } from '../interfaces'; -import { AttachDatabaseDocUrl } from '../constants'; +import { AttachDatabaseDocUrl, TelemetryActions } from '../constants'; import * as loc from '../localizedConstants'; import { RemoveText } from '../../ui/localizedConstants'; import { DefaultMinTableRowCount, DialogButton, getTableHeight } from '../../ui/dialogBase'; @@ -178,6 +178,10 @@ export class AttachDatabaseDialog extends ObjectManagementDialogBase { let errors = []; if (this._databasesToAttach.length === 0) { diff --git a/extensions/mssql/src/objectManagement/ui/detachDatabaseDialog.ts b/extensions/mssql/src/objectManagement/ui/detachDatabaseDialog.ts index eff28f399d..c58671face 100644 --- a/extensions/mssql/src/objectManagement/ui/detachDatabaseDialog.ts +++ b/extensions/mssql/src/objectManagement/ui/detachDatabaseDialog.ts @@ -6,7 +6,7 @@ import { ObjectManagementDialogBase, ObjectManagementDialogOptions } from './objectManagementDialogBase'; import { IObjectManagementService, ObjectManagement } from 'mssql'; import { Database, DatabaseViewInfo } from '../interfaces'; -import { DetachDatabaseDocUrl } from '../constants'; +import { DetachDatabaseDocUrl, TelemetryActions } from '../constants'; import * as loc from '../localizedConstants'; export class DetachDatabaseDialog extends ObjectManagementDialogBase { @@ -48,6 +48,10 @@ export class DetachDatabaseDialog extends ObjectManagementDialogBase { await this.objectManagementService.detachDatabase(this.options.connectionUri, this.options.database, this._dropConnections, this._updateStatistics, false); } diff --git a/extensions/mssql/src/objectManagement/ui/dropDatabaseDialog.ts b/extensions/mssql/src/objectManagement/ui/dropDatabaseDialog.ts index fe76c26d0e..f3189dd50b 100644 --- a/extensions/mssql/src/objectManagement/ui/dropDatabaseDialog.ts +++ b/extensions/mssql/src/objectManagement/ui/dropDatabaseDialog.ts @@ -6,7 +6,7 @@ import { ObjectManagementDialogBase, ObjectManagementDialogOptions } from './objectManagementDialogBase'; import { IObjectManagementService, ObjectManagement } from 'mssql'; import { Database, DatabaseViewInfo } from '../interfaces'; -import { DropDatabaseDocUrl } from '../constants'; +import { DropDatabaseDocUrl, TelemetryActions } from '../constants'; import * as loc from '../localizedConstants'; export class DropDatabaseDialog extends ObjectManagementDialogBase { @@ -52,6 +52,10 @@ export class DropDatabaseDialog extends ObjectManagementDialogBase { await this.objectManagementService.dropDatabase(this.options.connectionUri, this.options.database, this._dropConnections, this._deleteBackupHistory, false); } diff --git a/extensions/mssql/src/objectManagement/ui/objectManagementDialogBase.ts b/extensions/mssql/src/objectManagement/ui/objectManagementDialogBase.ts index d60a37cdb3..d544874cfa 100644 --- a/extensions/mssql/src/objectManagement/ui/objectManagementDialogBase.ts +++ b/extensions/mssql/src/objectManagement/ui/objectManagementDialogBase.ts @@ -68,6 +68,10 @@ export abstract class ObjectManagementDialogBase { await super.initialize(); this.dialogObject.registerOperation({ @@ -75,7 +79,6 @@ export abstract class ObjectManagementDialogBase => { - const actionName = this.options.isNewObject ? TelemetryActions.CreateObject : TelemetryActions.UpdateObject; try { if (this.isDirty) { const startTime = Date.now(); @@ -89,7 +92,7 @@ export abstract class ObjectManagementDialogBase