Skip to content

Commit

Permalink
Add error and event logging (#231)
Browse files Browse the repository at this point in the history
  • Loading branch information
microbit-robert committed Feb 14, 2024
1 parent 00ce821 commit d76f28a
Show file tree
Hide file tree
Showing 9 changed files with 248 additions and 14 deletions.
121 changes: 121 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
},
"dependencies": {
"@microsoft/applicationinsights-web": "^3.0.0",
"@sentry/svelte": "^7.100.1",
"@tensorflow/tfjs": "^4.4.0",
"@types/w3c-web-serial": "^1.0.6",
"@types/w3c-web-usb": "^1.0.6",
Expand Down
4 changes: 3 additions & 1 deletion src/components/Gesture.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
import RecordIcon from 'virtual:icons/fluent/record-20-regular';
import CloseIcon from 'virtual:icons/ri/close-line';
import StandardDialog from './dialogs/StandardDialog.svelte';
import { logEvent, logMessage } from '../script/utils/logging';
export let gesture: Gesture;
export let showWalkThrough: Boolean = false;
Expand Down Expand Up @@ -147,11 +148,12 @@
// Once duration is over (1000ms default), stop recording
setTimeout(() => {
unsubscribe();
console.log('RECEIVED SAMPLES', get(settings).numSamples, newData.x.length);
logMessage('RECEIVED SAMPLES', get(settings).numSamples, newData.x.length);
if (get(settings).numSamples <= newData.x.length) {
if (isThisRecording) {
const recording = { ID: Date.now(), data: newData } as RecordingData;
addRecording(gesture.getId(), recording);
logEvent({ type: 'Data', action: 'Add recording' });
}
} else {
alertUser($t('alert.recording.disconnectedDuringRecording'));
Expand Down
2 changes: 2 additions & 0 deletions src/components/NewGestureButton.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@
import { t } from '../i18n';
import StandardButton, { ButtonVariant } from './StandardButton.svelte';
import AddIcon from 'virtual:icons/ri/add-line';
import { logEvent } from '../script/utils/logging';
export let type: ButtonVariant = 'primary';
export let disabled: boolean = false;
function onClick() {
if (areActionsAllowed(false)) {
addGesture('');
logEvent({ type: 'Data', action: 'Add action' });
}
}
</script>
Expand Down
5 changes: 5 additions & 0 deletions src/pages/model/ModelPage.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,13 @@

<script lang="ts">
import { ModelView, state } from '../../script/stores/uiStore';
import { logEvent } from '../../script/utils/logging';
import ModelPageStackView from './stackview/ModelPageStackView.svelte';
import ModelPageTileView from './tileview/ModelPageTileView.svelte';
if ($state.isPredicting) {
logEvent({ type: 'Data', action: 'Test model' });
}
</script>

{#if $state.modelView == ModelView.TILE}
Expand Down
18 changes: 16 additions & 2 deletions src/script/microbit-interfacing/MicrobitBluetooth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import Bowser from 'bowser';
import StaticConfiguration from '../../StaticConfiguration';
import { outputting } from '../stores/uiStore';
import { logError, logMessage } from '../utils/logging';
import { logError, logEvent, logMessage } from '../utils/logging';
import MBSpecs from './MBSpecs';
import MicrobitConnection, { DeviceRequestStates } from './MicrobitConnection';
import { UARTMessageType } from './Microbits';
Expand Down Expand Up @@ -83,7 +83,11 @@ export class MicrobitBluetooth implements MicrobitConnection {
}

async connect(...states: DeviceRequestStates[]): Promise<void> {
logMessage('Bluetooth connect', states);
logEvent({
type: this.isReconnect ? 'Reconnect' : 'Connect',
action: 'Bluetooth connect start',
states,
});
if (this.duringExplicitConnectDisconnect) {
logMessage('Skipping connect attempt when one is already in progress');
// Wait for the gattConnectPromise while showing a "connecting" dialog.
Expand Down Expand Up @@ -170,8 +174,18 @@ export class MicrobitBluetooth implements MicrobitConnection {
states.forEach(s => this.inUseAs.add(s));
states.forEach(s => stateOnAssigned(s, microbitVersion!));
states.forEach(s => stateOnReady(s));
logEvent({
type: this.isReconnect ? 'Reconnect' : 'Connect',
action: 'Bluetooth connect success',
states,
});
} catch (e) {
logError('Bluetooth connect error', e);
logEvent({
type: this.isReconnect ? 'Reconnect' : 'Connect',
action: 'Bluetooth connect failed',
states,
});
await this.disconnectInternal(false);
throw new Error('Failed to establish a connection!');
} finally {
Expand Down
19 changes: 16 additions & 3 deletions src/script/microbit-interfacing/MicrobitSerial.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* SPDX-License-Identifier: MIT
*/

import { logError, logMessage } from '../utils/logging';
import { logError, logEvent, logMessage } from '../utils/logging';
import MicrobitConnection, { DeviceRequestStates } from './MicrobitConnection';
import MicrobitUSB from './MicrobitUSB';
import { onAccelerometerChange, onButtonChange } from './change-listeners';
Expand Down Expand Up @@ -44,7 +44,11 @@ export class MicrobitSerial implements MicrobitConnection {
) {}

async connect(...states: DeviceRequestStates[]): Promise<void> {
logMessage('Serial connect', states);
logEvent({
type: this.isReconnect ? 'Reconnect' : 'Connect',
action: 'Serial connect start',
states,
});
if (this.isConnecting) {
logMessage('Skipping connect attempt when one is already in progress');
return;
Expand Down Expand Up @@ -169,9 +173,18 @@ export class MicrobitSerial implements MicrobitConnection {

stateOnAssigned(DeviceRequestStates.INPUT, this.usb.getModelNumber());
stateOnReady(DeviceRequestStates.INPUT);
logMessage('Serial successfully connected');
logEvent({
type: this.isReconnect ? 'Reconnect' : 'Connect',
action: 'Serial connect success',
states,
});
} catch (e) {
logError('Failed to initialise serial protocol', e);
logEvent({
type: this.isReconnect ? 'Reconnect' : 'Connect',
action: 'Serial connect failed',
states,
});
const reconnectHelp = e instanceof BridgeError ? 'bridge' : 'remote';
await this.disconnectInternal(false, reconnectHelp);
throw e;
Expand Down
14 changes: 14 additions & 0 deletions src/script/ml.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import { gestures } from './stores/Stores';
import Repositories from './repository/Repositories';
import { getPrediction } from './getPrediction';
import { TrainingStatus } from './domain/Model';
import { logEvent } from './utils/logging';

let text: (key: string, vars?: object) => string;
t.subscribe(t => (text = t));
Expand Down Expand Up @@ -124,6 +125,19 @@ export async function trainModel(): Promise<void> {

trainingStatus.set(TrainingStatus.Success);
model.set(nn);
logEvent({ type: 'Data', action: 'Train model', ...getNumberOfActionsAndRecordings() });
}

function getNumberOfActionsAndRecordings() {
const gestureData = get(gestures);
let numRecordings = 0;
gestureData.forEach(g => {
numRecordings += g.recordings.length;
});
return {
numActions: gestureData.length,
numRecordings,
};
}

export function isParametersLegal(): boolean {
Expand Down
Loading

0 comments on commit d76f28a

Please sign in to comment.