diff --git a/src/plugins/condition/Condition.js b/src/plugins/condition/Condition.js index 9f01e9ebc0..2b780db7a5 100644 --- a/src/plugins/condition/Condition.js +++ b/src/plugins/condition/Condition.js @@ -272,11 +272,11 @@ export default class Condition extends EventEmitter { } } - requestLADConditionResult() { + requestLADConditionResult(options) { let latestTimestamp; let criteriaResults = {}; const criteriaRequests = this.criteria - .map(criterion => criterion.requestLAD(this.conditionManager.telemetryObjects)); + .map(criterion => criterion.requestLAD(this.conditionManager.telemetryObjects, options)); return Promise.all(criteriaRequests) .then(results => { diff --git a/src/plugins/condition/ConditionManager.js b/src/plugins/condition/ConditionManager.js index 8ad74b05b5..50ca499e8f 100644 --- a/src/plugins/condition/ConditionManager.js +++ b/src/plugins/condition/ConditionManager.js @@ -282,7 +282,7 @@ export default class ConditionManager extends EventEmitter { return currentCondition; } - requestLADConditionSetOutput() { + requestLADConditionSetOutput(options) { if (!this.conditions.length) { return Promise.resolve([]); } @@ -291,7 +291,7 @@ export default class ConditionManager extends EventEmitter { let latestTimestamp; let conditionResults = {}; const conditionRequests = this.conditions - .map(condition => condition.requestLADConditionResult()); + .map(condition => condition.requestLADConditionResult(options)); return Promise.all(conditionRequests) .then((results) => { diff --git a/src/plugins/condition/ConditionSetTelemetryProvider.js b/src/plugins/condition/ConditionSetTelemetryProvider.js index c984a6292c..55ace6e805 100644 --- a/src/plugins/condition/ConditionSetTelemetryProvider.js +++ b/src/plugins/condition/ConditionSetTelemetryProvider.js @@ -40,10 +40,10 @@ export default class ConditionSetTelemetryProvider { return domainObject.type === 'conditionSet'; } - request(domainObject) { + request(domainObject, options) { let conditionManager = this.getConditionManager(domainObject); - return conditionManager.requestLADConditionSetOutput() + return conditionManager.requestLADConditionSetOutput(options) .then(latestOutput => { return latestOutput; }); @@ -52,7 +52,9 @@ export default class ConditionSetTelemetryProvider { subscribe(domainObject, callback) { let conditionManager = this.getConditionManager(domainObject); - conditionManager.on('conditionSetResultUpdated', callback); + conditionManager.on('conditionSetResultUpdated', (data) => { + callback(data); + }); return this.destroyConditionManager.bind(this, this.openmct.objects.makeKeyString(domainObject.identifier)); } diff --git a/src/plugins/condition/StyleRuleManager.js b/src/plugins/condition/StyleRuleManager.js index 0bae54fe97..62660b02cb 100644 --- a/src/plugins/condition/StyleRuleManager.js +++ b/src/plugins/condition/StyleRuleManager.js @@ -35,6 +35,7 @@ export default class StyleRuleManager extends EventEmitter { if (styleConfiguration) { this.initialize(styleConfiguration); if (styleConfiguration.conditionSetIdentifier) { + this.openmct.time.on("bounds", this.refreshData.bind(this)); this.subscribeToConditionSet(); } else { this.applyStaticStyle(); @@ -83,6 +84,25 @@ export default class StyleRuleManager extends EventEmitter { }); } + refreshData(bounds, isTick) { + if (!isTick) { + let options = { + start: bounds.start, + end: bounds.end, + size: 1, + strategy: 'latest' + }; + this.openmct.objects.get(this.conditionSetIdentifier).then((conditionSetDomainObject) => { + this.openmct.telemetry.request(conditionSetDomainObject, options) + .then(output => { + if (output && output.length) { + this.handleConditionSetResultUpdated(output[0]); + } + }); + }); + } + } + updateObjectStyleConfig(styleConfiguration) { if (!styleConfiguration || !styleConfiguration.conditionSetIdentifier) { this.initialize(styleConfiguration || {}); @@ -160,10 +180,14 @@ export default class StyleRuleManager extends EventEmitter { destroy() { if (this.stopProvidingTelemetry) { + this.stopProvidingTelemetry(); delete this.stopProvidingTelemetry; } + this.openmct.time.off("bounds", this.refreshData); + this.openmct.editor.off('isEditing', this.toggleSubscription); + this.conditionSetIdentifier = undefined; } diff --git a/src/plugins/condition/criterion/AllTelemetryCriterion.js b/src/plugins/condition/criterion/AllTelemetryCriterion.js index 1fe1448a5f..85504190f4 100644 --- a/src/plugins/condition/criterion/AllTelemetryCriterion.js +++ b/src/plugins/condition/criterion/AllTelemetryCriterion.js @@ -147,12 +147,16 @@ export default class AllTelemetryCriterion extends TelemetryCriterion { this.result = evaluateResults(Object.values(this.telemetryDataCache), this.telemetry); } - requestLAD(telemetryObjects) { - const options = { + requestLAD(telemetryObjects, requestOptions) { + let options = { strategy: 'latest', size: 1 }; + if (requestOptions !== undefined) { + options = Object.assign(options, requestOptions); + } + if (!this.isValid()) { return this.formatData({}, telemetryObjects); } diff --git a/src/plugins/condition/criterion/TelemetryCriterion.js b/src/plugins/condition/criterion/TelemetryCriterion.js index c2f49671bb..f05383454d 100644 --- a/src/plugins/condition/criterion/TelemetryCriterion.js +++ b/src/plugins/condition/criterion/TelemetryCriterion.js @@ -137,12 +137,16 @@ export default class TelemetryCriterion extends EventEmitter { } } - requestLAD() { - const options = { + requestLAD(telemetryObjects, requestOptions) { + let options = { strategy: 'latest', size: 1 }; + if (requestOptions !== undefined) { + options = Object.assign(options, requestOptions); + } + if (!this.isValid()) { return { id: this.id, diff --git a/src/plugins/displayLayout/components/TelemetryView.vue b/src/plugins/displayLayout/components/TelemetryView.vue index 2d3124a4c2..b5d232fb6f 100644 --- a/src/plugins/displayLayout/components/TelemetryView.vue +++ b/src/plugins/displayLayout/components/TelemetryView.vue @@ -269,7 +269,12 @@ export default { }, subscribeToObject() { this.subscription = this.openmct.telemetry.subscribe(this.domainObject, function (datum) { - if (this.openmct.time.clock() !== undefined) { + const key = this.openmct.time.timeSystem().key; + const datumTimeStamp = datum[key]; + if (this.openmct.time.clock() !== undefined + || (datumTimeStamp + && (this.openmct.time.bounds().end >= datumTimeStamp)) + ) { this.updateView(datum); } }.bind(this));