mirror of
https://github.com/nasa/openmct.git
synced 2025-02-26 03:18:51 +00:00
memory conserved
This commit is contained in:
parent
446c8119c3
commit
aa8750eb97
@ -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),
|
||||||
|
@ -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);
|
||||||
|
@ -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 = {
|
||||||
|
@ -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>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user