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

View File

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

View File

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

View File

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