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>
This commit is contained in:
211
.claude/helpers/swarm-monitor.sh
Executable file
211
.claude/helpers/swarm-monitor.sh
Executable file
@@ -0,0 +1,211 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user