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

feat(server): 添加对外会议服务断连修复功能

- 新增 Repair-ExternalMeetingService 函数处理远端修复
- 实现对外服务进程 ubains-meeting-api-1.0-SNAPSHOT.jar 检测
- 集成修复后复检机制验证进程是否成功启动
- 添加修复结果报告输出到自检报告中
- 实现异常情况下的错误处理和日志记录
- 更新需求文档说明对外服务修复流程
上级 577617f0
......@@ -69,6 +69,11 @@
ubains-meeting-inner-api-1.0-SNAPSHOT.jar
在宿主机路径:/var/www/java/external-meeting-api的进程:
ubains-meeting-api-1.0-SNAPSHOT.jar
异常修复:
如果是宿主机上ubains-meeting-api-1.0-SNAPSHOT.jar进程没有启动的话,也需要进行远程修复:
对外服务修复函数名称:fix_external_service_disconnect
功能描述:上传当前目录下的issue_handler.sh脚本,将脚本上传到目标服务器,并且通过传入的修复函数,调用issue_handler对应的函数来修复。修复完成后需进行复检。
upython后端服务在容器内:
tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 101/nginx: master p
......@@ -85,6 +90,17 @@
##### 6、服务器资源分析(✅ 已实现):
检查目标服务器的磁盘空间情况、内存使用情况、cpu使用情况、防火墙开放端口情况、服务器架构以及操作系统记录
防火墙修复函数名称:Upload_the_repair_script
功能描述:函数只做上传脚本及脚本调用,上传当前目录下的issue_handler.sh脚本,将脚本上传到目标服务器,并且通过传入的修复函数,调用issue_handler对应的函数来修复。
防火墙修复:
1、目标服务器未开启防火墙时,判断为异常,并执行修复脚本;
2、目标服务器开启防火墙时,存在多种判断:
- 目标服务器是会议预定系统,那么需检测22、443、1883和8306是否开启,未开启就是异常,需要执行修复脚本;
- 目标服务器是运维集控系统,那么需检测22、8443、1883和8306是否开启,未开启就是异常,需要执行修复脚本;
3、远程修复完成后没有进行复检操作,并打印复检结果
##### 7、服务日志导出(✅ 已实现):
将目标服务器上的服务日志采集,需判断传统平台还是新统一平台
传统平台:
......@@ -238,12 +254,5 @@
例如:当前判断目标服务器的NTP服务存在异常,那么调用issue_handler脚本中的fix_ntp_config函数,脚本执行:./issue_handler.sh --action fix_ntp_config
防火墙修复:
1、目标服务器未开启防火墙时,判断为异常,并执行修复脚本;
2、目标服务器开启防火墙时,存在多种判断:
- 目标服务器是会议预定系统,那么需检测22、443、1883和8306是否开启,未开启就是异常,需要执行修复脚本;
- 目标服务器是运维集控系统,那么需检测22、8443、1883和8306是否开启,未开启就是异常,需要执行修复脚本;
3、远程修复完成后没有进行复检操作,并打印复检结果
##### 15、服务自检报告输出(✅ 已实现):
将服务自检的所有操作步骤与结果输出到日志文件中!自检报告需要补充成md格式!检测报告输出需要带有明显图标,标识错误或正常状态
\ No newline at end of file
......@@ -1434,6 +1434,75 @@ printf "%d,%d,%d\n" "$tot_gb" "$use_gb" "$pct"
return $results
}
# ================================
# 远端修复对外会议服务断连
# ================================
function Repair-ExternalMeetingService {
param(
[Parameter(Mandatory = $true)]
[pscustomobject]$Server
)
Write-Log -Level "INFO" -Message "[EXT] 触发远端修复: ./issue_handler.sh --action fix_external_service_disconnect"
$serverForRepair = [pscustomobject]@{
IP = $Server.IP
User = $Server.User
Pass = $Server.Pass
Port = $Server.Port
}
try {
# 调用上传+执行修复脚本(与 NTP、防火墙相同模式)
$repairRes = Upload_the_repair_script -Server $serverForRepair -Action "fix_external_service_disconnect" -Platform "auto" -RemoteDir "/home/repair_scripts"
if ($repairRes -and $repairRes['Success']) {
Write-Log -Level "SUCCESS" -Message "[EXT] 远端修复已执行成功 (fix_external_service_disconnect)"
# 修复后复检:检查宿主机 ubains-meeting-api-1.0-SNAPSHOT.jar 是否已启动
Write-Log -Level "INFO" -Message "[EXT] 修复后复检对外服务进程..."
$checkCmd = "ps aux | grep -v grep | grep ubains-meeting-api-1.0-SNAPSHOT.jar"
$post = Invoke-SSHCommand -HostName $Server.IP -User $Server.User -Pass $Server.Pass -Port $Server.Port -Command $checkCmd
$out = if ($post.Output) { ($post.Output -join ' ') } else { '' }
if ($post.ExitCode -eq 0 -and $out -match 'ubains-meeting-api-1\.0-SNAPSHOT\.jar') {
Write-Log -Level "SUCCESS" -Message "[EXT] 复检成功,对外服务进程已启动"
return [pscustomobject]@{
Target = "external-meeting-api"
Attempted = $true
Success = $true
Detail = "进程已启动: $out"
}
} else {
Write-Log -Level "WARN" -Message "[EXT] 复检失败,对外服务进程仍未检测到"
return [pscustomobject]@{
Target = "external-meeting-api"
Attempted = $true
Success = $false
Detail = "复检未检测到进程: $out"
}
}
} else {
Write-Log -Level "ERROR" -Message "[EXT] 远端修复执行失败 (fix_external_service_disconnect)"
return [pscustomobject]@{
Target = "external-meeting-api"
Attempted = $true
Success = $false
Detail = "Upload_the_repair_script 返回失败"
}
}
}
catch {
Write-Log -Level "ERROR" -Message ("[EXT] 远端修复异常: {0}" -f $_.Exception.Message)
return [pscustomobject]@{
Target = "external-meeting-api"
Attempted = $true
Success = $false
Detail = "异常: $($_.Exception.Message)"
}
}
}
# ================================
# 服务器容器信息收集
# ================================
......@@ -1982,6 +2051,20 @@ function Show-HealthReport {
Write-Host ""
}
# 传统平台对外服务远程修复结果
if ($PlatformType -eq 'old' -and $global:ExternalServiceRepairResult) {
$r = $global:ExternalServiceRepairResult
$icon = if ($r.Success) { "✅" } else { "⚠️" }
$md += "## 传统平台对外服务远程修复结果"
$md += "- $icon 对外服务 (external-meeting-api)"
$md += " - 已触发修复: $($r.Attempted)"
$md += " - 修复结果: $(if ($r.Success) { '成功' } else { '失败' })"
if ($r.Detail) {
$md += " - 说明: $($r.Detail)"
}
$md += ""
}
# upython 容器服务
if ($UpythonResults -and $UpythonResults.Count -gt 0) {
Write-Host "【upython 容器服务状态】" -ForegroundColor Yellow
......@@ -2752,6 +2835,7 @@ function Upload_the_repair_script {
Error = $errorOut
}
}
# ================================
# 检测 DataBakup 服务
# ================================
......@@ -2964,6 +3048,16 @@ function Main {
# ujava 宿主机服务检测(传统平台extapi在/var/www/java/external-meeting-api)
$ujavaHostResults = Test-UjavaOldPlatformHostServices -Server $server
# 如果检测到对外服务进程 ubains-meeting-api-1.0-SNAPSHOT.jar 未运行,则触发远程修复
$global:ExternalServiceRepairResult = $null # 供报告使用
if ($ujavaHostResults -and $ujavaHostResults.Count -gt 0) {
$extSvc = $ujavaHostResults | Where-Object { $_.Service -match 'ubains-meeting-api-1\.0-SNAPSHOT\.jar' }
if ($extSvc -and -not $extSvc.Running) {
Write-Log -Level "WARN" -Message "[EXT] 检测到对外服务进程未运行,准备执行远程修复 (fix_external_service_disconnect)"
$global:ExternalServiceRepairResult = Repair-ExternalMeetingService -Server $server
}
}
# upython 检测(传统平台使用不同的端口列表)
if ($systemInfo.HasUpython) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论