feat(api): Docker Compose 整合與補充文件 - Docker Compose profiles 支援選用 API Server - API Server Dockerfile (多階段建置) - .env.api.example 環境變數範本 - integration_tests.rs 完整整合測試 - health_check.sh 健康檢查腳本 - 主專案 README 新增 API Server 說明區塊
This commit is contained in:
parent
e083e5d11d
commit
e577658231
9 changed files with 1269 additions and 144 deletions
133
api-server/scripts/health_check.sh
Normal file
133
api-server/scripts/health_check.sh
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# health_check.sh - API Server Health Check Script
|
||||
#
|
||||
# This script performs health checks on the ConvertX API Server.
|
||||
# It can be used for:
|
||||
# - Docker container health checks
|
||||
# - CI/CD pipeline readiness checks
|
||||
# - Manual verification after deployment
|
||||
#
|
||||
# Usage:
|
||||
# ./health_check.sh [API_URL]
|
||||
#
|
||||
# Example:
|
||||
# ./health_check.sh http://localhost:3001
|
||||
# ./health_check.sh http://convertx-api:3001
|
||||
#
|
||||
# Exit codes:
|
||||
# 0 - API is healthy
|
||||
# 1 - API is unhealthy or unreachable
|
||||
#
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Default API URL
|
||||
API_URL="${1:-http://localhost:3001}"
|
||||
TIMEOUT="${HEALTH_CHECK_TIMEOUT:-5}"
|
||||
RETRIES="${HEALTH_CHECK_RETRIES:-3}"
|
||||
RETRY_DELAY="${HEALTH_CHECK_DELAY:-2}"
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
log_info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Function to check health endpoint
|
||||
check_health() {
|
||||
local url="$1/health"
|
||||
local response
|
||||
local http_code
|
||||
|
||||
# Make the request and capture both body and status code
|
||||
response=$(curl -s -w "\n%{http_code}" --connect-timeout "$TIMEOUT" "$url" 2>/dev/null) || return 1
|
||||
|
||||
# Extract status code (last line) and body (everything else)
|
||||
http_code=$(echo "$response" | tail -n1)
|
||||
body=$(echo "$response" | sed '$d')
|
||||
|
||||
# Check HTTP status code
|
||||
if [ "$http_code" != "200" ]; then
|
||||
log_error "Health check returned HTTP $http_code"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Check response body for "healthy" status
|
||||
if echo "$body" | grep -q '"status":\s*"healthy"'; then
|
||||
return 0
|
||||
else
|
||||
log_error "Health check response does not indicate healthy status"
|
||||
log_error "Response: $body"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to check engines endpoint
|
||||
check_engines() {
|
||||
local url="$1/api/v1/engines"
|
||||
local response
|
||||
local http_code
|
||||
|
||||
# Note: This endpoint requires authentication in production
|
||||
# For basic connectivity check, we just verify it responds
|
||||
response=$(curl -s -w "\n%{http_code}" --connect-timeout "$TIMEOUT" "$url" 2>/dev/null) || return 1
|
||||
|
||||
http_code=$(echo "$response" | tail -n1)
|
||||
|
||||
# 200 OK or 401 Unauthorized both indicate the server is responding
|
||||
if [ "$http_code" = "200" ] || [ "$http_code" = "401" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# Main health check with retries
|
||||
main() {
|
||||
log_info "Checking ConvertX API Server at $API_URL"
|
||||
log_info "Timeout: ${TIMEOUT}s, Retries: $RETRIES, Retry delay: ${RETRY_DELAY}s"
|
||||
|
||||
local attempt=1
|
||||
|
||||
while [ $attempt -le $RETRIES ]; do
|
||||
log_info "Attempt $attempt of $RETRIES..."
|
||||
|
||||
if check_health "$API_URL"; then
|
||||
log_info "✓ Health check passed"
|
||||
|
||||
if check_engines "$API_URL"; then
|
||||
log_info "✓ Engines endpoint responding"
|
||||
fi
|
||||
|
||||
log_info "API Server is healthy and ready!"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ $attempt -lt $RETRIES ]; then
|
||||
log_warn "Health check failed, retrying in ${RETRY_DELAY}s..."
|
||||
sleep "$RETRY_DELAY"
|
||||
fi
|
||||
|
||||
attempt=$((attempt + 1))
|
||||
done
|
||||
|
||||
log_error "Health check failed after $RETRIES attempts"
|
||||
log_error "API Server at $API_URL is not responding correctly"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Run main function
|
||||
main
|
||||
Loading…
Add table
Add a link
Reference in a new issue