Skip to content
This repository has been archived by the owner on Dec 23, 2021. It is now read-only.

Commit

Permalink
resolved merge conflicts
Browse files Browse the repository at this point in the history
  • Loading branch information
andreamah committed Feb 24, 2020
2 parents e029bee + 72b9f1e commit 79187f4
Show file tree
Hide file tree
Showing 15 changed files with 202 additions and 68 deletions.
1 change: 1 addition & 0 deletions src/adafruit_circuitplayground/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
"RED_LED": "API.RED.LED",
"PIXELS": "API.PIXELS",
}
ERROR_SENDING_EVENT = "Error trying to send event to the process : "

TIME_DELAY = 0.03

Expand Down
32 changes: 21 additions & 11 deletions src/adafruit_circuitplayground/express.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@
import sys
import os
import playsound

from common import utils
from common.telemetry import telemetry_py
from common.telemetry_events import TelemetryEvent
from .pixel import Pixel

from . import constants as CONSTANTS
from collections import namedtuple
from applicationinsights import TelemetryClient
from .telemetry import telemetry_py
import common

Acceleration = namedtuple("acceleration", ["x", "y", "z"])
Expand Down Expand Up @@ -52,25 +53,29 @@ def __init__(self):

@property
def acceleration(self):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_ACCELERATION)
return Acceleration(
self.__state["motion_x"], self.__state["motion_y"], self.__state["motion_z"]
)

@property
def button_a(self):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_BUTTON_A)
return self.__state["button_a"]

@property
def button_b(self):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_BUTTON_B)
return self.__state["button_b"]

@property
def detect_taps(self):
telemetry_py.send_telemetry("DETECT_TAPS")
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_DETECT_TAPS)
return self.__state["detect_taps"]

@detect_taps.setter
def detect_taps(self, value):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_DETECT_TAPS)
value_int = int(value)
self.__state["detect_taps"] = (
value_int if (value_int == 1 or value_int == 2) else 1
Expand All @@ -80,30 +85,33 @@ def detect_taps(self, value):
def tapped(self):
""" Not Implemented!
"""
telemetry_py.send_telemetry("TAPPED")
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_TAPPED)
raise NotImplementedError(CONSTANTS.NOT_IMPLEMENTED_ERROR)

@property
def red_led(self):
telemetry_py.send_telemetry("RED_LED")
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_RED_LED)
return self.__state["red_led"]

@red_led.setter
def red_led(self, value):
telemetry_py.send_telemetry("RED_LED")
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_RED_LED)
self.__state["red_led"] = bool(value)
self.__show()

@property
def switch(self):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_SWITCH)
return self.__state["switch"]

@property
def temperature(self):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_TEMPERATURE)
return self.__state["temperature"]

@property
def light(self):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_LIGHT)
return self.__state["light"]

def __show(self):
Expand All @@ -115,6 +123,7 @@ def __show(self):
utils.send_to_simulator(self.__state, CONSTANTS.CPX)

def __touch(self, i):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_TOUCH)
return self.__state["touch"][i - 1]

@property
Expand Down Expand Up @@ -149,14 +158,15 @@ def adjust_touch_threshold(self, adjustement):
"""Not implemented!
The CPX Simulator doesn't use capacitive touch threshold.
"""
telemetry_py.send_telemetry("ADJUST_THRESHOLD")
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_ADJUST_THRESHOLD)
raise NotImplementedError(CONSTANTS.NOT_IMPLEMENTED_ERROR)

def shake(self, shake_threshold=30):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_SHAKE)
return self.__state["shake"]

def play_file(self, file_name):
telemetry_py.send_telemetry("PLAY_FILE")
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_PLAY_FILE)
file_name = utils.remove_leading_slashes(file_name)
abs_path_parent_dir = os.path.abspath(
os.path.join(self.__abs_path_to_code_file, os.pardir)
Expand All @@ -181,19 +191,19 @@ def play_file(self, file_name):
def play_tone(self, frequency, duration):
""" Not Implemented!
"""
telemetry_py.send_telemetry("PLAY_TONE")
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_PLAY_TONE)
raise NotImplementedError(CONSTANTS.NOT_IMPLEMENTED_ERROR)

def start_tone(self, frequency):
""" Not Implemented!
"""
telemetry_py.send_telemetry("START_TONE")
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_START_TONE)
raise NotImplementedError(CONSTANTS.NOT_IMPLEMENTED_ERROR)

