From 940206c355b3b07d814b2e93a2732526594ec30c Mon Sep 17 00:00:00 2001 From: Vandy Liu Date: Wed, 19 Feb 2020 11:22:04 -0800 Subject: [PATCH 1/4] Added telemtry to typescript side of extension --- src/constants.ts | 73 +++++++++++-------- src/extension.ts | 185 ++++++++++++++++++++++++++++++++++++----------- 2 files changed, 185 insertions(+), 73 deletions(-) diff --git a/src/constants.ts b/src/constants.ts index 96f8c2c3f..cefcb61d2 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -283,48 +283,63 @@ export enum TelemetryEventName { FAILED_TO_OPEN_SIMULATOR = "SIMULATOR.FAILED_TO_OPEN", // Extension commands - COMMAND_DEPLOY_DEVICE = "COMMAND.DEPLOY.DEVICE", - COMMAND_NEW_FILE_CPX = "COMMAND.NEW.FILE.CPX", - COMMAND_NEW_FILE_MICROBIT = "COMMAND.NEW.FILE.MICROBIT", - COMMAND_OPEN_SIMULATOR = "COMMAND.OPEN.SIMULATOR", COMMAND_RUN_SIMULATOR_BUTTON = "COMMAND.RUN.SIMULATOR_BUTTON", COMMAND_RUN_PALETTE = "COMMAND.RUN.PALETTE", - COMMAND_RUN_EDITOR_ICON = "COMMAND.RUN.EDITOR_ICON", - COMMAND_SERIAL_MONITOR_CHOOSE_PORT = "COMMAND.SERIAL_MONITOR.CHOOSE_PORT", - COMMAND_SERIAL_MONITOR_OPEN = "COMMAND.SERIAL_MONITOR.OPEN", - COMMAND_SERIAL_MONITOR_BAUD_RATE = "COMMAND.SERIAL_MONITOR.BAUD_RATE", - COMMAND_SERIAL_MONITOR_CLOSE = "COMMAND.SERIAL_MONITOR.CLOSE", + COMMAND_INSTALL_EXTENSION_DEPENDENCIES = "COMMAND.INSTALL.EXTENSION.DEPENDENCIES", + + CPX_COMMAND_DEPLOY_DEVICE = "CPX.COMMAND.DEPLOY.DEVICE", + CPX_COMMAND_NEW_FILE = "CPX.COMMAND.NEW.FILE.CPX", + CPX_COMMAND_OPEN_SIMULATOR = "CPX.COMMAND.OPEN.SIMULATOR", + CPX_COMMAND_SERIAL_MONITOR_CHOOSE_PORT = "CPX.COMMAND.SERIAL_MONITOR.CHOOSE_PORT", + CPX_COMMAND_SERIAL_MONITOR_OPEN = "CPX.COMMAND.SERIAL_MONITOR.OPEN", + CPX_COMMAND_SERIAL_MONITOR_BAUD_RATE = "CPX.COMMAND.SERIAL_MONITOR.BAUD_RATE", + CPX_COMMAND_SERIAL_MONITOR_CLOSE = "CPX.COMMAND.SERIAL_MONITOR.CLOSE", + + MICROBIT_COMMAND_NEW_FILE = "MICROBIT.COMMAND.NEW.FILE", + MICROBIT_COMMAND_OPEN_SIMULATOR = "MICROBIT.COMMAND.OPEN.SIMULATOR", // Simulator interaction - SIMULATOR_BUTTON_A = "SIMULATOR.BUTTON.A", - SIMULATOR_BUTTON_B = "SIMULATOR.BUTTON.B", - SIMULATOR_BUTTON_AB = "SIMULATOR.BUTTON.AB", - SIMULATOR_SWITCH = "SIMULATOR.SWITCH", + CPX_SIMULATOR_BUTTON_A = "CPX.SIMULATOR.BUTTON.A", + CPX_SIMULATOR_BUTTON_B = "CPX.SIMULATOR.BUTTON.B", + CPX_SIMULATOR_BUTTON_AB = "CPX.SIMULATOR.BUTTON.AB", + CPX_SIMULATOR_SWITCH = "CPX.SIMULATOR.SWITCH", + + MICROBIT_SIMULATOR_BUTTON_A = "MICROBIT.SIMULATOR.BUTTON.A", + MICROBIT_SIMULATOR_BUTTON_B = "MICROBIT.SIMULATOR.BUTTON.B", + MICROBIT_SIMULATOR_BUTTON_AB = "MICROBIT.SIMULATOR.BUTTON.AB", // Sensors - SIMULATOR_TEMPERATURE_SENSOR = "SIMULATOR.TEMPERATURE", - SIMULATOR_LIGHT_SENSOR = " SIMULATOR.LIGHT", - SIMULATOR_MOTION_SENSOR = "SIMULATOR.MOTION", - SIMULATOR_SHAKE = "SIMULATOR.SHAKE", - SIMULATOR_CAPACITIVE_TOUCH = "SIMULATOR.CAPACITIVE.TOUCH", + CPX_SIMULATOR_TEMPERATURE_SENSOR = "CPX.SIMULATOR.TEMPERATURE", + CPX_SIMULATOR_LIGHT_SENSOR = "CPX.SIMULATOR.LIGHT", + CPX_SIMULATOR_MOTION_SENSOR = "CPX.SIMULATOR.MOTION", + CPX_SIMULATOR_SHAKE = "CPX.SIMULATOR.SHAKE", + CPX_SIMULATOR_CAPACITIVE_TOUCH = "CPX.SIMULATOR.CAPACITIVE.TOUCH", + + MICROBIT_SIMULATOR_TEMPERATURE_SENSOR = "MICROBIT.SIMULATOR.TEMPERATURE", + MICROBIT_SIMULATOR_LIGHT_SENSOR = "MICROBIT.SIMULATOR.LIGHT", + MICROBIT_SIMULATOR_MOTION_SENSOR = "MICROBIT.SIMULATOR.MOTION", // Pop-up dialog - CLICK_DIALOG_DONT_SHOW = "CLICK.DIALOG.DONT.SHOW", - CLICK_DIALOG_EXAMPLE_CODE = "CLICK.DIALOG.EXAMPLE.CODE", - CLICK_DIALOG_HELP_DEPLOY_TO_DEVICE = "CLICK.DIALOG.HELP.DEPLOY.TO.DEVICE", - CLICK_DIALOG_TUTORIALS = "CLICK.DIALOG.TUTORIALS", + CPX_CLICK_DIALOG_DONT_SHOW = "CPX.CLICK.DIALOG.DONT.SHOW", + CPX_CLICK_DIALOG_EXAMPLE_CODE = "CPX.CLICK.DIALOG.EXAMPLE.CODE", + CPX_CLICK_DIALOG_HELP_DEPLOY_TO_DEVICE = "CPX.CLICK.DIALOG.HELP.DEPLOY.TO.DEVICE", + CPX_CLICK_DIALOG_TUTORIALS = "CPX.CLICK.DIALOG.TUTORIALS", - ERROR_PYTHON_DEVICE_PROCESS = "ERROR.PYTHON.DEVICE.PROCESS", ERROR_PYTHON_PROCESS = "ERROR.PYTHON.PROCESS", - ERROR_COMMAND_NEW_FILE = "ERROR.COMMAND.NEW.FILE", - ERROR_DEPLOY_WITHOUT_DEVICE = "ERROR.DEPLOY.WITHOUT.DEVICE", + CPX_ERROR_COMMAND_NEW_FILE = "CPX.ERROR.COMMAND.NEW.FILE", + CPX_ERROR_DEPLOY_WITHOUT_DEVICE = "CPX.ERROR.DEPLOY.WITHOUT.DEVICE", + CPX_ERROR_PYTHON_DEVICE_PROCESS = "CPX.ERROR.PYTHON.DEVICE.PROCESS", + CPX_SUCCESS_COMMAND_DEPLOY_DEVICE = "CPX.SUCCESS.COMMAND.DEPLOY.DEVICE", - SUCCESS_COMMAND_DEPLOY_DEVICE = "SUCCESS.COMMAND.DEPLOY.DEVICE", + MICROBIT_ERROR_COMMAND_NEW_FILE = "MICROBIT.ERROR.COMMAND.NEW.FILE", // Performance - PERFORMANCE_DEPLOY_DEVICE = "PERFORMANCE.DEPLOY.DEVICE", - PERFORMANCE_NEW_FILE = "PERFORMANCE.NEW.FILE", - PERFORMANCE_OPEN_SIMULATOR = "PERFORMANCE.OPEN.SIMULATOR", + CPX_PERFORMANCE_DEPLOY_DEVICE = "CPX.PERFORMANCE.DEPLOY.DEVICE", + CPX_PERFORMANCE_NEW_FILE = "CPX.PERFORMANCE.NEW.FILE", + CPX_PERFORMANCE_OPEN_SIMULATOR = "CPX.PERFORMANCE.OPEN.SIMULATOR", + + MICROBIT_PERFORMANCE_NEW_FILE = "MICROBIT.PERFORMANCE.NEW.FILE", + MICROBIT_PERFORMANCE_OPEN_SIMULATOR = "MICROBIT.PERFORMANCE.OPEN.SIMULATOR", } export const DEFAULT_DEVICE = CONSTANTS.DEVICE_NAME.CPX; diff --git a/src/extension.ts b/src/extension.ts index f2f935e83..0f84b102f 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -172,7 +172,20 @@ export async function activate(context: vscode.ExtensionContext) { switch (message.command) { case WEBVIEW_MESSAGES.BUTTON_PRESS: // Send input to the Python process - handleButtonPressTelemetry(message.text); + switch (currentActiveDevice) { + case CONSTANTS.DEVICE_NAME.CPX: + handleCPXButtonPressTelemetry( + message.text + ); + break; + case CONSTANTS.DEVICE_NAME.MICROBIT: + handleMicrobitButtonPressTelemetry( + message.text + ); + break; + default: + break; + } console.log(`About to write ${messageJson} \n`); if ( inDebugMode && @@ -219,7 +232,15 @@ export async function activate(context: vscode.ExtensionContext) { break; case WEBVIEW_MESSAGES.SENSOR_CHANGED: - checkForTelemetry(message.text); + switch (currentActiveDevice) { + case CONSTANTS.DEVICE_NAME.CPX: + checkForCPXTelemetry(message.text); + break; + case CONSTANTS.DEVICE_NAME.MICROBIT: + break; + default: + break; + } console.log(`Sensor changed ${messageJson} \n`); if ( inDebugMode && @@ -239,7 +260,18 @@ export async function activate(context: vscode.ExtensionContext) { runSimulatorCommand(); break; case WEBVIEW_MESSAGES.SLIDER_TELEMETRY: - handleSensorTelemetry(message.text); + switch (currentActiveDevice) { + case CONSTANTS.DEVICE_NAME.CPX: + handleCPXSensorTelemetry(message.text); + break; + case CONSTANTS.DEVICE_NAME.MICROBIT: + handleMicrobitSensorTelemetry( + message.text + ); + break; + default: + break; + } break; case WEBVIEW_MESSAGES.SWITCH_DEVICE: switchDevice(message.text.active_device); @@ -299,11 +331,11 @@ export async function activate(context: vscode.ExtensionContext) { "deviceSimulatorExpress.cpx.openSimulator", () => { telemetryAI.trackFeatureUsage( - TelemetryEventName.COMMAND_OPEN_SIMULATOR + TelemetryEventName.CPX_COMMAND_OPEN_SIMULATOR ); telemetryAI.runWithLatencyMeasure( openCPXWebview, - TelemetryEventName.PERFORMANCE_OPEN_SIMULATOR + TelemetryEventName.CPX_PERFORMANCE_OPEN_SIMULATOR ); } ); @@ -312,11 +344,11 @@ export async function activate(context: vscode.ExtensionContext) { "deviceSimulatorExpress.microbit.openSimulator", () => { telemetryAI.trackFeatureUsage( - TelemetryEventName.COMMAND_OPEN_SIMULATOR + TelemetryEventName.MICROBIT_COMMAND_OPEN_SIMULATOR ); telemetryAI.runWithLatencyMeasure( openMicrobitWebview, - TelemetryEventName.PERFORMANCE_OPEN_SIMULATOR + TelemetryEventName.MICROBIT_PERFORMANCE_OPEN_SIMULATOR ); } ); @@ -354,18 +386,18 @@ export async function activate(context: vscode.ExtensionContext) { .getConfiguration() .update(CONFIG.SHOW_NEW_FILE_POPUP, false); telemetryAI.trackFeatureUsage( - TelemetryEventName.CLICK_DIALOG_DONT_SHOW + TelemetryEventName.CPX_CLICK_DIALOG_DONT_SHOW ); } else if (selection === DialogResponses.EXAMPLE_CODE) { open(CONSTANTS.LINKS.EXAMPLE_CODE); telemetryAI.trackFeatureUsage( - TelemetryEventName.CLICK_DIALOG_EXAMPLE_CODE + TelemetryEventName.CPX_CLICK_DIALOG_EXAMPLE_CODE ); } else if (selection === DialogResponses.TUTORIALS) { const okAction = () => { open(CONSTANTS.LINKS.TUTORIALS); telemetryAI.trackFeatureUsage( - TelemetryEventName.CLICK_DIALOG_TUTORIALS + TelemetryEventName.CPX_CLICK_DIALOG_TUTORIALS ); }; utils.showPrivacyModal(okAction); @@ -383,9 +415,20 @@ export async function activate(context: vscode.ExtensionContext) { }), // tslint:disable-next-line: no-unused-expression (error: any) => { - telemetryAI.trackFeatureUsage( - TelemetryEventName.ERROR_COMMAND_NEW_FILE - ); + switch (currentActiveDevice) { + case CONSTANTS.DEVICE_NAME.CPX: + telemetryAI.trackFeatureUsage( + TelemetryEventName.CPX_ERROR_COMMAND_NEW_FILE + ); + break; + case CONSTANTS.DEVICE_NAME.MICROBIT: + telemetryAI.trackFeatureUsage( + TelemetryEventName.MICROBIT_ERROR_COMMAND_NEW_FILE + ); + break; + default: + break; + } console.error(`Failed to open a new text document: ${error}`); }; }; @@ -394,11 +437,11 @@ export async function activate(context: vscode.ExtensionContext) { "deviceSimulatorExpress.cpx.newFile", () => { telemetryAI.trackFeatureUsage( - TelemetryEventName.COMMAND_NEW_FILE_CPX + TelemetryEventName.CPX_COMMAND_NEW_FILE ); telemetryAI.runWithLatencyMeasure( openCPXTemplateFile, - TelemetryEventName.PERFORMANCE_NEW_FILE + TelemetryEventName.CPX_PERFORMANCE_NEW_FILE ); } ); @@ -407,11 +450,11 @@ export async function activate(context: vscode.ExtensionContext) { "deviceSimulatorExpress.microbit.newFile", () => { telemetryAI.trackFeatureUsage( - TelemetryEventName.COMMAND_NEW_FILE_MICROBIT + TelemetryEventName.MICROBIT_COMMAND_NEW_FILE ); telemetryAI.runWithLatencyMeasure( openMicrobitTemplateFile, - TelemetryEventName.PERFORMANCE_NEW_FILE + TelemetryEventName.MICROBIT_PERFORMANCE_NEW_FILE ); } ); @@ -539,7 +582,7 @@ export async function activate(context: vscode.ExtensionContext) { if (selection === DialogResponses.DONT_SHOW) { shouldShowInvalidFileNamePopup = false; telemetryAI.trackFeatureUsage( - TelemetryEventName.CLICK_DIALOG_DONT_SHOW + TelemetryEventName.CPX_CLICK_DIALOG_DONT_SHOW ); } }); @@ -732,7 +775,7 @@ export async function activate(context: vscode.ExtensionContext) { switch (messageToWebview.type) { case "complete": telemetryAI.trackFeatureUsage( - TelemetryEventName.SUCCESS_COMMAND_DEPLOY_DEVICE + TelemetryEventName.CPX_SUCCESS_COMMAND_DEPLOY_DEVICE ); utils.logToOutputChannel( outChannel, @@ -742,7 +785,7 @@ export async function activate(context: vscode.ExtensionContext) { case "no-device": telemetryAI.trackFeatureUsage( - TelemetryEventName.ERROR_DEPLOY_WITHOUT_DEVICE + TelemetryEventName.CPX_ERROR_DEPLOY_WITHOUT_DEVICE ); vscode.window .showErrorMessage( @@ -761,7 +804,7 @@ export async function activate(context: vscode.ExtensionContext) { const okAction = () => { open(CONSTANTS.LINKS.HELP); telemetryAI.trackFeatureUsage( - TelemetryEventName.CLICK_DIALOG_HELP_DEPLOY_TO_DEVICE + TelemetryEventName.CPX_CLICK_DIALOG_HELP_DEPLOY_TO_DEVICE ); }; utils.showPrivacyModal(okAction); @@ -786,7 +829,7 @@ export async function activate(context: vscode.ExtensionContext) { // Std error output deviceProcess.stderr.on("data", data => { telemetryAI.trackFeatureUsage( - TelemetryEventName.ERROR_PYTHON_DEVICE_PROCESS, + TelemetryEventName.CPX_ERROR_PYTHON_DEVICE_PROCESS, { error: `${data}` } ); console.error( @@ -810,11 +853,11 @@ export async function activate(context: vscode.ExtensionContext) { "deviceSimulatorExpress.cpx.deployToDevice", () => { telemetryAI.trackFeatureUsage( - TelemetryEventName.COMMAND_DEPLOY_DEVICE + TelemetryEventName.CPX_COMMAND_DEPLOY_DEVICE ); telemetryAI.runWithLatencyMeasure( cpxDeployCodeToDevice, - TelemetryEventName.PERFORMANCE_DEPLOY_DEVICE + TelemetryEventName.CPX_PERFORMANCE_DEPLOY_DEVICE ); } ); @@ -831,7 +874,7 @@ export async function activate(context: vscode.ExtensionContext) { if (serialMonitor) { telemetryAI.runWithLatencyMeasure(() => { serialMonitor.selectSerialPort(null, null); - }, TelemetryEventName.COMMAND_SERIAL_MONITOR_CHOOSE_PORT); + }, TelemetryEventName.CPX_COMMAND_SERIAL_MONITOR_CHOOSE_PORT); } else { vscode.window.showErrorMessage( CONSTANTS.ERROR.NO_FOLDER_OPENED @@ -847,7 +890,7 @@ export async function activate(context: vscode.ExtensionContext) { if (serialMonitor) { telemetryAI.runWithLatencyMeasure( serialMonitor.openSerialMonitor.bind(serialMonitor), - TelemetryEventName.COMMAND_SERIAL_MONITOR_OPEN + TelemetryEventName.CPX_COMMAND_SERIAL_MONITOR_OPEN ); } else { vscode.window.showErrorMessage( @@ -864,7 +907,7 @@ export async function activate(context: vscode.ExtensionContext) { if (serialMonitor) { telemetryAI.runWithLatencyMeasure( serialMonitor.changeBaudRate.bind(serialMonitor), - TelemetryEventName.COMMAND_SERIAL_MONITOR_BAUD_RATE + TelemetryEventName.CPX_COMMAND_SERIAL_MONITOR_BAUD_RATE ); } else { vscode.window.showErrorMessage( @@ -881,7 +924,7 @@ export async function activate(context: vscode.ExtensionContext) { if (serialMonitor) { telemetryAI.runWithLatencyMeasure(() => { serialMonitor.closeSerialMonitor(port, showWarning); - }, TelemetryEventName.COMMAND_SERIAL_MONITOR_CLOSE); + }, TelemetryEventName.CPX_COMMAND_SERIAL_MONITOR_CLOSE); } else { vscode.window.showErrorMessage( CONSTANTS.ERROR.NO_FOLDER_OPENED @@ -1028,61 +1071,115 @@ const updateCurrentFileIfPython = async ( } }; -const handleButtonPressTelemetry = (buttonState: any) => { +const handleCPXButtonPressTelemetry = (buttonState: any) => { if (buttonState.button_a && buttonState.button_b) { - telemetryAI.trackFeatureUsage(TelemetryEventName.SIMULATOR_BUTTON_AB); + telemetryAI.trackFeatureUsage( + TelemetryEventName.CPX_SIMULATOR_BUTTON_AB + ); } else if (buttonState.button_a) { - telemetryAI.trackFeatureUsage(TelemetryEventName.SIMULATOR_BUTTON_A); + telemetryAI.trackFeatureUsage( + TelemetryEventName.CPX_SIMULATOR_BUTTON_A + ); } else if (buttonState.button_b) { - telemetryAI.trackFeatureUsage(TelemetryEventName.SIMULATOR_BUTTON_B); + telemetryAI.trackFeatureUsage( + TelemetryEventName.CPX_SIMULATOR_BUTTON_B + ); } else if (buttonState.switch) { - telemetryAI.trackFeatureUsage(TelemetryEventName.SIMULATOR_SWITCH); + telemetryAI.trackFeatureUsage(TelemetryEventName.CPX_SIMULATOR_SWITCH); } }; -const handleSensorTelemetry = (sensor: string) => { +const handleCPXSensorTelemetry = (sensor: string) => { switch (sensor) { case "temperature": telemetryAI.trackFeatureUsage( - TelemetryEventName.SIMULATOR_TEMPERATURE_SENSOR + TelemetryEventName.CPX_SIMULATOR_TEMPERATURE_SENSOR ); break; case "light": telemetryAI.trackFeatureUsage( - TelemetryEventName.SIMULATOR_LIGHT_SENSOR + TelemetryEventName.CPX_SIMULATOR_LIGHT_SENSOR ); break; case "motion_x": telemetryAI.trackFeatureUsage( - TelemetryEventName.SIMULATOR_MOTION_SENSOR + TelemetryEventName.CPX_SIMULATOR_MOTION_SENSOR ); break; case "motion_y": telemetryAI.trackFeatureUsage( - TelemetryEventName.SIMULATOR_MOTION_SENSOR + TelemetryEventName.CPX_SIMULATOR_MOTION_SENSOR ); break; case "motion_z": telemetryAI.trackFeatureUsage( - TelemetryEventName.SIMULATOR_MOTION_SENSOR + TelemetryEventName.CPX_SIMULATOR_MOTION_SENSOR ); break; case "shake": - telemetryAI.trackFeatureUsage(TelemetryEventName.SIMULATOR_SHAKE); + telemetryAI.trackFeatureUsage( + TelemetryEventName.CPX_SIMULATOR_SHAKE + ); break; case "touch": telemetryAI.trackFeatureUsage( - TelemetryEventName.SIMULATOR_CAPACITIVE_TOUCH + TelemetryEventName.CPX_SIMULATOR_CAPACITIVE_TOUCH ); break; } }; -const checkForTelemetry = (sensorState: any) => { +const checkForCPXTelemetry = (sensorState: any) => { if (sensorState.shake) { - handleSensorTelemetry("shake"); + handleCPXSensorTelemetry("shake"); } else if (sensorState.touch) { - handleSensorTelemetry("touch"); + handleCPXSensorTelemetry("touch"); + } +}; + +const handleMicrobitButtonPressTelemetry = (buttonState: any) => { + if (buttonState.button_a && buttonState.button_b) { + telemetryAI.trackFeatureUsage( + TelemetryEventName.MICROBIT_SIMULATOR_BUTTON_AB + ); + } else if (buttonState.button_a) { + telemetryAI.trackFeatureUsage( + TelemetryEventName.MICROBIT_SIMULATOR_BUTTON_A + ); + } else if (buttonState.button_b) { + telemetryAI.trackFeatureUsage( + TelemetryEventName.MICROBIT_SIMULATOR_BUTTON_B + ); + } +}; + +const handleMicrobitSensorTelemetry = (sensor: string) => { + switch (sensor) { + case "temperature": + telemetryAI.trackFeatureUsage( + TelemetryEventName.MICROBIT_SIMULATOR_TEMPERATURE_SENSOR + ); + break; + case "light": + telemetryAI.trackFeatureUsage( + TelemetryEventName.MICROBIT_SIMULATOR_LIGHT_SENSOR + ); + break; + case "motion_x": + telemetryAI.trackFeatureUsage( + TelemetryEventName.MICROBIT_SIMULATOR_MOTION_SENSOR + ); + break; + case "motion_y": + telemetryAI.trackFeatureUsage( + TelemetryEventName.MICROBIT_SIMULATOR_MOTION_SENSOR + ); + break; + case "motion_z": + telemetryAI.trackFeatureUsage( + TelemetryEventName.MICROBIT_SIMULATOR_MOTION_SENSOR + ); + break; } }; From bb8f26d1606305014ae373e53f13d10807e81a98 Mon Sep 17 00:00:00 2001 From: Vandy Liu Date: Wed, 19 Feb 2020 11:24:54 -0800 Subject: [PATCH 2/4] Added install extension dependencies telemetry --- src/extension.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/extension.ts b/src/extension.ts index 0f84b102f..ffd41404f 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -462,6 +462,9 @@ export async function activate(context: vscode.ExtensionContext) { const installDependencies: vscode.Disposable = vscode.commands.registerCommand( "deviceSimulatorExpress.common.installDependencies", () => { + telemetryAI.trackFeatureUsage( + TelemetryEventName.COMMAND_INSTALL_EXTENSION_DEPENDENCIES + ); const pathToLibs: string = utils.getPathToScript( context, CONSTANTS.FILESYSTEM.OUTPUT_DIRECTORY, From 4dfbb3353910330301fae148314e4beb58d19ea7 Mon Sep 17 00:00:00 2001 From: Vandy Liu Date: Thu, 20 Feb 2020 11:16:31 -0800 Subject: [PATCH 3/4] Addressed PR comments about refactorign --- src/constants.ts | 2 + src/extension.ts | 134 +++++++++++++++++++++++++++-------------------- 2 files changed, 79 insertions(+), 57 deletions(-) diff --git a/src/constants.ts b/src/constants.ts index cefcb61d2..09008492c 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -281,6 +281,8 @@ export enum CONFIG_KEYS { export enum TelemetryEventName { FAILED_TO_OPEN_SIMULATOR = "SIMULATOR.FAILED_TO_OPEN", + DEBUGGER_INIT_SUCCESS = "DEBUGGER.INIT.SUCCESS", + DEBUGGER_INIT_FAIL = "DEBUGGER.INIT.FAIL", // Extension commands COMMAND_RUN_SIMULATOR_BUTTON = "COMMAND.RUN.SIMULATOR_BUTTON", diff --git a/src/extension.ts b/src/extension.ts index ffd41404f..e3eef4c08 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -172,20 +172,7 @@ export async function activate(context: vscode.ExtensionContext) { switch (message.command) { case WEBVIEW_MESSAGES.BUTTON_PRESS: // Send input to the Python process - switch (currentActiveDevice) { - case CONSTANTS.DEVICE_NAME.CPX: - handleCPXButtonPressTelemetry( - message.text - ); - break; - case CONSTANTS.DEVICE_NAME.MICROBIT: - handleMicrobitButtonPressTelemetry( - message.text - ); - break; - default: - break; - } + handleButtonPressTelemetry(message.text); console.log(`About to write ${messageJson} \n`); if ( inDebugMode && @@ -232,15 +219,7 @@ export async function activate(context: vscode.ExtensionContext) { break; case WEBVIEW_MESSAGES.SENSOR_CHANGED: - switch (currentActiveDevice) { - case CONSTANTS.DEVICE_NAME.CPX: - checkForCPXTelemetry(message.text); - break; - case CONSTANTS.DEVICE_NAME.MICROBIT: - break; - default: - break; - } + handleCPXGestureTelemetry(message.text); console.log(`Sensor changed ${messageJson} \n`); if ( inDebugMode && @@ -260,18 +239,7 @@ export async function activate(context: vscode.ExtensionContext) { runSimulatorCommand(); break; case WEBVIEW_MESSAGES.SLIDER_TELEMETRY: - switch (currentActiveDevice) { - case CONSTANTS.DEVICE_NAME.CPX: - handleCPXSensorTelemetry(message.text); - break; - case CONSTANTS.DEVICE_NAME.MICROBIT: - handleMicrobitSensorTelemetry( - message.text - ); - break; - default: - break; - } + handleSensorTelemetry(message.text); break; case WEBVIEW_MESSAGES.SWITCH_DEVICE: switchDevice(message.text.active_device); @@ -415,20 +383,7 @@ export async function activate(context: vscode.ExtensionContext) { }), // tslint:disable-next-line: no-unused-expression (error: any) => { - switch (currentActiveDevice) { - case CONSTANTS.DEVICE_NAME.CPX: - telemetryAI.trackFeatureUsage( - TelemetryEventName.CPX_ERROR_COMMAND_NEW_FILE - ); - break; - case CONSTANTS.DEVICE_NAME.MICROBIT: - telemetryAI.trackFeatureUsage( - TelemetryEventName.MICROBIT_ERROR_COMMAND_NEW_FILE - ); - break; - default: - break; - } + handleNewFileErrorTelemetry(); console.error(`Failed to open a new text document: ${error}`); }; }; @@ -978,6 +933,11 @@ export async function activate(context: vscode.ExtensionContext) { currentPanel, utils.getServerPortConfig() ); + + telemetryAI.trackFeatureUsage( + TelemetryEventName.DEBUGGER_INIT_SUCCESS + ); + openWebview(); if (currentPanel) { debuggerCommunicationHandler.setWebview(currentPanel); @@ -991,6 +951,11 @@ export async function activate(context: vscode.ExtensionContext) { console.error( `Error trying to init the server on port ${utils.getServerPortConfig()}` ); + + telemetryAI.trackFeatureUsage( + TelemetryEventName.DEBUGGER_INIT_FAIL + ); + vscode.window.showErrorMessage( CONSTANTS.ERROR.DEBUGGER_SERVER_INIT_FAILED( utils.getServerPortConfig() @@ -1074,6 +1039,44 @@ const updateCurrentFileIfPython = async ( } }; +const handleButtonPressTelemetry = (buttonState: any) => { + switch (currentActiveDevice) { + case CONSTANTS.DEVICE_NAME.CPX: + handleCPXButtonPressTelemetry(buttonState); + break; + case CONSTANTS.DEVICE_NAME.MICROBIT: + handleMicrobitButtonPressTelemetry(buttonState); + break; + default: + break; + } +}; + +const handleGestureTelemetry = (sensorState: any) => { + switch (currentActiveDevice) { + case CONSTANTS.DEVICE_NAME.CPX: + handleCPXGestureTelemetry(sensorState); + break; + case CONSTANTS.DEVICE_NAME.MICROBIT: + break; + default: + break; + } +}; + +const handleSensorTelemetry = (sensor: string) => { + switch (currentActiveDevice) { + case CONSTANTS.DEVICE_NAME.CPX: + handleCPXSensorTelemetry(sensor); + break; + case CONSTANTS.DEVICE_NAME.MICROBIT: + handleMicrobitSensorTelemetry(sensor); + break; + default: + break; + } +}; + const handleCPXButtonPressTelemetry = (buttonState: any) => { if (buttonState.button_a && buttonState.button_b) { telemetryAI.trackFeatureUsage( @@ -1092,6 +1095,14 @@ const handleCPXButtonPressTelemetry = (buttonState: any) => { } }; +const handleCPXGestureTelemetry = (sensorState: any) => { + if (sensorState.shake) { + handleCPXSensorTelemetry("shake"); + } else if (sensorState.touch) { + handleCPXSensorTelemetry("touch"); + } +}; + const handleCPXSensorTelemetry = (sensor: string) => { switch (sensor) { case "temperature": @@ -1132,14 +1143,6 @@ const handleCPXSensorTelemetry = (sensor: string) => { } }; -const checkForCPXTelemetry = (sensorState: any) => { - if (sensorState.shake) { - handleCPXSensorTelemetry("shake"); - } else if (sensorState.touch) { - handleCPXSensorTelemetry("touch"); - } -}; - const handleMicrobitButtonPressTelemetry = (buttonState: any) => { if (buttonState.button_a && buttonState.button_b) { telemetryAI.trackFeatureUsage( @@ -1186,6 +1189,23 @@ const handleMicrobitSensorTelemetry = (sensor: string) => { } }; +const handleNewFileErrorTelemetry = () => { + switch (currentActiveDevice) { + case CONSTANTS.DEVICE_NAME.CPX: + telemetryAI.trackFeatureUsage( + TelemetryEventName.CPX_ERROR_COMMAND_NEW_FILE + ); + break; + case CONSTANTS.DEVICE_NAME.MICROBIT: + telemetryAI.trackFeatureUsage( + TelemetryEventName.MICROBIT_ERROR_COMMAND_NEW_FILE + ); + break; + default: + break; + } +}; + const updatePythonExtraPaths = () => { updateConfigLists( "python.autoComplete.extraPaths", From b4088f7b957059f80351bbebcb5ee81707edcc5e Mon Sep 17 00:00:00 2001 From: Vandy Liu Date: Thu, 20 Feb 2020 11:18:04 -0800 Subject: [PATCH 4/4] Fixed spelling error --- src/extension.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extension.ts b/src/extension.ts index e3eef4c08..0a3538ee8 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -219,7 +219,7 @@ export async function activate(context: vscode.ExtensionContext) { break; case WEBVIEW_MESSAGES.SENSOR_CHANGED: - handleCPXGestureTelemetry(message.text); + handleGestureTelemetry(message.text); console.log(`Sensor changed ${messageJson} \n`); if ( inDebugMode &&