Zuletzt aktiv 2 weeks ago Unlisted

Demo del sistema de notificaciones de alloy: Telegram, Matrix, Webhook (Episodio #834)

notifications-demo.sh Originalformat
1#!/usr/bin/env bash
2# ═══════════════════════════════════════════════════════════════════════════
3# notifications-demo.sh — Demo del sistema de notificaciones de alloy
4# Para el Episodio #834 — atareao con Linux
5# ═══════════════════════════════════════════════════════════════════════════
6# Muestra cómo funcionan las notificaciones: Telegram, Matrix, Webhook
7# ═══════════════════════════════════════════════════════════════════════════
8
9set -e
10
11VERDE='\033[0;32m'
12AMARILLO='\033[1;33m'
13AZUL='\033[0;34m'
14GRIS='\033[0;90m'
15NC='\033[0m'
16
17echo -e "${AZUL}╔══════════════════════════════════════════════════════════════╗${NC}"
18echo -e "${AZUL}║ 🔔 alloy — Sistema de notificaciones ║${NC}"
19echo -e "${AZUL}║ Canales: Telegram, Matrix, Webhook ║${NC}"
20echo -e "${AZUL}╚══════════════════════════════════════════════════════════════╝${NC}"
21echo ""
22
23# ── 1. State worker: detección de cambios ───────────────────────────────
24echo -e "${VERDE}═══ 1. Detección de cambios de estado ═══${NC}"
25echo ""
26echo -e "${GRIS}El state_worker (workers/state.rs) ejecuta:${NC}"
27echo ""
28echo " loop {"
29echo " let stream = docker.events(Some(options));"
30echo " let mut fallback = tokio::time::interval(Duration::from_secs(30));"
31echo " loop {"
32echo " tokio::select! {"
33echo " event = stream.next() => { /* procesar evento Docker */ }"
34echo " _ = fallback.tick() => { refresh(...).await; }"
35echo " }"
36echo " }"
37echo " }"
38echo ""
39echo -e "${GRIS}Eventos Docker monitorizados:${NC}"
40echo " start, stop, die, kill, pause, unpause, restart, create, destroy"
41echo ""
42
43# ── 2. Transiciones detectadas ──────────────────────────────────────────
44echo -e "${VERDE}═══ 2. Transiciones de estado ═══${NC}"
45echo ""
46echo " running → exited → ⏹️ detenido"
47echo " running → paused → ⏸️ pausado"
48echo " running → dead → 💀 finalizado"
49echo " exited → running → ▶️ en ejecución"
50echo " * → restart → 🔄 reiniciando"
51echo ""
52
53# ── 3. Canales de notificación ──────────────────────────────────────────
54echo -e "${VERDE}═══ 3. Canales de notificación ═══${NC}"
55echo ""
56
57echo -e "${AMARILLO}Telegram:${NC}"
58echo " POST https://api.telegram.org/bot{token}/sendMessage"
59echo " Body: { \"chat_id\": \"...\", \"text\": \"🚨 alloy: nginx cambió a ⏹️ detenido\" }"
60echo " Config: TELEGRAM_TOKEN + TELEGRAM_CHAT_ID"
61echo ""
62
63echo -e "${AMARILLO}Matrix:${NC}"
64echo " PUT /_matrix/client/r0/rooms/{room}/send/m.room.message/{txn_id}"
65echo " Body: { \"msgtype\": \"m.text\", \"body\": \"🚨 alloy: nginx cambió a ⏹️ detenido\" }"
66echo " Config: MATRIX_TOKEN + MATRIX_HOMESERVER + MATRIX_ROOM"
67echo ""
68
69echo -e "${AMARILLO}Webhook:${NC}"
70echo " POST {url} con JSON:"
71echo ' {'
72echo ' "event": "state_change",'
73echo ' "container": "nginx",'
74echo ' "status": "running → exited",'
75echo ' "timestamp": "2026-08-29T12:00:00Z",'
76echo ' "source": "alloy"'
77echo ' }'
78echo " Config: WEBHOOK_URL"
79echo ""
80
81# ── 4. Código de notify_all ─────────────────────────────────────────────
82echo -e "${VERDE}═══ 4. Lógica de notificación (notifications.rs) ═══${NC}"
83echo ""
84echo -e "${GRIS}Cuando se detecta un cambio:${NC}"
85echo ""
86echo " 1. Verificar si el contenedor tiene notify_events=true en su política"
87echo " 2. Si sí:"
88echo " a. Enviar evento SSE a /api/notifications"
89echo " b. Llamar a notify_all() que itera sobre los canales configurados:"
90echo " - Si TELEGRAM_TOKEN configurado → enviar mensaje"
91echo " - Si MATRIX_TOKEN configurado → enviar mensaje"
92echo " - Si WEBHOOK_URL configurado → POST JSON"
93echo ""
94
95# ── 5. Configuración desde la UI ────────────────────────────────────────
96echo -e "${VERDE}═══ 5. Configuración desde Settings ═══${NC}"
97echo ""
98echo " Desde la pestaña Settings puedes configurar:"
99echo ""
100echo " Notificaciones:"
101echo " - Telegram: token + chat_id"
102echo " - Matrix: homeserver + token + room"
103echo " - Webhook: URL"
104echo ""
105echo " Políticas de actualización:"
106echo " - Acción por defecto (none/pull/pull-restart/pull-restart-stack)"
107echo " - Cleanup old image (bool)"
108echo " - Rollback on failure (bool)"
109echo " - Notify events (bool)"
110echo ""
111echo " Auto-update:"
112echo " - Enabled (bool)"
113echo " - Cron expression"
114echo " - Notify on update (bool)"
115echo " - Pull timeout (segundos)"
116echo ""
117
118# ── 6. Comandos para probar ─────────────────────────────────────────────
119echo -e "${VERDE}═══ 6. Probar notificaciones ═══${NC}"
120echo ""
121echo " # Ver settings actuales"
122echo " curl http://localhost:3066/api/admin/settings \\"
123echo " -H \"Cookie: session=TU_TOKEN\""
124echo ""
125echo " # Configurar Telegram (via PUT)"
126echo " curl -X PUT http://localhost:3066/api/admin/settings \\"
127echo " -H \"Cookie: session=TU_TOKEN\" \\"
128echo " -H \"Content-Type: application/json\" \\"
129echo ' -d '"'"'{"telegram_token":"...","telegram_chat_id":"..."}'"'"'"
130echo ""
131echo " # Ver SSE de notificaciones en tiempo real"
132echo " curl -N http://localhost:3066/api/notifications \\"
133echo " -H \"Cookie: session=TU_TOKEN\""
134echo ""