Deux types de déconnexion
Quand un agent se déconnecte du dashboard, il y a deux scénarios radicalement différents — et Xytherion les distingue :
Arrêt gracieux
L'agent a envoyé un signal SSE 'shutdown' avant de s'arrêter. C'est une maintenance planifiée. Le dashboard affiche : 'Arrêt gracieux — maintenance en cours'.
Perte de connexion
La connexion SSE s'est coupée sans signal préalable. C'est un crash, un reboot non planifié, ou une coupure réseau. Le dashboard affiche : 'Connexion perdue'.
Comment ça fonctionne
Quand l'agent reçoit SIGTERM (arrêt via systemctl stop ou Ctrl+C), Go exécute les défers et l'agent émet un dernier événement SSE de type shutdown. Le dashboard l'intercepte et met à jour l'état.
Si la connexion se coupe sans ce signal — le dashboard ne reçoit plus rien. Après un timeout de quelques secondes sans données, il bascule sur "Connexion perdue".
# Arrêt gracieux (envoie le signal shutdown SSE)sudo systemctl stop xytherion# → Dashboard : "Arrêt gracieux" # Arrêt brutal (simule un crash)sudo kill -9 $(pgrep xytherion)# → Dashboard : "Connexion perdue"Construire un runbook basé sur les signaux
Cette distinction permet d'automatiser votre réponse aux incidents :
# Webhook generic — réagir différemment selon l'événement# (Dans n8n / Make) # event: "shutdown" → log de maintenance, pas d'alerte# event: "disconnect" → page oncall immédiatement # Format de l'événement SSE shutdown :# event: shutdown# data: {"hostname":"web-01","time":"2026-07-03T14:32:18Z"}Restart=always. Sans ça, un crash tue l'agent définitivement et vous n'avez plus de données.Exercice pratique — Tester le Dead Man's Switch
- 1Ouvrez le dashboard et gardez votre serveur visible.
- 2Arrêtez l'agent proprement : sudo systemctl stop xytherion. Observez le message 'Arrêt gracieux'.
- 3Redémarrez : sudo systemctl start xytherion. L'agent revient en ligne.
- 4Simulez un crash : sudo kill -9 $(pgrep xytherion). Observez 'Connexion perdue'.
- 5Systemd le redémarre automatiquement après 3 secondes — confirmez que le dashboard revient en ligne.
Ce que vous venez d'apprendre
- SIGTERM → signal SSE shutdown → dashboard affiche 'Arrêt gracieux'.
- Coupure brutale sans signal → dashboard affiche 'Connexion perdue' après timeout.
- systemd Restart=always est indispensable pour la production — sans lui, un crash est définitif.
- Les deux types d'événements peuvent déclencher des automations différentes via webhooks.