#!/usr/bin/env bash # server.sh — gestión unificada del servidor de bots # # Uso: # ./dev-scripts/server.sh start [agent-id] # iniciar uno o todos # ./dev-scripts/server.sh stop [agent-id] # detener uno o todos # ./dev-scripts/server.sh restart [agent-id] # reiniciar uno o todos # ./dev-scripts/server.sh status # resumen general del servidor # ./dev-scripts/server.sh ps [agent-id] # procesos con detalle # ./dev-scripts/server.sh logs [agent-id] # tail -f de logs # ./dev-scripts/server.sh kill [agent-id] # SIGKILL forzado (emergencia) # ./dev-scripts/server.sh dashboard # TUI interactivo source "$(dirname "$0")/_common.sh" CMD="${1:-status}" shift || true AGENT="${1:-}" case "$CMD" in start) exec "$REPO_ROOT/dev-scripts/start.sh" ${AGENT:+"$AGENT"} ;; stop) exec "$REPO_ROOT/dev-scripts/stop.sh" ${AGENT:+"$AGENT"} ;; restart) exec "$REPO_ROOT/dev-scripts/restart.sh" ${AGENT:+"$AGENT"} ;; ps) exec "$REPO_ROOT/dev-scripts/ps.sh" ${AGENT:+"$AGENT"} ;; logs) exec "$REPO_ROOT/dev-scripts/logs.sh" ${AGENT:+"$AGENT"} ;; dashboard|tui) exec "$REPO_ROOT/dev-scripts/dashboard.sh" ;; kill) # SIGKILL forzado para emergencias if [[ -n "$AGENT" ]]; then agents=("$AGENT") else agents=() while IFS='|' read -r id _v _e _d _c; do agents+=("$id") done < <(list_agents_raw) fi killed=0 for id in "${agents[@]}"; do all_pids="$(find_agent_pids "$id")" if [[ -n "$all_pids" ]]; then cnt="$(echo "$all_pids" | wc -l)" for p in $all_pids; do kill -9 "$p" 2>/dev/null || true done rm -f "$(pid_file "$id")" ok "$id killed ($cnt instance(s), PIDs: $(echo $all_pids | tr '\n' ' '))" ((killed++)) || true else dim " $id (no estaba corriendo)" fi done [[ "$killed" -eq 0 ]] && dim "Ningún proceso eliminado." ;; status) # Resumen general del servidor total=0 running=0 stopped=0 disabled=0 while IFS='|' read -r id _version enabled _desc _cfg; do ((total++)) || true st=$(agent_status "$id" "$enabled") case "$st" in running) ((running++)) || true ;; stopped) ((stopped++)) || true ;; disabled) ((disabled++)) || true ;; esac done < <(list_agents_raw) echo "" echo -e " ${BLU}Bot Server Status${RST}" printf '%s\n' " $(printf '─%.0s' {1..40})" echo -e " Agentes totales: $total" echo -e " ${GRN}● Running:${RST} $running" echo -e " ${DIM}○ Stopped:${RST} $stopped" echo -e " ${YLW} Disabled:${RST} $disabled" echo "" # Mostrar tabla de agentes "$REPO_ROOT/dev-scripts/list.sh" # Si hay agentes corriendo, mostrar uso de recursos if [[ "$running" -gt 0 ]]; then echo "" "$REPO_ROOT/dev-scripts/ps.sh" fi ;; *) echo "Uso: $0 {start|stop|restart|status|ps|logs|kill|dashboard} [agent-id]" echo "" echo "Comandos:" echo " start [id] Iniciar uno o todos los agentes habilitados" echo " stop [id] Detener uno o todos los agentes" echo " restart [id] Reiniciar uno o todos los agentes" echo " status Resumen general del servidor" echo " ps [id] Procesos corriendo con detalle (PID, mem, CPU)" echo " logs [id] Tail -f de logs" echo " kill [id] SIGKILL forzado (solo emergencias)" echo " dashboard TUI interactivo de gestión" exit 1 ;; esac