diff --git a/src/client/datascience/constants.ts b/src/client/datascience/constants.ts index c8638639dbb2..541897f1f4a6 100644 --- a/src/client/datascience/constants.ts +++ b/src/client/datascience/constants.ts @@ -202,7 +202,10 @@ export enum Telemetry { NotebookRunCount = 'DATASCIENCE.NATIVE.NOTEBOOK_RUN_COUNT', NotebookOpenCount = 'DATASCIENCE.NATIVE.NOTEBOOK_OPEN_COUNT', NotebookOpenTime = 'DS_INTERNAL.NATIVE.NOTEBOOK_OPEN_TIME', - SessionIdleTimeout = 'DATASCIENCE.JUPYTER_IDLE_TIMEOUT' + SessionIdleTimeout = 'DATASCIENCE.JUPYTER_IDLE_TIMEOUT', + JupyterNotInstalledErrorShown = 'DATASCIENCE.JUPYTER_NOT_INSTALLED_ERROR_SHOWN', + UserInstalledJupyter = 'DATASCIENCE.USER_INSTALLED_JUPYTER', + UserDidNotInstallJupyter = 'DATASCIENCE.USER_DID_NOT_INSTALL_JUPYTER' } export enum NativeKeyboardCommandTelemetry { diff --git a/src/client/datascience/errorHandler/errorHandler.ts b/src/client/datascience/errorHandler/errorHandler.ts index 049d981ea6f4..a4a4b1730934 100644 --- a/src/client/datascience/errorHandler/errorHandler.ts +++ b/src/client/datascience/errorHandler/errorHandler.ts @@ -7,6 +7,8 @@ import { IInstallationChannelManager } from '../../common/installer/types'; import { ILogger, Product } from '../../common/types'; import * as localize from '../../common/utils/localize'; import { noop } from '../../common/utils/misc'; +import { sendTelemetryEvent } from '../../telemetry'; +import { Telemetry } from '../constants'; import { JupyterInstallError } from '../jupyter/jupyterInstallError'; import { JupyterSelfCertsError } from '../jupyter/jupyterSelfCertsError'; import { IDataScienceErrorHandler } from '../types'; @@ -20,6 +22,7 @@ export class DataScienceErrorHandler implements IDataScienceErrorHandler { public async handleError(err: Error): Promise { if (err instanceof JupyterInstallError) { + sendTelemetryEvent(Telemetry.JupyterNotInstalledErrorShown); const response = await this.applicationShell.showInformationMessage( err.message, localize.DataScience.jupyterInstall(), @@ -33,6 +36,7 @@ export class DataScienceErrorHandler implements IDataScienceErrorHandler { const product = ProductNames.get(Product.jupyter); if (installer && product) { + sendTelemetryEvent(Telemetry.UserInstalledJupyter); installer.installModule(product) .catch(e => this.applicationShell.showErrorMessage(e.message, localize.DataScience.pythonInteractiveHelpLink())); } else if (installers[0] && product) { @@ -40,6 +44,8 @@ export class DataScienceErrorHandler implements IDataScienceErrorHandler { .catch(e => this.applicationShell.showErrorMessage(e.message, localize.DataScience.pythonInteractiveHelpLink())); } } + } else if (response === localize.DataScience.notebookCheckForImportNo()) { + sendTelemetryEvent(Telemetry.UserDidNotInstallJupyter); } else if (response === err.actionTitle) { // This is a special error that shows a link to open for more help this.applicationShell.openUrl(err.action); diff --git a/src/client/telemetry/index.ts b/src/client/telemetry/index.ts index 702740ff9a1c..91e0a1e98e67 100644 --- a/src/client/telemetry/index.ts +++ b/src/client/telemetry/index.ts @@ -1425,13 +1425,16 @@ export interface IEventNamePropertyMapping { [Telemetry.RunFileInteractive]: never | undefined; [Telemetry.RunFromLine]: never | undefined; [Telemetry.ScrolledToCell]: never | undefined; - [Telemetry.CellCount]: { count: number} ; + [Telemetry.CellCount]: { count: number }; [Telemetry.Save]: never | undefined; - [Telemetry.AutoSaveEnabled]: {enabled: boolean}; + [Telemetry.AutoSaveEnabled]: { enabled: boolean }; [Telemetry.SelfCertsMessageClose]: never | undefined; [Telemetry.SelfCertsMessageEnabled]: never | undefined; [Telemetry.SelectJupyterURI]: never | undefined; [Telemetry.SessionIdleTimeout]: never | undefined; + [Telemetry.JupyterNotInstalledErrorShown]: never | undefined; + [Telemetry.UserInstalledJupyter]: never | undefined; + [Telemetry.UserDidNotInstallJupyter]: never | undefined; [Telemetry.SetJupyterURIToLocal]: never | undefined; [Telemetry.SetJupyterURIToUserSpecified]: never | undefined; [Telemetry.ShiftEnterBannerShown]: never | undefined;