提交 c1946f58 authored 作者: 陈泽健's avatar 陈泽健

fix(server): 修复服务器健康检查shell脚本中的权限和执行问题

- 为MQTT工具包中的可执行文件添加执行权限
- 修复MQTT订阅和发布命令中的错误处理逻辑
- 添加对MQTT进程等待和循环执行的安全处理
- 改进Redis、MySQL、FastDFS检测脚本的输出记录
- 优化数据库连接测试的日志输出格式
- 调整中间件连接检测在主流程中的执行顺序
- 修复多个函数返回值处理的安全性问题
上级 65258f35
...@@ -1569,6 +1569,15 @@ test_mqtt_connection() { ...@@ -1569,6 +1569,15 @@ test_mqtt_connection() {
mqtt_toolkit_dir="$script_dir/mqtt_test_x86" mqtt_toolkit_dir="$script_dir/mqtt_test_x86"
fi fi
# 为工具包中的可执行文件添加执行权限
if [[ -d "$mqtt_toolkit_dir" ]]; then
chmod +x "$mqtt_toolkit_dir/mosquitto_pub" 2>/dev/null || true
chmod +x "$mqtt_toolkit_dir/mosquitto_sub" 2>/dev/null || true
chmod +x "$mqtt_toolkit_dir/mqtt" 2>/dev/null || true
chmod +x "$mqtt_toolkit_dir/verify.sh" 2>/dev/null || true
log INFO "[MQTT] 已为工具包文件添加执行权限: $mqtt_toolkit_dir"
fi
# 优先使用工具包 # 优先使用工具包
if [[ -d "$mqtt_toolkit_dir" ]] && [[ -f "$mqtt_toolkit_dir/mosquitto_sub" ]]; then if [[ -d "$mqtt_toolkit_dir" ]] && [[ -f "$mqtt_toolkit_dir/mosquitto_sub" ]]; then
mqtt_sub_cmd="$mqtt_toolkit_dir/mosquitto_sub" mqtt_sub_cmd="$mqtt_toolkit_dir/mosquitto_sub"
...@@ -1606,19 +1615,19 @@ test_mqtt_connection() { ...@@ -1606,19 +1615,19 @@ test_mqtt_connection() {
local sub_output local sub_output
if [[ "$use_toolkit" == true ]]; then if [[ "$use_toolkit" == true ]]; then
# 使用工具包:通过docker cp复制到容器内执行,或映射端口从宿主机执行 # 使用工具包:通过docker cp复制到容器内执行,或映射端口从宿主机执行
sub_output="$(timeout 2 "$mqtt_sub_cmd" -h localhost -p "$mqtt_port" -t "$topic" -C 1 -W 2 2>&1 || echo "SUB_TIMEOUT")" sub_output="$(timeout 2 "$mqtt_sub_cmd" -h localhost -p "$mqtt_port" -t "$topic" -C 1 -W 2 2>&1 || true)" || sub_output="SUB_TIMEOUT"
else else
# 使用容器内命令 # 使用容器内命令
sub_output="$(docker exec "$actual_container" timeout 2 mosquitto_sub -h localhost -p "$mqtt_port" -t "$topic" -C 1 -W 2 2>&1 || echo "SUB_TIMEOUT")" sub_output="$(docker exec "$actual_container" timeout 2 mosquitto_sub -h localhost -p "$mqtt_port" -t "$topic" -C 1 -W 2 2>&1 || true)" || sub_output="SUB_TIMEOUT"
fi fi
if [[ ! "$sub_output" =~ SUB_TIMEOUT ]] && [[ ! "$sub_output" =~ Connection\ refused ]]; then if [[ ! "$sub_output" =~ SUB_TIMEOUT ]] && [[ ! "$sub_output" =~ Connection\ refused ]]; then
((subscribed_count++)) ((subscribed_count++)) || true
log SUCCESS "[MQTT] 主题订阅成功: $topic" log SUCCESS "[MQTT] 主题订阅成功: $topic"
else else
log INFO "[MQTT] 主题订阅: $topic (订阅通道正常,无消息推送)" log INFO "[MQTT] 主题订阅: $topic (订阅通道正常,无消息推送)"
fi fi
done done || true
# 检查mosquitto_pub是否可用并开始消息收发测试 # 检查mosquitto_pub是否可用并开始消息收发测试
if [[ "$use_toolkit" == true ]] || [[ -n "$mqtt_pub_cmd" ]]; then if [[ "$use_toolkit" == true ]] || [[ -n "$mqtt_pub_cmd" ]]; then
...@@ -1635,11 +1644,13 @@ test_mqtt_connection() { ...@@ -1635,11 +1644,13 @@ test_mqtt_connection() {
if [[ "$use_toolkit" == true ]]; then if [[ "$use_toolkit" == true ]]; then
# 使用工具包 # 使用工具包
timeout 5 "$mqtt_sub_cmd" -h localhost -p "$mqtt_port" -t "$test_topic" -C 1 -v > "$sub_output_file" 2>&1 & timeout 5 "$mqtt_sub_cmd" -h localhost -p "$mqtt_port" -t "$test_topic" -C 1 -v > "$sub_output_file" 2>&1 &
else else
# 使用容器内命令 # 使用容器内命令
docker exec "$actual_container" sh -c "timeout 5 mosquitto_sub -h localhost -p $mqtt_port -t '$test_topic' -C 1 -v > $sub_output_file 2>&1" & docker exec "$actual_container" sh -c "timeout 5 mosquitto_sub -h localhost -p $mqtt_port -t '$test_topic' -C 1 -v > $sub_output_file 2>&1" &
fi fi
local sub_pid=$! local sub_pid=$! || true
# 等待订阅启动 # 等待订阅启动
sleep 1 sleep 1
...@@ -1652,11 +1663,11 @@ test_mqtt_connection() { ...@@ -1652,11 +1663,11 @@ test_mqtt_connection() {
if [[ "$use_toolkit" == true ]]; then if [[ "$use_toolkit" == true ]]; then
# 使用工具包 # 使用工具包
pub_output="$("$mqtt_pub_cmd" -h localhost -p "$mqtt_port" -t "$test_topic" -m "$test_message" 2>&1)" pub_output="$("$mqtt_pub_cmd" -h localhost -p "$mqtt_port" -t "$test_topic" -m "$test_message" 2>&1 || true)"
pub_exit_code=$? pub_exit_code=$?
else else
# 使用容器内命令 # 使用容器内命令
pub_output="$(docker exec "$actual_container" mosquitto_pub -h localhost -p "$mqtt_port" -t "$test_topic" -m "$test_message" 2>&1)" pub_output="$(docker exec "$actual_container" mosquitto_pub -h localhost -p "$mqtt_port" -t "$test_topic" -m "$test_message" 2>&1 || true)"
pub_exit_code=$? pub_exit_code=$?
fi fi
...@@ -1669,7 +1680,7 @@ test_mqtt_connection() { ...@@ -1669,7 +1680,7 @@ test_mqtt_connection() {
fi fi
# 等待订阅接收消息 # 等待订阅接收消息
wait $sub_pid 2>/dev/null wait $sub_pid 2>/dev/null || true
local sub_exit_code=$? local sub_exit_code=$?
# 步骤3: 验证接收结果 # 步骤3: 验证接收结果
...@@ -1704,7 +1715,7 @@ test_mqtt_connection() { ...@@ -1704,7 +1715,7 @@ test_mqtt_connection() {
docker exec "$actual_container" rm -f "$sub_output_file" 2>/dev/null || true docker exec "$actual_container" rm -f "$sub_output_file" 2>/dev/null || true
fi fi
local recv_success=1 local recv_success=1
fi fi || true
# 汇总消息收发检测结果 # 汇总消息收发检测结果
if [[ $pub_success -eq 1 ]] && [[ $recv_success -eq 1 ]]; then if [[ $pub_success -eq 1 ]] && [[ $recv_success -eq 1 ]]; then
...@@ -1719,136 +1730,21 @@ test_mqtt_connection() { ...@@ -1719,136 +1730,21 @@ test_mqtt_connection() {
report_kv_set "mqtt.pubsub.status" "FAIL" report_kv_set "mqtt.pubsub.status" "FAIL"
report_kv_set "mqtt.pubsub.detail" "消息发送失败" report_kv_set "mqtt.pubsub.detail" "消息发送失败"
log ERROR "[MQTT] ========== MQTT消息收发测试: 失败 ==========" log ERROR "[MQTT] ========== MQTT消息收发测试: 失败 =========="
fi fi || true
fi fi || true
# 汇总主题订阅检测结果 # 汇总主题订阅检测结果
report_kv_set "mqtt.subscription.status" "OK" report_kv_set "mqtt.subscription.status" "OK"
report_kv_set "mqtt.subscription.detail" "成功检测 ${topic_count} 个标准版主题,订阅通道正常" report_kv_set "mqtt.subscription.detail" "成功检测 ${topic_count} 个标准版主题,订阅通道正常"
log SUCCESS "[MQTT] 标准版主题订阅检测完成: 检测 ${topic_count} 个主题" log SUCCESS "[MQTT] 标准版主题订阅检测完成: 检测 ${topic_count} 个主题"
# 输出MQTT主题列表
log INFO "[MQTT] 标准版主题列表: ${topic_list[*]}"
else
log WARN "[MQTT] 服务未连接,跳过主题订阅检测"
local subscribed_count=0
local topic_count=${#topic_list[@]}
for topic in "${topic_list[@]}"; do
# 使用mosquitto_sub订阅主题(超时2秒)
local sub_output
sub_output="$(docker exec "$actual_container" timeout 2 mosquitto_sub -h localhost -p "$mqtt_port" -t "$topic" -C 1 -W 2 2>&1 || echo "SUB_TIMEOUT")"
if [[ ! "$sub_output" =~ SUB_TIMEOUT ]] && [[ ! "$sub_output" =~ Connection\ refused ]]; then
((subscribed_count++))
log SUCCESS "[MQTT] 主题订阅成功: $topic"
else
log INFO "[MQTT] 主题订阅: $topic (订阅通道正常,无消息推送)"
fi
done
# 检查mosquitto_pub是否可用
local check_pub_output
check_pub_output="$(docker exec "$actual_container" which mosquitto_pub 2>&1 || echo "NOT_FOUND")"
if [[ ! "$check_pub_output" =~ NOT_FOUND ]]; then
log INFO "[MQTT] ========== 开始消息收发测试 =========="
# 使用第一个标准版主题进行消息收发测试
local test_topic="${topic_list[0]}"
local test_message="MQTT健康检查测试消息_$(date +%s)"
# 步骤1: 后台订阅测试主题
log INFO "[MQTT] 步骤1/3: 后台订阅测试主题: $test_topic"
local sub_output_file="/tmp/mqtt_sub_$$_$(date +%s).log"
docker exec "$actual_container" sh -c "timeout 5 mosquitto_sub -h localhost -p $mqtt_port -t '$test_topic' -C 1 -v > $sub_output_file 2>&1" &
local sub_pid=$!
# 等待订阅启动
sleep 1
# 步骤2: 发送测试消息
log INFO "[MQTT] 步骤2/3: 发送测试消息到主题: $test_topic"
log INFO "[MQTT] 发送消息体: [$test_message]"
local pub_output
pub_output="$(docker exec "$actual_container" mosquitto_pub -h localhost -p "$mqtt_port" -t "$test_topic" -m "$test_message" 2>&1)"
local pub_exit_code=$?
if [[ $pub_exit_code -eq 0 ]]; then
log SUCCESS "[MQTT] 消息发送成功"
local pub_success=1
else
log ERROR "[MQTT] 消息发送失败: $pub_output"
local pub_success=0
fi
# 等待订阅接收消息
wait $sub_pid 2>/dev/null
local sub_exit_code=$?
# 步骤3: 验证接收结果
log INFO "[MQTT] 步骤3/3: 验证消息接收"
local received_message=""
if [[ $sub_exit_code -eq 0 ]]; then
received_message="$(docker exec "$actual_container" cat "$sub_output_file" 2>/dev/null || echo "")"
# 清理临时文件
docker exec "$actual_container" rm -f "$sub_output_file" 2>/dev/null || true
# 打印接收到的原始消息体
log INFO "[MQTT] 接收消息体: [$received_message]"
log INFO "[MQTT] 预期消息体: [$test_message]"
if [[ "$received_message" =~ "$test_message" ]]; then
log SUCCESS "[MQTT] 消息接收验证成功"
local recv_success=1
else
log WARN "[MQTT] 消息内容不匹配,但订阅通道正常"
local recv_success=1
fi
else
log INFO "[MQTT] 消息订阅超时(订阅通道正常,无消息推送)"
# 清理可能残留的临时文件
docker exec "$actual_container" rm -f "$sub_output_file" 2>/dev/null || true
local recv_success=1
fi
# 汇总消息收发检测结果
if [[ $pub_success -eq 1 ]] && [[ $recv_success -eq 1 ]]; then
report_kv_set "mqtt.pubsub.status" "OK"
report_kv_set "mqtt.pubsub.detail" "消息发送与接收测试均成功"
log SUCCESS "[MQTT] ========== MQTT消息收发测试完成 =========="
elif [[ $pub_success -eq 1 ]]; then
report_kv_set "mqtt.pubsub.status" "OK"
report_kv_set "mqtt.pubsub.detail" "消息发送成功"
log SUCCESS "[MQTT] ========== MQTT消息收发测试完成 =========="
else
report_kv_set "mqtt.pubsub.status" "FAIL"
report_kv_set "mqtt.pubsub.detail" "消息发送失败"
log ERROR "[MQTT] ========== MQTT消息收发测试: 失败 =========="
fi
else
log INFO "[MQTT] mosquitto_pub不可用,跳过消息发送测试"
report_kv_set "mqtt.pubsub.status" "SKIP"
report_kv_set "mqtt.pubsub.detail" "mosquitto_pub命令不可用"
fi
# 汇总主题订阅检测结果
report_kv_set "mqtt.subscription.status" "OK"
report_kv_set "mqtt.subscription.detail" "成功检测 ${topic_count} 个标准版主题,订阅通道正常"
log SUCCESS "[MQTT] 标准版主题订阅检测完成: 检测 ${topic_count} 个主题"
else
log WARN "[MQTT] mosquitto_sub不可用,跳过主题订阅检测"
report_kv_set "mqtt.subscription.status" "SKIP"
report_kv_set "mqtt.subscription.detail" "mosquitto_sub命令不可用"
fi
# 输出MQTT主题列表 # 输出MQTT主题列表
log INFO "[MQTT] 标准版主题列表: ${topic_list[*]}" log INFO "[MQTT] 标准版主题列表: ${topic_list[*]}"
else else
log WARN "[MQTT] 服务未连接,跳过主题订阅检测" log WARN "[MQTT] 服务未连接,跳过主题订阅检测"
fi fi
return 0
} }
# Redis 连接检测(调用check_redis.sh脚本) # Redis 连接检测(调用check_redis.sh脚本)
...@@ -1907,33 +1803,48 @@ test_redis_connection() { ...@@ -1907,33 +1803,48 @@ test_redis_connection() {
local redis_exit_code local redis_exit_code
# 执行检测脚本并捕获输出和退出码 # 执行检测脚本并捕获输出和退出码
log INFO "[Redis] ========== 开始执行check_redis.sh脚本 =========="
redis_output="$(bash "$check_redis_script" 2>&1)" redis_output="$(bash "$check_redis_script" 2>&1)"
redis_exit_code=$? redis_exit_code=$?
# 打印完整输出
log INFO "[Redis] ========== check_redis.sh脚本输出 =========="
echo "$redis_output" | while IFS= read -r line; do
log INFO "[Redis] $line"
done || true
log INFO "[Redis] ========== check_redis.sh脚本输出结束 =========="
# 记录脚本输出(截取关键信息) # 记录脚本输出(截取关键信息)
if [[ $redis_exit_code -eq 0 ]]; then if [[ $redis_exit_code -eq 0 ]]; then
log SUCCESS "[Redis] check_redis.sh检测成功" log SUCCESS "[Redis] check_redis.sh检测成功"
if [[ "$redis_output" =~ "所有核心测试通过" ]]; then if [[ "$redis_output" =~ "所有核心测试通过" ]]; then
report_kv_set "redis_conn.status" "OK" report_kv_set "redis_conn.status" "OK"
report_kv_set "redis_conn.detail" "Redis完整检测通过(连接+读写+删除+信息收集)" report_kv_set "redis_conn.detail" "Redis完整检测通过(连接+读写+删除+信息收集)"
log INFO "[Redis] 检测结果: Redis完整检测通过(连接+读写+删除+信息收集)"
else else
report_kv_set "redis_conn.status" "OK" report_kv_set "redis_conn.status" "OK"
report_kv_set "redis_conn.detail" "Redis检测完成" report_kv_set "redis_conn.detail" "Redis检测完成"
log INFO "[Redis] 检测结果: Redis检测完成"
fi fi
else else
log ERROR "[Redis] check_redis.sh检测失败" log ERROR "[Redis] check_redis.sh检测失败"
report_kv_set "redis_conn.status" "FAIL" report_kv_set "redis_conn.status" "FAIL"
if [[ "$redis_output" =~ "未找到 Redis 容器" ]]; then if [[ "$redis_output" =~ "未找到 Redis 容器" ]]; then
report_kv_set "redis_conn.detail" "未检测到Redis容器" report_kv_set "redis_conn.detail" "未检测到Redis容器"
log ERROR "[Redis] 检测结果: 未检测到Redis容器"
elif [[ "$redis_output" =~ "连接失败" ]]; then elif [[ "$redis_output" =~ "连接失败" ]]; then
report_kv_set "redis_conn.detail" "Redis连接失败" report_kv_set "redis_conn.detail" "Redis连接失败"
log ERROR "[Redis] 检测结果: Redis连接失败"
else else
report_kv_set "redis_conn.detail" "Redis检测失败" report_kv_set "redis_conn.detail" "Redis检测失败"
log ERROR "[Redis] 检测结果: Redis检测失败"
fi fi
fi fi || true
# 清理环境变量 # 清理环境变量
unset REDIS_HOST REDIS_PORT REDIS_PASSWORD CONTAINER_PATTERN AUTO_DETECT unset REDIS_HOST REDIS_PORT REDIS_PASSWORD CONTAINER_PATTERN AUTO_DETECT
return 0
} }
# MySQL 连接检测 # MySQL 连接检测
...@@ -1961,9 +1872,16 @@ test_mysql_connection() { ...@@ -1961,9 +1872,16 @@ test_mysql_connection() {
local is_connected=0 local is_connected=0
local detail_msg="" local detail_msg=""
log INFO "[MySQL] ========== 开始MySQL连接测试 =========="
local mysql_output local mysql_output
mysql_output="$(docker exec "$actual_container" mysql -h "localhost" -P "$mysql_port" -uroot -p"${mysql_password}" -e 'SELECT 1' 2>&1 || echo "MYSQL_FAIL")" mysql_output="$(docker exec "$actual_container" mysql -h "localhost" -P "$mysql_port" -uroot -p"${mysql_password}" -e 'SELECT 1' 2>&1 || echo "MYSQL_FAIL")"
# 打印完整输出
if [[ "$mysql_output" != "MYSQL_FAIL" ]]; then
log INFO "[MySQL] mysql命令输出: $mysql_output"
fi
log INFO "[MySQL] ========== MySQL连接测试结束 =========="
if [[ "$mysql_output" != "MYSQL_FAIL" ]]; then if [[ "$mysql_output" != "MYSQL_FAIL" ]]; then
is_connected=1 is_connected=1
detail_msg="连接成功,端口 ${mysql_port} 可访问" detail_msg="连接成功,端口 ${mysql_port} 可访问"
...@@ -1973,6 +1891,9 @@ test_mysql_connection() { ...@@ -1973,6 +1891,9 @@ test_mysql_connection() {
local port_output local port_output
port_output="$(docker exec "$actual_container" nc -zv -w 3 "localhost" "$mysql_port" 2>&1 || echo "PORT_FAIL")" port_output="$(docker exec "$actual_container" nc -zv -w 3 "localhost" "$mysql_port" 2>&1 || echo "PORT_FAIL")"
# 打印端口测试输出
log INFO "[MySQL] nc端口测试输出: $port_output"
if [[ "$port_output" =~ succeeded ]]; then if [[ "$port_output" =~ succeeded ]]; then
is_connected=1 is_connected=1
detail_msg="端口连通性测试成功 (端口 ${mysql_port})" detail_msg="端口连通性测试成功 (端口 ${mysql_port})"
...@@ -1981,15 +1902,19 @@ test_mysql_connection() { ...@@ -1981,15 +1902,19 @@ test_mysql_connection() {
detail_msg="连接失败: ${mysql_output}" detail_msg="连接失败: ${mysql_output}"
log ERROR "[MySQL] 连接测试失败: ${mysql_output}" log ERROR "[MySQL] 连接测试失败: ${mysql_output}"
fi fi
fi fi || true
if [[ $is_connected -eq 1 ]]; then if [[ $is_connected -eq 1 ]]; then
report_kv_set "mysql_conn.status" "OK" report_kv_set "mysql_conn.status" "OK"
log INFO "[MySQL] 检测结果: $detail_msg"
else else
report_kv_set "mysql_conn.status" "FAIL" report_kv_set "mysql_conn.status" "FAIL"
fi log ERROR "[MySQL] 检测结果: $detail_msg"
fi || true
report_kv_set "mysql_conn.detail" "$detail_msg" report_kv_set "mysql_conn.detail" "$detail_msg"
report_kv_set "mysql_conn.container" "$actual_container" report_kv_set "mysql_conn.container" "$actual_container"
return 0
} }
# FastDFS 连接检测 # FastDFS 连接检测
...@@ -2016,30 +1941,43 @@ test_fastdfs_connection() { ...@@ -2016,30 +1941,43 @@ test_fastdfs_connection() {
local fdfs_output local fdfs_output
local fdfs_exit_code local fdfs_exit_code
log INFO "[FastDFS] ========== 开始执行check_fdfs.sh脚本 =========="
fdfs_output="$(bash "$check_fdfs_script" 2>&1)" fdfs_output="$(bash "$check_fdfs_script" 2>&1)"
fdfs_exit_code=$? fdfs_exit_code=$?
# 打印完整输出
log INFO "[FastDFS] ========== check_fdfs.sh脚本输出 =========="
echo "$fdfs_output" | while IFS= read -r line; do
log INFO "[FastDFS] $line"
done || true
log INFO "[FastDFS] ========== check_fdfs.sh脚本输出结束 =========="
# 记录脚本输出 # 记录脚本输出
if [[ $fdfs_exit_code -eq 0 ]]; then if [[ $fdfs_exit_code -eq 0 ]]; then
log SUCCESS "[FastDFS] check_fdfs.sh检测成功" log SUCCESS "[FastDFS] check_fdfs.sh检测成功"
if [[ "$fdfs_output" =~ "所有核心功能验证通过" ]] || [[ "$fdfs_output" =~ "所有核心测试通过" ]]; then if [[ "$fdfs_output" =~ "所有核心功能验证通过" ]] || [[ "$fdfs_output" =~ "所有核心测试通过" ]]; then
report_kv_set "fastdfs_conn.status" "OK" report_kv_set "fastdfs_conn.status" "OK"
report_kv_set "fastdfs_conn.detail" "FastDFS完整检测通过(上传+下载+完整性验证)" report_kv_set "fastdfs_conn.detail" "FastDFS完整检测通过(上传+下载+完整性验证)"
log INFO "[FastDFS] 检测结果: FastDFS完整检测通过(上传+下载+完整性验证)"
else else
report_kv_set "fastdfs_conn.status" "OK" report_kv_set "fastdfs_conn.status" "OK"
report_kv_set "fastdfs_conn.detail" "FastDFS检测完成" report_kv_set "fastdfs_conn.detail" "FastDFS检测完成"
log INFO "[FastDFS] 检测结果: FastDFS检测完成"
fi fi
else else
log ERROR "[FastDFS] check_fdfs.sh检测失败" log ERROR "[FastDFS] check_fdfs.sh检测失败"
report_kv_set "fastdfs_conn.status" "FAIL" report_kv_set "fastdfs_conn.status" "FAIL"
if [[ "$fdfs_output" =~ "未找到.*容器" ]] || [[ "$fdfs_output" =~ "容器" ]]; then if [[ "$fdfs_output" =~ "未找到.*容器" ]] || [[ "$fdfs_output" =~ "容器" ]]; then
report_kv_set "fastdfs_conn.detail" "未检测到FastDFS容器" report_kv_set "fastdfs_conn.detail" "未检测到FastDFS容器"
log ERROR "[FastDFS] 检测结果: 未检测到FastDFS容器"
elif [[ "$fdfs_output" =~ "上传失败" ]]; then elif [[ "$fdfs_output" =~ "上传失败" ]]; then
report_kv_set "fastdfs_conn.detail" "文件上传失败" report_kv_set "fastdfs_conn.detail" "文件上传失败"
log ERROR "[FastDFS] 检测结果: 文件上传失败"
else else
report_kv_set "fastdfs_conn.detail" "FastDFS检测失败" report_kv_set "fastdfs_conn.detail" "FastDFS检测失败"
log ERROR "[FastDFS] 检测结果: FastDFS检测失败"
fi fi
fi fi || true
return 0 return 0
fi fi
...@@ -2089,15 +2027,19 @@ test_fastdfs_connection() { ...@@ -2089,15 +2027,19 @@ test_fastdfs_connection() {
else else
detail_msg="创建测试文件失败(降级检测)" detail_msg="创建测试文件失败(降级检测)"
log ERROR "[FastDFS] 创建测试文件失败" log ERROR "[FastDFS] 创建测试文件失败"
fi fi || true
if [[ $is_connected -eq 1 ]]; then if [[ $is_connected -eq 1 ]]; then
report_kv_set "fastdfs_conn.status" "OK" report_kv_set "fastdfs_conn.status" "OK"
log INFO "[FastDFS] 检测结果: $detail_msg"
else else
report_kv_set "fastdfs_conn.status" "FAIL" report_kv_set "fastdfs_conn.status" "FAIL"
fi log ERROR "[FastDFS] 检测结果: $detail_msg"
fi || true
report_kv_set "fastdfs_conn.detail" "$detail_msg" report_kv_set "fastdfs_conn.detail" "$detail_msg"
report_kv_set "fastdfs_conn.container" "$actual_container" report_kv_set "fastdfs_conn.container" "$actual_container"
return 0
} }
# 中间件连接检测统一入口 # 中间件连接检测统一入口
...@@ -2105,16 +2047,18 @@ test_middleware_connections() { ...@@ -2105,16 +2047,18 @@ test_middleware_connections() {
section "中间件连接检测" section "中间件连接检测"
# MQTT连接检测 # MQTT连接检测
test_mqtt_connection test_mqtt_connection || true
# Redis连接检测 # Redis连接检测
test_redis_connection test_redis_connection || true
# MySQL连接检测 # MySQL连接检测
test_mysql_connection test_mysql_connection || true
# FastDFS连接检测 # FastDFS连接检测
test_fastdfs_connection test_fastdfs_connection || true
return 0
} }
# ------------------------------ # ------------------------------
...@@ -2875,7 +2819,30 @@ main() { ...@@ -2875,7 +2819,30 @@ main() {
report_add "- exist_count: $(report_kv_get "perm.exist_count")" report_add "- exist_count: $(report_kv_get "perm.exist_count")"
report_add "- miss_count: $(report_kv_get "perm.miss_count")" report_add "- miss_count: $(report_kv_get "perm.miss_count")"
# 7) 现场数据备份 # 7) 中间件连接检测 (PRD 4.18) - 调整至备份前执行
test_middleware_connections
# 8) 容器与中间件信息收集 - 调整至备份前执行
section "容器与中间件"
collect_container_info "$platform"
# Emqx 异常检测
check_emqx_container_exception
report_add ""
report_add "## 容器与中间件"
report_add "- docker: $(report_kv_get "docker.available")"
report_add "- redis.log export: $(report_kv_get "redis.export")"
report_add "- emqx.log export: $(report_kv_get "emqx.export")"
report_add "- redis container exception: $(report_kv_get "redis.exception")"
local redis_recheck
redis_recheck="$(report_kv_get "redis.recheck")"
[[ -n "$redis_recheck" ]] && report_add "- redis recheck: $redis_recheck"
report_add "- emqx container exception: $(report_kv_get "emqx.exception")"
local emqx_recheck
emqx_recheck="$(report_kv_get "emqx.recheck")"
[[ -n "$emqx_recheck" ]] && report_add "- emqx recheck: $emqx_recheck"
# 9) 现场数据备份
section "现场数据备份(可选)" section "现场数据备份(可选)"
read -r -p "是否执行现场数据备份? (y/n) [默认:n]: " bak read -r -p "是否执行现场数据备份? (y/n) [默认:n]: " bak
if [[ "${bak:-n}" =~ ^[Yy]$ ]]; then if [[ "${bak:-n}" =~ ^[Yy]$ ]]; then
...@@ -2899,7 +2866,7 @@ main() { ...@@ -2899,7 +2866,7 @@ main() {
report_add "- 用户选择跳过" report_add "- 用户选择跳过"
fi fi
# 8) 日志导出 # 10) 日志导出
section "日志导出(可选)" section "日志导出(可选)"
read -r -p "是否导出服务日志到本地目录? (y/n) [默认:n]: " ex read -r -p "是否导出服务日志到本地目录? (y/n) [默认:n]: " ex
local export_dir="" local export_dir=""
...@@ -2915,31 +2882,7 @@ main() { ...@@ -2915,31 +2882,7 @@ main() {
report_add "- 用户选择跳过" report_add "- 用户选择跳过"
fi fi
# 9) 容器信息 + Redis/Emqx # 11) Android
section "容器与中间件"
collect_container_info "$platform"
# ✅ 补齐:Emqx 异常检测(你已经实现但 main 没调用)
check_emqx_container_exception
# 9.5) 中间件连接检测 (PRD 4.18)
test_middleware_connections
report_add ""
report_add "## 容器与中间件"
report_add "- docker: $(report_kv_get "docker.available")"
report_add "- redis.log export: $(report_kv_get "redis.export")"
report_add "- emqx.log export: $(report_kv_get "emqx.export")"
report_add "- redis container exception: $(report_kv_get "redis.exception")"
local redis_recheck
redis_recheck="$(report_kv_get "redis.recheck")"
[[ -n "$redis_recheck" ]] && report_add "- redis recheck: $redis_recheck"
# ✅ 新增摘要:Emqx
report_add "- emqx container exception: $(report_kv_get "emqx.exception")"
local emqx_recheck
emqx_recheck="$(report_kv_get "emqx.recheck")"
[[ -n "$emqx_recheck" ]] && report_add "- emqx recheck: $emqx_recheck"
# 10) Android
section "Android 自检(可选)" section "Android 自检(可选)"
android_self_check android_self_check
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论