#!/usr/bin/env bash # health-check.sh — verifica que un agente/robot esta activo tras arrancar # # Busca en los logs del launcher mensajes que indiquen arranque exitoso: # - "e2ee ready" o "starting matrix sync" # - "runner started" o "agent running" # # Uso: # ./dev-scripts/agent/health-check.sh [timeout_secs] # # Exit codes: # 0 — agente activo y saludable # 1 — agente no encontrado o no arranco en el timeout source "$(dirname "$0")/../_common.sh" need_arg "${1:-}" ID="$1" TIMEOUT="${2:-30}" LOG_FILE="$REPO_ROOT/run/launcher.log" [[ -f "$LOG_FILE" ]] || fail "Log del launcher no encontrado: $LOG_FILE" info "Verificando salud de $ID (timeout: ${TIMEOUT}s)..." # Buscar mensajes de arranque exitoso del agente en los logs # Los mensajes contienen el agent ID en el campo "agent" del JSON check_health() { local found_sync=false local found_running=false # Buscar en las ultimas 200 lineas del log (suficiente para un arranque reciente) local recent_logs recent_logs="$(tail -200 "$LOG_FILE" 2>/dev/null || true)" # Buscar mensajes especificos del agente if echo "$recent_logs" | grep -q "\"agent\":\"${ID}\".*starting matrix sync\|\"agent\":\"${ID}\".*e2ee ready"; then found_sync=true fi if echo "$recent_logs" | grep -q "\"agent\":\"${ID}\".*runner started\|\"agent\":\"${ID}\".*agent running"; then found_running=true fi if $found_sync || $found_running; then return 0 fi return 1 } # Esperar hasta timeout elapsed=0 while [[ $elapsed -lt $TIMEOUT ]]; do if check_health; then ok "Agente $ID esta activo y saludable" exit 0 fi sleep 2 elapsed=$((elapsed + 2)) done # Timeout — mostrar ultimas lineas relevantes del log para diagnostico warn "Agente $ID no confirmo arranque exitoso en ${TIMEOUT}s" echo "" echo "Ultimas lineas del log con $ID:" tail -50 "$LOG_FILE" 2>/dev/null | grep "$ID" | tail -10 || echo " (sin mensajes del agente)" echo "" exit 1