Zum Hauptinhalt springen

10. Ereignis-Stream-Listener

Anmelden bei Veranstaltungskanal (Hafen 10020) und zeigt die Systemereignisse an, wobei eine Filterung nach Schweregrad, Namensmuster und Ausschluss optional möglich ist. Nur-Lese-Modus – es werden keine Sitzungsprofile erstellt und keine Befehle gesendet.

Was Sie lernen werden:

  • Abonnieren Sie WebSocket-Ereignisse (Hafen 10020) als passiver Beobachter
  • Eine Analyse von JSON-Ereignis — level, name, category, data, message
  • Nach minimalem Schweregrad filtern
  • Namensübereinstimmung mit Platzhaltern und Ausschluss
  • Nutzen Sie dieses Tutorial, um die Leistung der Parallelschleife parallel zu einem beliebigen anderen Tutorial zu bewerten.

Ablauf​

  1. Die CLI-Optionen analysieren (--level, --name, --exclude, --no-hide-rate, --port).
  2. Anmelden bei ws://localhost:10020 (le Veranstaltungskanal) — Es wird kein Sitzungsprofil gesendet, da es sich um einen Beobachter im Nur-Lese-Modus handelt.
  3. Für jede eingehende Nachricht das JSON-Ereignis analysieren und die Filter anwenden:
    • Die Nachricht ignorieren, wenn level liegt unterhalb der Mindestschwere.
    • Wenn Gründe --name sind vorhanden, die Meldung ignorieren, es sei denn, einer davon passt (zu name allein oder mit category/name).
    • Wenn ein Motiv --exclude entsprechen, die Nachricht verwerfen.
  4. Die ausgewählten Ereignisse mit ihrer Schwere, ihrem qualifizierten Namen, der optionalen Meldung und der Nutzlast anzeigen data fakultativ.

Einstellungen​

OptionStandardwertRolle
--port10020Veranstaltungshafen
-l, --levelinfoMindestschwere – einer der Werte info, notice, warning, error, critical, panic
-n, --name(keine)Nur Ereignisse anzeigen, die dem Muster entsprechen (glob, wiederholbar)
-x, --exclude(keine)Ereignisse ausblenden, die dem Muster entsprechen (glob, wiederholbar)
--no-hide-ratefalseEreignisse einbeziehen system-rate-report (standardmäßig ausgeblendet, da sehr ausführlich)
Bewertung der Leistung des Regelkreises

Starten Sie ein beliebiges Tutorial (04-hello-floor, 05-position-control, 06-combined...) in einem Terminal, und der Ereignis-Listener mit --no-hide-rate in einem anderen. Das Ereignis system-rate-report enthält die effektive Tick-Frequenz des Geräts: Vergleichen Sie die Varianten Python / C++ nlohmann / C++ Glaze desselben Tutorials, um den Serialisierungsaufwand bei einer Regelschleife mit etwa 4 kHz zu beobachten.

# Terminal 1 — pick a variant
./04-haply-inverse-hello-floor # C++ nlohmann
./04-haply-inverse-hello-floor-glz # C++ Glaze
python 04-haply-inverse-hello-floor.py # Python

# Terminal 2 — watch the rate
./10-haply-inverse-events --no-hide-rate

Meister der Les-États​

Jede eingehende Nachricht entspricht einem einzigen Ereignis:

  • level — Schwerkraft in Form einer Kette (info ... panic)
  • name — Name der Veranstaltung (z. B. device-connected, system-rate-report)
  • category — Kategorie (z. B. device, session, system)
  • message — optionale lesbare Zeichenkette
  • data — optionale verschachtelte JSON-Nutzdaten (die Struktur hängt vom Ereignis ab)

Vollständiges Verzeichnis der Ereignisse: Ereignisse und Überwachung.

Versand / Empfang​

Passives Abonnement – allein recv() wird verwendet; es wird nichts zurückgegeben. Alle drei Varianten implementieren dieselbe Filterpipeline; der für die Inverse-API spezifischste Teil ist die Struktur des Ereignisses.

async for msg in websocket ist die kürzeste Form der reinen Empfangsschleife.

async with websockets.connect(uri) as websocket:
async for msg in websocket:
try:
event = json.loads(msg)
except json.JSONDecodeError:
continue

if accept_event(event, min_level_index, name_patterns, exclude_patterns):
print(format_event(event))
Im Lieferumfang des SDK-Installationsprogramms enthalten

Das Tutorial 10 wird ebenfalls lokal mit dem SDK installiert – siehe tutorials/10-haply-inverse-events/ im Installationsverzeichnis des Dienstes.

Quelle: Python · C++ · C++ Glaze

Siehe auch: Ereignisse und Überwachung · WebSocket-Protokoll