-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathverify_rabbitmq.sh
More file actions
executable file
·154 lines (131 loc) · 4.89 KB
/
verify_rabbitmq.sh
File metadata and controls
executable file
·154 lines (131 loc) · 4.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/bin/bash
# RabbitMQ 架構驗證腳本
set -e
echo "========================================="
echo "RabbitMQ 消息隊列架構驗證"
echo "========================================="
echo ""
# 顏色定義
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'
check_pass() {
echo -e "${GREEN}✓ PASS${NC} - $1"
}
check_fail() {
echo -e "${RED}✗ FAIL${NC} - $1"
}
check_warn() {
echo -e "${YELLOW}⚠ WARN${NC} - $1"
}
echo "1. 檢查 RabbitMQ 服務..."
echo "-----------------------------------"
if docker ps | grep -q "rabbitmq.*healthy"; then
check_pass "RabbitMQ 容器運行中"
RABBITMQ_CONTAINER=$(docker ps --filter "name=rabbitmq" --format "{{.Names}}" | head -1)
# 檢查隊列
QUEUE_INFO=$(docker exec $RABBITMQ_CONTAINER rabbitmqctl list_queues name messages 2>/dev/null | grep case_processing_queue || echo "")
if [ -n "$QUEUE_INFO" ]; then
check_pass "任務隊列已創建: $QUEUE_INFO"
else
check_warn "任務隊列尚未創建"
fi
else
check_fail "RabbitMQ 容器未運行"
exit 1
fi
echo ""
echo "2. 檢查 API 容器..."
echo "-----------------------------------"
API_COUNT=$(docker ps --filter "name=case-api" --format "{{.Names}}" | wc -l)
if [ "$API_COUNT" -eq 3 ]; then
check_pass "API 容器運行中 (3/3)"
# 測試 API
HEALTH=$(docker exec case-api-1 curl -s http://localhost:8000/api/v1/health 2>/dev/null | python3 -c "import json,sys; print(json.load(sys.stdin)['status'])" 2>/dev/null || echo "error")
if [ "$HEALTH" = "healthy" ]; then
check_pass "API 健康檢查通過"
else
check_warn "API 健康檢查異常: $HEALTH"
fi
else
check_fail "API 容器數量不正確: $API_COUNT/3"
fi
echo ""
echo "3. 檢查 Worker 容器..."
echo "-----------------------------------"
WORKER_COUNT=$(docker ps --filter "name=case-worker" --format "{{.Names}}" | wc -l)
if [ "$WORKER_COUNT" -eq 5 ]; then
check_pass "Worker 容器運行中 (5/5)"
# 檢查 Worker 進程
WORKER_PROC=$(docker top case-worker-1 | grep "python -m worker.main" | wc -l)
if [ "$WORKER_PROC" -ge 1 ]; then
check_pass "Worker 進程運行中"
else
check_warn "Worker 進程未檢測到"
fi
else
check_warn "Worker 數量: $WORKER_COUNT/5"
fi
echo ""
echo "4. 檢查消息隊列類型..."
echo "-----------------------------------"
MQ_TYPE=$(docker exec case-api-1 curl -s http://localhost:8000/ 2>/dev/null | python3 -c "import json,sys; print(json.load(sys.stdin).get('message_queue', 'unknown'))" 2>/dev/null || echo "unknown")
if [ "$MQ_TYPE" = "rabbitmq" ]; then
check_pass "消息隊列類型: RabbitMQ ✓"
else
check_warn "消息隊列類型: $MQ_TYPE"
fi
echo ""
echo "5. 檢查 RabbitMQ 管理界面..."
echo "-----------------------------------"
RABBITMQ_MGMT=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:15672/ 2>/dev/null || echo "000")
if [ "$RABBITMQ_MGMT" = "200" ]; then
check_pass "RabbitMQ 管理界面可訪問: http://localhost:15672"
echo " 用戶名: admin"
echo " 密碼: admin123"
else
check_warn "RabbitMQ 管理界面無法訪問"
fi
echo ""
echo "6. 測試完整流程..."
echo "-----------------------------------"
TEST_CASE_ID="VERIFY-TEST-$(date +%s)"
echo "提交測試案號: $TEST_CASE_ID"
# 提交案號
SUBMIT_RESULT=$(docker exec case-api-1 curl -s -X POST http://localhost:8000/api/v1/cases \
-H "Content-Type: application/json" \
-d "{\"case_id\":\"$TEST_CASE_ID\",\"request_data\":{\"query\":\"Verification test\"}}" 2>/dev/null)
SUCCESS=$(echo "$SUBMIT_RESULT" | python3 -c "import json,sys; print(json.load(sys.stdin).get('success', False))" 2>/dev/null || echo "False")
if [ "$SUCCESS" = "True" ]; then
check_pass "案號提交成功"
echo "等待 Worker 處理(5秒)..."
sleep 5
# 查詢結果
STATUS=$(docker exec case-api-1 curl -s http://localhost:8000/api/v1/cases/$TEST_CASE_ID 2>/dev/null | python3 -c "import json,sys; print(json.load(sys.stdin).get('status', 'unknown'))" 2>/dev/null || echo "unknown")
echo "處理狀態: $STATUS"
if [ "$STATUS" = "已完成" ]; then
check_pass "Worker 處理完成"
elif [ "$STATUS" = "處理中" ]; then
check_warn "Worker 仍在處理中(需要更多時間)"
else
check_warn "狀態異常: $STATUS"
fi
else
check_fail "案號提交失敗"
echo "$SUBMIT_RESULT"
fi
echo ""
echo "========================================="
echo "驗證完成!"
echo "========================================="
echo ""
echo "服務訪問:"
echo " - 前端測試界面: http://localhost:8888"
echo " - RabbitMQ 管理: http://localhost:15672 (admin/admin123)"
echo ""
echo "常用命令:"
echo " - 查看隊列: docker exec case-rabbitmq rabbitmqctl list_queues"
echo " - 查看 Worker 日誌: docker logs -f case-worker-1"
echo " - 查看 API 日誌: docker logs -f case-api-1"
echo ""