diff --git a/src/constants.ts b/src/constants.ts index 96f8c2c3f..09008492c 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -281,50 +281,67 @@ 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_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..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: - checkForTelemetry(message.text); + handleGestureTelemetry(message.text); console.log(`Sensor changed ${messageJson} \n`); if ( inDebugMode && @@ -299,11 +299,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 +312,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 +354,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 +383,7 @@ export async function activate(context: vscode.ExtensionContext) { }), // tslint:disable-next-line: no-unused-expression (error: any) => { - telemetryAI.trackFeatureUsage( - TelemetryEventName.ERROR_COMMAND_NEW_FILE - ); + handleNewFileErrorTelemetry(); console.error(`Failed to open a new text document: ${error}`); }; }; @@ -394,11 +392,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 +405,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 ); } ); @@ -419,6 +417,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, @@ -539,7 +540,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 +733,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 +743,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 +762,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 +787,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 +811,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 +832,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 +848,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 +865,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 +882,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 @@ -932,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); @@ -945,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() @@ -1029,60 +1040,169 @@ 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(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 handleCPXGestureTelemetry = (sensorState: any) => { + if (sensorState.shake) { + handleCPXSensorTelemetry("shake"); + } else if (sensorState.touch) { + handleCPXSensorTelemetry("touch"); + } +}; + +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) => { - if (sensorState.shake) { - handleSensorTelemetry("shake"); - } else if (sensorState.touch) { - handleSensorTelemetry("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; + } +}; + +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; } };