From 7f32d196e441739a31ccb73d43066889633efc6d Mon Sep 17 00:00:00 2001 From: David Tsay Date: Thu, 5 Mar 2020 23:11:20 -0800 Subject: [PATCH] WIP request gets to telemetry criterion before erroring --- src/plugins/condition/Condition.js | 2 +- src/plugins/condition/ConditionManager.js | 92 +++++++++---------- .../ConditionSetTelemetryProvider.js | 15 ++- .../condition/criterion/TelemetryCriterion.js | 26 +++--- 4 files changed, 68 insertions(+), 67 deletions(-) diff --git a/src/plugins/condition/Condition.js b/src/plugins/condition/Condition.js index 14df0e2555..af6cdc79ec 100644 --- a/src/plugins/condition/Condition.js +++ b/src/plugins/condition/Condition.js @@ -211,7 +211,7 @@ export default class ConditionClass extends EventEmitter { ); }); - Promise.all(criteriaResults) + return Promise.all(criteriaResults) .then(results => { results.forEach(result => { this.updateCriteriaResults(result); diff --git a/src/plugins/condition/ConditionManager.js b/src/plugins/condition/ConditionManager.js index e54d0aa19c..7e2dff198c 100644 --- a/src/plugins/condition/ConditionManager.js +++ b/src/plugins/condition/ConditionManager.js @@ -33,6 +33,7 @@ export default class ConditionManager extends EventEmitter { this.latestTimestamp = {}; this.instantiate = this.openmct.$injector.get('instantiate'); this.loaded = undefined; + this.conditionCollection = []; this.initialize(); } @@ -42,25 +43,20 @@ export default class ConditionManager extends EventEmitter { initialize() { this.conditionResults = {}; - let loading = []; - this.openmct.objects.get(this.domainObject.identifier).then((obj) => { - this.observeForChanges(obj); - this.conditionCollection = []; - if (this.domainObject.configuration.conditionCollection.length) { - this.domainObject.configuration.conditionCollection.forEach((conditionConfigurationId, index) => { - this.openmct.objects.get(conditionConfigurationId).then((conditionConfiguration) => { - loading.push( - this.initCondition(conditionConfiguration, index) - ); + this.openmct.objects.get(this.domainObject.identifier) + .then((obj) => { + this.observeForChanges(obj); + if (this.domainObject.configuration.conditionCollection.length) { + this.domainObject.configuration.conditionCollection.forEach((conditionConfigurationId, index) => { + this.openmct.objects.get(conditionConfigurationId).then((conditionConfiguration) => { + this.initCondition(conditionConfiguration, index); + }); }); - }); - } else { - this.addCondition(true); - } - }); - this.loaded = Promise.all(loading) - .then(() => { return true; }); + } else { + this.addCondition(true); + } + }); } observeForChanges(domainObject) { @@ -109,8 +105,6 @@ export default class ConditionManager extends EventEmitter { if (conditionConfiguration.isDefault) { this.handleConditionResult(); } - - return Promise.resolve(true); } createConditionDomainObject(isDefault, conditionConfiguration) { @@ -236,8 +230,6 @@ export default class ConditionManager extends EventEmitter { } updateConditionResults(resultObj) { - console.log(this.conditionCollection); - if (!resultObj) { return; } @@ -281,37 +273,45 @@ export default class ConditionManager extends EventEmitter { } requestLADConditionSetOutput() { + if (!this.domainObject.configuration.conditionCollection.length) { + return Promise.resolve([]); + } + const conditionResults = []; - this.load() - .then(() => { - this.conditionCollection.forEach(conditionId => { - this.openmct.objects.get(conditionId) - .then(condition => { - conditionResults.push( - condition.requestLADConditionResult() - ); - }); + this.domainObject.configuration.conditionCollection.forEach((conditionId, index) => { + this.openmct.objects.get(conditionId) + .then(conditionConfiguration => { + let condition = new Condition(conditionConfiguration, this.openmct); + if (index !== undefined) { + this.conditionCollection.splice(index + 1, 0, condition); + } else { + this.conditionCollection.unshift(condition); + } + + conditionResults.push( + condition.requestLADConditionResult() + ); }); + }); - Promise.all(conditionResults) - .then((results) => { - results.forEach(resultObj => { this.updateConditionResults(resultObj); }); - const currentConditionIdentifier = this.getCurrentConditionId(); - - this.openmct.objects.get(currentConditionIdentifier).then((obj) => { - return Object.assign( - { - output: obj.configuration.output, - id: this.domainObject.identifier, - conditionId: currentConditionIdentifier - }, - this.latestTimestamp - ); - }); - }); + return Promise.all(conditionResults) + .then((results) => { + results.forEach(resultObj => { this.updateConditionResults(resultObj); }); + const currentConditionIdentifier = this.getCurrentConditionId(); + this.openmct.objects.get(currentConditionIdentifier).then((obj) => { + return Object.assign( + { + output: obj.configuration.output, + id: this.domainObject.identifier, + conditionId: currentConditionIdentifier + }, + this.latestTimestamp + ); + }); }); + } persist() { diff --git a/src/plugins/condition/ConditionSetTelemetryProvider.js b/src/plugins/condition/ConditionSetTelemetryProvider.js index a3ec173ae1..2075660440 100644 --- a/src/plugins/condition/ConditionSetTelemetryProvider.js +++ b/src/plugins/condition/ConditionSetTelemetryProvider.js @@ -19,18 +19,17 @@ export default class ConditionSetTelemetryProvider { request(domainObject, options) { const conditionManager = new ConditionManager(domainObject, this.openmct); - const output = conditionManager.requestLADConditionSetOutput(); - return output; + return conditionManager.requestLADConditionSetOutput(); } subscribe(domainObject, callback) { - const conditionManager = new ConditionManager(domainObject, this.openmct); - conditionManager.on('conditionSetResultUpdated', callback); + // const conditionManager = new ConditionManager(domainObject, this.openmct); + // conditionManager.on('conditionSetResultUpdated', callback); - return function unsubscribe() { - conditionManager.off('conditionSetResultUpdated'); - conditionManager.destroy(); - } + // return function unsubscribe() { + // conditionManager.off('conditionSetResultUpdated'); + // conditionManager.destroy(); + // } } } diff --git a/src/plugins/condition/criterion/TelemetryCriterion.js b/src/plugins/condition/criterion/TelemetryCriterion.js index 38482bb82a..f3bb0f5603 100644 --- a/src/plugins/condition/criterion/TelemetryCriterion.js +++ b/src/plugins/condition/criterion/TelemetryCriterion.js @@ -111,10 +111,6 @@ export default class TelemetryCriterion extends EventEmitter { } requestLAD(options) { - if (!this.isValid()) { - return this.formatData({}); - } - options = Object.assign({}, options, { @@ -122,14 +118,20 @@ export default class TelemetryCriterion extends EventEmitter { size: 1 } ); - - this.telemetryAPI.request( - this.telemetryObject, - options - ).then(results => { - const datum = results.length ? results[results.length - 1] : {}; - return this.formatData(datum); - }); + + return this.objectAPI.get(this.objectAPI.makeKeyString(this.telemetry)) + .then((obj) => { + if (!obj || !this.metadata || !this.operation) { + return this.formatData({}); + } + return this.telemetryAPI.request( + obj, + options + ).then(results => { + const datum = results.length ? results[results.length - 1] : {}; + return this.formatData(datum); + }); + }); } /**