1
0
Fork 0
mirror of https://github.com/betaflight/betaflight-configurator.git synced 2025-07-23 16:25:22 +03:00

Added more metrics, fixed bug in CLI save.

This commit is contained in:
mikeller 2018-08-10 09:01:07 +12:00
parent 8762dbc553
commit d9e8330997
5 changed files with 53 additions and 8 deletions

View file

@ -31,15 +31,18 @@ var Analytics = function (trackingId, userId, appName, appVersion, buildType, op
this.DATA = { this.DATA = {
BOARD_TYPE: 'boardType', BOARD_TYPE: 'boardType',
API_VERSION: 'apiVersion',
FIRMWARE_TYPE: 'firmwareType', FIRMWARE_TYPE: 'firmwareType',
FIRMWARE_VERSION: 'firmwareVersion', FIRMWARE_VERSION: 'firmwareVersion',
API_VERSION: 'apiVersion',
MCU_ID: 'mcuId',
FIRMWARE_NAME: 'firmwareName', FIRMWARE_NAME: 'firmwareName',
FIRMWARE_CHECKSUM: 'firmwareChecksum', FIRMWARE_CHECKSUM: 'firmwareChecksum',
FIRMWARE_SOURCE: 'firmwareSource', FIRMWARE_SOURCE: 'firmwareSource',
FIRMWARE_CHANNEL: 'firmwareChannel', FIRMWARE_CHANNEL: 'firmwareChannel',
FIRMWARE_ERASE_ALL: 'firmwareEraseAll', FIRMWARE_ERASE_ALL: 'firmwareEraseAll',
FIRMWARE_SIZE: 'firmwareSize',
MCU_ID: 'mcuId',
LOGGING_STATUS: 'loggingStatus',
LOG_SIZE: 'logSize',
}; };
this.DIMENSIONS = { this.DIMENSIONS = {
@ -53,6 +56,13 @@ var Analytics = function (trackingId, userId, appName, appVersion, buildType, op
FIRMWARE_ERASE_ALL: 8, FIRMWARE_ERASE_ALL: 8,
CONFIGURATOR_EXPERT_MODE: 9, CONFIGURATOR_EXPERT_MODE: 9,
FIRMWARE_CHANNEL: 10, FIRMWARE_CHANNEL: 10,
LOGGING_STATUS: 11,
MCU_ID: 12,
};
this.METRICS = {
FIRMWARE_SIZE: 1,
LOG_SIZE: 2,
}; };
this.setDimension(this.DIMENSIONS.CONFIGURATOR_BUILD_TYPE, buildType); this.setDimension(this.DIMENSIONS.CONFIGURATOR_BUILD_TYPE, buildType);
@ -66,6 +76,11 @@ Analytics.prototype.setDimension = function (dimension, value) {
this._googleAnalytics.custom(dimensionName, value); this._googleAnalytics.custom(dimensionName, value);
} }
Analytics.prototype.setMetric = function (metric, value) {
var metricName = 'metric' + metric;
this._googleAnalytics.custom(metricName, value);
}
Analytics.prototype.sendEvent = function (category, action, options) { Analytics.prototype.sendEvent = function (category, action, options) {
this._googleAnalytics.event(category, action, options); this._googleAnalytics.event(category, action, options);
} }
@ -102,7 +117,9 @@ Analytics.prototype._rebuildFlightControllerEvent = function () {
this.setDimension(this.DIMENSIONS.FIRMWARE_TYPE, this._flightControllerData[this.DATA.FIRMWARE_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.FIRMWARE_VERSION, this._flightControllerData[this.DATA.FIRMWARE_VERSION]);
this.setDimension(this.DIMENSIONS.API_VERSION, this._flightControllerData[this.DATA.API_VERSION]); this.setDimension(this.DIMENSIONS.API_VERSION, this._flightControllerData[this.DATA.API_VERSION]);
this._googleAnalytics.set('eventLabel', this._flightControllerData[this.DATA.MCU_ID]); 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]);
} }
Analytics.prototype.setFlightControllerData = function (property, value) { Analytics.prototype.setFlightControllerData = function (property, value) {
@ -122,6 +139,7 @@ Analytics.prototype._rebuildFirmwareEvent = function () {
this.setDimension(this.DIMENSIONS.FIRMWARE_SOURCE, this._firmwareData[this.DATA.FIRMWARE_SOURCE]); 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_ERASE_ALL, this._firmwareData[this.DATA.FIRMWARE_ERASE_ALL]);
this.setDimension(this.DIMENSIONS.FIRMWARE_CHANNEL, this._firmwareData[this.DATA.FIRMWARE_CHANNEL]); this.setDimension(this.DIMENSIONS.FIRMWARE_CHANNEL, this._firmwareData[this.DATA.FIRMWARE_CHANNEL]);
this.setMetric(this.METRICS.FIRMWARE_SIZE, this._firmwareData[this.DATA.FIRMWARE_SIZE]);
this._googleAnalytics.set('eventLabel', this._firmwareData[this.DATA.FIRMWARE_CHECKSUM]); this._googleAnalytics.set('eventLabel', this._firmwareData[this.DATA.FIRMWARE_CHECKSUM]);
} }

