Skip to content

Commit 3e2357f

Browse files
IanMatthewHuffIan Huff
andauthored
raw session telemetry (#11355)
Co-authored-by: Ian Huff <[email protected]>
1 parent 55841b4 commit 3e2357f

File tree

5 files changed

+37
-6
lines changed

5 files changed

+37
-6
lines changed

src/client/datascience/constants.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,15 @@ export enum Telemetry {
303303
IPyWidgetPromptToUseCDNSelection = 'DS_INTERNAL.IPYWIDGET_PROMPT_TO_USE_CDN_SELECTION',
304304
IPyWidgetOverhead = 'DS_INTERNAL.IPYWIDGET_OVERHEAD',
305305
IPyWidgetRenderFailure = 'DS_INTERNAL.IPYWIDGET_RENDER_FAILURE',
306-
IPyWidgetUnhandledMessage = 'DS_INTERNAL.IPYWIDGET_UNHANDLED_MESSAGE'
306+
IPyWidgetUnhandledMessage = 'DS_INTERNAL.IPYWIDGET_UNHANDLED_MESSAGE',
307+
RawKernelCreatingNotebook = 'DS_INTERNAL.RAWKERNEL_CREATING_NOTEBOOK',
308+
JupyterCreatingNotebook = 'DS_INTERNAL.JUPYTER_CREATING_NOTEBOOK',
309+
RawKernelSessionConnect = 'DS_INTERNAL.RAWKERNEL_SESSION_CONNECT',
310+
RawKernelStartRawSession = 'DS_INTERNAL.RAWKERNEL_START_RAW_SESSION',
311+
RawKernelSessionStartSuccess = 'DS_INTERNAL.RAWKERNEL_SESSION_START_SUCCESS',
312+
RawKernelSessionStartUserCancel = 'DS_INTERNAL.RAWKERNEL_SESSION_START_USER_CANCEL',
313+
RawKernelSessionStartTimeout = 'DS_INTERNAL.RAWKERNEL_SESSION_START_TIMEOUT',
314+
RawKernelSessionStartException = 'DS_INTERNAL.RAWKERNEL_SESSION_START_EXCEPTION'
307315
}
308316

309317
export enum NativeKeyboardCommandTelemetry {

src/client/datascience/jupyter/jupyterServer.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import { createDeferred, Deferred } from '../../common/utils/async';
1919
import * as localize from '../../common/utils/localize';
2020
import { noop } from '../../common/utils/misc';
2121
import { IServiceContainer } from '../../ioc/types';
22+
import { captureTelemetry } from '../../telemetry';
23+
import { Telemetry } from '../constants';
2224
import {
2325
IJupyterConnection,
2426
IJupyterSession,
@@ -94,6 +96,7 @@ export class JupyterServerBase implements INotebookServer {
9496
this.savedSession = session;
9597
}
9698

99+
@captureTelemetry(Telemetry.JupyterCreatingNotebook, undefined, true)
97100
public createNotebook(
98101
resource: Resource,
99102
identity: Uri,

src/client/datascience/raw-kernel/rawJupyterSession.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ import { Resource } from '../../common/types';
88
import { waitForPromise } from '../../common/utils/async';
99
import * as localize from '../../common/utils/localize';
1010
import { IServiceContainer } from '../../ioc/types';
11+
import { captureTelemetry, sendTelemetryEvent } from '../../telemetry';
1112
import { BaseJupyterSession, ISession } from '../baseJupyterSession';
13+
import { Telemetry } from '../constants';
1214
import { KernelSelector } from '../jupyter/kernels/kernelSelector';
1315
import { LiveKernelModel } from '../jupyter/kernels/types';
1416
import { IKernelConnection, IKernelLauncher } from '../kernel-launcher/types';
@@ -40,6 +42,7 @@ export class RawJupyterSession extends BaseJupyterSession {
4042
// RawKernels are good to go right away
4143
}
4244

45+
@captureTelemetry(Telemetry.RawKernelSessionConnect, undefined, true)
4346
public async connect(
4447
resource: Resource,
4548
timeout: number,
@@ -65,17 +68,21 @@ export class RawJupyterSession extends BaseJupyterSession {
6568

6669
// Only connect our session if we didn't cancel or timeout
6770
if (newSession instanceof CancellationError) {
71+
sendTelemetryEvent(Telemetry.RawKernelSessionStartUserCancel);
6872
traceInfo('Starting of raw session cancelled by user');
6973
throw newSession;
7074
} else if (newSession === null) {
75+
sendTelemetryEvent(Telemetry.RawKernelSessionStartTimeout);
7176
traceError('Raw session failed to start in given timeout');
7277
throw new Error(localize.DataScience.sessionDisposed());
7378
} else {
79+
sendTelemetryEvent(Telemetry.RawKernelSessionStartSuccess);
7480
traceInfo('Raw session started and connected');
7581
this.session = newSession;
7682
this.kernelSpec = newSession.process?.kernelSpec;
7783
}
7884
} catch (error) {
85+
sendTelemetryEvent(Telemetry.RawKernelSessionStartException);
7986
traceError(`Failed to connect raw kernel session: ${error}`);
8087
this.connected = false;
8188
throw error;
@@ -121,14 +128,10 @@ export class RawJupyterSession extends BaseJupyterSession {
121128
});
122129
}
123130

131+
@captureTelemetry(Telemetry.RawKernelStartRawSession, undefined, true)
124132
private async startRawSession(resource: Resource, kernelName?: string | IJupyterKernelSpec): Promise<ISession> {
125133
const process = await this.kernelLauncher.launch(resource, kernelName);
126134

127-
if (!process.connection) {
128-
traceError('KernelProcess launched without connection info');
129-
throw new Error(localize.DataScience.sessionDisposed());
130-
}
131-
132135
// Wait for the process to actually be ready to connect to
133136
await process.ready;
134137

src/client/datascience/raw-kernel/rawNotebookProvider.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import { traceInfo } from '../../common/logger';
1111
import { IAsyncDisposableRegistry, Resource } from '../../common/types';
1212
import * as localize from '../../common/utils/localize';
1313
import { noop } from '../../common/utils/misc';
14+
import { captureTelemetry } from '../../telemetry';
15+
import { Telemetry } from '../constants';
1416
import { INotebook, IRawConnection, IRawNotebookProvider } from '../types';
1517

1618
class RawConnection implements IRawConnection {
@@ -45,6 +47,7 @@ export class RawNotebookProviderBase implements IRawNotebookProvider {
4547
return Promise.resolve(this.rawConnection);
4648
}
4749

50+
@captureTelemetry(Telemetry.RawKernelCreatingNotebook, undefined, true)
4851
public async createNotebook(
4952
identity: Uri,
5053
resource: Resource,

src/client/telemetry/index.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2043,4 +2043,18 @@ export interface IEventNamePropertyMapping {
20432043
[Telemetry.IPyWidgetUnhandledMessage]: {
20442044
msg_type: string;
20452045
};
2046+
2047+
// Telemetry send when we create a notebook for a raw kernel or jupyter
2048+
[Telemetry.RawKernelCreatingNotebook]: never | undefined;
2049+
[Telemetry.JupyterCreatingNotebook]: never | undefined;
2050+
2051+
// Raw kernel timing events
2052+
[Telemetry.RawKernelSessionConnect]: never | undefined;
2053+
[Telemetry.RawKernelStartRawSession]: never | undefined;
2054+
2055+
// Raw kernel single events
2056+
[Telemetry.RawKernelSessionStartSuccess]: never | undefined;
2057+
[Telemetry.RawKernelSessionStartException]: never | undefined;
2058+
[Telemetry.RawKernelSessionStartTimeout]: never | undefined;
2059+
[Telemetry.RawKernelSessionStartUserCancel]: never | undefined;
20462060
}

0 commit comments

Comments
 (0)