memory conserved

This commit is contained in:
Scott Bell 2024-08-15 16:39:29 -05:00
parent 446c8119c3
commit aa8750eb97
4 changed files with 43 additions and 17 deletions

View File

@ -115,6 +115,8 @@ export default class TelemetryCollection extends EventEmitter {
} }
this.removeAllListeners(); this.removeAllListeners();
console.debug('🔥 Telemetry Collection destroyed', this.domainObject?.identifier?.key);
this.loaded = false;
} }
/** /**
@ -157,7 +159,6 @@ export default class TelemetryCollection extends EventEmitter {
options options
); );
historicalData = await historicalProvider.request(this.domainObject, modifiedOptions); historicalData = await historicalProvider.request(this.domainObject, modifiedOptions);
console.debug('👴 Requesting historical telemetry data...', historicalData);
} catch (error) { } catch (error) {
if (error.name !== 'AbortError') { if (error.name !== 'AbortError') {
console.error('Error requesting telemetry data...'); console.error('Error requesting telemetry data...');
@ -186,7 +187,10 @@ export default class TelemetryCollection extends EventEmitter {
const options = { ...this.options }; const options = { ...this.options };
//We always want to receive all available values in telemetry tables. //We always want to receive all available values in telemetry tables.
options.strategy = this.openmct.telemetry.SUBSCRIBE_STRATEGY.BATCH; options.strategy = this.openmct.telemetry.SUBSCRIBE_STRATEGY.BATCH;
console.debug(
'🔊 Telemetry Collection Subscribing to telemetry data...',
this.domainObject?.identifier?.key
);
this.unsubscribe = this.openmct.telemetry.subscribe( this.unsubscribe = this.openmct.telemetry.subscribe(
this.domainObject, this.domainObject,
(datum) => this._processNewTelemetry(datum), (datum) => this._processNewTelemetry(datum),

View File

@ -8,6 +8,8 @@ export default class CompsManager extends EventEmitter {
#telemetryCollections = {}; #telemetryCollections = {};
#dataFrame = {}; #dataFrame = {};
#telemetryLoadedPromises = []; #telemetryLoadedPromises = [];
#loaded = false;
#telemetryProcessors = {};
constructor(openmct, domainObject) { constructor(openmct, domainObject) {
super(); super();
@ -83,21 +85,33 @@ export default class CompsManager extends EventEmitter {
} }
async load() { async load() {
if (!this.#loaded) {
await this.#loadComposition(); await this.#loadComposition();
await Promise.all(this.#telemetryLoadedPromises); await Promise.all(this.#telemetryLoadedPromises);
this.#telemetryLoadedPromises = []; this.#telemetryLoadedPromises = [];
this.#loaded = true;
}
} }
startListeningToUnderlyingTelemetry() { startListeningToUnderlyingTelemetry() {
console.debug('🎉 CompsManager: startListeningToUnderlyingTelemetry');
Object.keys(this.#telemetryCollections).forEach((keyString) => { Object.keys(this.#telemetryCollections).forEach((keyString) => {
if (!this.#telemetryCollections[keyString].loaded) { if (!this.#telemetryCollections[keyString].loaded) {
const specificTelemetryProcessor = this.#getTelemetryProcessor(keyString);
this.#telemetryCollections[keyString].on('add', specificTelemetryProcessor);
this.#telemetryCollections[keyString].on('clear', this.#clearData);
this.#telemetryCollections[keyString].load(); this.#telemetryCollections[keyString].load();
} }
}); });
} }
stopListeningToUnderlyingTelemetry() { stopListeningToUnderlyingTelemetry() {
console.debug('🔇 CompsManager: stopListeningToUnderlyingTelemetry');
Object.keys(this.#telemetryCollections).forEach((keyString) => { Object.keys(this.#telemetryCollections).forEach((keyString) => {
const specificTelemetryProcessor = this.#telemetryProcessors[keyString];
delete this.#telemetryProcessors[keyString];
this.#telemetryCollections[keyString].off('add', specificTelemetryProcessor);
this.#telemetryCollections[keyString].off('clear', this.#clearData);
this.#telemetryCollections[keyString].destroy(); this.#telemetryCollections[keyString].destroy();
}); });
} }
@ -112,7 +126,6 @@ export default class CompsManager extends EventEmitter {
this.#composition.on('add', this.#addTelemetryObject); this.#composition.on('add', this.#addTelemetryObject);
this.#composition.on('remove', this.#removeTelemetryObject); this.#composition.on('remove', this.#removeTelemetryObject);
await this.#composition.load(); await this.#composition.load();
console.debug('📚 Composition loaded');
} }
} }
@ -169,6 +182,18 @@ export default class CompsManager extends EventEmitter {
return underlyingTelemetry; return underlyingTelemetry;
} }
#getTelemetryProcessor(keyString) {
if (this.#telemetryProcessors[keyString]) {
return this.#telemetryProcessors[keyString];
}
const telemetryProcessor = (newTelemetry) => {
this.emit('underlyingTelemetryUpdated', { [keyString]: newTelemetry });
};
this.#telemetryProcessors[keyString] = telemetryProcessor;
return telemetryProcessor;
}
#telemetryProcessor = (newTelemetry, keyString) => { #telemetryProcessor = (newTelemetry, keyString) => {
this.emit('underlyingTelemetryUpdated', { [keyString]: newTelemetry }); this.emit('underlyingTelemetryUpdated', { [keyString]: newTelemetry });
}; };
@ -187,9 +212,7 @@ export default class CompsManager extends EventEmitter {
this.#telemetryCollections[keyString] = this.#telemetryCollections[keyString] =
this.#openmct.telemetry.requestCollection(telemetryObject); this.#openmct.telemetry.requestCollection(telemetryObject);
this.#telemetryCollections[keyString].on('add', (data) => { this.#telemetryCollections[keyString].on('add', this.#getTelemetryProcessor(keyString));
this.#telemetryProcessor(data, keyString);
});
this.#telemetryCollections[keyString].on('clear', this.#clearData); this.#telemetryCollections[keyString].on('clear', this.#clearData);
const telemetryLoadedPromise = this.#telemetryCollections[keyString].load(); const telemetryLoadedPromise = this.#telemetryCollections[keyString].load();
this.#telemetryLoadedPromises.push(telemetryLoadedPromise); this.#telemetryLoadedPromises.push(telemetryLoadedPromise);

View File

@ -53,7 +53,6 @@ export default class CompsMetadataProvider {
this.#openmct, this.#openmct,
this.#compsManagerPool this.#compsManagerPool
); );
console.debug('📦 CompsMetadataProvider: getMetadata', specificCompsManager);
// if there are any parameters, grab the first one's timeMetaData // if there are any parameters, grab the first one's timeMetaData
const timeMetaData = specificCompsManager?.getParameters()[0]?.timeMetaData; const timeMetaData = specificCompsManager?.getParameters()[0]?.timeMetaData;
const metaDataToReturn = { const metaDataToReturn = {

View File

@ -123,9 +123,7 @@ defineProps({
onBeforeMount(async () => { onBeforeMount(async () => {
console.debug('🚀 CompsView: onMounted with compsManager', compsManager); console.debug('🚀 CompsView: onMounted with compsManager', compsManager);
outputTelemetryCollection = openmct.telemetry.requestCollection(domainObject); outputTelemetryCollection = openmct.telemetry.requestCollection(domainObject);
outputTelemetryCollection.on('add', (data) => { outputTelemetryCollection.on('add', telemetryProcessor);
telemetryProcessor(data);
});
outputTelemetryCollection.on('clear', clearData); outputTelemetryCollection.on('clear', clearData);
await compsManager.load(); await compsManager.load();
parameters.value = compsManager.getParameters(); parameters.value = compsManager.getParameters();
@ -133,6 +131,12 @@ onBeforeMount(async () => {
outputTelemetryCollection.load(); outputTelemetryCollection.load();
}); });
onBeforeUnmount(() => {
outputTelemetryCollection.off('add', telemetryProcessor);
outputTelemetryCollection.off('clear', clearData);
outputTelemetryCollection.destroy();
});
function persistParameters() { function persistParameters() {
domainObject.configuration.comps.parameters = parameters.value; domainObject.configuration.comps.parameters = parameters.value;
compsManager.persist(domainObject); compsManager.persist(domainObject);
@ -153,8 +157,4 @@ function telemetryProcessor(data) {
function clearData() { function clearData() {
currentCompOutput.value = null; currentCompOutput.value = null;
} }
onBeforeUnmount(() => {
outputTelemetryCollection.destroy();
});
</script> </script>