From 3e6509ce6f406395f2322ebd5d59157b6fcfe137 Mon Sep 17 00:00:00 2001 From: David Tsay Date: Thu, 5 Mar 2020 12:14:27 -0800 Subject: [PATCH] WIP add support for LAD request --- src/plugins/condition/Condition.js | 11 ++++++ src/plugins/condition/ConditionManager.js | 4 ++ .../ConditionSetTelemetryProvider.js | 13 ++++++- .../condition/components/ConditionSet.vue | 5 +++ .../condition/criterion/TelemetryCriterion.js | 38 +++++++++++++++++-- 5 files changed, 66 insertions(+), 5 deletions(-) diff --git a/src/plugins/condition/Condition.js b/src/plugins/condition/Condition.js index 556feb766b..6f7a4d7b9d 100644 --- a/src/plugins/condition/Condition.js +++ b/src/plugins/condition/Condition.js @@ -189,6 +189,10 @@ export default class ConditionClass extends EventEmitter { } } + handleLADCriterionResult(eventData) { + + } + handleCriterionResult(eventData) { const id = eventData.id; @@ -199,6 +203,13 @@ export default class ConditionClass extends EventEmitter { this.handleConditionUpdated(eventData.data); } + requestLatest() { + const promises = + + Promise.all(promises) + .then() + } + subscribe() { // TODO it looks like on any single criterion update subscriptions fire for all criteria this.criteria.forEach((criterion) => { diff --git a/src/plugins/condition/ConditionManager.js b/src/plugins/condition/ConditionManager.js index 25a3512155..c7706db789 100644 --- a/src/plugins/condition/ConditionManager.js +++ b/src/plugins/condition/ConditionManager.js @@ -251,6 +251,10 @@ export default class ConditionManager extends EventEmitter { }); } + requestLatest() { + + } + persist() { this.openmct.objects.mutate(this.domainObject, 'configuration.conditionCollection', this.domainObject.configuration.conditionCollection); } diff --git a/src/plugins/condition/ConditionSetTelemetryProvider.js b/src/plugins/condition/ConditionSetTelemetryProvider.js index cf721654ce..6809099403 100644 --- a/src/plugins/condition/ConditionSetTelemetryProvider.js +++ b/src/plugins/condition/ConditionSetTelemetryProvider.js @@ -9,14 +9,23 @@ export default class ConditionSetTelemetryProvider { return domainObject.type === 'conditionSet'; } - supportsRequest(domainObject, options) { - return false; + supportsRequest(domainObject) { + return domainObject.type === 'conditionSet'; } supportsSubscribe(domainObject) { return domainObject.type === 'conditionSet'; } + request(domainObject, options) { + let conditionManager = new ConditionManager(domainObject, this.openmct); + return conditionManager.requestLatest() + .then(latestDatum => { + return latestDatum ? [latestDatum] : []; + }); + // return Promise.resolve([]); + } + subscribe(domainObject, callback) { let conditionManager = new ConditionManager(domainObject, this.openmct); conditionManager.on('conditionSetResultUpdated', callback); diff --git a/src/plugins/condition/components/ConditionSet.vue b/src/plugins/condition/components/ConditionSet.vue index b81fb29745..50e1a5bb5e 100644 --- a/src/plugins/condition/components/ConditionSet.vue +++ b/src/plugins/condition/components/ConditionSet.vue @@ -74,6 +74,11 @@ export default { this.currentConditionOutput = currentConditionResult.output; }, provideTelemetry() { + this.openmct.telemetry + .request(this.domainObject) + .then(output => { + this.updateCurrentOutput(output); + }); this.stopProvidingTelemetry = this.openmct.telemetry .subscribe(this.domainObject, output => { this.updateCurrentOutput(output); }); } diff --git a/src/plugins/condition/criterion/TelemetryCriterion.js b/src/plugins/condition/criterion/TelemetryCriterion.js index c9b9498b21..b57a56f822 100644 --- a/src/plugins/condition/criterion/TelemetryCriterion.js +++ b/src/plugins/condition/criterion/TelemetryCriterion.js @@ -55,10 +55,11 @@ export default class TelemetryCriterion extends EventEmitter { this.emitEvent('criterionUpdated', this); } - handleSubscription(data) { + formatData(data) { const datum = { result: this.computeResult(data) - }; + } + if (data) { // TODO check back to see if we should format times here this.timeAPI.getAllTimeSystems().forEach(timeSystem => { @@ -66,7 +67,15 @@ export default class TelemetryCriterion extends EventEmitter { }); } - this.emitEvent('criterionResultUpdated', datum); + return datum; + } + + handleRequest(data) { + this.emitEvent('criterionLADResultUpdated', this.formatData(data)); + } + + handleSubscription(data) { + this.emitEvent('criterionResultUpdated', this.formatData(data)); } findOperation(operation) { @@ -105,6 +114,29 @@ export default class TelemetryCriterion extends EventEmitter { return this.telemetryObject && this.metadata && this.operation; } + requestLatest(options) { + if (this.isValid()) { + options = Object.assign({}, + options, + { + strategy: 'latest', + size: 1 + } + ); + + this.telemetryAPI.request( + this.telemetryObject, + options + ).then(results => { + if(results && results.length) { + results[results.length - 1] + } + }) + } else { + // default + } + } + /** * Subscribes to the telemetry object and returns an unsubscribe function * If the telemetry is not valid, returns nothing