Files
ewoooc/scripts/health-check.sh
ogt 1b4f3a7bbe
Some checks failed
CD Pipeline / deploy (push) Failing after 59s
feat: EwoooC 初始化 — 完整專案推版至 Gitea
- 建立 Gitea Actions CD pipeline (.gitea/workflows/cd.yaml)
- 部署模式: rsync Python 檔案至 188 → docker restart (volume mount)
- Dockerfile/requirements 變動時自動重建 Docker image
- 部署通知: Telegram (開始/成功/失敗)
- 健康檢查: https://mo.wooo.work/health (最多 5 次重試)
- 同步最新 CLAUDE.md / ADR-008 / memory (2026-04-19)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 01:21:13 +08:00

90 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
# =============================================================================
# MOMO Pro System - 服務健康檢查腳本
# 用途:變更前/後快速驗證所有服務狀態
# 使用:./scripts/health-check.sh [pre|post]
# =============================================================================
set -e
MODE=${1:-check}
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
LOG_FILE="/tmp/health_check_$(date '+%Y%m%d_%H%M%S').log"
# 顏色定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
echo -e "${BLUE}╔════════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ MOMO Pro System 服務健康檢查 - $TIMESTAMP${NC}"
echo -e "${BLUE}╠════════════════════════════════════════════════════════════════╣${NC}"
check_service() {
local name=$1
local url=$2
local expected_code=${3:-200}
response=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 "$url" 2>/dev/null || echo "000")
if [ "$response" = "$expected_code" ] || [ "$response" = "302" ]; then
echo -e " ${GREEN}${NC} $name: $response"
return 0
else
echo -e " ${RED}${NC} $name: $response (expected $expected_code)"
return 1
fi
}
check_docker() {
echo -e "\n${YELLOW}📦 Docker 容器狀態:${NC}"
ssh wooo@192.168.0.110 "docker ps --format 'table {{.Names}}\t{{.Status}}' | grep -E '(superset|gitlab|n8n|registry)' | head -10" 2>/dev/null || echo " 無法連接"
}
check_k8s() {
echo -e "\n${YELLOW}🌐 K8s Pods:${NC}"
ssh wooo@192.168.0.110 "kubectl get pods -n momo --no-headers 2>/dev/null" || echo " 無法取得 K8s 狀態"
}
# 主要健康檢查
echo -e "\n${YELLOW}🔍 服務健康檢查:${NC}"
FAILED=0
check_service "mo.wooo.work" "https://mo.wooo.work/health" || ((FAILED++))
check_service "Superset 登入" "https://monitor.wooo.work/superset/login/" || ((FAILED++))
check_service "GitLab" "http://192.168.0.110:8929/" "302" || ((FAILED++))
check_service "n8n" "http://192.168.0.110:5678/" || ((FAILED++))
check_service "Registry" "https://registry.wooo.work/v2/" "401" || ((FAILED++))
check_service "CI/CD Dashboard" "https://mo.wooo.work/cicd" || ((FAILED++))
check_service "Monitor 首頁" "https://monitor.wooo.work/" || ((FAILED++))
# Docker 容器
check_docker
# K8s Pods
check_k8s
# 結果摘要
echo -e "\n${BLUE}╠════════════════════════════════════════════════════════════════╣${NC}"
if [ $FAILED -eq 0 ]; then
echo -e "${BLUE}${NC} ${GREEN}✅ 所有服務正常${NC}"
else
echo -e "${BLUE}${NC} ${RED}⚠️ $FAILED 個服務異常${NC}"
fi
echo -e "${BLUE}╚════════════════════════════════════════════════════════════════╝${NC}"
# 保存結果
if [ "$MODE" = "pre" ]; then
echo "$TIMESTAMP - PRE-CHANGE" > /tmp/last_health_check.txt
echo "Failed: $FAILED" >> /tmp/last_health_check.txt
echo -e "\n${YELLOW}📝 變更前快照已保存${NC}"
elif [ "$MODE" = "post" ]; then
echo "$TIMESTAMP - POST-CHANGE" >> /tmp/last_health_check.txt
echo "Failed: $FAILED" >> /tmp/last_health_check.txt
echo -e "\n${YELLOW}📝 變更後檢查完成${NC}"
fi
exit $FAILED