veza/scripts/archive/health-check.sh

213 lines
4.9 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configuration
ENVIRONMENT=${1:-local}
VERBOSE=${2:-false}
# Determine compose file
if [ "$ENVIRONMENT" == "production" ]; then
COMPOSE_FILE="docker-compose.production.yml"
FRONTEND_PORT=80
else
COMPOSE_FILE="docker-compose.yml"
FRONTEND_PORT=3000
fi
# Exit code
EXIT_CODE=0
# Function to print colored messages
print_info() {
echo -e "${BLUE} $1${NC}"
}
print_success() {
echo -e "${GREEN}$1${NC}"
}
print_warning() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
print_error() {
echo -e "${RED}$1${NC}"
}
# Function to check container status
check_container_status() {
local service=$1
local status=$(docker-compose -f "$COMPOSE_FILE" ps "$service" 2>/dev/null | tail -n +3 | awk '{print $1, $4, $5, $6, $7}' | grep "$service" || echo "")
if [ -z "$status" ]; then
return 1
fi
if echo "$status" | grep -q "Up\|healthy"; then
return 0
else
return 1
fi
}
# Function to check HTTP endpoint
check_http_endpoint() {
local service=$1
local url=$2
local timeout=${3:-5}
if curl -sf --max-time "$timeout" "$url" >/dev/null 2>&1; then
return 0
else
return 1
fi
}
# Function to check service health
check_service_health() {
local service=$1
local endpoint=$2
local port=${3:-}
print_info "Checking ${service}..."
# Check container status
if ! check_container_status "$service"; then
print_error "${service}: Container is not running or unhealthy"
return 1
fi
# Check HTTP endpoint if provided
if [ -n "$endpoint" ]; then
if check_http_endpoint "$service" "$endpoint"; then
print_success "${service}: Healthy (HTTP endpoint responding)"
return 0
else
print_warning "${service}: Container running but HTTP endpoint not responding"
return 1
fi
fi
# If no endpoint, just check container status
print_success "${service}: Healthy (container running)"
return 0
}
# Function to check database connectivity
check_database() {
local service=$1
local user=$2
local db=$3
print_info "Checking ${service} database connectivity..."
if docker-compose -f "$COMPOSE_FILE" exec -T "$service" psql -U "$user" -d "$db" -c "SELECT 1;" >/dev/null 2>&1; then
print_success "${service}: Database connection successful"
return 0
else
print_error "${service}: Database connection failed"
return 1
fi
}
# Function to check Redis connectivity
check_redis() {
local service=$1
print_info "Checking ${service} connectivity..."
if docker-compose -f "$COMPOSE_FILE" exec -T "$service" redis-cli ping >/dev/null 2>&1; then
print_success "${service}: Redis connection successful"
return 0
else
print_error "${service}: Redis connection failed"
return 1
fi
}
# Main health check
main() {
print_info "🏥 Checking health of all services for ${ENVIRONMENT} environment..."
echo ""
# Check prerequisites
if [ ! -f "$COMPOSE_FILE" ]; then
print_error "$COMPOSE_FILE not found. Aborting.";
exit 1;
fi
# Check PostgreSQL
if ! check_service_health "postgres" ""; then
EXIT_CODE=1
else
if [ "$ENVIRONMENT" == "local" ]; then
check_database "postgres" "veza_user" "veza_local" || EXIT_CODE=1
fi
fi
echo ""
# Check Redis
if ! check_service_health "redis" ""; then
EXIT_CODE=1
else
check_redis "redis" || EXIT_CODE=1
fi
echo ""
# Check Backend API
if ! check_service_health "backend-api" "http://localhost:8080/health"; then
EXIT_CODE=1
fi
echo ""
# Check Chat Server
if ! check_service_health "chat-server" "http://localhost:8081/health"; then
EXIT_CODE=1
fi
echo ""
# Check Stream Server
if ! check_service_health "stream-server" "http://localhost:8082/health"; then
EXIT_CODE=1
fi
echo ""
# Check Frontend
if ! check_service_health "frontend" "http://localhost:${FRONTEND_PORT}/health"; then
EXIT_CODE=1
fi
echo ""
# Display summary
if [ $EXIT_CODE -eq 0 ]; then
print_success "🎉 All services are healthy!"
echo ""
if [ "$VERBOSE" == "true" ] || [ "$VERBOSE" == "-v" ]; then
print_info "Detailed service status:"
docker-compose -f "$COMPOSE_FILE" ps
fi
else
print_error "❌ Some services are unhealthy!"
echo ""
print_info "Detailed service status:"
docker-compose -f "$COMPOSE_FILE" ps
echo ""
print_warning "Run with verbose flag (-v) for more details"
fi
exit $EXIT_CODE
}
# Run main function
main