From b8435a67df27e025b3f0240ade68fc249855ee0c Mon Sep 17 00:00:00 2001 From: Lucy Zhang Date: Mon, 11 Jul 2022 12:20:22 -0700 Subject: [PATCH] Add telemetry for Python on Jupyter server startup (#19970) * add telemetry for python on jupyter server startup * remove extra lines --- extensions/notebook/src/book/bookTreeView.ts | 18 +++++++++--------- extensions/notebook/src/extension.ts | 4 ++-- .../notebook/src/jupyter/serverInstance.ts | 2 ++ extensions/notebook/src/telemetry.ts | 19 +++++++++++++++---- 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/extensions/notebook/src/book/bookTreeView.ts b/extensions/notebook/src/book/bookTreeView.ts index b63f8c5b8d..ba5c306be6 100644 --- a/extensions/notebook/src/book/bookTreeView.ts +++ b/extensions/notebook/src/book/bookTreeView.ts @@ -22,7 +22,7 @@ import { BookTocManager, IBookTocManager, quickPickResults } from './bookTocMana import { CreateBookDialog } from '../dialog/createBookDialog'; import { AddTocEntryDialog } from '../dialog/addTocEntryDialog'; import { getContentPath } from './bookVersionHandler'; -import { TelemetryReporter, BookTelemetryView, NbTelemetryActions } from '../telemetry'; +import { sendNotebookActionEvent, NbTelemetryView, NbTelemetryAction } from '../telemetry'; interface BookSearchResults { notebookPaths: string[]; @@ -124,7 +124,7 @@ export class BookTreeViewProvider implements vscode.TreeDataProvider { const dialog = new CreateBookDialog(this.bookTocManager); - TelemetryReporter.sendActionEvent(BookTelemetryView, NbTelemetryActions.CreateBook); + sendNotebookActionEvent(NbTelemetryView.Book, NbTelemetryAction.CreateBook); return dialog.createDialog(); } @@ -211,7 +211,7 @@ export class BookTreeViewProvider implements vscode.TreeDataProvider { - TelemetryReporter.sendActionEvent(BookTelemetryView, NbTelemetryActions.MoveNotebook); + sendNotebookActionEvent(NbTelemetryView.Book, NbTelemetryAction.MoveNotebook); const selectionResults = await this.bookSectionQuickPick(); if (selectionResults) { let pickedSection = selectionResults.quickPickSection; @@ -250,7 +250,7 @@ export class BookTreeViewProvider implements vscode.TreeDataProvider book.bookPath === bookPath); @@ -317,7 +317,7 @@ export class BookTreeViewProvider implements vscode.TreeDataProvider { if (target.contextValue === BookTreeItemType.savedBook || target.contextValue === BookTreeItemType.section) { - TelemetryReporter.sendActionEvent(BookTelemetryView, NbTelemetryActions.DragAndDrop); + sendNotebookActionEvent(NbTelemetryView.Book, NbTelemetryAction.DragAndDrop); // gets the tree items that are dragged and dropped let treeItems = JSON.parse(await sources.items.get(this.supportedTypes[0])!.asString()) as BookTreeItem[]; let rootItems = this.getLocalRoots(treeItems); diff --git a/extensions/notebook/src/extension.ts b/extensions/notebook/src/extension.ts index 8552c56da7..8ce2a1875b 100644 --- a/extensions/notebook/src/extension.ts +++ b/extensions/notebook/src/extension.ts @@ -20,7 +20,7 @@ import { IconPathHelper } from './common/iconHelper'; import { ExtensionContextHelper } from './common/extensionContextHelper'; import { BookTreeItem } from './book/bookTreeItem'; import Logger from './common/logger'; -import { TelemetryReporter, BookTelemetryView, NbTelemetryActions } from './telemetry'; +import { sendNotebookActionEvent, NbTelemetryView, NbTelemetryAction } from './telemetry'; const localize = nls.loadMessageBundle(); @@ -81,7 +81,7 @@ export async function activate(extensionContext: vscode.ExtensionContext): Promi extensionContext.subscriptions.push(vscode.commands.registerCommand('notebook.command.openRemoteBook', async () => { let dialog = new RemoteBookDialog(remoteBookController); - TelemetryReporter.sendActionEvent(BookTelemetryView, NbTelemetryActions.AddRemoteBook); + sendNotebookActionEvent(NbTelemetryView.Book, NbTelemetryAction.AddRemoteBook); return dialog.createDialog(); })); diff --git a/extensions/notebook/src/jupyter/serverInstance.ts b/extensions/notebook/src/jupyter/serverInstance.ts index e6d037c63b..ebb1a61171 100644 --- a/extensions/notebook/src/jupyter/serverInstance.ts +++ b/extensions/notebook/src/jupyter/serverInstance.ts @@ -16,6 +16,7 @@ import { IServerInstance } from './common'; import { JupyterServerInstallation } from './jupyterServerInstallation'; import * as utils from '../common/utils'; import * as constants from '../common/constants'; +import { sendNotebookActionEvent, NbTelemetryView, NbTelemetryAction } from '../telemetry'; const NotebookConfigFilename = 'jupyter_notebook_config.py'; const CustomJsFilename = 'custom.js'; @@ -218,6 +219,7 @@ export class PerFolderServerInstance implements IServerInstance { // Execute the command await this.executeStartCommand(startCommand); + sendNotebookActionEvent(NbTelemetryView.Jupyter, NbTelemetryAction.JupyterServerStarted, { pythonVersion: this.options.install.installedPythonVersion, usingExistingPython: String(JupyterServerInstallation.getExistingPythonSetting()), usingConda: String(this.options.install.usingConda) }); } private executeStartCommand(startCommand: string): Promise { diff --git a/extensions/notebook/src/telemetry.ts b/extensions/notebook/src/telemetry.ts index b9be7afc6b..e03c88faf0 100644 --- a/extensions/notebook/src/telemetry.ts +++ b/extensions/notebook/src/telemetry.ts @@ -3,14 +3,17 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import AdsTelemetryReporter from '@microsoft/ads-extension-telemetry'; +import AdsTelemetryReporter, { TelemetryEventMeasures, TelemetryEventProperties } from '@microsoft/ads-extension-telemetry'; const packageJson = require('../package.json'); export const TelemetryReporter = new AdsTelemetryReporter(packageJson.name, packageJson.version, packageJson.aiKey); -export const BookTelemetryView = 'Book'; +export enum NbTelemetryView { + Book = 'Book', + Jupyter = 'Jupyter' +} -export enum NbTelemetryActions { +export enum NbTelemetryAction { OpenNotebook = 'NotebookOpened', OpenMarkdown = 'MarkdownOpened', OpenBook = 'BookOpened', @@ -22,6 +25,14 @@ export enum NbTelemetryActions { OpenNotebookFromBook = 'NotebookOpenedFromBook', MoveNotebook = 'MoveNotebook', DragAndDrop = 'DragAndDrop', - AddRemoteBook = 'AddRemoteBook' + AddRemoteBook = 'AddRemoteBook', + JupyterServerStarted = 'JupyterServerStarted' +} + +export function sendNotebookActionEvent(telemetryView: NbTelemetryView, telemetryAction: NbTelemetryAction, additionalProps?: TelemetryEventProperties, additionalMeasurements?: TelemetryEventMeasures): void { + TelemetryReporter.createActionEvent(telemetryView, telemetryAction) + .withAdditionalProperties(additionalProps) + .withAdditionalMeasurements(additionalMeasurements) + .send(); }