veza/scripts/archive/health-check.sh
2025-12-12 21:34:34 -05:00

212 lines
4.9 KiB
Bash
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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