[Fixed Position] Do not just show range values, be more flexible to other telemetry types. Fixes #1740

This commit is contained in:
Henry 2017-10-23 10:14:43 -07:00
parent 7442768ced
commit 80582f5e8d
2 changed files with 70 additions and 10 deletions

View File

@ -360,22 +360,47 @@ define(
*/ */
FixedController.prototype.updateView = function (telemetryObject, datum) { FixedController.prototype.updateView = function (telemetryObject, datum) {
var metadata = this.openmct.telemetry.getMetadata(telemetryObject); var metadata = this.openmct.telemetry.getMetadata(telemetryObject);
var rangeMetadata = metadata.valuesForHints(['range'])[0]; var telemetryKeyToDisplay = this.chooseTelemetryKeyToDisplay(metadata);
var rangeKey = rangeMetadata.source || rangeMetadata.key; var formattedTelemetryValue = this.getFormattedTelemetryValueForKey(telemetryKeyToDisplay, datum, metadata);
var valueMetadata = metadata.value(rangeKey);
var limitEvaluator = this.openmct.telemetry.limitEvaluator(telemetryObject); var limitEvaluator = this.openmct.telemetry.limitEvaluator(telemetryObject);
var formatter = this.openmct.telemetry.getValueFormatter(valueMetadata); var alarm = limitEvaluator && limitEvaluator.evaluate(datum, telemetryKeyToDisplay);
var value = datum[valueMetadata.key];
var alarm = limitEvaluator && limitEvaluator.evaluate(datum, rangeKey);
this.setDisplayedValue( this.setDisplayedValue(
telemetryObject, telemetryObject,
formatter.format(value), formattedTelemetryValue,
alarm && alarm.cssClass alarm && alarm.cssClass
); );
this.digest(); this.digest();
}; };
/**
* @private
*/
FixedController.prototype.getFormattedTelemetryValueForKey = function (telemetryKeyToDisplay, datum, metadata) {
var valueMetadata = metadata.value(telemetryKeyToDisplay);
var formatter = this.openmct.telemetry.getValueFormatter(valueMetadata);
return formatter.format(datum[valueMetadata.key]);
};
/**
* @private
*/
FixedController.prototype.chooseTelemetryKeyToDisplay = function (metadata) {
// If there is a range value, show that preferentially
var telemetryKeyToDisplay = metadata.valuesForHints(['range'])[0];
// If no range is defined, default to the highest priority non time-domain data.
if (telemetryKeyToDisplay === undefined) {
var valuesOrderedByPriority = metadata.values();
telemetryKeyToDisplay = valuesOrderedByPriority.filter(function (valueMetadata) {
return !(valueMetadata.hints.domain);
})[0];
}
return telemetryKeyToDisplay.source;
};
/** /**
* Request the last historical data point for the given domain objects * Request the last historical data point for the given domain objects
* @param {object[]} objects * @param {object[]} objects
@ -388,7 +413,9 @@ define(
objects.forEach(function (object) { objects.forEach(function (object) {
self.openmct.telemetry.request(object, {start: bounds.start, end: bounds.end, size: 1}) self.openmct.telemetry.request(object, {start: bounds.start, end: bounds.end, size: 1})
.then(function (data) { .then(function (data) {
self.updateView(object, data[data.length - 1]); if (data.length > 0) {
self.updateView(object, data[data.length - 1]);
}
}); });
}); });
return objects; return objects;

View File

@ -178,7 +178,6 @@ define(
Promise.resolve(mockChildren) Promise.resolve(mockChildren)
); );
mockScope.model = testModel; mockScope.model = testModel;
mockScope.configuration = testConfiguration; mockScope.configuration = testConfiguration;
mockScope.selection = jasmine.createSpyObj( mockScope.selection = jasmine.createSpyObj(
@ -194,7 +193,8 @@ define(
mockMetadata = jasmine.createSpyObj('mockMetadata', [ mockMetadata = jasmine.createSpyObj('mockMetadata', [
'valuesForHints', 'valuesForHints',
'value' 'value',
'values'
]); ]);
mockMetadata.value.andReturn({ mockMetadata.value.andReturn({
key: 'value' key: 'value'
@ -653,6 +653,39 @@ define(
}); });
}); });
it("selects an range value to display, if available", function () {
mockMetadata.valuesForHints.andReturn([
{
key: 'range',
source: 'range'
}
]);
var key = controller.chooseTelemetryKeyToDisplay(mockMetadata);
expect(key).toEqual('range');
});
it("selects the first non-domain value to display, if no range available", function () {
mockMetadata.valuesForHints.andReturn([]);
mockMetadata.values.andReturn([
{
key: 'domain',
source: 'domain',
hints: {
domain: 1
}
},
{
key: 'image',
source: 'image',
hints: {
image: 1
}
}
]);
var key = controller.chooseTelemetryKeyToDisplay(mockMetadata);
expect(key).toEqual('image');
});
it("reflects limit status", function () { it("reflects limit status", function () {
mockLimitEvaluator.evaluate.andReturn({cssClass: "alarm-a"}); mockLimitEvaluator.evaluate.andReturn({cssClass: "alarm-a"});
controller.updateView(mockTelemetryObject, [{ controller.updateView(mockTelemetryObject, [{