async getMonitor()

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;
  }