Aller au contenu principal

Timers par clé — détecter le silence

Intermédiaire ⏱ 15 min streaming · process · timers

Vous allez construire : un chien de garde qui se déclenche quand un device devient silencieux — des timers de timeout par clé qui transforment l'absence d'événements en événement.

heartbeats → streaming:watchdog (process + timer) → (alertes de silence en sortie)

Prérequis

  • Être à l'aise avec Fenêtres & agrégations. Les fenêtres agrègent ce qui arrive — ce tutoriel porte sur ce qui n'arrive pas.

1 · Générez

pulse new fleetwatch --source webhook --stage streaming:watchdog

2 · Déclarez le timer par clé

stages:
- name: watchdog
engine: streaming
operators:
- type: process
key: device_id
timeout: "10m"
timer: processing # processing · event
onTimeout: emit # emit · drop
passThrough: true

Chaque device_id a son propre timer. Chaque événement de ce device le réinitialise ; si timeout s'écoule sans événement, l'opérateur émet un événement de timeout pour cette clé. passThrough: true laisse aussi couler les heartbeats normaux en aval.

3 · Déployez et faites battre deux devices

pulse secret set PULSE_WEBHOOK_SECRET dev-secret # la source webhook générée l'exige
pulse deploy .
pulse events publish --topic fleetwatch.in --value '{"device_id":"d-1","battery":88}'
pulse events publish --topic fleetwatch.in --value '{"device_id":"d-2","battery":91}'

4 · Regardez-en un devenir silencieux

pulse events tail --topic fleetwatch.watchdog.out

Continuez à faire battre d-1 ; arrêtez d'envoyer pour d-2. Quand le timer de d-2 expire, un événement de timeout pour cette clé seulement apparaît — le timer de d-1, toujours réinitialisé, ne se déclenche jamais.

astuce

Pour une démo rapide, descendez le timeout à "30s" — la sémantique est identique.

5 · Chaînez l'alerte

Ajoutez un stage rule-based après le watchdog pour router les événements de timeout vers votre astreinte — ou un stage mcp pour ouvrir le ticket directement (voir Agir avec les outils MCP).

Ce qui vient de se passer

Vous avez utilisé l'opérateur process — une fonction de traitement par clé avec état et timers de timeout par clé. Les fenêtres répondent à « que s'est-il passé par clé sur cette période » ; process répond à « qu'est-ce qui aurait dû se passer et ne s'est pas passé ». Ensemble, ils couvrent les deux moitiés de la supervision : l'activité et le silence.

Dépannage

Le timeout ne se déclenche jamais

Avec timer: processing, l'horloge est le temps mural depuis le dernier événement de cette clé — confirmez que vous avez vraiment cessé d'envoyer pour elle. timeout doit être positif, et c'est onTimeout: emit (pas drop) qui rend le silence visible en aval.

Ensuite