Zum Haupttext springen

10. Ereignis-Stream-Listener

Veranstaltungskanal(Port 10020) wird eine Verbindung hergestellt, um Systemereignisse auszugeben, die optional nach Ebene, Namensmuster und Ausschlusskriterien gefiltert wurden. Da es sich um einen schreibgeschützten Vorgang handelt, werden weder Sitzungsprofile gesendet noch Befehle übertragen.

Lerninhalte:

  • Als passiver Beobachter Ereignis-WebSocket(Port 10020) Abonnieren
  • Ereignis-JSON Parsen — level, name, category, data, message
  • Nach dem niedrigsten Schweregrad filtern
  • Anwenden von Platzhaltern beim Abgleichen und Ausschließen von Namen
  • Verwenden Sie dieses Tutorial zusammen mit anderen Tutorials, um Regelkreise zu benchmarken

Arbeitsablauf​

  1. CLI-Flag (--level, --name, --exclude, --no-hide-rate, --port) wird geparst.
  2. ws://localhost:10020(Veranstaltungskanal) verbunden. Da es sich um einen schreibgeschützten Beobachter handelt, werden keine Sitzungsprofile übertragen.
  3. Für jede eingehende Nachricht wird das Ereignis-JSON-Objekt geparst und der folgende Filter angewendet:
    • levelLiegt der Schweregrad unter diesem Mindestwert, wird der Eintrag verworfen.
    • --name Wenn ein Muster festgelegt wurde, dann eines der Muster (name allein oder category/name) nicht übereinstimmt, wird es verworfen.
    • --exclude Sobald auch nur eines der Muster übereinstimmt, wird es verworfen.
  4. Ereignisse, die den Filter passiert haben, nach Ebene, vollständigem Namen, optionaler Meldung, optionaler data Gibt zusammen mit der Nutzlast aus.

Parameter​

FlaggeStandardwertVerwendungszweck
--port10020Ereigniskanal-Port
-l, --levelinfoNiedrigster Schweregrad — info, notice, warning, error, critical, panic eines davon
-n, --name(keine)Es werden nur Ereignisse angezeigt, die dem Muster (glob, wiederholbar) entsprechen
-x, --exclude(keine)Ereignisse ausblenden, die einem Muster (glob, wiederholbar) entsprechen
--no-hide-ratefalsesystem-rate-report Ereignisse eingeschlossen (standardmäßig ausgeblendet – sehr umfangreiche Ausgabe)
Benchmark für Regelkreise

Führen Sie in einem Terminal ein beliebiges Tutorial (04-hello-floor, 05-position-control, 06-combined...) aus und in einem anderen Terminal --no-hide-rate Führen Sie den Ereignis-Listener unter Angabe der Optionen aus. system-rate-report Das Ereignis enthält die effektive Taktfrequenz des Geräts. Vergleicht man diesen Wert zwischen den Python-/C++- und den nlohmann-/C++-Glaze-Versionen desselben Tutorials, lässt sich ein Serialisierungs-Overhead von etwa 4 kHz im Regelkreis feststellen.

# 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

Feld „Lesestatus“​

Jede eingehende Nachricht ist ein Ereignis:

  • level — Schweregrad von Zeichenfolgen (info ... panic)
  • name — Name der Veranstaltung (z. B.: device-connected, system-rate-report)
  • category — Kategorie (z. B.: device, session, system)
  • message — Optionaler, für Menschen lesbarer Text
  • data — Optionale verschachtelte JSON-Nutzdaten (die Struktur variiert je nach Ereignis)

Eine vollständige Liste der Ereignisse finden Sie unter „Ereignisse und Überwachung“.

Senden / Empfangen​

Da es sich um ein manuelles Abonnement handelt, recv()Sie werden lediglich verwendet, ohne dass etwas zurückgegeben wird. Alle drei Varianten implementieren dieselbe Filter-Pipeline; ein bemerkenswerter Aspekt der auf die Inverse-API zugeschnittenen Teile ist die Form der Ereignis-Struktur.

async for msg in websocketDies ist die knappste Form einer schreibgeschützten Schleife.

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 ist ebenfalls zusammen mit dem SDK lokal installiert. Im Installationsverzeichnis des Dienstes unter tutorials/10-haply-inverse-events/Bitte sehen Sie dort nach.

Quellcode: Python · C++ · C++ Glaze

Verwandte Dokumente: Ereignisse und Überwachung · WebSocket-Protokoll