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>
276 lines
8.0 KiB
Bash
Executable File
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
|