strat-gameplay-webapp/status-services.sh
Cal Corum b68e3ceacf CLAUDE: Improve service scripts and fix WebSocket plugin conflict
Service Scripts:
- start-services.sh: Add pre-flight checks, health monitoring, --dev/--prod modes,
  port options, dependency checks, and version logging
- stop-services.sh: Add port 3000 cleanup, verification, --quiet/--force flags
- status-services.sh: New script for monitoring service status with --watch mode

WebSocket:
- Remove conflicting socket.client.ts plugin that was interfering with
  useWebSocket.ts composable (used JWT auth vs cookie auth)
- Add debugging logs to useWebSocket.ts to diagnose intermittent connection issues

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 15:23:41 -06:00

276 lines
8.0 KiB
Bash
Executable File

#!/bin/bash
# Check status of backend and frontend services
# Shows running state, health, ports, and version info
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOG_DIR="$SCRIPT_DIR/logs"
BACKEND_PORT=8000
FRONTEND_PORT=3000
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Parse arguments
WATCH_MODE=false
JSON_OUTPUT=false
while [[ $# -gt 0 ]]; do
case $1 in
--watch|-w)
WATCH_MODE=true
shift
;;
--json|-j)
JSON_OUTPUT=true
shift
;;
--help|-h)
echo "Usage: $0 [OPTIONS]"
echo ""
echo "Options:"
echo " --watch, -w Continuously monitor (refresh every 2s)"
echo " --json, -j Output in JSON format"
echo " --help, -h Show this help message"
exit 0
;;
*)
echo "Unknown option: $1"
exit 1
;;
esac
done
# Function to check if a port is in use and get the PID
check_port() {
local port=$1
lsof -ti :"$port" 2>/dev/null | head -1
}
# Function to check HTTP health
check_health() {
local url=$1
local timeout=${2:-2}
if curl -s --max-time "$timeout" "$url" > /dev/null 2>&1; then
echo "healthy"
else
echo "unhealthy"
fi
}
# Function to get process uptime
get_uptime() {
local pid=$1
if [ -n "$pid" ] && ps -p "$pid" > /dev/null 2>&1; then
ps -p "$pid" -o etime= 2>/dev/null | xargs
else
echo "N/A"
fi
}
# Function to get memory usage
get_memory() {
local pid=$1
if [ -n "$pid" ] && ps -p "$pid" > /dev/null 2>&1; then
ps -p "$pid" -o rss= 2>/dev/null | awk '{printf "%.1f MB", $1/1024}'
else
echo "N/A"
fi
}
# Main status check function
check_status() {
# Get PIDs from files
BACKEND_PID_FILE=""
FRONTEND_PID_FILE=""
if [ -f "$LOG_DIR/backend.pid" ]; then
BACKEND_PID_FILE=$(cat "$LOG_DIR/backend.pid")
fi
if [ -f "$LOG_DIR/frontend.pid" ]; then
FRONTEND_PID_FILE=$(cat "$LOG_DIR/frontend.pid")
fi
# Check actual running processes
BACKEND_PID_PORT=$(check_port $BACKEND_PORT)
FRONTEND_PID_PORT=$(check_port $FRONTEND_PORT)
# Determine backend status
BACKEND_RUNNING=false
BACKEND_PID=""
if [ -n "$BACKEND_PID_FILE" ] && ps -p "$BACKEND_PID_FILE" > /dev/null 2>&1; then
BACKEND_RUNNING=true
BACKEND_PID="$BACKEND_PID_FILE"
elif [ -n "$BACKEND_PID_PORT" ]; then
BACKEND_RUNNING=true
BACKEND_PID="$BACKEND_PID_PORT"
fi
# Determine frontend status
FRONTEND_RUNNING=false
FRONTEND_PID=""
if [ -n "$FRONTEND_PID_FILE" ] && ps -p "$FRONTEND_PID_FILE" > /dev/null 2>&1; then
FRONTEND_RUNNING=true
FRONTEND_PID="$FRONTEND_PID_FILE"
elif [ -n "$FRONTEND_PID_PORT" ]; then
FRONTEND_RUNNING=true
FRONTEND_PID="$FRONTEND_PID_PORT"
fi
# Check health
BACKEND_HEALTH="stopped"
FRONTEND_HEALTH="stopped"
if [ "$BACKEND_RUNNING" = true ]; then
BACKEND_HEALTH=$(check_health "http://localhost:$BACKEND_PORT/health")
if [ "$BACKEND_HEALTH" = "unhealthy" ]; then
# Try root endpoint as fallback
BACKEND_HEALTH=$(check_health "http://localhost:$BACKEND_PORT/")
fi
fi
if [ "$FRONTEND_RUNNING" = true ]; then
FRONTEND_HEALTH=$(check_health "http://localhost:$FRONTEND_PORT")
fi
# Get version info from startup log
GIT_COMMIT="unknown"
GIT_BRANCH="unknown"
START_TIME="unknown"
ENV_MODE="unknown"
if [ -f "$LOG_DIR/startup.log" ]; then
GIT_COMMIT=$(grep "Git Commit:" "$LOG_DIR/startup.log" 2>/dev/null | cut -d: -f2 | xargs || echo "unknown")
GIT_BRANCH=$(grep "Git Branch:" "$LOG_DIR/startup.log" 2>/dev/null | cut -d: -f2 | xargs || echo "unknown")
START_TIME=$(grep "Timestamp:" "$LOG_DIR/startup.log" 2>/dev/null | cut -d: -f2- | xargs || echo "unknown")
ENV_MODE=$(grep "Environment:" "$LOG_DIR/startup.log" 2>/dev/null | cut -d: -f2 | xargs || echo "unknown")
fi
if [ "$JSON_OUTPUT" = true ]; then
# JSON output
cat << EOF
{
"backend": {
"running": $BACKEND_RUNNING,
"pid": ${BACKEND_PID:-null},
"port": $BACKEND_PORT,
"health": "$BACKEND_HEALTH",
"uptime": "$(get_uptime "$BACKEND_PID")",
"memory": "$(get_memory "$BACKEND_PID")"
},
"frontend": {
"running": $FRONTEND_RUNNING,
"pid": ${FRONTEND_PID:-null},
"port": $FRONTEND_PORT,
"health": "$FRONTEND_HEALTH",
"uptime": "$(get_uptime "$FRONTEND_PID")",
"memory": "$(get_memory "$FRONTEND_PID")"
},
"version": {
"branch": "$GIT_BRANCH",
"commit": "$GIT_COMMIT",
"mode": "$ENV_MODE",
"started": "$START_TIME"
}
}
EOF
else
# Human-readable output
clear 2>/dev/null || true
echo "========================================"
echo "📊 SBA Gameplay Services Status"
echo "========================================"
echo ""
# Backend status
echo -n "📡 Backend: "
if [ "$BACKEND_RUNNING" = true ]; then
if [ "$BACKEND_HEALTH" = "healthy" ]; then
echo -e "${GREEN}● Running${NC} (healthy)"
else
echo -e "${YELLOW}● Running${NC} (unhealthy)"
fi
echo " PID: $BACKEND_PID"
echo " Port: $BACKEND_PORT"
echo " Uptime: $(get_uptime "$BACKEND_PID")"
echo " Memory: $(get_memory "$BACKEND_PID")"
echo " URL: http://localhost:$BACKEND_PORT"
else
echo -e "${RED}○ Stopped${NC}"
fi
echo ""
# Frontend status
echo -n "🎨 Frontend: "
if [ "$FRONTEND_RUNNING" = true ]; then
if [ "$FRONTEND_HEALTH" = "healthy" ]; then
echo -e "${GREEN}● Running${NC} (healthy)"
else
echo -e "${YELLOW}● Running${NC} (unhealthy)"
fi
echo " PID: $FRONTEND_PID"
echo " Port: $FRONTEND_PORT"
echo " Uptime: $(get_uptime "$FRONTEND_PID")"
echo " Memory: $(get_memory "$FRONTEND_PID")"
echo " URL: http://localhost:$FRONTEND_PORT"
else
echo -e "${RED}○ Stopped${NC}"
fi
echo ""
# Version info
echo "📌 Version:"
echo " Branch: $GIT_BRANCH"
echo " Commit: $GIT_COMMIT"
echo " Mode: $ENV_MODE"
echo " Started: $START_TIME"
echo ""
# Overall status
if [ "$BACKEND_RUNNING" = true ] && [ "$FRONTEND_RUNNING" = true ]; then
if [ "$BACKEND_HEALTH" = "healthy" ] && [ "$FRONTEND_HEALTH" = "healthy" ]; then
echo -e "${GREEN}✅ All services healthy${NC}"
else
echo -e "${YELLOW}⚠️ Some services unhealthy${NC}"
fi
elif [ "$BACKEND_RUNNING" = true ] || [ "$FRONTEND_RUNNING" = true ]; then
echo -e "${YELLOW}⚠️ Partial services running${NC}"
else
echo -e "${RED}❌ All services stopped${NC}"
fi
echo ""
# Quick commands
echo "📋 Commands:"
if [ "$BACKEND_RUNNING" = false ] || [ "$FRONTEND_RUNNING" = false ]; then
echo " Start: ./start-services.sh"
fi
if [ "$BACKEND_RUNNING" = true ] || [ "$FRONTEND_RUNNING" = true ]; then
echo " Stop: ./stop-services.sh"
echo " Restart: ./stop-services.sh && ./start-services.sh"
fi
echo " Logs: tail -f $LOG_DIR/backend.log"
echo ""
if [ "$WATCH_MODE" = true ]; then
echo -e "${BLUE}[Refreshing every 2s - Press Ctrl+C to exit]${NC}"
fi
fi
}
# Main execution
if [ "$WATCH_MODE" = true ]; then
# Watch mode - refresh every 2 seconds
while true; do
check_status
sleep 2
done
else
check_status
fi