async checkConnectionStatus()

in common/lib/plugins/efm/monitor.ts [232:265]


  async checkConnectionStatus(): Promise<ConnectionStatus> {
    const connectContext = this.telemetryFactory.openTelemetryContext("Connection status check", TelemetryTraceLevel.FORCE_TOP_LEVEL);
    connectContext.setAttribute("url", this.hostInfo.host);
    return await connectContext.start(async () => {
      const startNanos = getCurrentTimeNano();
      try {
        const clientIsValid = this.monitoringClient && (await this.pluginService.isClientValid(this.monitoringClient));

        if (this.monitoringClient !== null && clientIsValid) {
          return Promise.resolve(new ConnectionStatus(clientIsValid, getCurrentTimeNano() - startNanos));
        }

        await this.endMonitoringClient();
        // Open a new connection.
        const monitoringConnProperties: Map<string, any> = new Map(this.properties);
        for (const key of monitoringConnProperties.keys()) {
          if (!key.startsWith(WrapperProperties.MONITORING_PROPERTY_PREFIX)) {
            continue;
          }
          monitoringConnProperties.set(key.substring(WrapperProperties.MONITORING_PROPERTY_PREFIX.length), this.properties.get(key));
          monitoringConnProperties.delete(key);
        }

        logger.debug(`Opening a monitoring connection to ${this.hostInfo.url}`);
        this.monitoringClient = await this.pluginService.forceConnect(this.hostInfo, monitoringConnProperties);
        logger.debug(`Successfully opened monitoring connection to ${this.monitoringClient.id} - ${this.hostInfo.url}`);
        return Promise.resolve(new ConnectionStatus(true, getCurrentTimeNano() - startNanos));
      } catch (error: any) {
        this.instanceInvalidCounter.inc();
        await this.endMonitoringClient();
        return Promise.resolve(new ConnectionStatus(false, getCurrentTimeNano() - startNanos));
      }
    });
  }