82 lines
1.7 KiB
Bash
Executable file
82 lines
1.7 KiB
Bash
Executable file
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
# Configuration
|
|
API_PORT=8080
|
|
CHAT_PORT=8081
|
|
STREAM_PORT=8082
|
|
|
|
API_URL="http://localhost:$API_PORT"
|
|
CHAT_URL="http://localhost:$CHAT_PORT"
|
|
STREAM_URL="http://localhost:$STREAM_PORT"
|
|
|
|
# Colors
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m'
|
|
|
|
log() {
|
|
echo -e "${GREEN}[HEALTH] $1${NC}"
|
|
}
|
|
|
|
error() {
|
|
echo -e "${RED}[ERROR] $1${NC}"
|
|
exit 1
|
|
}
|
|
|
|
# 1. Start Stack
|
|
log "Starting production stack..."
|
|
if [ -f .env.test ]; then
|
|
docker compose --env-file .env.test -f docker-compose.production.yml up -d
|
|
else
|
|
docker compose -f docker-compose.production.yml up -d
|
|
fi
|
|
|
|
log "Waiting for services to be ready (10s)..."
|
|
sleep 10
|
|
|
|
# 2. Check Health
|
|
check_health() {
|
|
local service_name=$1
|
|
local url=$2
|
|
|
|
log "Checking $service_name health..."
|
|
|
|
# Check /healthz
|
|
if curl -sf "$url/healthz" > /dev/null; then
|
|
echo " ✅ $service_name /healthz OK"
|
|
else
|
|
error "$service_name /healthz FAILED"
|
|
fi
|
|
|
|
# Check /readyz
|
|
if curl -sf "$url/readyz" > /dev/null; then
|
|
echo " ✅ $service_name /readyz OK"
|
|
else
|
|
error "$service_name /readyz FAILED"
|
|
fi
|
|
}
|
|
|
|
check_health "Backend API" "$API_URL"
|
|
check_health "Chat Server" "$CHAT_URL"
|
|
check_health "Stream Server" "$STREAM_URL"
|
|
|
|
# 3. Check Metrics
|
|
check_metrics() {
|
|
local service_name=$1
|
|
local url=$2
|
|
|
|
log "Checking $service_name metrics..."
|
|
|
|
if curl -sf "$url/metrics" > /dev/null; then
|
|
echo " ✅ $service_name /metrics OK"
|
|
else
|
|
echo -e "${RED}[WARN] $service_name /metrics FAILED (Ignored)${NC}"
|
|
fi
|
|
}
|
|
|
|
check_metrics "Backend API" "$API_URL"
|
|
check_metrics "Chat Server" "$CHAT_URL"
|
|
check_metrics "Stream Server" "$STREAM_URL"
|
|
|
|
log "✅ Global health check passed!"
|