Zum Hauptinhalt springen

10. Event-Stream-Listener

Verbindet sich mit dem Veranstaltungskanal (Hafen 10020) und gibt Systemereignisse aus, optional gefiltert nach Schweregrad, Namensmuster und Ausschlüssen. Nur Lesezugriff – kein Sitzungsprofil, es werden keine Befehle gesendet.

Was Sie lernen:

  • Abonnieren des Ereignisse – WebSocket (Hafen 10020) als passiver Beobachter
  • Parsen von Ereignis-JSON — level, name, category, data, message
  • Nach minimalem Schweregrad filtern
  • Namensabgleich mit Platzhaltern und Ausschluss
  • Verwenden Sie dieses Tutorial zusammen mit einem beliebigen anderen Tutorial, um den Regelkreis zu benchmarken

Ablauf​

  1. CLI-Flags analysieren (--level, --name, --exclude, --no-hide-rate, --port).
  2. Link zu ws://localhost:10020 herstellen (der Veranstaltungskanal) — Es wird kein Sitzungsprofil gesendet, da es sich um einen reinen Beobachter handelt.
  3. Für jede eingehende Nachricht das Event-JSON-Datenformat analysieren und die Filter anwenden:
    • Verwerfen, wenn level unter dem minimalen Schweregrad liegt.
    • Wenn --name- die angegebenen Muster verwerfen, sofern keines davon zutrifft (entweder gegen name allein oder gegen category/name).
    • Wenn ein --exclude-Wenn das Muster zutrifft, verwerfen.
  4. Verbleibende Ereignisse mit Schweregrad, qualifiziertem Namen, optionaler Meldung und optionaler data-Nutzlast anzeigen.

Parameter​

FlaggeStandardZweck
--port10020Anschluss des Event-Kanals
-l, --levelinfoGeringer Schweregrad — einer von info, notice, warning, error, critical, panic
-n, --name(keiner)Nur Ereignisse anzeigen, die dem Muster entsprechen (Glob, wiederholbar)
-x, --exclude(keiner)Ereignisse ausblenden, die dem Muster entsprechen (Glob, wiederholbar)
--no-hide-ratefalsesystem-rate-report-Ereignisse einbeziehen (standardmäßig ausgeblendet – erzeugt sehr viele Ausgaben)
Benchmarking des Regelkreises

Führen Sie ein beliebiges Tutorial (04-hello-floor, 05-position-control, 06-combined...) in einem Terminal aus und den Event-Listener mit --no-hide-rate in einem anderen. Das Ereignis system-rate-report enthält die effektive Taktfrequenz des Geräts. Vergleichen Sie die Varianten Python / C++ nlohmann / C++ Glaze desselben Tutorials, um den Serialisierungsaufwand bei einem Regelkreis von 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

Ausgelesene Zustandsfelder​

Jede eingehende Nachricht ist ein einzelnes Ereignis:

  • level — Schweregrad als Zeichenkette (info ... panic)
  • name — Ereignisname (z. B. device-connected, system-rate-report)
  • category — Kategorie (z. B. device, session, system)
  • message — optionale, für Menschen lesbare Zeichenkette
  • data — optionale verschachtelte JSON-Nutzlast (Form hängt vom Ereignis ab)

Vollständiger Ereigniskatalog: Ereignisse & Überwachung.

Senden / Empfangen​

Passives Abonnement — nur recv() wird verwendet; es wird nichts zurückgesendet. Alle drei Varianten implementieren dieselbe Filterpipeline; der interessante, für die Inverse-API spezifische Teil ist die Form des Ereignisobjekts.

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 SDK-Installationsprogramm enthalten

Tutorial 10 wird ebenfalls lokal mit dem SDK installiert – Sie finden es unter tutorials/10-haply-inverse-events/ im Installationsverzeichnis des Dienstes.

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

Verwandte Themen: Ereignisse & Überwachung · WebSocket-Protokoll