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

feat(服务自检): 传统平台统一平台分类路径细分对齐 ps1/sh/auto

- 中间件 redis 日志路径按 meeting/unified 细分:
  传统统一平台(/var/www/java/redis) vs 会议预定(/var/www/redis), ps1/sh/auto 三端一致
- test_middleware_connections 改为基于平台类型(old/new)+sys.ujava.variant 映射路径,
  修复传统统一平台误用新平台 /data/middleware 路径的旧逻辑
- 宿主机 extapi 服务检测增加路径过滤: unified -> /var/www/java/unifiedPlatform/external-meeting-api
- 报告/日志系统类型识别输出传统平台细分(统一平台系统/会议预定系统)
- LogExport/FilePermission/ConfigIPCheck/DataBackup/ShellAdapter/config_check.sh
  增加 unified 细分路径(前端/后端/中间件/备份/权限/配置检查)
- 禁用遗漏的 extapi 自动修复调用(sh/auto), 改为 WARN + extapi.auto_repair=disabled
- 修复 sh 端 check_emqx_container_exception 分支结构错乱(bash -n 语法错误)
Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
上级 d8a2ef45
......@@ -438,15 +438,15 @@ function Main {
# 检测系统类型
$systemInfo = Get-SystemType -Server $server
Write-Host ""
# ✅ ujava 系统细分
if ($systemInfo.HasUjava) {
# ✅ 传统平台系统细分(meeting / unified):只要是传统平台就细分,不依赖 ujava 容器是否存在
if ($platformType -eq "old") {
$ujavaVariant = Get-UjavaSystemVariant -Server $server
$systemInfo.UjavaSystemVariant = $ujavaVariant
if ($ujavaVariant -eq "unified") {
Write-Log -Level "INFO" -Message " [系统细分] ujava -> 统一平台系统 (检测到 /var/www/java/unifiedPlatform)"
Write-Log -Level "INFO" -Message " [系统细分] 传统平台 -> 统一平台系统 (检测到 /var/www/java/unifiedPlatform)"
} else {
Write-Log -Level "INFO" -Message " [系统细分] ujava -> 会议预定系统 (未检测到 /var/www/java/unifiedPlatform)"
Write-Log -Level "INFO" -Message " [系统细分] 传统平台 -> 会议预定系统 (未检测到 /var/www/java/unifiedPlatform)"
}
} else {
$systemInfo.UjavaSystemVariant = "N/A"
......@@ -528,8 +528,8 @@ function Main {
Write-Log -Level "WARN" -Message "未检测到 ujava 容器,跳过容器内服务检测"
}
# ujava 宿主机服务检测(传统平台extapi在/var/www/java/external-meeting-api
$ujavaHostResults = Test-UjavaOldPlatformHostServices -Server $server
# ujava 宿主机服务检测(extapi 路径按 meeting/unified 分支
$ujavaHostResults = Test-UjavaOldPlatformHostServices -Server $server -SystemInfo $systemInfo
# 如果检测到对外服务进程 ubains-meeting-api-1.0-SNAPSHOT.jar 未运行,则触发远程修复
$global:ExternalServiceRepairResult = $null # 供报告使用
......@@ -659,9 +659,15 @@ function Main {
$middlewareStorageLogPath = "/data/storage/storage/logs"
$middlewareTrackerLogPath = "/data/storage/tracker/logs"
} else {
# 传统平台类型
# 传统平台类型:meeting 与 unified 的 redis 路径不同
$middlewareEmqxLogPath = "/var/www/emqx/log"
$middlewareRedisLogPath = "/var/www/redis/data/redis.log"
$ujavaVariant = $null
if ($systemInfo -and $systemInfo.ContainsKey('UjavaSystemVariant')) { $ujavaVariant = $systemInfo.UjavaSystemVariant }
if ($ujavaVariant -eq 'unified') {
$middlewareRedisLogPath = "/var/www/java/redis/data/redis.log"
} else {
$middlewareRedisLogPath = "/var/www/redis/data/redis.log"
}
$middlewareMysqlLogPath = "/usr/local/docker/mysql/log"
$middlewareStorageLogPath = "/var/fdfs/storage/logs"
$middlewareTrackerLogPath = "/var/fdfs/tracker/logs"
......@@ -782,7 +788,7 @@ function Main {
$logExportResults = $null
if ($exportChoice -eq "y" -or $exportChoice -eq "Y") {
$logExportResults = Export-ConfigAndLogs -Server $server -PlatformType $platformType
$logExportResults = Export-ConfigAndLogs -Server $server -PlatformType $platformType -SystemInfo $systemInfo
}
else {
Write-Log -Level "INFO" -Message "跳过配置文件与日志导出"
......
......@@ -196,7 +196,7 @@ confirm_repair() {
log WARN “│ ⚠ 注意: 修复操作可能修改系统配置,请确认后执行”
log WARN “└──────────────────────────────────────────────────────────────”
echo -n “ 是否执行以上修复? (y/N): “
echo -n " 是否执行以上修复? (y/N): "
local response
read response
......@@ -259,7 +259,7 @@ EOF
# ------------------------------
# ujava 系统细分(meeting vs unified)
# 仅 old 平台 + 存在 ujava 容器时判定
# 仅 old 平台判定(不论是否存在 ujava 容器)
# - /var/www/java/unifiedPlatform 存在 => unified
# - 否则 => meeting
# 写入 KV: sys.ujava.variant
......@@ -268,17 +268,17 @@ detect_ujava_variant() {
local platform="$1"
local has_ujava="$2"
if [[ "$platform" != "old" || "$has_ujava" -ne 1 ]]; then
if [[ "$platform" != "old" ]]; then
report_kv_set "sys.ujava.variant" "N/A"
return 0
fi
if [[ -d /var/www/java/unifiedPlatform ]]; then
report_kv_set "sys.ujava.variant" "unified"
log INFO "[系统细分] ujava -> 统一平台系统 (检测到 /var/www/java/unifiedPlatform)"
log INFO "[系统细分] 传统平台 -> 统一平台系统 (检测到 /var/www/java/unifiedPlatform)"
else
report_kv_set "sys.ujava.variant" "meeting"
log INFO "[系统细分] ujava -> 会议预定系统 (未检测到 /var/www/java/unifiedPlatform)"
log INFO "[系统细分] 传统平台 -> 会议预定系统 (未检测到 /var/www/java/unifiedPlatform)"
fi
}
......@@ -381,10 +381,17 @@ test_ujava_services() {
test_ujava_host_services() {
log INFO "========== 检测 ujava 宿主机服务 (extapi) =========="
local results=()
# 传统平台按 meeting/unified 细分限定路径,避免跨系统误计
local extapi_path=""
if [[ "$(report_kv_get "sys.ujava.variant")" == "unified" ]]; then
extapi_path='| grep "/var/www/java/unifiedPlatform/external-meeting-api"'
elif [[ "$(report_kv_get "sys.ujava.variant")" == "meeting" ]]; then
extapi_path='| grep "/var/www/java/external-meeting-api"'
fi
for svc in "${!UJAVA_HOST_SERVICES[@]}"; do
local jar="${UJAVA_HOST_SERVICES[$svc]}"
local n
n="$(count_proc_host "$jar")"
n="$(count_proc_host "$jar" "$extapi_path")"
if [[ "$n" -gt 0 ]]; then
log SUCCESS " [OK] $svc ($jar): 运行中"
results+=("$svc|$jar|running")
......@@ -936,8 +943,6 @@ repair_ntp_if_needed() {
post="$(test_ntp)"
report_kv_set "ntp.recheck" "$post"
}
fi
}
# ------------------------------
# 9) 文件权限检测(增强:统计缺失项 + 写入报告)
......@@ -960,15 +965,22 @@ check_file_permissions() {
"/data/middleware/nginx/config/*.conf" "/data/middleware/emqx/config/*.conf"
"/data/services/api/python-cmdb/*.sh" "/data/services/api/python-voice/*.sh" )
else
local ujava_variant
local ujava_variant web_root redis_root
ujava_variant="$(report_kv_get "sys.ujava.variant")"
[[ -z "$ujava_variant" || "$ujava_variant" == "N/A" ]] && ujava_variant="meeting"
targets+=( "/var/www/java/api-java-meeting2.0/run.sh" "/var/www/java/external-meeting-api/run.sh"
web_root="/var/www/java"
redis_root="/var/www/redis"
if [[ "$ujava_variant" == "unified" ]]; then
web_root="/var/www/java/unifiedPlatform"
redis_root="/var/www/java/redis"
fi
targets+=( "$web_root/api-java-meeting2.0/run.sh" "$web_root/external-meeting-api/run.sh"
"/var/www/html/start.sh"
"/var/www/wifi-local/config.ini" "/var/www/wifi-local/startDB.sh" "/var/www/wifi-local/wifi*"
"/var/www/paperless/run.sh" "/var/www/paperless/start.sh"
"/var/www/redis/redis-*.conf"
"$redis_root/redis-*.conf"
"/var/www/emqx/config/*.conf"
"/etc/rc.d/rc.local" )
......@@ -1073,6 +1085,13 @@ collect_container_info() {
if [[ "$platform" == "new" ]]; then
redis_log="/data/middleware/redis/data/redis.log"
emqx_log="/data/middleware/emqx/log/emqx.log.1"
else
# 传统平台:redis 路径按 unified/meeting 细分
local variant
variant="$(report_kv_get "sys.ujava.variant")"
if [[ "$variant" == "unified" ]]; then
redis_log="/var/www/java/redis/data/redis.log"
fi
fi
local redis_export="" emqx_export=""
......@@ -1390,9 +1409,6 @@ _cfgip_list_files_new() {
_cfgip_list_files_old() {
{
_cfgip_add_glob_files "/var/www/java/api-java-meeting2.0/config" yml yaml properties js json conf
_cfgip_add_glob_files "/var/www/java/external-meeting-api/config" yml yaml properties js json conf
local ujava_variant web_root
ujava_variant="$(report_kv_get "sys.ujava.variant")"
[[ -z "$ujava_variant" || "$ujava_variant" == "N/A" ]] && ujava_variant="meeting"
......@@ -1400,6 +1416,9 @@ _cfgip_list_files_old() {
web_root="/var/www/java"
[[ "$ujava_variant" == "unified" ]] && web_root="/var/www/java/unifiedPlatform"
_cfgip_add_glob_files "$web_root/api-java-meeting2.0/config" yml yaml properties js json conf
_cfgip_add_glob_files "$web_root/external-meeting-api/config" yml yaml properties js json conf
_cfgip_add_file_if_exists "$web_root/ubains-web-2.0/static/config.json"
_cfgip_add_file_if_exists "$web_root/ubains-web-admin/static/config.json"
_cfgip_add_glob_files "$web_root/nginx-conf.d" conf
......@@ -1781,11 +1800,7 @@ check_emqx_container_exception() {
# ✅ 自动修复已禁用,仅记录,需人工排查
log WARN "[Emqx] 跳过自动修复(已禁用),需人工排查"
report_kv_set "emqx.repair" "SKIPPED"
else
log WARN "[Emqx] 复检失败:uemqx 仍未运行(需人工排查)"
report_kv_set "emqx.recheck" "FAIL"
fi
report_kv_set "emqx.recheck" "SKIPPED"
else
log INFO "[Emqx] 未检测到需要自动修复的 Emqx 容器异常"
report_kv_set "emqx.exception" "false"
......@@ -3264,15 +3279,11 @@ test_middleware_connections() {
# ------------------------------
# 平台类型判断与中间件日志路径映射
# ------------------------------
# 判断平台类型:Unified(新统一平台)或 Traditional(传统平台)
# 通过检测 /var/www/java/unifiedPlatform 目录是否存在来判断
local Platform="Traditional"
if [[ -d /var/www/java/unifiedPlatform ]]; then
Platform="Unified"
log INFO "[中间件] 检测到新统一平台 (Unified)"
else
log INFO "[中间件] 检测到传统平台 (Traditional)"
fi
# 基于新/旧平台 + old 下 meeting/unified 细分来映射日志路径,
# 避免把传统统一平台(/var/www/java/unifiedPlatform)误判为新平台
local platform="$1"
local variant
variant="$(report_kv_get "sys.ujava.variant")"
# 中间件日志路径映射(根据平台类型)
local MiddlewareEmqxLogPath=""
......@@ -3283,19 +3294,24 @@ test_middleware_connections() {
local MiddlewareLogPath=""
# 新统一平台类型
if [ "$Platform" = "Unified" ]; then
if [[ "$platform" == "new" ]]; then
MiddlewareEmqxLogPath="/data/middleware/emqx/log"
MiddlewareRedisLogPath="/data/middleware/redis/log"
MiddlewareMysqlLogPath="/data/middleware/mysql/log"
MiddlewareStorageLogPath="/data/storage/storage/logs"
MiddlewareTrackerLogPath="/data/storage/tracker/logs"
MiddlewareLogPath="$MiddlewareStorageLogPath $MiddlewareTrackerLogPath"
fi
# 传统平台类型
if [ "$Platform" = "Traditional" ]; then
log INFO "[中间件] 检测到新统一平台 (/data/services)"
# 传统平台类型(old):redis 路径按 unified/meeting 细分
else
MiddlewareEmqxLogPath="/var/www/emqx/log"
MiddlewareRedisLogPath="/var/www/redis/data/redis.log"
if [[ "$variant" == "unified" ]]; then
MiddlewareRedisLogPath="/var/www/java/redis/data/redis.log"
log INFO "[中间件] 检测到传统统一平台 (unified)"
else
MiddlewareRedisLogPath="/var/www/redis/data/redis.log"
log INFO "[中间件] 检测到传统会议预定平台 (meeting)"
fi
MiddlewareMysqlLogPath="/usr/local/docker/mysql/log"
MiddlewareStorageLogPath="/var/fdfs/storage/logs"
MiddlewareTrackerLogPath="/var/fdfs/tracker/logs"
......@@ -3303,7 +3319,7 @@ test_middleware_connections() {
fi
# 导出环境变量供子函数使用
export Platform
export Platform="$platform"
export MiddlewareEmqxLogPath
export MiddlewareRedisLogPath
export MiddlewareMysqlLogPath
......@@ -3413,19 +3429,19 @@ data_backup() {
ujava_variant="$(report_kv_get "sys.ujava.variant")"
[[ -z "$ujava_variant" || "$ujava_variant" == "N/A" ]] && ujava_variant="meeting"
if [[ "${HAS_UJAVA:-0}" -eq 1 ]]; then
if [[ "$ujava_variant" == "unified" ]]; then
copy_tree_if_exists "/var/www/java/unifiedPlatform" "var_www_java_unifiedPlatform" || true
else
copy_tree_if_exists "/var/www/java" "var_www_java" || true
fi
# ✅ 传统平台均需备份(不依赖 ujava 容器是否存在);unified 使用 unifiedPlatform/redis 路径
if [[ "$ujava_variant" == "unified" ]]; then
copy_tree_if_exists "/var/www/java/unifiedPlatform" "var_www_java_unifiedPlatform" || true
copy_tree_if_exists "/var/www/java/redis" "var_www_java_redis" || true
else
copy_tree_if_exists "/var/www/java" "var_www_java" || true
copy_tree_if_exists "/var/www/redis" "var_www_redis" || true
fi
if [[ "${HAS_UPYTHON:-0}" -eq 1 ]]; then
copy_tree_if_exists "/var/www/html" "var_www_html" || true
fi
copy_tree_if_exists "/var/www/redis" "var_www_redis" || true
copy_tree_if_exists "/var/www/emqx" "var_www_emqx" || true
else
# 新平台:按实际目录结构备份
......@@ -3573,17 +3589,18 @@ export_logs() {
ujava_variant="$(report_kv_get "sys.ujava.variant")"
[[ -z "$ujava_variant" || "$ujava_variant" == "N/A" ]] && ujava_variant="meeting"
if [[ "$has_ujava" -eq 1 ]]; then
copy_if_exists "/var/www/java/api-java-meeting2.0/logs/ubains-INFO-AND-ERROR.log" "$export_dir/对内后端_ubains-INFO-AND-ERROR.log" || true
copy_if_exists "/var/www/java/external-meeting-api/logs/ubains-INFO-AND-ERROR.log" "$export_dir/对外后端_ubains-INFO-AND-ERROR.log" || true
# ✅ 传统平台均需导出(不依赖 ujava 容器是否存在);路径按 unified/meeting 分支
if [[ "$ujava_variant" == "unified" ]]; then
copy_if_exists "/var/www/java/unifiedPlatform/api-java-meeting2.0/logs/ubains-INFO-AND-ERROR.log" "$export_dir/对内后端_ubains-INFO-AND-ERROR.log" || true
copy_if_exists "/var/www/java/unifiedPlatform/external-meeting-api/logs/ubains-INFO-AND-ERROR.log" "$export_dir/对外后端_ubains-INFO-AND-ERROR.log" || true
# ✅ unified:补导出 unifiedPlatform 前端 config(存在即导出)
if [[ "$ujava_variant" == "unified" ]]; then
copy_if_exists "/var/www/java/unifiedPlatform/ubains-web-2.0/static/config.json" "$export_dir/unified_web-2.0_config.json" || true
copy_if_exists "/var/www/java/unifiedPlatform/ubains-web-admin/static/config.json" "$export_dir/unified_web-admin_config.json" || true
fi
copy_from_container_if_exists "$ujava_container" "/var/log/nginx/error.log" "$export_dir/ujava容器_nginx_error.log" || true
copy_if_exists "/var/www/java/unifiedPlatform/ubains-web-2.0/static/config.json" "$export_dir/unified_web-2.0_config.json" || true
copy_if_exists "/var/www/java/unifiedPlatform/ubains-web-admin/static/config.json" "$export_dir/unified_web-admin_config.json" || true
copy_if_exists "/var/www/java/unifiedPlatform/ubains-web-3.0/static/config.json" "$export_dir/unified_web-3.0_config.json" || true
else
copy_if_exists "/var/www/java/api-java-meeting2.0/logs/ubains-INFO-AND-ERROR.log" "$export_dir/对内后端_ubains-INFO-AND-ERROR.log" || true
copy_if_exists "/var/www/java/external-meeting-api/logs/ubains-INFO-AND-ERROR.log" "$export_dir/对外后端_ubains-INFO-AND-ERROR.log" || true
fi
if [[ "$has_upython" -eq 1 ]]; then
......@@ -3805,6 +3822,9 @@ export_config_and_logs() {
)
# --- 传统平台服务定义 ---
# 说明:meeting 与 unified 使用不同目录前缀;unified 增加统一平台专属服务
# (web-3.0 / unified-platform / mobile / api-dubbo-* / auth-sso-*),
# 均位于 /var/www/java/unifiedPlatform/ 下。
local old_fe_svcs=(
"ubains-web-2.0|/var/www/java/ubains-web-2.0|static/config.json"
......@@ -3814,12 +3834,40 @@ export_config_and_logs() {
"web-vue-rms|/var/www/html/web-vue-rms|static/config.json"
"web-vue-h5|/var/www/html/web-vue-h5|static/config.json"
)
# unified 前端(含移动端)
local old_fe_svcs_unified=(
"ubains-web-2.0|/var/www/java/unifiedPlatform/ubains-web-2.0|static/config.json"
"ubains-web-admin|/var/www/java/unifiedPlatform/ubains-web-admin|static/config.json"
"ubains-web-3.0|/var/www/java/unifiedPlatform/ubains-web-3.0|static/config.json"
"ubains-unified-platform|/var/www/java/unifiedPlatform/ubains-unified-platform|static/config.json"
"ubains-unified-platform-admin|/var/www/java/unifiedPlatform/ubains-unified-platform-admin|static/config.json"
"ubains-video-web-3.0|/var/www/java/unifiedPlatform/ubains-video-web-3.0|static/config.json"
"ubains-meeting-mobile|/var/www/java/unifiedPlatform/mobile/ubains-meeting-mobile|static/config.json"
"ubains-unified-platform-mobile|/var/www/java/unifiedPlatform/mobile/ubains-unified-platform-mobile|static/config.json"
"web-vue-rms|/var/www/html/web-vue-rms|static/config.json"
"web-vue-h5|/var/www/html/web-vue-h5|static/config.json"
)
# 传统平台 Java 后端(带 ext-filter 和 mtime)
local old_java_be_svcs=(
"api-java-meeting2.0|/var/www/java/api-java-meeting2.0"
"external-meeting-api|/var/www/java/external-meeting-api"
)
# unified Java 后端(dubbo / sso 服务均位于 unifiedPlatform 下)
local old_java_be_svcs_unified=(
"api-java-meeting2.0|/var/www/java/unifiedPlatform/api-java-meeting2.0"
"api-dubbo-cloudLink|/var/www/java/unifiedPlatform/api-dubbo-cloudLink"
"api-dubbo-dingding|/var/www/java/unifiedPlatform/api-dubbo-dingding"
"api-dubbo-meeting-control|/var/www/java/unifiedPlatform/api-dubbo-meeting-control"
"api-dubbo-smc-three|/var/www/java/unifiedPlatform/api-dubbo-smc-three"
"api-dubbo-smc-two|/var/www/java/unifiedPlatform/api-dubbo-smc-two"
"api-dubbo-tencent-meeting|/var/www/java/unifiedPlatform/api-dubbo-tencent-meeting"
"api-dubbo-xylink|/var/www/java/unifiedPlatform/api-dubbo-xylink"
"auth-sso-auth|/var/www/java/unifiedPlatform/auth-sso-auth"
"auth-sso-gatway|/var/www/java/unifiedPlatform/auth-sso-gatway"
"auth-sso-system|/var/www/java/unifiedPlatform/auth-sso-system"
"external-meeting-api|/var/www/java/unifiedPlatform/external-meeting-api"
)
local old_be_svcs=(
"html-ops|/var/www/html|setting.conf|log/uinfo.log|log/error.log|log/uwsgi.log"
......@@ -3832,6 +3880,14 @@ export_config_and_logs() {
"mysql|/usr/local/docker/mysql|logs"
"fdfs|/var/fdfs|storage/logs|tracker/logs"
)
# unified 中间件:nginx/redis 路径与 meeting 不同
local old_mw_svcs_unified=(
"nginx|/var/www/java/unifiedPlatform/nginx-conf.d|meeting443.conf|nginx_log"
"redis|/var/www/java/redis|*.conf|data"
"emqx|/var/www/emqx|config|log"
"mysql|/usr/local/docker/mysql|logs"
"fdfs|/var/fdfs|storage/logs|tracker/logs"
)
local old_tp_svcs=(
"paperless|/var/www/paperless|application.yml|nohup.out"
......@@ -4008,9 +4064,25 @@ export_config_and_logs() {
else
# ===== 传统平台 =====
log INFO "平台类型: 传统平台"
local ujava_variant fe_svcs_sel java_be_svcs_sel be_svcs_sel mw_svcs_sel
ujava_variant="$(report_kv_get "sys.ujava.variant")"
[[ -z "$ujava_variant" || "$ujava_variant" == "N/A" ]] && ujava_variant="meeting"
if [[ "$ujava_variant" == "unified" ]]; then
log INFO "传统平台细分: 统一平台系统 (unified)"
fe_svcs_sel=("${old_fe_svcs_unified[@]}")
java_be_svcs_sel=("${old_java_be_svcs_unified[@]}")
be_svcs_sel=("${old_be_svcs[@]}")
mw_svcs_sel=("${old_mw_svcs_unified[@]}")
else
log INFO "传统平台细分: 会议预定系统 (meeting)"
fe_svcs_sel=("${old_fe_svcs[@]}")
java_be_svcs_sel=("${old_java_be_svcs[@]}")
be_svcs_sel=("${old_be_svcs[@]}")
mw_svcs_sel=("${old_mw_svcs[@]}")
fi
# --- 前端服务 ---
for entry in "${old_fe_svcs[@]}"; do
for entry in "${fe_svcs_sel[@]}"; do
IFS='|' read -r svc_name svc_base rel_file <<< "$entry"
if [[ ! -d "$svc_base" ]]; then
log WARN " [SKIP] $svc_name - 目录不存在: $svc_base"
......@@ -4024,7 +4096,7 @@ export_config_and_logs() {
done
# --- Java 后端服务(带 ext-filter 和 mtime)---
for entry in "${old_java_be_svcs[@]}"; do
for entry in "${java_be_svcs_sel[@]}"; do
IFS='|' read -r svc_name svc_base <<< "$entry"
if [[ ! -d "$svc_base" ]]; then
log WARN " [SKIP] $svc_name - 目录不存在: $svc_base"
......@@ -4047,7 +4119,7 @@ export_config_and_logs() {
done
# --- 传统平台后端服务(简单文件列表)---
for entry in "${old_be_svcs[@]}"; do
for entry in "${be_svcs_sel[@]}"; do
IFS='|' read -ra parts <<< "$entry"
local svc_name="${parts[0]}"
local svc_base="${parts[1]}"
......@@ -4070,7 +4142,7 @@ export_config_and_logs() {
done
# --- 中间件服务 ---
for entry in "${old_mw_svcs[@]}"; do
for entry in "${mw_svcs_sel[@]}"; do
IFS='|' read -ra parts <<< "$entry"
local svc_name="${parts[0]}"
local svc_base="${parts[1]}"
......@@ -4256,7 +4328,7 @@ write_report() {
fi
w "## 系统类型识别"
if [[ "${HAS_UJAVA:-0}" -eq 1 ]]; then
if [[ "$platform" == "old" ]]; then
local v label
v="$(report_kv_get "sys.ujava.variant")"
if [[ "$v" == "unified" ]]; then
......@@ -4264,7 +4336,13 @@ write_report() {
else
label="会议预定系统"
fi
w "- ${label} (ujava): 已部署 [${UJAVA_CONTAINER}]"
if [[ "${HAS_UJAVA:-0}" -eq 1 ]]; then
w "- ${label} (ujava): 已部署 [${UJAVA_CONTAINER}]"
else
w "- ${label} (ujava): 未检测到容器(路径细分: ${v:-meeting})"
fi
elif [[ "${HAS_UJAVA:-0}" -eq 1 ]]; then
w "- 新统一平台 (ujava): 已部署 [${UJAVA_CONTAINER}]"
fi
if [[ "${HAS_UPYTHON:-0}" -eq 1 ]]; then
w "- 运维集控系统 (upython): 已部署 [${UPYTHON_CONTAINER}]"
......@@ -4715,10 +4793,9 @@ main() {
ujava_host_results="$(test_ujava_host_services || true)"
if echo "$ujava_host_results" | grep -q "extapi|ubains-meeting-api-1.0-SNAPSHOT.jar|stopped"; then
log WARN "[EXT] 检测到对外服务未运行,触发修复: fix_external_service_disconnect"
run_issue_handler "fix_external_service_disconnect" "$platform" "--non-interactive --yes" || true
log INFO "[EXT] 修复后复检 extapi..."
test_ujava_host_services >/dev/null || true
log WARN "[EXT] 检测到对外服务未运行,自动修复已禁用,请人工排查"
report_kv_set "extapi.auto_repair" "disabled"
log INFO "[EXT] 跳过自动修复(已禁用),需人工排查"
fi
if [[ "$HAS_UPYTHON" -eq 1 && -n "${UPYTHON_CONTAINER:-}" ]]; then
......@@ -4820,7 +4897,7 @@ main() {
test_security_check "$platform"
# 7) 中间件连接检测 (PRD 4.18) - 调整至备份前执行
test_middleware_connections
test_middleware_connections "$platform" "$platform"
# 8) 容器与中间件信息收集 - 调整至备份前执行
section "容器与中间件"
......
......@@ -272,7 +272,7 @@ EOF
# ------------------------------
# ujava 系统细分(meeting vs unified)
# 仅 old 平台 + 存在 ujava 容器时判定
# 仅 old 平台判定(不论是否存在 ujava 容器)
# - /var/www/java/unifiedPlatform 存在 => unified
# - 否则 => meeting
# 写入 KV: sys.ujava.variant
......@@ -281,17 +281,17 @@ detect_ujava_variant() {
local platform="$1"
local has_ujava="$2"
if [[ "$platform" != "old" || "$has_ujava" -ne 1 ]]; then
if [[ "$platform" != "old" ]]; then
report_kv_set "sys.ujava.variant" "N/A"
return 0
fi
if [[ -d /var/www/java/unifiedPlatform ]]; then
report_kv_set "sys.ujava.variant" "unified"
log INFO "[系统细分] ujava -> 统一平台系统 (检测到 /var/www/java/unifiedPlatform)"
log INFO "[系统细分] 传统平台 -> 统一平台系统 (检测到 /var/www/java/unifiedPlatform)"
else
report_kv_set "sys.ujava.variant" "meeting"
log INFO "[系统细分] ujava -> 会议预定系统 (未检测到 /var/www/java/unifiedPlatform)"
log INFO "[系统细分] 传统平台 -> 会议预定系统 (未检测到 /var/www/java/unifiedPlatform)"
fi
}
......@@ -394,10 +394,17 @@ test_ujava_services() {
test_ujava_host_services() {
log INFO "========== 检测 ujava 宿主机服务 (extapi) =========="
local results=()
# 传统平台按 meeting/unified 细分限定路径,避免跨系统误计
local extapi_path=""
if [[ "$(report_kv_get "sys.ujava.variant")" == "unified" ]]; then
extapi_path='| grep "/var/www/java/unifiedPlatform/external-meeting-api"'
elif [[ "$(report_kv_get "sys.ujava.variant")" == "meeting" ]]; then
extapi_path='| grep "/var/www/java/external-meeting-api"'
fi
for svc in "${!UJAVA_HOST_SERVICES[@]}"; do
local jar="${UJAVA_HOST_SERVICES[$svc]}"
local n
n="$(count_proc_host "$jar")"
n="$(count_proc_host "$jar" "$extapi_path")"
if [[ "$n" -gt 0 ]]; then
log SUCCESS " [OK] $svc ($jar): 运行中"
results+=("$svc|$jar|running")
......@@ -891,15 +898,22 @@ check_file_permissions() {
"/data/middleware/nginx/config/*.conf" "/data/middleware/emqx/config/*.conf"
"/data/services/api/python-cmdb/*.sh" "/data/services/api/python-voice/*.sh" )
else
local ujava_variant
local ujava_variant web_root redis_root
ujava_variant="$(report_kv_get "sys.ujava.variant")"
[[ -z "$ujava_variant" || "$ujava_variant" == "N/A" ]] && ujava_variant="meeting"
targets+=( "/var/www/java/api-java-meeting2.0/run.sh" "/var/www/java/external-meeting-api/run.sh"
web_root="/var/www/java"
redis_root="/var/www/redis"
if [[ "$ujava_variant" == "unified" ]]; then
web_root="/var/www/java/unifiedPlatform"
redis_root="/var/www/java/redis"
fi
targets+=( "$web_root/api-java-meeting2.0/run.sh" "$web_root/external-meeting-api/run.sh"
"/var/www/html/start.sh"
"/var/www/wifi-local/config.ini" "/var/www/wifi-local/startDB.sh" "/var/www/wifi-local/wifi*"
"/var/www/paperless/run.sh" "/var/www/paperless/start.sh"
"/var/www/redis/redis-*.conf"
"$redis_root/redis-*.conf"
"/var/www/emqx/config/*.conf"
"/etc/rc.d/rc.local" )
......@@ -1004,6 +1018,13 @@ collect_container_info() {
if [[ "$platform" == "new" ]]; then
redis_log="/data/middleware/redis/data/redis.log"
emqx_log="/data/middleware/emqx/log/emqx.log.1"
else
# 传统平台:redis 路径按 unified/meeting 细分
local variant
variant="$(report_kv_get "sys.ujava.variant")"
if [[ "$variant" == "unified" ]]; then
redis_log="/var/www/java/redis/data/redis.log"
fi
fi
local redis_export="" emqx_export=""
......@@ -1320,9 +1341,6 @@ _cfgip_list_files_new() {
_cfgip_list_files_old() {
{
_cfgip_add_glob_files "/var/www/java/api-java-meeting2.0/config" yml yaml properties js json conf
_cfgip_add_glob_files "/var/www/java/external-meeting-api/config" yml yaml properties js json conf
local ujava_variant web_root
ujava_variant="$(report_kv_get "sys.ujava.variant")"
[[ -z "$ujava_variant" || "$ujava_variant" == "N/A" ]] && ujava_variant="meeting"
......@@ -1330,6 +1348,9 @@ _cfgip_list_files_old() {
web_root="/var/www/java"
[[ "$ujava_variant" == "unified" ]] && web_root="/var/www/java/unifiedPlatform"
_cfgip_add_glob_files "$web_root/api-java-meeting2.0/config" yml yaml properties js json conf
_cfgip_add_glob_files "$web_root/external-meeting-api/config" yml yaml properties js json conf
_cfgip_add_file_if_exists "$web_root/ubains-web-2.0/static/config.json"
_cfgip_add_file_if_exists "$web_root/ubains-web-admin/static/config.json"
_cfgip_add_glob_files "$web_root/nginx-conf.d" conf
......@@ -2425,15 +2446,11 @@ test_middleware_connections() {
# ------------------------------
# 平台类型判断与中间件日志路径映射
# ------------------------------
# 判断平台类型:Unified(新统一平台)或 Traditional(传统平台)
# 通过检测 /var/www/java/unifiedPlatform 目录是否存在来判断
local Platform="Traditional"
if [[ -d /var/www/java/unifiedPlatform ]]; then
Platform="Unified"
log INFO "[中间件] 检测到新统一平台 (Unified)"
else
log INFO "[中间件] 检测到传统平台 (Traditional)"
fi
# 基于新/旧平台 + old 下 meeting/unified 细分来映射日志路径,
# 避免把传统统一平台(/var/www/java/unifiedPlatform)误判为新平台
local platform="$1"
local variant
variant="$(report_kv_get "sys.ujava.variant")"
# 中间件日志路径映射(根据平台类型)
local MiddlewareEmqxLogPath=""
......@@ -2444,19 +2461,24 @@ test_middleware_connections() {
local MiddlewareLogPath=""
# 新统一平台类型
if [ "$Platform" = "Unified" ]; then
if [[ "$platform" == "new" ]]; then
MiddlewareEmqxLogPath="/data/middleware/emqx/log"
MiddlewareRedisLogPath="/data/middleware/redis/log"
MiddlewareMysqlLogPath="/data/middleware/mysql/log"
MiddlewareStorageLogPath="/data/storage/storage/logs"
MiddlewareTrackerLogPath="/data/storage/tracker/logs"
MiddlewareLogPath="$MiddlewareStorageLogPath $MiddlewareTrackerLogPath"
fi
# 传统平台类型
if [ "$Platform" = "Traditional" ]; then
log INFO "[中间件] 检测到新统一平台 (/data/services)"
# 传统平台类型(old):redis 路径按 unified/meeting 细分
else
MiddlewareEmqxLogPath="/var/www/emqx/log"
MiddlewareRedisLogPath="/var/www/redis/data/redis.log"
if [[ "$variant" == "unified" ]]; then
MiddlewareRedisLogPath="/var/www/java/redis/data/redis.log"
log INFO "[中间件] 检测到传统统一平台 (unified)"
else
MiddlewareRedisLogPath="/var/www/redis/data/redis.log"
log INFO "[中间件] 检测到传统会议预定平台 (meeting)"
fi
MiddlewareMysqlLogPath="/usr/local/docker/mysql/log"
MiddlewareStorageLogPath="/var/fdfs/storage/logs"
MiddlewareTrackerLogPath="/var/fdfs/tracker/logs"
......@@ -2464,7 +2486,7 @@ test_middleware_connections() {
fi
# 导出环境变量供子函数使用
export Platform
export Platform="$platform"
export MiddlewareEmqxLogPath
export MiddlewareRedisLogPath
export MiddlewareMysqlLogPath
......@@ -2568,19 +2590,19 @@ data_backup() {
ujava_variant="$(report_kv_get "sys.ujava.variant")"
[[ -z "$ujava_variant" || "$ujava_variant" == "N/A" ]] && ujava_variant="meeting"
if [[ "${HAS_UJAVA:-0}" -eq 1 ]]; then
if [[ "$ujava_variant" == "unified" ]]; then
copy_tree_if_exists "/var/www/java/unifiedPlatform" "var_www_java_unifiedPlatform" || true
else
copy_tree_if_exists "/var/www/java" "var_www_java" || true
fi
# ✅ 传统平台均需备份(不依赖 ujava 容器是否存在);unified 使用 unifiedPlatform/redis 路径
if [[ "$ujava_variant" == "unified" ]]; then
copy_tree_if_exists "/var/www/java/unifiedPlatform" "var_www_java_unifiedPlatform" || true
copy_tree_if_exists "/var/www/java/redis" "var_www_java_redis" || true
else
copy_tree_if_exists "/var/www/java" "var_www_java" || true
copy_tree_if_exists "/var/www/redis" "var_www_redis" || true
fi
if [[ "${HAS_UPYTHON:-0}" -eq 1 ]]; then
copy_tree_if_exists "/var/www/html" "var_www_html" || true
fi
copy_tree_if_exists "/var/www/redis" "var_www_redis" || true
copy_tree_if_exists "/var/www/emqx" "var_www_emqx" || true
else
# 新平台:按实际目录结构做一个合理对齐(可按需调整)
......@@ -2728,17 +2750,18 @@ export_logs() {
ujava_variant="$(report_kv_get "sys.ujava.variant")"
[[ -z "$ujava_variant" || "$ujava_variant" == "N/A" ]] && ujava_variant="meeting"
if [[ "$has_ujava" -eq 1 ]]; then
copy_if_exists "/var/www/java/api-java-meeting2.0/logs/ubains-INFO-AND-ERROR.log" "$export_dir/对内后端_ubains-INFO-AND-ERROR.log" || true
copy_if_exists "/var/www/java/external-meeting-api/logs/ubains-INFO-AND-ERROR.log" "$export_dir/对外后端_ubains-INFO-AND-ERROR.log" || true
# ✅ 传统平台均需导出(不依赖 ujava 容器是否存在);路径按 unified/meeting 分支
if [[ "$ujava_variant" == "unified" ]]; then
copy_if_exists "/var/www/java/unifiedPlatform/api-java-meeting2.0/logs/ubains-INFO-AND-ERROR.log" "$export_dir/对内后端_ubains-INFO-AND-ERROR.log" || true
copy_if_exists "/var/www/java/unifiedPlatform/external-meeting-api/logs/ubains-INFO-AND-ERROR.log" "$export_dir/对外后端_ubains-INFO-AND-ERROR.log" || true
# ✅ unified:补导出 unifiedPlatform 前端 config(存在即导出)
if [[ "$ujava_variant" == "unified" ]]; then
copy_if_exists "/var/www/java/unifiedPlatform/ubains-web-2.0/static/config.json" "$export_dir/unified_web-2.0_config.json" || true
copy_if_exists "/var/www/java/unifiedPlatform/ubains-web-admin/static/config.json" "$export_dir/unified_web-admin_config.json" || true
fi
copy_from_container_if_exists "$ujava_container" "/var/log/nginx/error.log" "$export_dir/ujava容器_nginx_error.log" || true
copy_if_exists "/var/www/java/unifiedPlatform/ubains-web-2.0/static/config.json" "$export_dir/unified_web-2.0_config.json" || true
copy_if_exists "/var/www/java/unifiedPlatform/ubains-web-admin/static/config.json" "$export_dir/unified_web-admin_config.json" || true
copy_if_exists "/var/www/java/unifiedPlatform/ubains-web-3.0/static/config.json" "$export_dir/unified_web-3.0_config.json" || true
else
copy_if_exists "/var/www/java/api-java-meeting2.0/logs/ubains-INFO-AND-ERROR.log" "$export_dir/对内后端_ubains-INFO-AND-ERROR.log" || true
copy_if_exists "/var/www/java/external-meeting-api/logs/ubains-INFO-AND-ERROR.log" "$export_dir/对外后端_ubains-INFO-AND-ERROR.log" || true
fi
if [[ "$has_upython" -eq 1 ]]; then
......@@ -2855,7 +2878,7 @@ write_report() {
fi
w "## 系统类型识别"
if [[ "${HAS_UJAVA:-0}" -eq 1 ]]; then
if [[ "$platform" == "old" ]]; then
local v label
v="$(report_kv_get "sys.ujava.variant")"
if [[ "$v" == "unified" ]]; then
......@@ -2863,7 +2886,13 @@ write_report() {
else
label="会议预定系统"
fi
w "- ${label} (ujava): 已部署 [${UJAVA_CONTAINER}]"
if [[ "${HAS_UJAVA:-0}" -eq 1 ]]; then
w "- ${label} (ujava): 已部署 [${UJAVA_CONTAINER}]"
else
w "- ${label} (ujava): 未检测到容器(路径细分: ${v:-meeting})"
fi
elif [[ "${HAS_UJAVA:-0}" -eq 1 ]]; then
w "- 新统一平台 (ujava): 已部署 [${UJAVA_CONTAINER}]"
fi
if [[ "${HAS_UPYTHON:-0}" -eq 1 ]]; then
w "- 运维集控系统 (upython): 已部署 [${UPYTHON_CONTAINER}]"
......@@ -3276,10 +3305,9 @@ main() {
ujava_host_results="$(test_ujava_host_services || true)"
if echo "$ujava_host_results" | grep -q "extapi|ubains-meeting-api-1.0-SNAPSHOT.jar|stopped"; then
log WARN "[EXT] 检测到对外服务未运行,触发修复: fix_external_service_disconnect"
run_issue_handler "fix_external_service_disconnect" "$platform" "--non-interactive --yes" || true
log INFO "[EXT] 修复后复检 extapi..."
test_ujava_host_services >/dev/null || true
log WARN "[EXT] 检测到对外服务未运行,自动修复已禁用,请人工排查"
report_kv_set "extapi.auto_repair" "disabled"
log INFO "[EXT] 跳过自动修复(已禁用),需人工排查"
fi
if [[ "$HAS_UPYTHON" -eq 1 && -n "${UPYTHON_CONTAINER:-}" ]]; then
......@@ -3375,7 +3403,7 @@ main() {
report_add "- miss_count: $(report_kv_get "perm.miss_count")"
# 7) 中间件连接检测 (PRD 4.18) - 调整至备份前执行
test_middleware_connections
test_middleware_connections "$platform"
# 8) 容器与中间件信息收集 - 调整至备份前执行
section "容器与中间件"
......
......@@ -92,10 +92,14 @@ NEW_PLATFORM_CONFIGS=(
)
# 传统平台配置文件
# 统一平台细分下 nginx 位于 /var/www/java/unifiedPlatform/nginx-conf.d,redis 位于 /var/www/java/redis;
# 两个路径都检查,不存在的路径自动跳过(ls 展开为空),不影响其他平台
OLD_PLATFORM_CONFIGS=(
"/var/www/java/nginx-conf.d/*.conf"
"/var/www/java/unifiedPlatform/nginx-conf.d/*.conf"
"/var/www/emqx/config/*.conf"
"/var/www/redis/redis-*.conf"
"/var/www/java/redis/redis-*.conf"
)
# IP地址匹配模式(简单匹配,不覆盖所有情况)
......
......@@ -245,14 +245,19 @@ function Test-TraditionalPlatformIPs {
}
$Paths = @(
"/var/www/java/api-java-meeting2.0/config",
"/var/www/java/external-meeting-api/config",
"$webRoot/api-java-meeting2.0/config",
"$webRoot/external-meeting-api/config",
"$webRoot/ubains-web-2.0/static/config.json",
"$webRoot/ubains-web-admin/static/config.json",
"/var/www/java/ubains-web-h5/static/h5/config.js",
"/var/www/java/ubains-web-h5/static/h5/config.json",
"$webRoot/nginx-conf.d"
)
# ubains-web-h5 仅会议预定系统存在;统一平台无此目录
if ($ujavaVariant -ne "unified") {
$Paths += @(
"/var/www/java/ubains-web-h5/static/h5/config.js",
"/var/www/java/ubains-web-h5/static/h5/config.json"
)
}
$AllowedIPs = @("172.17.0.1", "127.0.0.1", $ServerIP)
......@@ -488,14 +493,19 @@ function Test-TraditionalPlatformConsole {
}
$Paths = @(
"/var/www/java/api-java-meeting2.0/config",
"/var/www/java/external-meeting-api/config",
"$webRoot/api-java-meeting2.0/config",
"$webRoot/external-meeting-api/config",
"$webRoot/ubains-web-2.0/static/config.json",
"$webRoot/ubains-web-admin/static/config.json",
"/var/www/java/ubains-web-h5/static/h5/config.js",
"/var/www/java/ubains-web-h5/static/h5/config.json",
"$webRoot/nginx-conf.d"
)
# ubains-web-h5 仅会议预定系统存在;统一平台无此目录
if ($ujavaVariant -ne "unified") {
$Paths += @(
"/var/www/java/ubains-web-h5/static/h5/config.js",
"/var/www/java/ubains-web-h5/static/h5/config.json"
)
}
$totalFiles = 0
$modifiedFiles = @()
......
......@@ -242,13 +242,13 @@ function DataBakup {
# 仅实现传统平台备份
if ($PlatformType -eq 'old') {
# ✅ ujava:按 meeting/unified 分支备份
if ($hasUjava) {
if ($ujavaVariant -eq 'unified') {
$cmds += "[ -d /var/www/java/unifiedPlatform ] && cp -a /var/www/java/unifiedPlatform $bakDir/"
} else {
$cmds += "[ -d /var/www/java ] && cp -a /var/www/java $bakDir/"
}
# ✅ 传统平台均需备份(不依赖 ujava 容器是否存在);路径按 meeting/unified 分支
if ($ujavaVariant -eq 'unified') {
$cmds += "[ -d /var/www/java/unifiedPlatform ] && cp -a /var/www/java/unifiedPlatform $bakDir/"
$cmds += "[ -d /var/www/java/redis ] && cp -a /var/www/java/redis $bakDir/"
} else {
$cmds += "[ -d /var/www/java ] && cp -a /var/www/java $bakDir/"
$cmds += "[ -d /var/www/redis ] && cp -a /var/www/redis $bakDir/"
}
if ($hasUpython) {
......@@ -256,7 +256,6 @@ function DataBakup {
}
$cmds += "[ -d /var/www/emqx ] && cp -a /var/www/emqx $bakDir/"
$cmds += "[ -d /var/www/redis ] && cp -a /var/www/redis $bakDir/"
} else {
Write-Log -Level "INFO" -Message "[BAK] 新统一平台备份:开始执行..."
......
......@@ -168,22 +168,29 @@ function Check-FilePermissions {
$ujavaVariant = $null
if ($SystemInfo -and $SystemInfo.ContainsKey('UjavaSystemVariant')) { $ujavaVariant = $SystemInfo.UjavaSystemVariant }
$webRoot = "/var/www/java"
$redisRoot = "/var/www/redis"
if ($ujavaVariant -eq 'unified') {
$webRoot = "/var/www/java/unifiedPlatform"
$redisRoot = "/var/www/java/redis"
}
$targets += @(
"/var/www/java/api-java-meeting2.0/run.sh",
"/var/www/java/external-meeting-api/run.sh",
"$webRoot/api-java-meeting2.0/run.sh",
"$webRoot/external-meeting-api/run.sh",
"/var/www/html/start.sh",
"/var/www/wifi-local/config.ini",
"/var/www/wifi-local/startDB.sh",
"/var/www/wifi-local/wifi*",
"/var/www/paperless/run.sh",
"/var/www/paperless/start.sh",
"/var/www/redis/redis-*.conf",
"$redisRoot/redis-*.conf",
"/var/www/emqx/config/*.conf",
"/etc/rc.d/rc.local",
"/usr/local/docker/mysql/my.cnf"
)
# start.sh 路径分支:unified 优先检查 unifiedPlatform/start.sh
# start.sh / nginx-conf.d 路径分支
if ($ujavaVariant -eq 'unified') {
$targets += "/var/www/java/unifiedPlatform/start.sh"
$targets += "/var/www/java/unifiedPlatform/nginx-conf.d/*.conf"
......
......@@ -82,12 +82,43 @@ $script:OldPlatformFrontend = @(
@{ Name = "web-vue-h5"; BaseDir = "/var/www/html/web-vue-h5"; Files = @("static/config.json") }
)
# 传统平台 unified 细分:前端服务(位于 /var/www/java/unifiedPlatform/)
$script:OldPlatformFrontendUnified = @(
@{ Name = "ubains-web-2.0"; BaseDir = "/var/www/java/unifiedPlatform/ubains-web-2.0"; Files = @("static/config.json") }
@{ Name = "ubains-web-admin"; BaseDir = "/var/www/java/unifiedPlatform/ubains-web-admin"; Files = @("static/config.json") }
@{ Name = "ubains-web-3.0"; BaseDir = "/var/www/java/unifiedPlatform/ubains-web-3.0"; Files = @("static/config.json") }
@{ Name = "ubains-unified-platform"; BaseDir = "/var/www/java/unifiedPlatform/ubains-unified-platform"; Files = @("static/config.json") }
@{ Name = "ubains-unified-platform-admin"; BaseDir = "/var/www/java/unifiedPlatform/ubains-unified-platform-admin"; Files = @("static/config.json") }
@{ Name = "ubains-video-web-3.0"; BaseDir = "/var/www/java/unifiedPlatform/ubains-video-web-3.0"; Files = @("static/config.json") }
@{ Name = "mobile-ubains-meeting-mobile"; BaseDir = "/var/www/java/unifiedPlatform/mobile/ubains-meeting-mobile"; Files = @("static/config.json") }
@{ Name = "mobile-ubains-unified-platform-mobile"; BaseDir = "/var/www/java/unifiedPlatform/mobile/ubains-unified-platform-mobile"; Files = @("static/config.json") }
@{ Name = "web-vue-rms"; BaseDir = "/var/www/html/web-vue-rms"; Files = @("static/config.json") }
@{ Name = "web-vue-h5"; BaseDir = "/var/www/html/web-vue-h5"; Files = @("static/config.json") }
)
$script:OldPlatformBackend = @(
@{ Name = "api-java-meeting2.0"; BaseDir = "/var/www/java/api-java-meeting2.0"; Files = @("logs/ubains-INFO-AND-ERROR.log"; "logs/ubains-ERROR.log"; @{ Path="logs/timeFile"; Type="mtime"; Days=3 }; @{ Path="config"; Type="ext-filter"; Extensions=@("*.yml","*.properties","*.json","*.js","*.xml") }) }
@{ Name = "external-meeting-api"; BaseDir = "/var/www/java/external-meeting-api"; Files = @("logs/ubains-INFO-AND-ERROR.log"; "logs/ubains-ERROR.log"; @{ Path="logs/timeFile"; Type="mtime"; Days=3 }; @{ Path="config"; Type="ext-filter"; Extensions=@("*.yml","*.properties","*.json","*.js","*.xml") }) }
@{ Name = "html-ops"; BaseDir = "/var/www/html"; Files = @("setting.conf"; "log/uinfo.log"; "log/error.log"; "log/uwsgi.log") }
)
# 传统平台 unified 细分:后端服务(位于 /var/www/java/unifiedPlatform/)
$script:OldPlatformBackendUnified = @(
@{ Name = "api-java-meeting2.0"; BaseDir = "/var/www/java/unifiedPlatform/api-java-meeting2.0"; Files = @("logs/ubains-INFO-AND-ERROR.log"; "logs/ubains-ERROR.log"; @{ Path="logs/timeFile"; Type="mtime"; Days=3 }; @{ Path="config"; Type="ext-filter"; Extensions=@("*.yml","*.properties","*.json","*.js","*.xml") }) }
@{ Name = "api-dubbo-cloudLink"; BaseDir = "/var/www/java/unifiedPlatform/api-dubbo-cloudLink"; Files = @("logs/ubains-INFO-AND-ERROR.log"; "logs/ubains-ERROR.log"; @{ Path="logs/timeFile"; Type="mtime"; Days=3 }; @{ Path="config"; Type="ext-filter"; Extensions=@("*.yml","*.properties","*.json","*.js","*.xml") }) }
@{ Name = "api-dubbo-dingding"; BaseDir = "/var/www/java/unifiedPlatform/api-dubbo-dingding"; Files = @("logs/ubains-INFO-AND-ERROR.log"; "logs/ubains-ERROR.log"; @{ Path="logs/timeFile"; Type="mtime"; Days=3 }; @{ Path="config"; Type="ext-filter"; Extensions=@("*.yml","*.properties","*.json","*.js","*.xml") }) }
@{ Name = "api-dubbo-meeting-control"; BaseDir = "/var/www/java/unifiedPlatform/api-dubbo-meeting-control"; Files = @("logs/ubains-INFO-AND-ERROR.log"; "logs/ubains-ERROR.log"; @{ Path="logs/timeFile"; Type="mtime"; Days=3 }; @{ Path="config"; Type="ext-filter"; Extensions=@("*.yml","*.properties","*.json","*.js","*.xml") }) }
@{ Name = "api-dubbo-smc-three"; BaseDir = "/var/www/java/unifiedPlatform/api-dubbo-smc-three"; Files = @("logs/ubains-INFO-AND-ERROR.log"; "logs/ubains-ERROR.log"; @{ Path="logs/timeFile"; Type="mtime"; Days=3 }; @{ Path="config"; Type="ext-filter"; Extensions=@("*.yml","*.properties","*.json","*.js","*.xml") }) }
@{ Name = "api-dubbo-smc-two"; BaseDir = "/var/www/java/unifiedPlatform/api-dubbo-smc-two"; Files = @("logs/ubains-INFO-AND-ERROR.log"; "logs/ubains-ERROR.log"; @{ Path="logs/timeFile"; Type="mtime"; Days=3 }; @{ Path="config"; Type="ext-filter"; Extensions=@("*.yml","*.properties","*.json","*.js","*.xml") }) }
@{ Name = "api-dubbo-tencent-meeting"; BaseDir = "/var/www/java/unifiedPlatform/api-dubbo-tencent-meeting"; Files = @("logs/ubains-INFO-AND-ERROR.log"; "logs/ubains-ERROR.log"; @{ Path="logs/timeFile"; Type="mtime"; Days=3 }; @{ Path="config"; Type="ext-filter"; Extensions=@("*.yml","*.properties","*.json","*.js","*.xml") }) }
@{ Name = "api-dubbo-xylink"; BaseDir = "/var/www/java/unifiedPlatform/api-dubbo-xylink"; Files = @("logs/ubains-INFO-AND-ERROR.log"; "logs/ubains-ERROR.log"; @{ Path="logs/timeFile"; Type="mtime"; Days=3 }; @{ Path="config"; Type="ext-filter"; Extensions=@("*.yml","*.properties","*.json","*.js","*.xml") }) }
@{ Name = "auth-sso-auth"; BaseDir = "/var/www/java/unifiedPlatform/auth-sso-auth"; Files = @("logs/ubains-INFO-AND-ERROR.log"; "logs/ubains-ERROR.log"; @{ Path="logs/timeFile"; Type="mtime"; Days=3 }; @{ Path="config"; Type="ext-filter"; Extensions=@("*.yml","*.properties","*.json","*.js","*.xml") }) }
@{ Name = "auth-sso-gatway"; BaseDir = "/var/www/java/unifiedPlatform/auth-sso-gatway"; Files = @("logs/ubains-INFO-AND-ERROR.log"; "logs/ubains-ERROR.log"; @{ Path="logs/timeFile"; Type="mtime"; Days=3 }; @{ Path="config"; Type="ext-filter"; Extensions=@("*.yml","*.properties","*.json","*.js","*.xml") }) }
@{ Name = "auth-sso-system"; BaseDir = "/var/www/java/unifiedPlatform/auth-sso-system"; Files = @("logs/ubains-INFO-AND-ERROR.log"; "logs/ubains-ERROR.log"; @{ Path="logs/timeFile"; Type="mtime"; Days=3 }; @{ Path="config"; Type="ext-filter"; Extensions=@("*.yml","*.properties","*.json","*.js","*.xml") }) }
@{ Name = "external-meeting-api"; BaseDir = "/var/www/java/unifiedPlatform/external-meeting-api"; Files = @("logs/ubains-INFO-AND-ERROR.log"; "logs/ubains-ERROR.log"; @{ Path="logs/timeFile"; Type="mtime"; Days=3 }; @{ Path="config"; Type="ext-filter"; Extensions=@("*.yml","*.properties","*.json","*.js","*.xml") }) }
@{ Name = "html-ops"; BaseDir = "/var/www/html"; Files = @("setting.conf"; "log/uinfo.log"; "log/error.log"; "log/uwsgi.log") }
)
$script:OldPlatformMiddleware = @(
@{ Name = "nginx"; BaseDir = "/var/www/java/nginx-conf.d"; Files = @("meeting443.conf"; "nginx_log") }
@{ Name = "redis"; BaseDir = "/var/www/redis"; Files = @("*.conf"; "data") }
......@@ -96,6 +127,15 @@ $script:OldPlatformMiddleware = @(
@{ Name = "fdfs"; BaseDir = "/var/fdfs"; Files = @("storage/logs"; "tracker/logs") }
)
# 传统平台 unified 细分:中间件(nginx 在 unifiedPlatform 下,redis 在 /var/www/java/redis)
$script:OldPlatformMiddlewareUnified = @(
@{ Name = "nginx"; BaseDir = "/var/www/java/unifiedPlatform/nginx-conf.d"; Files = @("meeting443.conf"; "nginx_log") }
@{ Name = "redis"; BaseDir = "/var/www/java/redis"; Files = @("*.conf"; "data") }
@{ Name = "emqx"; BaseDir = "/var/www/emqx"; Files = @("config"; "log") }
@{ Name = "mysql"; BaseDir = "/usr/local/docker/mysql"; Files = @("logs") }
@{ Name = "fdfs"; BaseDir = "/var/fdfs"; Files = @("storage/logs"; "tracker/logs") }
)
$script:OldPlatformThirdParty = @(
@{ Name = "paperless"; BaseDir = "/var/www/paperless"; Files = @("application.yml"; "nohup.out") }
@{ Name = "wifi-local"; BaseDir = "/var/www/wifi-local"; Files = @("config.ini"; "nohup.out") }
......@@ -108,7 +148,8 @@ $script:OldPlatformThirdParty = @(
function Export-ConfigAndLogs {
param(
[hashtable]$Server,
[string]$PlatformType
[string]$PlatformType,
[hashtable]$SystemInfo
)
Write-Host ""
......@@ -127,14 +168,25 @@ function Export-ConfigAndLogs {
}
}
# Select service list by platform type
# Select service list by platform type(传统平台按 meeting/unified 细分路径)
if ($PlatformType -eq "new") {
Write-Log -Level "INFO" -Message "Platform: New"
$allServices = $script:NewPlatformFrontend + $script:NewPlatformBackend + $script:NewPlatformMiddleware + $script:NewPlatformThirdParty
}
else {
Write-Log -Level "INFO" -Message "Platform: Old"
$allServices = $script:OldPlatformFrontend + $script:OldPlatformBackend + $script:OldPlatformMiddleware + $script:OldPlatformThirdParty
$ujavaVariant = "meeting"
if ($SystemInfo -and $SystemInfo.ContainsKey('UjavaSystemVariant') -and $SystemInfo.UjavaSystemVariant) {
$ujavaVariant = [string]$SystemInfo.UjavaSystemVariant
}
if ($ujavaVariant -eq "unified") {
Write-Log -Level "INFO" -Message "Platform: Old (unified 统一平台系统)"
$allServices = $script:OldPlatformFrontendUnified + $script:OldPlatformBackendUnified + $script:OldPlatformMiddlewareUnified + $script:OldPlatformThirdParty
}
else {
Write-Log -Level "INFO" -Message "Platform: Old (meeting 会议预定系统)"
$allServices = $script:OldPlatformFrontend + $script:OldPlatformBackend + $script:OldPlatformMiddleware + $script:OldPlatformThirdParty
}
}
$remoteTmpBase = "/tmp/config_and_log"
......
......@@ -49,7 +49,16 @@ function Show-HealthReport {
$md += ""
$md += "- 服务器地址: $($Server.IP)"
$md += "- 服务器描述: $($Server.Desc)"
$md += "- 平台类型: $(if ($PlatformType -eq 'new') { '新统一平台' } else { '传统平台' })"
# ✅ 系统细分:传统平台显示会议预定/统一平台子类型
$ujavaVariantLabel = $null
if ($PlatformType -eq 'old' -and $SystemInfo -and $SystemInfo.ContainsKey('UjavaSystemVariant')) {
$v = $SystemInfo.UjavaSystemVariant
if ($v -eq 'unified') { $ujavaVariantLabel = '统一平台系统' }
elseif ($v -eq 'meeting') { $ujavaVariantLabel = '会议预定系统' }
}
$platformLabel = if ($PlatformType -eq 'new') { '新统一平台' } else { '传统平台' }
if ($ujavaVariantLabel) { $platformLabel = "$platformLabel - $ujavaVariantLabel" }
$md += "- 平台类型: $platformLabel"
$md += "- 检测时间: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"
$md += ""
......@@ -61,14 +70,29 @@ function Show-HealthReport {
# ✅ 系统类型识别:按 ujavaVariant 输出
$md += "## 系统类型识别"
$hasKnownVariant = $false
if ($PlatformType -eq 'old' -and $SystemInfo -and $SystemInfo.ContainsKey('UjavaSystemVariant')) {
$v = $SystemInfo.UjavaSystemVariant
if ($v -eq 'unified' -or $v -eq 'meeting') {
$hasKnownVariant = $true
$label = if ($v -eq 'unified') { '统一平台系统' } else { '会议预定系统' }
$container = if ($SystemInfo.UjavaContainer) { " [$($SystemInfo.UjavaContainer)]" } else { '' }
$md += "- 传统平台细分: $label$container"
}
}
if ($SystemInfo.HasUjava) {
$v = if ($SystemInfo.ContainsKey('UjavaSystemVariant')) { $SystemInfo.UjavaSystemVariant } else { $null }
$label = if ($v -eq 'unified') { '统一平台系统' } else { '会议预定系统' }
$md += "- $label (ujava): 已部署 [$($SystemInfo.UjavaContainer)]"
if ($v -ne 'unified' -and $v -ne 'meeting') {
$label = if ($v -eq 'unified') { '统一平台系统' } else { '会议预定系统' }
$md += "- $label (ujava): 已部署 [$($SystemInfo.UjavaContainer)]"
}
}
if ($SystemInfo.HasUpython) { $md += "- 运维集控系统 (upython): 已部署 [$($SystemInfo.UpythonContainer)]" }
if ($SystemInfo.HasUpythonVoice) { $md += "- 转录系统 (upython_voice): 已部署 [$($SystemInfo.UpythonVoiceContainer)]" }
if (-not $SystemInfo.HasUjava -and -not $SystemInfo.HasUpython -and -not $SystemInfo.HasUpythonVoice) { $md += "- 未检测到已知系统容器" }
if ($hasKnownVariant -and -not $SystemInfo.HasUjava -and -not $SystemInfo.HasUpython -and -not $SystemInfo.HasUpythonVoice) {
# 传统平台细分已展示,不再重复"未检测到已知系统容器"
}
if (-not $hasKnownVariant -and -not $SystemInfo.HasUjava -and -not $SystemInfo.HasUpython -and -not $SystemInfo.HasUpythonVoice) { $md += "- 未检测到已知系统容器" }
$md += ""
# 统计信息
......
......@@ -376,17 +376,23 @@ function Test-UjavaOldPlatformHostServices {
.DESCRIPTION
检测传统平台运行在宿主机上的 ujava 相关服务。
传统平台 extapi 路径为 /var/www/java/external-meeting-api。
会议预定系统 extapi 路径为 /var/www/java/external-meeting-api;
统一平台细分路径为 /var/www/java/unifiedPlatform/external-meeting-api。
.PARAMETER Server
服务器信息哈希表
.PARAMETER SystemInfo
系统信息哈希表(可选,用于 traditional-unified 路径分支)
.EXAMPLE
Test-UjavaOldPlatformHostServices -Server $server
#>
param(
[Parameter(Mandatory=$false)]
[hashtable]$Server
[hashtable]$Server,
[Parameter(Mandatory=$false)]
[hashtable]$SystemInfo
)
Write-Host ""
......@@ -394,11 +400,17 @@ function Test-UjavaOldPlatformHostServices {
$results = @()
# traditional-unified 路径分支:统一平台服务位于 /var/www/java/unifiedPlatform
$svcRoot = "/var/www/java"
$ujavaVariant = $null
if ($SystemInfo -and $SystemInfo.ContainsKey('UjavaSystemVariant')) { $ujavaVariant = $SystemInfo.UjavaSystemVariant }
if ($ujavaVariant -eq 'unified') { $svcRoot = "/var/www/java/unifiedPlatform" }
foreach ($serviceName in $UjavaOldPlatformHostServices.Keys) {
$jarFileName = $UjavaOldPlatformHostServices[$serviceName]
# 检测宿主机进程(传统平台路径为 /var/www/java/external-meeting-api)
$checkCmd = "ps aux 2>/dev/null | grep -v grep | grep '$jarFileName' | grep '/var/www/java/external-meeting-api' | wc -l"
# 检测宿主机进程(传统平台路径为 $svcRoot/external-meeting-api)
$checkCmd = "ps aux 2>/dev/null | grep -v grep | grep '$jarFileName' | grep '$svcRoot/external-meeting-api' | wc -l"
$result = Invoke-SSHCommand -HostName $Server.IP -User $Server.User -Pass $Server.Pass -Port $Server.Port -Command $checkCmd
$count = 0
......
......@@ -1101,8 +1101,12 @@ function Test-ConfigIPs-Shell {
"/data/middleware/mysql/conf/my.cnf"
)
} else {
# 传统平台: nginx 配置文件在会议预定系统下位于 /var/www/java/nginx-conf.d,
# 统一平台细分下位于 /var/www/java/unifiedPlatform/nginx-conf.d,两个路径都检查
# (路径不存在时 ls 返回空,自动跳过,不影响其他平台)
$configFiles = @(
"/var/www/java/nginx-conf.d/*.conf",
"/var/www/java/unifiedPlatform/nginx-conf.d/*.conf",
"/var/www/emqx/config/*.conf"
)
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论