From 95f73d8eb8e7d7fd36c1352acd67c2b85a811e5b Mon Sep 17 00:00:00 2001 From: David Tsay <3614296+davetsay@users.noreply.github.com> Date: Tue, 28 Apr 2020 13:02:23 -0700 Subject: [PATCH] [Conditionals] fix #2961 in master (#2969) * use correct id for telemetry requests * request and subscription data cache should be mutually exclusive use latest timestamp for any/all requests * do not add prop to datum remove unnecessary if check Co-authored-by: Deep Tailor --- .../criterion/AllTelemetryCriterion.js | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/plugins/condition/criterion/AllTelemetryCriterion.js b/src/plugins/condition/criterion/AllTelemetryCriterion.js index 3538142301..ec9a08329c 100644 --- a/src/plugins/condition/criterion/AllTelemetryCriterion.js +++ b/src/plugins/condition/criterion/AllTelemetryCriterion.js @@ -22,6 +22,7 @@ import TelemetryCriterion from './TelemetryCriterion'; import { evaluateResults } from "../utils/evaluator"; +import { getLatestTimestamp } from '../utils/time'; export default class AllTelemetryCriterion extends TelemetryCriterion { @@ -127,20 +128,35 @@ export default class AllTelemetryCriterion extends TelemetryCriterion { options )); + let telemetryDataCache = {}; return Promise.all(telemetryRequests) .then(telemetryRequestsResults => { - let latestDatum; + let latestTimestamp; + const timeSystems = this.openmct.time.getAllTimeSystems(); + const timeSystem = this.openmct.time.timeSystem(); + telemetryRequestsResults.forEach((results, index) => { - latestDatum = results.length ? results[results.length - 1] : {}; - if (index < telemetryRequestsResults.length-1) { - if (latestDatum) { - this.telemetryDataCache[latestDatum.id] = this.computeResult(latestDatum); - } - } + const latestDatum = results.length ? results[results.length - 1] : {}; + const datumId = keys[index]; + + telemetryDataCache[datumId] = this.computeResult(latestDatum); + + latestTimestamp = getLatestTimestamp( + latestTimestamp, + latestDatum, + timeSystems, + timeSystem + ); }); + + const datum = { + result: evaluateResults(Object.values(telemetryDataCache), this.telemetry), + ...latestTimestamp + }; + return { id: this.id, - data: this.formatData(latestDatum, options.telemetryObjects) + data: datum }; }); }