diff --git a/src/plugins/comps/CompsManager.js b/src/plugins/comps/CompsManager.js index 5880684b5e..4051b4ec2f 100644 --- a/src/plugins/comps/CompsManager.js +++ b/src/plugins/comps/CompsManager.js @@ -18,12 +18,14 @@ export default class CompsManager extends EventEmitter { this.#domainObject = domainObject; } - addParameter(keyString) { + addParameter(telemetryObject) { + const keyString = this.#openmct.objects.makeKeyString(telemetryObject.identifier); + const metaData = this.#openmct.telemetry.getMetadata(telemetryObject); const random4Digit = Math.floor(1000 + Math.random() * 9000); this.#domainObject.configuration.comps.parameters.push({ keyString, - name: `New_Parameter_${random4Digit}`, - valueToUse: 'sin', + name: `${telemetryObject.name}_${random4Digit}`, + valueToUse: metaData.valueMetadatas[0].key, testValue: 0 }); this.persist(this.#domainObject); @@ -225,7 +227,7 @@ export default class CompsManager extends EventEmitter { (parameter) => parameter.keyString === keyString ); if (!parameterExists) { - this.addParameter(keyString); + this.addParameter(telemetryObject); } }; diff --git a/src/plugins/comps/CompsMathWorker.js b/src/plugins/comps/CompsMathWorker.js index 0db335ff15..faa1636c87 100644 --- a/src/plugins/comps/CompsMathWorker.js +++ b/src/plugins/comps/CompsMathWorker.js @@ -32,23 +32,24 @@ onconnect = function (e) { }; }; -function getFullDataFrame(telemetryForComps) { +function getFullDataFrame(telemetryForComps, parameters) { const dataFrame = {}; Object.keys(telemetryForComps).forEach((key) => { + const parameter = parameters.find((p) => p.keyString === key); const dataSet = telemetryForComps[key]; - const telemetryMap = new Map(dataSet.map((item) => [item.utc, item])); + const telemetryMap = new Map(dataSet.map((item) => [item[parameter.timeKey], item])); dataFrame[key] = telemetryMap; }); return dataFrame; } function calculateSubscription(telemetryForComps, parameters, expression) { - const dataFrame = getFullDataFrame(telemetryForComps); + const dataFrame = getFullDataFrame(telemetryForComps, parameters); return calculate(dataFrame, parameters, expression); } function calculateRequest(telemetryForComps, parameters, expression) { - const dataFrame = getFullDataFrame(telemetryForComps); + const dataFrame = getFullDataFrame(telemetryForComps, parameters); return calculate(dataFrame, parameters, expression); } diff --git a/src/plugins/comps/CompsMetadataProvider.js b/src/plugins/comps/CompsMetadataProvider.js index 2a97eb2255..b155dd13c2 100644 --- a/src/plugins/comps/CompsMetadataProvider.js +++ b/src/plugins/comps/CompsMetadataProvider.js @@ -21,8 +21,12 @@ *****************************************************************************/ export default class CompsMetadataProvider { - constructor(openmct) { - this.openmct = openmct; + #openmct = null; + #compsManagerPool = null; + + constructor(openmct, compsManagerPool) { + this.#openmct = openmct; + this.#compsManagerPool = compsManagerPool; } supportsMetadata(domainObject) { @@ -30,7 +34,7 @@ export default class CompsMetadataProvider { } getDomains(domainObject) { - return this.openmct.time.getAllTimeSystems().map(function (ts, i) { + return this.#openmct.time.getAllTimeSystems().map(function (ts, i) { return { key: ts.key, name: ts.name, @@ -43,6 +47,9 @@ export default class CompsMetadataProvider { } getMetadata(domainObject) { + const keyString = this.#openmct.objects.makeKeyString(domainObject.identifier); + const specificCompsManager = this.#compsManagerPool[keyString]; + console.debug('📦 CompsMetadataProvider: getMetadata', specificCompsManager); return { values: this.getDomains().concat([ { @@ -53,14 +60,6 @@ export default class CompsMetadataProvider { hints: { range: 1 } - }, - { - key: 'utc', - name: 'Time', - format: 'utc', - hints: { - domain: 1 - } } ]) }; diff --git a/src/plugins/comps/CompsTelemetryProvider.js b/src/plugins/comps/CompsTelemetryProvider.js index 0446c064fe..fb8303b0de 100644 --- a/src/plugins/comps/CompsTelemetryProvider.js +++ b/src/plugins/comps/CompsTelemetryProvider.js @@ -125,7 +125,11 @@ export default class CompsTelemetryProvider { onSharedWorkerMessage(event) { const { type, result, callbackID, error } = event.data; - if (type === 'calculationSubscriptionResult' && this.#subscriptionCallbacks[callbackID]) { + if ( + type === 'calculationSubscriptionResult' && + this.#subscriptionCallbacks[callbackID] && + result.length + ) { console.debug('📝 Shared worker subscription message:', event.data); this.#subscriptionCallbacks[callbackID](result); } else if (type === 'calculationRequestResult' && this.#requestPromises[callbackID]) { diff --git a/src/plugins/comps/plugin.js b/src/plugins/comps/plugin.js index bda4411c99..964d1ef18d 100644 --- a/src/plugins/comps/plugin.js +++ b/src/plugins/comps/plugin.js @@ -51,7 +51,7 @@ export default function CompsPlugin() { } return true; }); - openmct.telemetry.addProvider(new CompsMetadataProvider(openmct)); + openmct.telemetry.addProvider(new CompsMetadataProvider(openmct, compsManagerPool)); openmct.telemetry.addProvider(new CompsTelemetryProvider(openmct, compsManagerPool)); openmct.objectViews.addProvider(new CompsViewProvider(openmct, compsManagerPool)); };