mirror of
https://github.com/nasa/openmct.git
synced 2025-02-06 19:19:23 +00:00
[Fixed Position] Do not just show range values, be more flexible to other telemetry types. Fixes #1740
This commit is contained in:
parent
7442768ced
commit
80582f5e8d
@ -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;
|
||||||
|
@ -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, [{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user