Servererreichbarkeit prüfen

ecm.check_connections() prüft jeden im Pool konfigurierten Server einzeln und meldet pro Server, ob er erreichbar ist, ob der Login gelingt und welche enaio-Serverinformationen (z. B. Produktversion) er liefert.

Dies ist kein Aufruf des Serverjobs krn.CheckServerConnection. Jener Job ist nur ein einfacher Zähler, der über eine bestehende Session läuft und keine Verbindung aufbaut. check_connections() baut stattdessen pro konfiguriertem Server eine eigene Wegwerf-Verbindung auf (TCP/TLS + Login + krn.GetServerInfoEx), erfasst das Ergebnis und schließt sie sofort wieder.

1. Abgrenzung zu ecm.system.info()

ecm.system.info()

Spiegelt nur die aktuell offenen Pool-Verbindungen wider (eine pro lebender Verbindung). Sagt nichts über konfigurierte, aber gerade nicht verbundene Server.

ecm.check_connections()

Prüft alle konfigurierten Server aus der Pool-Konfiguration aktiv, unabhängig davon, ob aktuell eine Verbindung dorthin besteht. Die Probe-Verbindungen landen nie im Pool und verändern die Pool-Statistik nicht.

2. Verbindung

from ecmind_blue_client.ecm import ECM
from ecmind_blue_client.pool import SyncPoolClient

# Mehrere Server im Pool: hostname:port:weight, getrennt durch '#'
ecm = ECM(SyncPoolClient(
    servers="server1:4000:1#server2:4000:1",
    username="<user>",
    password="<pass>",
))

Async (AsyncPoolClient) funktioniert analog mit await vor dem Aufruf.

3. Minimal-Beispiel

for check in ecm.check_connections():
    status = "ok" if check.reachable else f"down ({check.error})"
    version = check.server_info.product_version if check.server_info else "?"
    print(f"{check.hostname}:{check.port} {status} v={version}")

Async:

for check in await ecm.check_connections():
    ...

4. Rückgabe: ECMServerConnectionCheck

check_connections() liefert eine Liste von ECMServerConnectionCheck — einen Eintrag pro konfiguriertem Server, in Konfigurationsreihenfolge. Ein nicht erreichbarer Server bricht die übrigen nicht ab; Fehler werden im Feld error festgehalten, statt geworfen zu werden.

Feld Typ Bedeutung

hostname

str

Hostname, gegen den geprüft wurde.

port

int

TCP-Port, gegen den geprüft wurde.

reachable

bool

True, wenn die Transportverbindung (TCP + TLS) zustande kam — unabhängig von Anmeldedaten.

authenticated

bool

True, wenn der enaio-Login gelang (SessionAttachSessionPropertiesSetSessionLogin).

server_info

RpcServerInfo | None

Serverinformationen (Produktversion, Plattform, …), wenn krn.GetServerInfoEx Daten lieferte, sonst None.

error

str | None

"<Fehlertyp>: <Meldung>" der Ursache, oder None bei vollem Erfolg.

5. Semantik der Ergebnisfelder

Szenario reachable authenticated server_info error

Server aus / refused / DNS-Fehler / TCP-Timeout

False

False

None

ConnectionError: … / TimeoutError: …

TLS-Handshake schlägt fehl

False

False

None

SSLError: …

TCP+TLS ok, falsche Anmeldedaten

True

False

None

PermissionError: … / BlueException: …

Login ok, GetServerInfoEx schlägt fehl

True

True

None

None (best effort)

Voller Erfolg

True

True

RpcServerInfo

None

Kurzformel: reachable = Transport (TCP+TLS) steht; authenticated = enaio-Login erfolgreich; server_info vorhanden = GetServerInfoEx lieferte Daten.

Die Session-Setup-Jobs verwenden — wie der reguläre Pool — kein Lese-Timeout. Ein Server, der die TCP-Verbindung annimmt, dann aber beim Login hängt, blockiert die Probe für diesen Server. Nur der initiale Verbindungsaufbau ist über connect_timeout begrenzt.

6. Verwandte Themen

  • info() für die Statistik der aktuell offenen Pool-Verbindungen