[Telemetry Mean] Addressed code review issues

This commit is contained in:
Henry 2017-11-30 13:08:39 -08:00 committed by Victor Woeltjen
parent 8a66731271
commit 2390278b97
2 changed files with 23 additions and 24 deletions

View File

@ -65,15 +65,10 @@ define([
};
MeanTelemetryProvider.prototype.subscribeToAverage = function (domainObject, samples, callback) {
var telemetryAverager = new TelemetryAverager(this.telemetryAPI, this.timeAPI, domainObject, samples);
var telemetryAverager = new TelemetryAverager(this.telemetryAPI, this.timeAPI, domainObject, samples, callback);
var createAverageDatum = telemetryAverager.createAverageDatum.bind(telemetryAverager);
return this.telemetryAPI.subscribe(domainObject, function (telemetryDatum) {
var avgData = telemetryAverager.createAverageDatum(telemetryDatum);
if (telemetryAverager.sampleCount() === samples) {
callback(avgData);
}
}.bind(this));
return this.telemetryAPI.subscribe(domainObject, createAverageDatum);
};
MeanTelemetryProvider.prototype.request = function (domainObject, request) {
@ -90,19 +85,15 @@ define([
*/
MeanTelemetryProvider.prototype.requestAverageTelemetry = function (domainObject, request, samples) {
var averageData = [];
var telemetryAverager = new TelemetryAverager(this.telemetryAPI, this.timeAPI, domainObject, samples);
var addToAverageData = averageData.push.bind(averageData);
var telemetryAverager = new TelemetryAverager(this.telemetryAPI, this.timeAPI, domainObject, samples, addToAverageData);
var createAverageDatum = telemetryAverager.createAverageDatum.bind(telemetryAverager);
return this.telemetryAPI.request(domainObject, request).then(function (telemetryData) {
telemetryData.forEach(function (datum) {
var avgDatum = telemetryAverager.createAverageDatum(datum);
if (telemetryAverager.sampleCount() === samples) {
averageData.push(avgDatum);
}
}.bind(this));
telemetryData.forEach(createAverageDatum);
return averageData;
}.bind(this));
});
};
/**

View File

@ -22,7 +22,7 @@
define([], function () {
function TelemetryAverager(telemetryAPI, timeAPI, domainObject, samples) {
function TelemetryAverager(telemetryAPI, timeAPI, domainObject, samples, averageDatumCallback) {
this.telemetryAPI = telemetryAPI;
this.timeAPI = timeAPI;
@ -37,6 +37,8 @@ define([], function () {
// Defined dynamically based on current time system
this.domainKey = undefined;
this.domainFormatter = undefined;
this.averageDatumCallback = averageDatumCallback;
}
TelemetryAverager.prototype.createAverageDatum = function (telemetryDatum) {
@ -46,16 +48,22 @@ define([], function () {
var rangeValue = this.rangeFormatter.parse(telemetryDatum);
this.averagingWindow.push(rangeValue);
if (this.averagingWindow.length > this.samples) {
if (this.averagingWindow.length < this.samples) {
// We do not have enough data to produce an average
return;
} else if (this.averagingWindow.length > this.samples) {
//Do not let averaging window grow beyond defined sample size
this.averagingWindow.shift();
}
var averageValue = this.calculateMean();
var meanDatum = {};
meanDatum[this.domainKey] = timeValue;
meanDatum.value = averageValue;
return meanDatum;
this.averageDatumCallback(meanDatum);
};
/**
@ -73,6 +81,10 @@ define([], function () {
};
/**
* The mean telemetry filter produces domain values in whatever time
* system is currently selected from the conductor. Because this can
* change dynamically, the averager needs to be updated regularly with
* the current domain.
* @private
*/
TelemetryAverager.prototype.setDomainKeyAndFormatter = function () {
@ -104,9 +116,5 @@ define([], function () {
return this.telemetryAPI.getValueFormatter(valueMetadata);
};
TelemetryAverager.prototype.sampleCount = function () {
return this.averagingWindow.length;
};
return TelemetryAverager;
});