Files
CrmClinicas/.claude/helpers/swarm-monitor.sh
Consultoria AS 79b5d86325 feat: CRM Clinicas SaaS - MVP completo
- Auth: Login/Register con creacion de clinica
- Dashboard: KPIs reales, graficas recharts
- Pacientes: CRUD completo con busqueda
- Agenda: FullCalendar, drag-and-drop, vista recepcion
- Expediente: Notas SOAP, signos vitales, CIE-10
- Facturacion: Facturas con IVA, campos CFDI SAT
- Inventario: Productos, stock, movimientos, alertas
- Configuracion: Clinica, equipo, catalogo servicios
- Supabase self-hosted: 18 tablas con RLS multi-tenant
- Docker + Nginx para produccion

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-03 07:04:14 +00:00

211 lines
6.6 KiB
Bash
Executable File

#!/bin/bash
# Claude Flow V3 - Real-time Swarm Activity Monitor
# Continuously monitors and updates metrics based on running processes
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
METRICS_DIR="$PROJECT_ROOT/.claude-flow/metrics"
UPDATE_SCRIPT="$SCRIPT_DIR/update-v3-progress.sh"
# Ensure metrics directory exists
mkdir -p "$METRICS_DIR"
# Colors for logging
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
RED='\033[0;31m'
RESET='\033[0m'
log() {
echo -e "${CYAN}[$(date '+%H:%M:%S')] ${1}${RESET}"
}
warn() {
echo -e "${YELLOW}[$(date '+%H:%M:%S')] WARNING: ${1}${RESET}"
}
error() {
echo -e "${RED}[$(date '+%H:%M:%S')] ERROR: ${1}${RESET}"
}
success() {
echo -e "${GREEN}[$(date '+%H:%M:%S')] ${1}${RESET}"
}
# Function to count active processes
count_active_processes() {
local agentic_flow_count=0
local mcp_count=0
local agent_count=0
# Count agentic-flow processes
agentic_flow_count=$(ps aux 2>/dev/null | grep -E "agentic-flow" | grep -v grep | grep -v "swarm-monitor" | wc -l)
# Count MCP server processes
mcp_count=$(ps aux 2>/dev/null | grep -E "mcp.*start" | grep -v grep | wc -l)
# Count specific agent processes
agent_count=$(ps aux 2>/dev/null | grep -E "(agent|swarm|coordinator)" | grep -v grep | grep -v "swarm-monitor" | wc -l)
# Calculate total active "agents" using heuristic
local total_agents=0
if [ "$agentic_flow_count" -gt 0 ]; then
# Use agent count if available, otherwise estimate from processes
if [ "$agent_count" -gt 0 ]; then
total_agents="$agent_count"
else
# Heuristic: some processes are management, some are agents
total_agents=$((agentic_flow_count / 2))
if [ "$total_agents" -eq 0 ] && [ "$agentic_flow_count" -gt 0 ]; then
total_agents=1
fi
fi
fi
echo "agentic:$agentic_flow_count mcp:$mcp_count agents:$total_agents"
}
# Function to update metrics based on detected activity
update_activity_metrics() {
local process_info="$1"
local agentic_count=$(echo "$process_info" | cut -d' ' -f1 | cut -d':' -f2)
local mcp_count=$(echo "$process_info" | cut -d' ' -f2 | cut -d':' -f2)
local agent_count=$(echo "$process_info" | cut -d' ' -f3 | cut -d':' -f2)
# Update active agents in metrics
if [ -f "$UPDATE_SCRIPT" ]; then
"$UPDATE_SCRIPT" agent "$agent_count" >/dev/null 2>&1
fi
# Update integration status based on activity
local integration_status="false"
if [ "$agentic_count" -gt 0 ] || [ "$mcp_count" -gt 0 ]; then
integration_status="true"
fi
# Create/update activity metrics file
local activity_file="$METRICS_DIR/swarm-activity.json"
cat > "$activity_file" << EOF
{
"timestamp": "$(date -Iseconds)",
"processes": {
"agentic_flow": $agentic_count,
"mcp_server": $mcp_count,
"estimated_agents": $agent_count
},
"swarm": {
"active": $([ "$agent_count" -gt 0 ] && echo "true" || echo "false"),
"agent_count": $agent_count,
"coordination_active": $([ "$agentic_count" -gt 0 ] && echo "true" || echo "false")
},
"integration": {
"agentic_flow_active": $integration_status,
"mcp_active": $([ "$mcp_count" -gt 0 ] && echo "true" || echo "false")
}
}
EOF
return 0
}
# Function to monitor continuously
monitor_continuous() {
local monitor_interval="${1:-5}" # Default 5 seconds
local last_state=""
local current_state=""
log "Starting continuous swarm monitoring (interval: ${monitor_interval}s)"
log "Press Ctrl+C to stop monitoring"
while true; do
current_state=$(count_active_processes)
# Only update if state changed
if [ "$current_state" != "$last_state" ]; then
update_activity_metrics "$current_state"
local agent_count=$(echo "$current_state" | cut -d' ' -f3 | cut -d':' -f2)
local agentic_count=$(echo "$current_state" | cut -d' ' -f1 | cut -d':' -f2)
if [ "$agent_count" -gt 0 ] || [ "$agentic_count" -gt 0 ]; then
success "Swarm activity detected: $current_state"
else
warn "No swarm activity detected"
fi
last_state="$current_state"
fi
sleep "$monitor_interval"
done
}
# Function to run a single check
check_once() {
log "Running single swarm activity check..."
local process_info=$(count_active_processes)
update_activity_metrics "$process_info"
local agent_count=$(echo "$process_info" | cut -d' ' -f3 | cut -d':' -f2)
local agentic_count=$(echo "$process_info" | cut -d' ' -f1 | cut -d':' -f2)
local mcp_count=$(echo "$process_info" | cut -d' ' -f2 | cut -d':' -f2)
log "Process Detection Results:"
log " Agentic Flow processes: $agentic_count"
log " MCP Server processes: $mcp_count"
log " Estimated agents: $agent_count"
if [ "$agent_count" -gt 0 ] || [ "$agentic_count" -gt 0 ]; then
success "✓ Swarm activity detected and metrics updated"
else
warn "⚠ No swarm activity detected"
fi
# Run performance benchmarks (throttled to every 5 min)
if [ -x "$SCRIPT_DIR/perf-worker.sh" ]; then
"$SCRIPT_DIR/perf-worker.sh" check 2>/dev/null &
fi
return 0
}
# Main command handling
case "${1:-check}" in
"monitor"|"continuous")
monitor_continuous "${2:-5}"
;;
"check"|"once")
check_once
;;
"status")
if [ -f "$METRICS_DIR/swarm-activity.json" ]; then
log "Current swarm activity status:"
cat "$METRICS_DIR/swarm-activity.json" | jq . 2>/dev/null || cat "$METRICS_DIR/swarm-activity.json"
else
warn "No activity data available. Run 'check' first."
fi
;;
"help"|"-h"|"--help")
echo "Claude Flow V3 Swarm Monitor"
echo ""
echo "Usage: $0 [command] [options]"
echo ""
echo "Commands:"
echo " check, once Run a single activity check and update metrics"
echo " monitor [N] Monitor continuously every N seconds (default: 5)"
echo " status Show current activity status"
echo " help Show this help message"
echo ""
echo "Examples:"
echo " $0 check # Single check"
echo " $0 monitor 3 # Monitor every 3 seconds"
echo " $0 status # Show current status"
;;
*)
error "Unknown command: $1"
echo "Use '$0 help' for usage information"
exit 1
;;
esac