Zum Hauptinhalt springen

10. Ereignis-Beobachter

Verbinden mitEreigniskanal(Anschluss 10020), Systemereignisse ausgeben und optional nach Schweregrad, Namensmuster und Ausschlussregeln filtern. Nur-Lese-Modus – Es werden keine Sitzungskonfigurationsdateien verwendet und keine Befehle gesendet.

Lerninhalte:

  • Als passiver Beobachter abonnierenEreignis WebSocket(Anschluss 10020)
  • AnalyseEreignis JSON — level、name、category、data、message
  • Nach der niedrigsten Schweregradstufe filtern
  • Übereinstimmung und Ausschluss von Platzhalternamen
  • In Kombination mit diesem Tutorial und einem beliebigen anderen Tutorial zurDurchführung von Benchmark-Tests für Regelkreise

Arbeitsablauf​

  1. Analyse der Befehlszeilenoptionen (--level、--name、--exclude、--no-hide-rate、--port).
  2. Verbinden mit ws://localhost:10020(d. h.Ereigniskanal) – Da es sich um einen schreibgeschützten Beobachter handelt, wird kein Sitzungsprofil gesendet.
  3. Für jede empfangene Nachricht wird das Ereignis-JSON analysiert und es werden Filterregeln angewendet:
    • Wenn level Liegt der Schweregrad unter dem Mindestwert, wird die Meldung verworfen.
    • Wenn angegeben wird, dass --name Muster: Nur wenn eines dieser Muster übereinstimmt (Übereinstimmung name selbst oder category/name) beibehalten, andernfalls verworfen.
    • Wenn eine der beiden --exclude Wenn ein Musterabgleich erfolgt, wird die Eingabe verworfen.
  4. Die protokollierten Ereignisse ausgeben, einschließlich ihrer Schwere, des vollständigen Namens, einer optionalen Meldung sowie optionaler data Last.

Parameter​

ParameterStandardwertVerwendungszweck
--port10020Ereigniskanal-Port
-l, --levelinfoNiedrigste Schweregradstufe, mögliche Werte sind info、notice、warning、error、critical、panic einer davon
-n, --name(keine)Es werden nur Ereignisse angezeigt, die diesem Muster entsprechen (Glob-Platzhalter, können mehrfach angegeben werden)
-x, --exclude(keine)Ereignisse ausblenden, die diesem Muster entsprechen (Glob-Platzhalter, kann mehrfach angegeben werden)
--no-hide-ratefalseEnthält system-rate-report Ereignisse (standardmäßig ausgeblendet, da sie sehr viele Ausgaben erzeugen)
Benchmark-Tests für den Regelkreis durchführen

Führen Sie ein beliebiges Tutorial (04-hello-floor, 05-position-control, 06-combined …) in einem Terminal aus und führen Sie in einem anderen Terminal --no-hide-rate Ereignis-Listener ausführen.system-rate-report Das Beispiel enthält die effektive Tick-Rate des Geräts – ein Vergleich zwischen den Python-/C++- und nlohmann-/C++-Glaze-Versionen desselben Tutorials zeigt den Serialisierungsaufwand bei einer Regelkreisfrequenz von etwa 4 kHz.

# 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

Gelesene Statusfelder​

Jede empfangene Nachricht ist ein Ereignis:

  • level — Schweregrad als Zeichenkette (info ... panic)
  • name — Name des Vorfalls (z. B. device-connected、system-rate-report)
  • category — Kategorie (z. B. device、session、system)
  • message — Optionale lesbare Zeichenfolge
  • data — Optionale verschachtelte JSON-Daten (die Struktur hängt vom jeweiligen Ereignis ab)

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

Senden / Empfangen​

Passives Abonnement – nur zur Nutzung recv(), es werden keine Inhalte zurückgesendet. Der Filterprozess ist in allen drei Versionen identisch; besonders hervorzuheben ist bei der Inverse-API die Form der Ereignisstruktur.

async for msg in websocket Dies ist die knappste Schreibweise für eine Schleife, die nur Daten empfängt.

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

Tutorial 10 wird ebenfalls zusammen mit dem SDK lokal installiert. Bitte suchen Sie im Installationsverzeichnis des Dienstes nach tutorials/10-haply-inverse-events/ dort suchen.

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

Verwandte Themen: Ereignisse und Überwachung · WebSocket-Protokoll