def stop_tone(self):
""" Not Implemented!
"""
telemetry_py.send_telemetry("STOP_TONE")
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_STOP_TONE)
raise NotImplementedError(CONSTANTS.NOT_IMPLEMENTED_ERROR)

def update_state(self, new_state):
Expand Down
12 changes: 7 additions & 5 deletions src/adafruit_circuitplayground/pixel.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
import json
import sys
import common
from . import constants as CONSTANTS

from applicationinsights import TelemetryClient
from common import utils
from common.telemetry import telemetry_py
from common.telemetry_events import TelemetryEvent
from . import constants as CONSTANTS
from .telemetry import telemetry_py


class Pixel:
Expand Down Expand Up @@ -39,11 +39,11 @@ def __getitem__(self, index):
if type(index) is not slice:
if not self.__valid_index(index):
raise IndexError(CONSTANTS.INDEX_ERROR)
telemetry_py.send_telemetry("PIXELS")
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_PIXELS)
return self.__state["pixels"][index]

def __setitem__(self, index, val):
telemetry_py.send_telemetry("PIXELS")
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_PIXELS)
is_slice = False
if type(index) is slice:
is_slice = True
Expand Down Expand Up @@ -116,12 +116,14 @@ def __valid_rgb_value(self, pixValue):

@property
def brightness(self):
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_BRIGHTNESS)
return self.__state["brightness"]

@brightness.setter
def brightness(self, brightness):
if not self.__valid_brightness(brightness):
raise ValueError(CONSTANTS.BRIGHTNESS_RANGE_ERROR)
telemetry_py.send_telemetry(TelemetryEvent.CPX_API_BRIGHTNESS)
self.__state["brightness"] = brightness
self.__show_if_auto_write()

Expand Down
41 changes: 0 additions & 41 deletions src/adafruit_circuitplayground/telemetry.py

This file was deleted.

31 changes: 31 additions & 0 deletions src/common/telemetry.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from applicationinsights import TelemetryClient
from .telemetry_events import TelemetryEvent


class Telemetry:
def __init__(self):
# State of the telemetry
self.__enable_telemetry = True
self.telemetry_client = TelemetryClient("__AIKEY__")
self.telemetry_state = dict.fromkeys(
[name for name, _ in TelemetryEvent.__members__.items()], False
)
self.extension_name = "Device Simulator Express"

def send_telemetry(self, event_name: TelemetryEvent):
if (
self.__enable_telemetry
and self.telemetry_available()
and not self.telemetry_state[event_name.name]
):
self.telemetry_client.track_event(
f"{self.extension_name}/{event_name.value}"
)
self.telemetry_client.flush()
self.telemetry_state[event_name.name] = True

def telemetry_available(self):
return self.telemetry_client.context.instrumentation_key == "__AIKEY__"


telemetry_py = Telemetry()
33 changes: 33 additions & 0 deletions src/common/telemetry_events.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import enum


