Aller directement au corps du texte

10. Écouteur de flux d'événements

Chaîne des événements(Port 10020) afin d'afficher les événements système filtrés de manière sélective selon leur niveau, leur modèle de nom et leurs conditions d'exclusion. Comme il s'agit d'un mode lecture seule, aucun profil de session n'est envoyé et aucune commande n'est transmise.

Contenu pédagogique :

  • En tant qu'observateur passif Événement WebSocket(Port 10020) S'abonner
  • JSON d'événement Analyse syntaxique — level, name, category, data, message
  • Filtrer selon le niveau de gravité minimal
  • Appliquer la correspondance et l'exclusion de noms à l'aide de caractères génériques
  • Utilisez ce tutoriel en complément d'autres tutoriels pour évaluer les performances des boucles de contrôle

Flux de travail​

  1. Options de ligne de commande (--level, --name, --exclude, --no-hide-rate, --port) est analysé.
  2. ws://localhost:10020(Chaîne des événements) s'y connecte. Comme il s'agit d'un observateur en lecture seule, il ne transmet pas de profil de session.
  3. Pour chaque message reçu, nous analysons l'objet JSON de l'événement et appliquons les filtres suivants :
    • levelSi la gravité est inférieure à ce seuil minimum, la donnée est rejetée.
    • --name Si un motif a été défini, l'un des motifs (name seul ou category/name) ne correspond pas, il est ignoré.
    • --exclude Si ne serait-ce qu'un seul des motifs correspond, l'élément est écarté.
  4. Les événements ayant passé le filtre, avec leur niveau, leur nom complet, un message facultatif, un data L'affiche avec la charge utile.

Paramètres​

drapeauValeur par défautUtilisation
--port10020Port du canal d'événements
-l, --levelinfoGravité minimale — info, notice, warning, error, critical, panic l'un d'entre eux
-n, --name(aucun)Afficher uniquement les événements correspondant au motif (glob, répétition possible)
-x, --exclude(aucun)Masquer les événements correspondant à un motif (glob, répétition possible)
--no-hide-ratefalsesystem-rate-report Événements inclus (masqués par défaut — volume de données très important)
Test de performance des boucles de régulation

Lancez un tutoriel au choix (04-hello-floor, 05-position-control, 06-combined...) dans un terminal, puis dans un autre terminal, --no-hide-rate Exécutez l'écouteur d'événements en spécifiant les options. system-rate-report Cet événement inclut la fréquence de rafraîchissement effective du dispositif. En comparant cette valeur entre les versions Python/C++ de nlohmann et C++ de Glaze du même tutoriel, on constate une surcharge de sérialisation d'environ 4 kHz dans la boucle de contrôle.

# 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

Champ « État de lecture »​

Chaque message reçu correspond à un événement :

  • level — Niveau de gravité des chaînes de caractères (info ... panic)
  • name — Nom de l'événement (par exemple : device-connected, system-rate-report)
  • category — Catégorie (par exemple : device, session, system)
  • message — Chaîne de caractères lisible par l'utilisateur (facultative)
  • data — Charge utile JSON imbriquée (facultative ; la structure varie selon l'événement)

Pour consulter la liste complète des événements, reportez-vous à la section « Événements et surveillance».

Émission / Réception​

Comme il s'agit d'un abonnement manuel, recv()Elle ne fait que consommer des données et ne renvoie rien. Les trois variantes implémentent toutes le même pipeline de filtrage ; parmi les aspects spécifiques à l'API Inverse, il convient de noter la structure des objets événementiels.

async for msg in websocketC'est la forme la plus concise d'une boucle en lecture seule.

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))
Fourni avec le programme d'installation du SDK

Le tutoriel 10 est également installé localement avec le SDK. Dans le répertoire d'installation du service, sous le dossier tutorials/10-haply-inverse-events/Veuillez consulter cette page.

Code source : Python · C++ · C++ Glaze

Documents associés : Événements et surveillance · Protocole WebSocket