Aller au contenu principal

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

Se connecter àCanal des incidents(port) 10020), affiche les événements système et permet un filtrage facultatif par niveau, modèle de nom et règles d'exclusion. Lecture seule : n'utilise pas de profil de session et n'envoie aucune commande.

Contenu pédagogique :

  • S'abonner en tant qu'observateur passifÉvénement WebSocket(port) 10020)
  • AnalyseÉvénement JSON — level,name,category,data,message
  • Filtrer par niveau de gravité le plus faible
  • Correspondance et exclusion des noms de caractères génériques
  • À associer à ce tutoriel et à n'importe quel autre tutoriel poureffectuer des tests de référence sur la boucle de contrôle

Processus de travail​

  1. Analyse des options de ligne de commande (--level,--name,--exclude,--no-hide-rate,--port).
  2. Se connecter à ws://localhost:10020(c'est-à-direCanal des incidents) — Comme il s'agit d'un observateur en lecture seule, aucun profil de session n'est envoyé.
  3. Pour chaque message reçu, analyser le JSON de l'événement et appliquer les règles de filtrage :
    • Si level Si le niveau de gravité est inférieur au seuil minimal, le message est ignoré.
    • Si l'on spécifie --name motif, alors uniquement si l'un de ces motifs correspond (correspond à name en soi ou category/name) ; sinon, il est ignoré.
    • Si l'un quelconque --exclude Si la correspondance de motif est valide, elle est ignorée.
  4. Imprimer les événements conservés, y compris leur niveau, leur nom complet, le message (facultatif) et (éventuellement) data Charge.

Paramètres​

ParamètresValeur par défautUtilisation
--port10020Port de canal d'événements
-l, --levelinfoNiveau de gravité le plus bas ; valeurs possibles : info,notice,warning,error,critical,panic l'un d'entre eux
-n, --name(aucun)Afficher uniquement les événements correspondant à ce modèle (caractères génériques « glob », pouvant être répétés)
-x, --exclude(aucun)Masquer les événements correspondant à ce motif (caractères génériques « glob », pouvant être spécifiés plusieurs fois)
--no-hide-ratefalseComprend system-rate-report Événements (masqués par défaut en raison de leur volume important)
Réalisation de tests de référence sur la boucle de régulation

Exécutez n'importe quel tutoriel (04-hello-floor, 05-position-control, 06-combined…) dans un terminal, puis dans un autre terminal, à l'aide de --no-hide-rate Lancer l'écouteur d'événements.system-rate-report Cet exemple illustre la fréquence de tick effective de l'appareil : en comparant les versions Python / C++ de nlohmann et C++ de Glaze issues du même tutoriel, on constate une surcharge liée à la sérialisation sur la boucle de contrôle à environ 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

Champs d'état lus​

Chaque message reçu constitue un événement :

  • level — Niveau de gravité sous forme de chaîne 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 (facultative)
  • data — Charge JSON imbriquée facultative (structure dépendant de l'événement concerné)

Pour consulter la liste complète des événements, rendez-vous sur la page «Événements et surveillance».

Envoyer / Recevoir​

Abonnement passif — Utilisation exclusive recv(), sans renvoyer de contenu. Le processus de filtrage est identique dans les trois versions ; l'élément à noter concernant l'API Inverse est la structure des objets événementiels.

async for msg in websocket C'est la façon la plus simple d'écrire une boucle de réception.

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. Veuillez vous rendre dans le répertoire d'installation du service, sous tutorials/10-haply-inverse-events/ Rechercher dans.

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

Contenu associé : Événements et surveillance · Protocole WebSocket