View file

@ -254,6 +254,7 @@ function configuration_backup(callback) {
return; return;
} }
analytics.sendEvent(analytics.EVENT_CATEGORIES.FLIGHT_CONTROLLER, 'Backup');
console.log('Write SUCCESSFUL'); console.log('Write SUCCESSFUL');
if (callback) callback(); if (callback) callback();
}; };
@ -337,6 +338,8 @@ function configuration_restore(callback) {
configuration.FEATURE_CONFIG.features = features; configuration.FEATURE_CONFIG.features = features;
} }
analytics.sendEvent(analytics.EVENT_CATEGORIES.FLIGHT_CONTROLLER, 'Restore');
configuration_upload(configuration, callback); configuration_upload(configuration, callback);
} else { } else {
GUI.log(i18n.getMessage('backupFileIncompatible')); GUI.log(i18n.getMessage('backupFileIncompatible'));

View file

@ -60,7 +60,6 @@ TABS.cli.initialize = function (callback) {
var textarea = $('.tab-cli textarea'); var textarea = $('.tab-cli textarea');
$('.tab-cli .save').click(function() { $('.tab-cli .save').click(function() {
var prefix = 'cli'; var prefix = 'cli';
var suffix = 'txt'; var suffix = 'txt';
@ -87,9 +86,11 @@ TABS.cli.initialize = function (callback) {
}; };
writer.onwriteend = function () { writer.onwriteend = function () {
if (writer.length === 0) { if (self.outputHistory.length > 0 && writer.length === 0) {
writer.write(new Blob([self.outputHistory], {type: 'text/plain'})); writer.write(new Blob([self.outputHistory], {type: 'text/plain'}));
} else { } else {
analytics.sendEvent(analytics.EVENT_CATEGORIES.FLIGHT_CONTROLLER, 'CliSave', self.outputHistory.length);
console.log('write complete'); console.log('write complete');
} }
}; };

View file

@ -56,12 +56,12 @@ TABS.firmware_flasher.initialize = function (callback) {
parsed_hex = data; parsed_hex = data;
if (parsed_hex) { if (parsed_hex) {
analytics.setFirmwareData(analytics.DATA.FIRMWARE_SIZE, parsed_hex.bytes_total);
if (!FirmwareCache.has(summary)) { if (!FirmwareCache.has(summary)) {
FirmwareCache.put(summary, intel_hex); FirmwareCache.put(summary, intel_hex);
} }
var url;
$('span.progressLabel').html('<a class="save_firmware" href="#" title="Save Firmware">Loaded Online Firmware: (' + parsed_hex.bytes_total + ' bytes)</a>'); $('span.progressLabel').html('<a class="save_firmware" href="#" title="Save Firmware">Loaded Online Firmware: (' + parsed_hex.bytes_total + ' bytes)</a>');
$('a.flash_firmware').removeClass('disabled'); $('a.flash_firmware').removeClass('disabled');
@ -367,6 +367,8 @@ TABS.firmware_flasher.initialize = function (callback) {
parsed_hex = data; parsed_hex = data;
if (parsed_hex) { if (parsed_hex) {
analytics.setFirmwareData(analytics.DATA.FIRMWARE_SIZE, parsed_hex.bytes_total);
$('a.flash_firmware').removeClass('disabled'); $('a.flash_firmware').removeClass('disabled');
$('span.progressLabel').text(i18n.getMessage('firmwareFlasherFirmwareLocalLoaded', parsed_hex.bytes_total)); $('span.progressLabel').text(i18n.getMessage('firmwareFlasherFirmwareLocalLoaded', parsed_hex.bytes_total));

View file

@ -153,6 +153,8 @@ TABS.onboard_logging.initialize = function (callback) {
.toggleClass("msc-supported", true); .toggleClass("msc-supported", true);
$('a.onboardLoggingRebootMsc').click(function () { $('a.onboardLoggingRebootMsc').click(function () {
analytics.sendEvent(analytics.EVENT_CATEGORIES.FLIGHT_CONTROLLER, 'RebootMsc');
var buffer = []; var buffer = [];
buffer.push(2); buffer.push(2);
MSP.send_message(MSPCodes.MSP_SET_REBOOT, buffer, false); MSP.send_message(MSPCodes.MSP_SET_REBOOT, buffer, false);
@ -298,6 +300,8 @@ TABS.onboard_logging.initialize = function (callback) {
} }
function update_html() { function update_html() {
var dataflashPresent = DATAFLASH.totalSize > 0;
update_bar_width($(".tab-onboard_logging .dataflash-used"), DATAFLASH.usedSize, DATAFLASH.totalSize, i18n.getMessage('dataflashUsedSpace'), false); update_bar_width($(".tab-onboard_logging .dataflash-used"), DATAFLASH.usedSize, DATAFLASH.totalSize, i18n.getMessage('dataflashUsedSpace'), false);
update_bar_width($(".tab-onboard_logging .dataflash-free"), DATAFLASH.totalSize - DATAFLASH.usedSize, DATAFLASH.totalSize, i18n.getMessage('dataflashFreeSpace'), false); update_bar_width($(".tab-onboard_logging .dataflash-free"), DATAFLASH.totalSize - DATAFLASH.usedSize, DATAFLASH.totalSize, i18n.getMessage('dataflashFreeSpace'), false);
@ -312,7 +316,7 @@ TABS.onboard_logging.initialize = function (callback) {
.toggleClass("sdcard-ready", SDCARD.state === MSP.SDCARD_STATE_READY); .toggleClass("sdcard-ready", SDCARD.state === MSP.SDCARD_STATE_READY);
if (semver.gte(CONFIG.apiVersion, "1.40.0")) { if (semver.gte(CONFIG.apiVersion, "1.40.0")) {
var mscIsReady = (DATAFLASH.totalSize > 0) || (SDCARD.state === MSP.SDCARD_STATE_READY); var mscIsReady = dataflashPresent || (SDCARD.state === MSP.SDCARD_STATE_READY);
$(".tab-onboard_logging") $(".tab-onboard_logging")
.toggleClass("msc-not-ready", !mscIsReady); .toggleClass("msc-not-ready", !mscIsReady);
@ -323,26 +327,38 @@ TABS.onboard_logging.initialize = function (callback) {
} }
} }
var loggingStatus
switch (SDCARD.state) { switch (SDCARD.state) {
case MSP.SDCARD_STATE_NOT_PRESENT: case MSP.SDCARD_STATE_NOT_PRESENT:
$(".sdcard-status").text(i18n.getMessage('sdcardStatusNoCard')); $(".sdcard-status").text(i18n.getMessage('sdcardStatusNoCard'));
loggingStatus = 'SdCard: NotPresent';
break; break;
case MSP.SDCARD_STATE_FATAL: case MSP.SDCARD_STATE_FATAL:
$(".sdcard-status").html(i18n.getMessage('sdcardStatusReboot')); $(".sdcard-status").html(i18n.getMessage('sdcardStatusReboot'));
loggingStatus = 'SdCard: Error';
break; break;
case MSP.SDCARD_STATE_READY: case MSP.SDCARD_STATE_READY:
$(".sdcard-status").text(i18n.getMessage('sdcardStatusReady')); $(".sdcard-status").text(i18n.getMessage('sdcardStatusReady'));
loggingStatus = 'SdCard: Ready';
break; break;
case MSP.SDCARD_STATE_CARD_INIT: case MSP.SDCARD_STATE_CARD_INIT:
$(".sdcard-status").text(i18n.getMessage('sdcardStatusStarting')); $(".sdcard-status").text(i18n.getMessage('sdcardStatusStarting'));
loggingStatus = 'SdCard: Init';
break; break;
case MSP.SDCARD_STATE_FS_INIT: case MSP.SDCARD_STATE_FS_INIT:
$(".sdcard-status").text(i18n.getMessage('sdcardStatusFileSystem')); $(".sdcard-status").text(i18n.getMessage('sdcardStatusFileSystem'));
loggingStatus = 'SdCard: FsInit';
break; break;
default: default:
$(".sdcard-status").text(i18n.getMessage('sdcardStatusUnknown',[SDCARD.state])); $(".sdcard-status").text(i18n.getMessage('sdcardStatusUnknown',[SDCARD.state]));
} }
if (dataflashPresent && SDCARD.state === MSP.SDCARD_STATE_NOT_PRESENT) {
loggingStatus = 'Dataflash';
analytics.setFlightControllerData(analytics.DATA.LOG_SIZE, DATAFLASH.usedSize);
}
analytics.setFlightControllerData(analytics.DATA.LOGGING_STATUS, loggingStatus);
if (SDCARD.supported && !sdcardTimer) { if (SDCARD.supported && !sdcardTimer) {
// Poll for changes in SD card status // Poll for changes in SD card status
sdcardTimer = setTimeout(function() { sdcardTimer = setTimeout(function() {
@ -374,6 +390,8 @@ TABS.onboard_logging.initialize = function (callback) {
} }
function mark_saving_dialog_done(startTime, totalBytes, totalBytesCompressed) { function mark_saving_dialog_done(startTime, totalBytes, totalBytesCompressed) {
analytics.sendEvent(analytics.EVENT_CATEGORIES.FLIGHT_CONTROLLER, 'SaveDataflash');
var totalTime = (new Date().getTime() - startTime) / 1000; var totalTime = (new Date().getTime() - startTime) / 1000;
console.log('Received ' + totalBytes + ' bytes in ' + totalTime.toFixed(2) + 's (' console.log('Received ' + totalBytes + ' bytes in ' + totalTime.toFixed(2) + 's ('
+ (totalBytes / totalTime / 1024).toFixed(2) + 'kB / s) with block size ' + self.blockSize + '.'); + (totalBytes / totalTime / 1024).toFixed(2) + 'kB / s) with block size ' + self.blockSize + '.');
@ -539,6 +557,9 @@ TABS.onboard_logging.initialize = function (callback) {
}; };
TABS.onboard_logging.cleanup = function (callback) { TABS.onboard_logging.cleanup = function (callback) {
analytics.setFlightControllerData(analytics.DATA.LOGGING_STATUS, undefined);
analytics.setFlightControllerData(analytics.DATA.LOG_SIZE, undefined);
if (sdcardTimer) { if (sdcardTimer) {
clearTimeout(sdcardTimer); clearTimeout(sdcardTimer);
sdcardTimer = false; sdcardTimer = false;