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).
21 lines
756 B
Desktop File
21 lines
756 B
Desktop File
[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
|