class TelemetryEvent(enum.Enum):
CPX_API_ACCELERATION = "CPX.API.ACCELERATION"
CPX_API_BUTTON_A = "CPX.API.BUTTON.A"
CPX_API_BUTTON_B = "CPX.API.BUTTON.B"
CPX_API_SWITCH = "CPX.API.SWITCH"
CPX_API_TEMPERATURE = "CPX.API.TEMPERATURE"
CPX_API_BRIGHTNESS = "CPX.API.BRIGHTNESS"
CPX_API_LIGHT = "CPX.API.LIGHT"
CPX_API_TOUCH = "CPX.API.TOUCH"
CPX_API_SHAKE = "CPX.API.SHAKE"
CPX_API_TAPPED = "CPX.API.TAPPED"
CPX_API_PLAY_FILE = "CPX.API.PLAY.FILE"
CPX_API_PLAY_TONE = "CPX.API.PLAY.TONE"
CPX_API_START_TONE = "CPX.API.START.TONE"
CPX_API_STOP_TONE = "CPX.API.STOP.TONE"
CPX_API_DETECT_TAPS = "CPX.API.DETECT.TAPS"
CPX_API_ADJUST_THRESHOLD = "CPX.API.ADJUST.THRESHOLD"
CPX_API_RED_LED = "CPX.API.RED.LED"
CPX_API_PIXELS = "CPX.API.PIXELS"
MICROBIT_API_TEMPERATURE = "MICROBIT.API.TEMPERATURE"
MICROBIT_API_ACCELEROMETER = "MICROBIT.API.ACCELEROMETER"
MICROBIT_API_GESTURE = "MICROBIT.API.GESTURE"
MICROBIT_API_DISPLAY_SCROLL = "MICROBIT.API.DISPLAY.SCROLL"
MICROBIT_API_DISPLAY_SHOW = "MICROBIT.API.DISPLAY.SHOW"
MICROBIT_API_DISPLAY_OTHER = "MICROBIT.API.DISPLAY_OTHER"
MICROBIT_API_LIGHT_LEVEL = "MICROBIT.API.LIGHT.LEVEL"
MICROBIT_API_IMAGE_CREATION = "MICROBIT.API.IMAGE.CREATION"
MICROBIT_API_IMAGE_OTHER = "MICROBIT.API.IMAGE.OTHER"
MICROBIT_API_IMAGE_STATIC = "MICROBIT.API.IMAGE.STATIC"
MICROBIT_API_BUTTON = "MICROBIT.API.BUTTON"
12 changes: 10 additions & 2 deletions src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@ export const CONSTANTS = {
"error.incorrectFileNameForDevicePopup",
'Seems like you have a different file name than what CPX requires, please rename it to "code.py" or "main.py".'
),
INSTALLATION_ERROR: localize(
"error.installationError",
"Installation Error"
),
INVALID_FILE_EXTENSION_DEBUG: localize(
"error.invalidFileExtensionDebug",
"The file you tried to run isn't a Python file."
Expand Down Expand Up @@ -281,8 +285,12 @@ 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",

// Debugger
CPX_DEBUGGER_INIT_SUCCESS = "CPX.DEBUGGER.INIT.SUCCESS",
CPX_DEBUGGER_INIT_FAIL = "CPX.DEBUGGER.INIT.FAIL",
MICROBIT_DEBUGGER_INIT_SUCCESS = "MICROBIT.DEBUGGER.INIT.SUCCESS",
MICROBIT_DEBUGGER_INIT_FAIL = "MICROBIT.DEBUGGER.INIT.FAIL",

// Extension commands
COMMAND_RUN_SIMULATOR_BUTTON = "COMMAND.RUN.SIMULATOR_BUTTON",
Expand Down
42 changes: 36 additions & 6 deletions src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -935,9 +935,7 @@ export async function activate(context: vscode.ExtensionContext) {
currentActiveDevice
);

telemetryAI.trackFeatureUsage(
TelemetryEventName.DEBUGGER_INIT_SUCCESS
);
handleDebuggerTelemetry();

openWebview();
if (currentPanel) {
Expand All @@ -953,9 +951,7 @@ export async function activate(context: vscode.ExtensionContext) {
`Error trying to init the server on port ${utils.getServerPortConfig()}`
);

telemetryAI.trackFeatureUsage(
TelemetryEventName.DEBUGGER_INIT_FAIL
);
handleDebuggerFailTelemetry();

vscode.window.showErrorMessage(
CONSTANTS.ERROR.DEBUGGER_SERVER_INIT_FAILED(
Expand Down Expand Up @@ -1040,6 +1036,40 @@ const updateCurrentFileIfPython = async (
}
};

const handleDebuggerTelemetry = () => {
switch (currentActiveDevice) {
case CONSTANTS.DEVICE_NAME.CPX:
telemetryAI.trackFeatureUsage(
TelemetryEventName.CPX_DEBUGGER_INIT_SUCCESS
);
break;
case CONSTANTS.DEVICE_NAME.MICROBIT:
telemetryAI.trackFeatureUsage(
TelemetryEventName.MICROBIT_DEBUGGER_INIT_SUCCESS
);
break;
default:
break;
}
};

const handleDebuggerFailTelemetry = () => {
switch (currentActiveDevice) {
case CONSTANTS.DEVICE_NAME.CPX:
telemetryAI.trackFeatureUsage(
TelemetryEventName.CPX_DEBUGGER_INIT_FAIL
);
break;
case CONSTANTS.DEVICE_NAME.MICROBIT:
telemetryAI.trackFeatureUsage(
TelemetryEventName.MICROBIT_DEBUGGER_INIT_FAIL
);
break;
default:
break;
}
};

const handleButtonPressTelemetry = (buttonState: any) => {
switch (currentActiveDevice) {
case CONSTANTS.DEVICE_NAME.CPX:
Expand Down
Loading

0 comments on commit 79187f4

Please sign in to comment.