Notificaciones vía Telegram, pausa nocturna y unidades systemd

Reemplaza ntfy.sh por Telegram Bot API (preferencia del usuario, no
reduce el costo — el costo real es de la API de Claude/Sonnet, no del
canal). Texto plano sin parse_mode: el motivo que devuelve Claude es
texto libre y puede traer caracteres que rompen el parser Markdown de
Telegram. Token en TELEGRAM_BOT_TOKEN_FILE (dueño devops, no root-only
-- el servicio corre como devops por el login de suscripción, mismo
criterio ya aplicado a GITEA_TOKEN_FILE). Validado en vivo: entrega
confirmada con el mismo código de notify_send().

Agrega pausa nocturna (ACTIVE_HOURS_START/END, default 06:00-23:00
hora local) para no acumular costo de API sin necesidad: el script
chequea el horario ANTES de tocar kubectl/docker/curl o invocar
claude -p, no solo antes de notificar. Nota documentada: esta ventana
no se solapa con COMMERCE_BACKEND_WINDOW_* (00:00-06:00), por lo que
medusa-deploy queda efectivamente inalcanzable para auto-restart en la
práctica -- pendiente de decisión aparte.

Agrega unidades systemd de usuario (lab-agent/systemd/*.service,
*.timer) con límites de CPU/memoria: OnCalendar cada 15 min dentro del
horario activo, corre como devops (systemctl --user), sin habilitar
todavía -- requiere confirmación explícita tras ver el costo mensual
estimado (~US$60-65, documentado en agente-monitoreo.md).
This commit is contained in:
devops committed 2026-08-26 00:00:56 -05:00
1 parent 61a951f576
commit c273056771
5 files changed
+131 -22

No files matched your search

+20
View File
@@ -0,0 +1,20 @@
[Unit]
Description=lab-agent: diagnostico/correccion del lab GitOps cruzcloud
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
WorkingDirectory=/media/HDD-Storage/AppData/k3d-lab-v3/lab-cruzcloud/scripts/lab-agent
ExecStart=/media/HDD-Storage/AppData/k3d-lab-v3/lab-cruzcloud/scripts/lab-agent/lab-agent.sh --live
TimeoutStartSec=300
# Limites de recursos (pedido explicito de gobernanza, nunca irrestricto).
# El propio script casi siempre corta antes por la pausa nocturna o por
# no tener nada elegible, asi que en la practica rara vez se acerca a
# estos topes -- estan para contener un caso patologico (claude -p
# colgado, kubectl en loop), no para el uso normal.
CPUQuota=100%
MemoryMax=1G
MemorySwapMax=256M
Nice=10
+14
View File
@@ -0,0 +1,14 @@
[Unit]
Description=Dispara lab-agent.service cada 15 min, 06:00-23:00 hora local
[Timer]
# Horas 06..22, minutos :00/:15/:30/:45 -> ultima corrida real 22:45.
# El propio script vuelve a chequear ACTIVE_HOURS_START/END al arrancar
# (defensa en profundidad si esta unidad se edita a mano sin tocar el
# .env, o si corre manualmente fuera de horario).
OnCalendar=*-*-* 06..22:00/15:00
AccuracySec=30s
Persistent=false
[Install]
WantedBy=timers.target