mirror of
https://github.com/betaflight/betaflight-configurator.git
synced 2025-07-25 01:05:15 +03:00
Updating analytics to use build server (#3729)
* Updating analytics to use build server - allows for server side analytics submission to whatever service we plan to use * Revert to const (artifact left over from some testing) * Send the changeList object in total
This commit is contained in:
parent
072d16c6ba
commit
66d175b030
8 changed files with 96 additions and 221 deletions
|
@ -68,7 +68,6 @@
|
|||
"short-unique-id": "^4.4.4",
|
||||
"switchery-latest": "^0.8.2",
|
||||
"three": "~0.97.0",
|
||||
"universal-ga": "^1.2.0",
|
||||
"vite-plugin-pwa": "^0.17.4",
|
||||
"vue": "^2.7.10"
|
||||
},
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import ShortUniqueId from 'short-unique-id';
|
||||
import googleAnalytics from 'universal-ga';
|
||||
import BuildApi from './BuildApi';
|
||||
import { set as setConfig, get as getConfig } from './ConfigStorage';
|
||||
import GUI from './gui';
|
||||
import CONFIGURATOR from './data_storage';
|
||||
|
@ -8,32 +8,27 @@ import $ from 'jquery';
|
|||
let tracking = null;
|
||||
export { tracking };
|
||||
|
||||
export function createAnalytics(ga, settings) {
|
||||
tracking = new Analytics(ga, settings);
|
||||
export function createAnalytics(settings) {
|
||||
tracking = new Analytics(settings);
|
||||
}
|
||||
|
||||
function getBuildType() {
|
||||
return GUI.Mode;
|
||||
}
|
||||
|
||||
function setupAnalytics(result) {
|
||||
const uid = new ShortUniqueId();
|
||||
|
||||
let userId;
|
||||
if (result.userId) {
|
||||
userId = result.userId;
|
||||
} else {
|
||||
const uid = new ShortUniqueId();
|
||||
userId = uid.randomUUID(13);
|
||||
|
||||
setConfig({ 'userId': userId });
|
||||
}
|
||||
|
||||
const optOut = !!result.analyticsOptOut;
|
||||
const checkForDebugVersions = !!result.checkForConfiguratorUnstableVersions;
|
||||
|
||||
const debugMode = typeof process === "object" && process.versions['nw-flavor'] === 'sdk';
|
||||
|
||||
const settings = {
|
||||
trackingId: 'UA-123002063-1',
|
||||
sessionId: uid.randomUUID(16),
|
||||
userId: userId,
|
||||
appName: CONFIGURATOR.productName,
|
||||
appVersion: CONFIGURATOR.version,
|
||||
|
@ -41,10 +36,10 @@ function setupAnalytics(result) {
|
|||
os: GUI.operating_system,
|
||||
checkForDebugVersions: checkForDebugVersions,
|
||||
optOut: optOut,
|
||||
// debugMode: debugMode, // enable when debugging GA
|
||||
buildType: getBuildType(),
|
||||
buildType: GUI.Mode,
|
||||
};
|
||||
createAnalytics(googleAnalytics, settings);
|
||||
|
||||
createAnalytics(settings);
|
||||
window.tracking = tracking;
|
||||
|
||||
function logException(exception) {
|
||||
|
@ -74,29 +69,12 @@ export function checkSetupAnalytics(callback) {
|
|||
|
||||
class Analytics {
|
||||
|
||||
constructor (ga, settings) {
|
||||
// trackingId, userId, appName, appVersion, gitRevision, os, checkForDebugVersions, optOut, debugMode, buildType
|
||||
this._trackingId = settings.trackingId;
|
||||
constructor (settings) {
|
||||
|
||||
this.setOptOut(settings.optOut);
|
||||
|
||||
this._googleAnalytics = ga;
|
||||
|
||||
this._googleAnalytics.initialize(this._trackingId, {
|
||||
storage: 'none',
|
||||
clientId: settings.userId,
|
||||
debug: !!settings.debugMode,
|
||||
});
|
||||
|
||||
// Make it work for the Chrome App:
|
||||
this._googleAnalytics.set('forceSSL', true);
|
||||
this._googleAnalytics.set('transport', 'xhr');
|
||||
|
||||
// Make it work for NW.js:
|
||||
this._googleAnalytics.set('checkProtocolTask', null);
|
||||
|
||||
this._googleAnalytics.set('appName', settings.appName);
|
||||
this._googleAnalytics.set('appVersion', settings.debugMode ? `${settings.appVersion}-debug` : settings.appVersion);
|
||||
this._settings = settings;
|
||||
this._api = new BuildApi();
|
||||
|
||||
this.EVENT_CATEGORIES = {
|
||||
APPLICATION: 'Application',
|
||||
|
@ -104,149 +82,50 @@ class Analytics {
|
|||
FLASHING: 'Flashing',
|
||||
};
|
||||
|
||||
this.DATA = {
|
||||
BOARD_TYPE: 'boardType',
|
||||
API_VERSION: 'apiVersion',
|
||||
FIRMWARE_TYPE: 'firmwareType',
|
||||
FIRMWARE_VERSION: 'firmwareVersion',
|
||||
FIRMWARE_NAME: 'firmwareName',
|
||||
FIRMWARE_SOURCE: 'firmwareSource',
|
||||
FIRMWARE_CHANNEL: 'firmwareChannel',
|
||||
FIRMWARE_ERASE_ALL: 'firmwareEraseAll',
|
||||
FIRMWARE_SIZE: 'firmwareSize',
|
||||
MCU_ID: 'mcuId',
|
||||
LOGGING_STATUS: 'loggingStatus',
|
||||
LOG_SIZE: 'logSize',
|
||||
TARGET_NAME: 'targetName',
|
||||
BOARD_NAME: 'boardName',
|
||||
MANUFACTURER_ID: 'manufacturerId',
|
||||
MCU_TYPE: 'mcuType',
|
||||
};
|
||||
|
||||
this.DIMENSIONS = {
|
||||
CONFIGURATOR_OS: 1,
|
||||
BOARD_TYPE: 2,
|
||||
FIRMWARE_TYPE: 3,
|
||||
FIRMWARE_VERSION: 4,
|
||||
API_VERSION: 5,
|
||||
FIRMWARE_NAME: 6,
|
||||
FIRMWARE_SOURCE: 7,
|
||||
FIRMWARE_ERASE_ALL: 8,
|
||||
CONFIGURATOR_EXPERT_MODE: 9,
|
||||
FIRMWARE_CHANNEL: 10,
|
||||
LOGGING_STATUS: 11,
|
||||
MCU_ID: 12,
|
||||
CONFIGURATOR_CHANGESET_ID: 13,
|
||||
CONFIGURATOR_USE_DEBUG_VERSIONS: 14,
|
||||
TARGET_NAME: 15,
|
||||
BOARD_NAME: 16,
|
||||
MANUFACTURER_ID: 17,
|
||||
MCU_TYPE: 18,
|
||||
CONFIGURATOR_BUILD_TYPE: 19,
|
||||
};
|
||||
|
||||
this.METRICS = {
|
||||
FIRMWARE_SIZE: 1,
|
||||
LOG_SIZE: 2,
|
||||
};
|
||||
|
||||
this.setDimension(this.DIMENSIONS.CONFIGURATOR_OS, settings.os);
|
||||
this.setDimension(this.DIMENSIONS.CONFIGURATOR_CHANGESET_ID, settings.gitRevision);
|
||||
this.setDimension(this.DIMENSIONS.CONFIGURATOR_USE_DEBUG_VERSIONS, settings.checkForDebugVersions);
|
||||
this.setDimension(this.DIMENSIONS.CONFIGURATOR_BUILD_TYPE, settings.buildType);
|
||||
|
||||
this.resetFlightControllerData();
|
||||
this.resetFirmwareData();
|
||||
this.sendSettings();
|
||||
}
|
||||
|
||||
setDimension(dimension, value) {
|
||||
const dimensionName = `dimension${dimension}`;
|
||||
this._googleAnalytics.custom(dimensionName, value);
|
||||
send(name, properties) {
|
||||
if (this._optOut) {
|
||||
return;
|
||||
}
|
||||
|
||||
this._api.sendAnalytics(name, {
|
||||
sessionId: this._settings.sessionId,
|
||||
userId: this._settings.userId,
|
||||
[name]: properties,
|
||||
});
|
||||
}
|
||||
|
||||
setMetric(metric, value) {
|
||||
const metricName = `metric${metric}`;
|
||||
this._googleAnalytics.custom(metricName, value);
|
||||
sendSettings() {
|
||||
this.send('settings', this._settings);
|
||||
}
|
||||
|
||||
sendEvent(category, action, options) {
|
||||
this._googleAnalytics.event(category, action, options);
|
||||
this.send('event', { category: category, action: action, options: options });
|
||||
}
|
||||
|
||||
sendChangeEvents(category, changeList) {
|
||||
for (const actionName in changeList) {
|
||||
if (changeList.hasOwnProperty(actionName)) {
|
||||
const actionValue = changeList[actionName];
|
||||
if (actionValue !== undefined) {
|
||||
this.sendEvent(category, actionName, { eventLabel: actionValue });
|
||||
}
|
||||
}
|
||||
}
|
||||
this.sendEvent(category, 'Change', { changes: changeList });
|
||||
}
|
||||
|
||||
sendSaveAndChangeEvents(category, changeList, tabName) {
|
||||
this.sendEvent(category, 'Save', {
|
||||
eventLabel: tabName,
|
||||
eventValue: Object.keys(changeList).length,
|
||||
});
|
||||
this.sendChangeEvents(category, changeList);
|
||||
this.sendEvent(category, 'Save', { tab: tabName, changes: changeList });
|
||||
}
|
||||
|
||||
sendAppView(viewName) {
|
||||
this._googleAnalytics.screenview(viewName);
|
||||
this.send('view', viewName);
|
||||
}
|
||||
|
||||
sendTiming(category, timing, value) {
|
||||
this._googleAnalytics.timing(category, timing, value);
|
||||
this.send('timing', { category: category, timing: timing, value: value });
|
||||
}
|
||||
|
||||
sendException(message) {
|
||||
this._googleAnalytics.exception(message);
|
||||
this.send('exception', message);
|
||||
}
|
||||
|
||||
setOptOut(optOut) {
|
||||
window[`ga-disable-${this._trackingId}`] = !!optOut;
|
||||
}
|
||||
|
||||
_rebuildFlightControllerEvent() {
|
||||
this.setDimension(this.DIMENSIONS.BOARD_TYPE, this._flightControllerData[this.DATA.BOARD_TYPE]);
|
||||
this.setDimension(this.DIMENSIONS.FIRMWARE_TYPE, this._flightControllerData[this.DATA.FIRMWARE_TYPE]);
|
||||
this.setDimension(this.DIMENSIONS.FIRMWARE_VERSION, this._flightControllerData[this.DATA.FIRMWARE_VERSION]);
|
||||
this.setDimension(this.DIMENSIONS.API_VERSION, this._flightControllerData[this.DATA.API_VERSION]);
|
||||
this.setDimension(this.DIMENSIONS.LOGGING_STATUS, this._flightControllerData[this.DATA.LOGGING_STATUS]);
|
||||
this.setDimension(this.DIMENSIONS.MCU_ID, this._flightControllerData[this.DATA.MCU_ID]);
|
||||
this.setMetric(this.METRICS.LOG_SIZE, this._flightControllerData[this.DATA.LOG_SIZE]);
|
||||
this.setDimension(this.DIMENSIONS.TARGET_NAME, this._flightControllerData[this.DATA.TARGET_NAME]);
|
||||
this.setDimension(this.DIMENSIONS.BOARD_NAME, this._flightControllerData[this.DATA.BOARD_NAME]);
|
||||
this.setDimension(this.DIMENSIONS.MANUFACTURER_ID, this._flightControllerData[this.DATA.MANUFACTURER_ID]);
|
||||
this.setDimension(this.DIMENSIONS.MCU_TYPE, this._flightControllerData[this.DATA.MCU_TYPE]);
|
||||
}
|
||||
|
||||
setFlightControllerData(property, value) {
|
||||
this._flightControllerData[property] = value;
|
||||
this._rebuildFlightControllerEvent();
|
||||
}
|
||||
|
||||
resetFlightControllerData() {
|
||||
this._flightControllerData = {};
|
||||
this._rebuildFlightControllerEvent();
|
||||
}
|
||||
|
||||
_rebuildFirmwareEvent() {
|
||||
this.setDimension(this.DIMENSIONS.FIRMWARE_NAME, this._firmwareData[this.DATA.FIRMWARE_NAME]);
|
||||
this.setDimension(this.DIMENSIONS.FIRMWARE_SOURCE, this._firmwareData[this.DATA.FIRMWARE_SOURCE]);
|
||||
this.setDimension(this.DIMENSIONS.FIRMWARE_ERASE_ALL, this._firmwareData[this.DATA.FIRMWARE_ERASE_ALL]);
|
||||
this.setDimension(this.DIMENSIONS.FIRMWARE_CHANNEL, this._firmwareData[this.DATA.FIRMWARE_CHANNEL]);
|
||||
this.setMetric(this.METRICS.FIRMWARE_SIZE, this._firmwareData[this.DATA.FIRMWARE_SIZE]);
|
||||
}
|
||||
|
||||
setFirmwareData(property, value) {
|
||||
this._firmwareData[property] = value;
|
||||
this._rebuildFirmwareEvent();
|
||||
}
|
||||
|
||||
resetFirmwareData() {
|
||||
this._firmwareData = {};
|
||||
this._rebuildFirmwareEvent();
|
||||
this._optOut = !!optOut;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -176,4 +176,15 @@ export default class BuildApi {
|
|||
const url = `${this._url}/api/configurator/sponsors/${mode}/${page}`;
|
||||
this.load(url, onSuccess, onFailure);
|
||||
}
|
||||
|
||||
sendAnalytics(type, parcel) {
|
||||
const url = `${this._url}/analytics/${type}`;
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: "POST",
|
||||
data: JSON.stringify(parcel),
|
||||
contentType: "application/json",
|
||||
dataType: "json",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -570,7 +570,7 @@ function startProcess() {
|
|||
const checked = expertModeCheckbox.is(':checked');
|
||||
|
||||
checkSetupAnalytics(function (analyticsService) {
|
||||
analyticsService.setDimension(analyticsService.DIMENSIONS.CONFIGURATOR_EXPERT_MODE, checked ? 'On' : 'Off');
|
||||
analyticsService.sendEvent(analyticsService.EVENT_CATEGORIES.APPLICATION, 'ExpertMode', { status: checked ? 'On' : 'Off' });
|
||||
});
|
||||
|
||||
if (FC.FEATURE_CONFIG && FC.FEATURE_CONFIG.features !== 0) {
|
||||
|
|
|
@ -214,20 +214,13 @@ function finishClose(finishedCallback) {
|
|||
}
|
||||
|
||||
const wasConnected = CONFIGURATOR.connectionValid;
|
||||
|
||||
tracking.sendEvent(tracking.EVENT_CATEGORIES.FLIGHT_CONTROLLER, 'Disconnected');
|
||||
if (connectionTimestamp) {
|
||||
const connectedTime = Date.now() - connectionTimestamp;
|
||||
tracking.sendTiming(tracking.EVENT_CATEGORIES.FLIGHT_CONTROLLER, 'Connected', connectedTime);
|
||||
}
|
||||
tracking.sendEvent(tracking.EVENT_CATEGORIES.FLIGHT_CONTROLLER, 'Disconnected', { time: connectionTimestamp ? Date.now() - connectionTimestamp : undefined});
|
||||
|
||||
if (semver.lt(FC.CONFIG.apiVersion, API_VERSION_1_46)) {
|
||||
// close reset to custom defaults dialog
|
||||
$('#dialogResetToCustomDefaults')[0].close();
|
||||
}
|
||||
|
||||
tracking.resetFlightControllerData();
|
||||
|
||||
serial.disconnect(onClosed);
|
||||
|
||||
MSP.disconnect_cleanup();
|
||||
|
@ -349,15 +342,10 @@ function onOpen(openInfo) {
|
|||
return;
|
||||
}
|
||||
|
||||
tracking.setFlightControllerData(tracking.DATA.API_VERSION, FC.CONFIG.apiVersion);
|
||||
|
||||
if (semver.gte(FC.CONFIG.apiVersion, CONFIGURATOR.API_VERSION_ACCEPTED)) {
|
||||
MSP.send_message(MSPCodes.MSP_FC_VARIANT, false, false, function () {
|
||||
tracking.setFlightControllerData(tracking.DATA.FIRMWARE_TYPE, FC.CONFIG.flightControllerIdentifier);
|
||||
if (FC.CONFIG.flightControllerIdentifier === 'BTFL') {
|
||||
MSP.send_message(MSPCodes.MSP_FC_VERSION, false, false, function () {
|
||||
tracking.setFlightControllerData(tracking.DATA.FIRMWARE_VERSION, FC.CONFIG.flightControllerVersion);
|
||||
|
||||
gui_log(i18n.getMessage('fcInfoReceived', [FC.CONFIG.flightControllerIdentifier, FC.CONFIG.flightControllerVersion]));
|
||||
|
||||
MSP.send_message(MSPCodes.MSP_BUILD_INFO, false, false, function () {
|
||||
|
@ -459,11 +447,6 @@ function processCustomDefaults() {
|
|||
}
|
||||
|
||||
function processBoardInfo() {
|
||||
tracking.setFlightControllerData(tracking.DATA.BOARD_TYPE, FC.CONFIG.boardIdentifier);
|
||||
tracking.setFlightControllerData(tracking.DATA.TARGET_NAME, FC.CONFIG.targetName);
|
||||
tracking.setFlightControllerData(tracking.DATA.BOARD_NAME, FC.CONFIG.boardName);
|
||||
tracking.setFlightControllerData(tracking.DATA.MANUFACTURER_ID, FC.CONFIG.manufacturerId);
|
||||
tracking.setFlightControllerData(tracking.DATA.MCU_TYPE, FC.getMcuType());
|
||||
|
||||
gui_log(i18n.getMessage('boardInfoReceived', [FC.getHardwareName(), FC.CONFIG.boardVersion]));
|
||||
|
||||
|
@ -472,18 +455,26 @@ function processBoardInfo() {
|
|||
} else {
|
||||
processCustomDefaults();
|
||||
}
|
||||
tracking.sendEvent(tracking.EVENT_CATEGORIES.FLIGHT_CONTROLLER, 'Loaded', {
|
||||
boardIdentifier: FC.CONFIG.boardIdentifier,
|
||||
targetName: FC.CONFIG.targetName,
|
||||
boardName: FC.CONFIG.boardName,
|
||||
hardware: FC.getHardwareName(),
|
||||
manufacturerId: FC.CONFIG.manufacturerId,
|
||||
apiVersion: FC.CONFIG.apiVersion,
|
||||
flightControllerVersion: FC.CONFIG.flightControllerVersion,
|
||||
flightControllerIdentifier: FC.CONFIG.flightControllerIdentifier,
|
||||
mcu: FC.getMcuType(),
|
||||
});
|
||||
}
|
||||
|
||||
function checkReportProblems() {
|
||||
const PROBLEM_ANALYTICS_EVENT = 'ProblemFound';
|
||||
const problemItemTemplate = $('#dialogReportProblems-listItemTemplate');
|
||||
|
||||
function checkReportProblem(problemName, problemDialogList) {
|
||||
function checkReportProblem(problemName, problems) {
|
||||
if (bit_check(FC.CONFIG.configurationProblems, FC.CONFIGURATION_PROBLEM_FLAGS[problemName])) {
|
||||
problemItemTemplate.clone().html(i18n.getMessage(`reportProblemsDialog${problemName}`)).appendTo(problemDialogList);
|
||||
|
||||
tracking.sendEvent(tracking.EVENT_CATEGORIES.FLIGHT_CONTROLLER, PROBLEM_ANALYTICS_EVENT, problemName);
|
||||
|
||||
problems.push({name: problemName, description: i18n.getMessage(`reportProblemsDialog${problemName}`)});
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -495,23 +486,29 @@ function checkReportProblems() {
|
|||
const problemDialogList = $('#dialogReportProblems-list');
|
||||
problemDialogList.empty();
|
||||
|
||||
let problems = [];
|
||||
|
||||
if (semver.gt(FC.CONFIG.apiVersion, CONFIGURATOR.API_VERSION_MAX_SUPPORTED)) {
|
||||
const problemName = 'API_VERSION_MAX_SUPPORTED';
|
||||
problemItemTemplate.clone().html(i18n.getMessage(`reportProblemsDialog${problemName}`,
|
||||
[CONFIGURATOR.latestVersion, CONFIGURATOR.latestVersionReleaseUrl, CONFIGURATOR.getDisplayVersion(), FC.CONFIG.flightControllerVersion])).appendTo(problemDialogList);
|
||||
problems.push({ name: problemName, description: i18n.getMessage(`reportProblemsDialog${problemName}`,
|
||||
[CONFIGURATOR.latestVersion, CONFIGURATOR.latestVersionReleaseUrl, CONFIGURATOR.getDisplayVersion(), FC.CONFIG.flightControllerVersion])});
|
||||
needsProblemReportingDialog = true;
|
||||
|
||||
tracking.sendEvent(tracking.EVENT_CATEGORIES.FLIGHT_CONTROLLER, PROBLEM_ANALYTICS_EVENT,
|
||||
`${problemName};${CONFIGURATOR.API_VERSION_MAX_SUPPORTED};${FC.CONFIG.apiVersion}`);
|
||||
}
|
||||
|
||||
needsProblemReportingDialog = checkReportProblem('MOTOR_PROTOCOL_DISABLED', problemDialogList) || needsProblemReportingDialog;
|
||||
needsProblemReportingDialog = checkReportProblem('MOTOR_PROTOCOL_DISABLED', problems) || needsProblemReportingDialog;
|
||||
|
||||
if (have_sensor(FC.CONFIG.activeSensors, 'acc')) {
|
||||
needsProblemReportingDialog = checkReportProblem('ACC_NEEDS_CALIBRATION', problemDialogList) || needsProblemReportingDialog;
|
||||
needsProblemReportingDialog = checkReportProblem('ACC_NEEDS_CALIBRATION', problems) || needsProblemReportingDialog;
|
||||
}
|
||||
|
||||
if (needsProblemReportingDialog) {
|
||||
|
||||
problems.map((problem) => {
|
||||
problemItemTemplate.clone().html(problem.description).appendTo(problemDialogList);
|
||||
});
|
||||
|
||||
tracking.sendEvent(tracking.EVENT_CATEGORIES.FLIGHT_CONTROLLER, PROBLEM_ANALYTICS_EVENT, { problems: problems.map((problem) => problem.name) });
|
||||
|
||||
const problemDialog = $('#dialogReportProblems')[0];
|
||||
$('#dialogReportProblems-closebtn').click(function() {
|
||||
problemDialog.close();
|
||||
|
@ -547,9 +544,6 @@ async function processBuildConfiguration() {
|
|||
async function processUid() {
|
||||
await MSP.promise(MSPCodes.MSP_UID);
|
||||
|
||||
tracking.setFlightControllerData(tracking.DATA.MCU_ID, CryptoES.SHA1(FC.CONFIG.deviceIdentifier));
|
||||
tracking.sendEvent(tracking.EVENT_CATEGORIES.FLIGHT_CONTROLLER, 'Connected');
|
||||
|
||||
connectionTimestamp = Date.now();
|
||||
|
||||
gui_log(i18n.getMessage('uniqueDeviceIdReceived', FC.CONFIG.deviceIdentifier));
|
||||
|
@ -559,6 +553,10 @@ async function processUid() {
|
|||
} else {
|
||||
processCraftName();
|
||||
}
|
||||
|
||||
tracking.sendEvent(tracking.EVENT_CATEGORIES.FLIGHT_CONTROLLER, 'Connected', {
|
||||
deviceIdentifier: CryptoES.SHA1(FC.CONFIG.deviceIdentifier),
|
||||
});
|
||||
}
|
||||
|
||||
async function processCraftName() {
|
||||
|
|
|
@ -35,6 +35,7 @@ const firmware_flasher = {
|
|||
intel_hex: undefined, // standard intel hex in string format
|
||||
parsed_hex: undefined, // parsed raw hex in array format
|
||||
isConfigLocal: false, // Set to true if the user loads one locally
|
||||
filename: null,
|
||||
configFilename: null,
|
||||
config: {},
|
||||
developmentFirmwareLoaded: false, // Is the firmware to be flashed from the development branch?
|
||||
|
@ -72,14 +73,21 @@ firmware_flasher.initialize = function (callback) {
|
|||
worker.postMessage(str);
|
||||
}
|
||||
|
||||
function showLoadedHex(fileName) {
|
||||
function showLoadedHex(filename) {
|
||||
self.filename = filename;
|
||||
|
||||
if (self.localFirmwareLoaded) {
|
||||
self.flashingMessage(i18n.getMessage('firmwareFlasherFirmwareLocalLoaded', { filename: fileName, bytes: self.parsed_hex.bytes_total }), self.FLASH_MESSAGE_TYPES.NEUTRAL);
|
||||
self.flashingMessage(i18n.getMessage('firmwareFlasherFirmwareLocalLoaded', { filename: filename, bytes: self.parsed_hex.bytes_total }), self.FLASH_MESSAGE_TYPES.NEUTRAL);
|
||||
} else {
|
||||
self.flashingMessage(`<a class="save_firmware" href="#" title="Save Firmware">${i18n.getMessage('firmwareFlasherFirmwareOnlineLoaded', { filename: fileName, bytes: self.parsed_hex.bytes_total })}</a>`,
|
||||
self.FLASH_MESSAGE_TYPES.NEUTRAL);
|
||||
self.flashingMessage(`<a class="save_firmware" href="#" title="Save Firmware">${i18n.getMessage('firmwareFlasherFirmwareOnlineLoaded', { filename: filename, bytes: self.parsed_hex.bytes_total })}</a>`, self.FLASH_MESSAGE_TYPES.NEUTRAL);
|
||||
}
|
||||
self.enableFlashButton(true);
|
||||
|
||||
tracking.sendEvent(tracking.EVENT_CATEGORIES.FLASHING, 'FirmwareLoaded', {
|
||||
firmwareSize: self.parsed_hex.bytes_total,
|
||||
firmwareName: filename,
|
||||
firmwareSource: self.localFirmwareLoaded ? 'file' : 'http',
|
||||
});
|
||||
}
|
||||
|
||||
function showReleaseNotes(summary) {
|
||||
|
@ -129,7 +137,6 @@ firmware_flasher.initialize = function (callback) {
|
|||
self.parsed_hex = data;
|
||||
|
||||
if (self.parsed_hex) {
|
||||
tracking.setFirmwareData(tracking.DATA.FIRMWARE_SIZE, self.parsed_hex.bytes_total);
|
||||
showLoadedHex(key);
|
||||
} else {
|
||||
self.flashingMessage(i18n.getMessage('firmwareFlasherHexCorrupted'), self.FLASH_MESSAGE_TYPES.INVALID);
|
||||
|
@ -281,15 +288,13 @@ firmware_flasher.initialize = function (callback) {
|
|||
buildType_e.on('change', function() {
|
||||
self.enableLoadRemoteFileButton(false);
|
||||
|
||||
tracking.setFirmwareData(tracking.DATA.FIRMWARE_CHANNEL, $('option:selected', this).text());
|
||||
|
||||
const build_type = buildType_e.val();
|
||||
|
||||
$('select[name="board"]').empty()
|
||||
.append($(`<option value='0'>${i18n.getMessage("firmwareFlasherOptionLoading")}</option>`));
|
||||
.append($(`<option value='0'>${i18n.getMessage("firmwareFlasherOptionLoading")}</option>`));
|
||||
|
||||
$('select[name="firmware_version"]').empty()
|
||||
.append($(`<option value='0'>${i18n.getMessage("firmwareFlasherOptionLoading")}</option>`));
|
||||
.append($(`<option value='0'>${i18n.getMessage("firmwareFlasherOptionLoading")}</option>`));
|
||||
|
||||
if (!GUI.connect_lock) {
|
||||
try {
|
||||
|
@ -541,7 +546,6 @@ firmware_flasher.initialize = function (callback) {
|
|||
|
||||
eraseAll = true;
|
||||
}
|
||||
tracking.setFirmwareData(tracking.DATA.FIRMWARE_ERASE_ALL, eraseAll.toString());
|
||||
|
||||
if (!$('option:selected', portPickerElement).data().isDFU) {
|
||||
if (String(portPickerElement.val()) !== '0') {
|
||||
|
@ -558,7 +562,7 @@ firmware_flasher.initialize = function (callback) {
|
|||
baud = parseInt($('#flash_manual_baud_rate').val());
|
||||
}
|
||||
|
||||
tracking.sendEvent(tracking.EVENT_CATEGORIES.FLASHING, 'Flashing', self.fileName || null);
|
||||
tracking.sendEvent(tracking.EVENT_CATEGORIES.FLASHING, 'Flashing', self.filename || null);
|
||||
|
||||
STM32.connect(port, baud, firmware, options);
|
||||
} else {
|
||||
|
@ -566,7 +570,7 @@ firmware_flasher.initialize = function (callback) {
|
|||
gui_log(i18n.getMessage('firmwareFlasherNoValidPort'));
|
||||
}
|
||||
} else {
|
||||
tracking.sendEvent(tracking.EVENT_CATEGORIES.FLASHING, 'Flashing', self.fileName || null);
|
||||
tracking.sendEvent(tracking.EVENT_CATEGORIES.FLASHING, 'DFU Flashing', self.filename || null);
|
||||
|
||||
STM32DFU.connect(usbDevices, firmware, options);
|
||||
}
|
||||
|
@ -659,9 +663,6 @@ firmware_flasher.initialize = function (callback) {
|
|||
self.enableFlashButton(false);
|
||||
self.developmentFirmwareLoaded = false;
|
||||
|
||||
tracking.setFirmwareData(tracking.DATA.FIRMWARE_CHANNEL, undefined);
|
||||
tracking.setFirmwareData(tracking.DATA.FIRMWARE_SOURCE, 'file');
|
||||
|
||||
chrome.fileSystem.chooseEntry({
|
||||
type: 'openFile',
|
||||
accepts: [
|
||||
|
@ -681,7 +682,6 @@ firmware_flasher.initialize = function (callback) {
|
|||
console.log('Loading file from:', path);
|
||||
|
||||
fileEntry.file(function (file) {
|
||||
tracking.setFirmwareData(tracking.DATA.FIRMWARE_NAME, file.name);
|
||||
const reader = new FileReader();
|
||||
|
||||
reader.onloadend = function(e) {
|
||||
|
@ -695,7 +695,6 @@ firmware_flasher.initialize = function (callback) {
|
|||
self.parsed_hex = data;
|
||||
|
||||
if (self.parsed_hex) {
|
||||
tracking.setFirmwareData(tracking.DATA.FIRMWARE_SIZE, self.parsed_hex.bytes_total);
|
||||
self.localFirmwareLoaded = true;
|
||||
|
||||
showLoadedHex(file.name);
|
||||
|
@ -747,8 +746,6 @@ firmware_flasher.initialize = function (callback) {
|
|||
self.localFirmwareLoaded = false;
|
||||
self.developmentFirmwareLoaded = buildTypesToShow[$('select[name="build_type"]').val()].tag === 'firmwareFlasherOptionLabelBuildTypeDevelopment';
|
||||
|
||||
tracking.setFirmwareData(tracking.DATA.FIRMWARE_SOURCE, 'http');
|
||||
|
||||
if ($('select[name="firmware_version"]').val() === "0") {
|
||||
gui_log(i18n.getMessage('firmwareFlasherNoFirmwareSelected'));
|
||||
return;
|
||||
|
@ -834,8 +831,6 @@ firmware_flasher.initialize = function (callback) {
|
|||
return;
|
||||
}
|
||||
|
||||
tracking.setFirmwareData(tracking.DATA.FIRMWARE_NAME, response.file);
|
||||
|
||||
updateStatus('Pending', response.key, 0, false);
|
||||
|
||||
let retries = 1;
|
||||
|
@ -1470,8 +1465,6 @@ firmware_flasher.cleanup = function (callback) {
|
|||
$(document).unbind('keypress');
|
||||
$(document).off('click', 'span.progressLabel a');
|
||||
|
||||
tracking.resetFirmwareData();
|
||||
|
||||
if (callback) callback();
|
||||
};
|
||||
|
||||
|
|
|
@ -372,9 +372,12 @@ onboard_logging.initialize = function (callback) {
|
|||
|
||||
if (dataflashPresent && FC.SDCARD.state === MSP.SDCARD_STATE_NOT_PRESENT) {
|
||||
loggingStatus = 'Dataflash';
|
||||
tracking.setFlightControllerData(tracking.DATA.LOG_SIZE, FC.DATAFLASH.usedSize);
|
||||
}
|
||||
tracking.setFlightControllerData(tracking.DATA.LOGGING_STATUS, loggingStatus);
|
||||
|
||||
tracking.sendEvent(tracking.EVENT_CATEGORIES.FLIGHT_CONTROLLER, 'DataLogging', {
|
||||
logSize: FC.DATAFLASH.usedSize,
|
||||
logStatus: loggingStatus,
|
||||
});
|
||||
|
||||
if (FC.SDCARD.supported && !sdcardTimer) {
|
||||
// Poll for changes in SD card status
|
||||
|
@ -569,9 +572,6 @@ onboard_logging.initialize = function (callback) {
|
|||
};
|
||||
|
||||
onboard_logging.cleanup = function (callback) {
|
||||
tracking.setFlightControllerData(tracking.DATA.LOGGING_STATUS, undefined);
|
||||
tracking.setFlightControllerData(tracking.DATA.LOG_SIZE, undefined);
|
||||
|
||||
if (sdcardTimer) {
|
||||
clearTimeout(sdcardTimer);
|
||||
sdcardTimer = false;
|
||||
|
|
|
@ -16281,11 +16281,6 @@ unist-util-visit@2.0.3, unist-util-visit@^2.0.0:
|
|||
unist-util-is "^4.0.0"
|
||||
unist-util-visit-parents "^3.0.0"
|
||||
|
||||
universal-ga@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/universal-ga/-/universal-ga-1.2.0.tgz#c893d5d0f7fb2066ff43739e5daed45485c8e23f"
|
||||
integrity sha512-VSkK/aeymj0XQxNJL+Y/kenQKk2EsfWqi3Cf0EKmmGSuPjpA/R6ofJ6xWfstVqRJPj5RiAnyLpHlcshHRVVHJQ==
|
||||
|
||||
universalify@^0.1.0:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue