diff --git a/docker-healthcheck.sh b/docker-healthcheck.sh new file mode 100644 index 0000000..a0e135e --- /dev/null +++ b/docker-healthcheck.sh @@ -0,0 +1,137 @@ +#!/bin/bash + +# LandPPT Docker Health Check Script +# This script performs comprehensive health checks for the LandPPT application + +set -e + +# Configuration +HOST=${HOST:-localhost} +PORT=${PORT:-8000} +TIMEOUT=${HEALTH_CHECK_TIMEOUT:-30} + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# Logging function +log() { + echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}" +} + +warn() { + echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] WARNING: $1${NC}" +} + +error() { + echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: $1${NC}" +} + +# Check if service is responding +check_http_health() { + log "Checking HTTP health endpoint..." + + if curl -f -s --max-time $TIMEOUT "http://${HOST}:${PORT}/health" > /dev/null; then + log "✅ HTTP health check passed" + return 0 + else + error "❌ HTTP health check failed" + return 1 + fi +} + +# Check if API documentation is accessible +check_api_docs() { + log "Checking API documentation..." + + if curl -f -s --max-time $TIMEOUT "http://${HOST}:${PORT}/docs" > /dev/null; then + log "✅ API documentation accessible" + return 0 + else + warn "⚠️ API documentation not accessible" + return 1 + fi +} + +# Check database connectivity +check_database() { + log "Checking database connectivity..." + + if [ -f "/app/data/landppt.db" ]; then + log "✅ Database file exists" + return 0 + else + warn "⚠️ Database file not found" + return 1 + fi +} + +# Check required directories +check_directories() { + log "Checking required directories..." + + local dirs=("/app/uploads" "/app/temp" "/app/data") + local all_good=true + + for dir in "${dirs[@]}"; do + if [ -d "$dir" ]; then + log "✅ Directory $dir exists" + else + warn "⚠️ Directory $dir missing" + all_good=false + fi + done + + if $all_good; then + return 0 + else + return 1 + fi +} + +# Check Python process +check_python_process() { + log "Checking Python process..." + + if pgrep -f "python.*run.py" > /dev/null; then + log "✅ Python process running" + return 0 + else + error "❌ Python process not found" + return 1 + fi +} + +# Main health check function +main() { + log "Starting LandPPT health check..." + + local exit_code=0 + + # Critical checks (must pass) + if ! check_http_health; then + exit_code=1 + fi + + if ! check_python_process; then + exit_code=1 + fi + + # Non-critical checks (warnings only) + check_api_docs || true + check_database || true + check_directories || true + + if [ $exit_code -eq 0 ]; then + log "🎉 All critical health checks passed!" + else + error "💥 Some critical health checks failed!" + fi + + exit $exit_code +} + +# Run health check +main "$@"