in common/lib/plugins/efm/monitor_service.ts [124:156]
async getMonitor(hostKeys: Set<string>, hostInfo: HostInfo, properties: Map<string, any>): Promise<Monitor | null> {
let monitor: Monitor;
let anyHostKey: string;
for (const hostKey of hostKeys) {
monitor = MonitorServiceImpl.monitors.get(hostKey);
anyHostKey = hostKey;
if (monitor) {
break;
}
}
const cacheExpirationNanos = BigInt(WrapperProperties.MONITOR_DISPOSAL_TIME_MS.get(properties) * 1_000_000);
if (anyHostKey && (!monitor || (monitor && monitor.isStopped()))) {
monitor = MonitorServiceImpl.monitors.computeIfAbsent(
anyHostKey,
() => this.monitorSupplier(this.pluginService, hostInfo, properties, WrapperProperties.MONITOR_DISPOSAL_TIME_MS.get(properties)),
cacheExpirationNanos
);
if (monitor && monitor.isStopped()) {
await monitor.releaseResources();
MonitorServiceImpl.monitors.remove(anyHostKey);
monitor = this.monitorSupplier(this.pluginService, hostInfo, properties, WrapperProperties.MONITOR_DISPOSAL_TIME_MS.get(properties));
}
}
if (monitor) {
this.populateMonitorMap(hostKeys, monitor, cacheExpirationNanos);
return monitor;
}
return null;
}