آخر نشاط 2 weeks ago Unlisted

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

atareao's Avatar atareao عدّل هذا المقطع 2 weeks ago. الانتقال إلى التعديل

1 file changed, 134 insertions

notifications-demo.sh(تم إنشاء الملف)

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