提交 e49fb2bf authored 作者: PGY's avatar PGY

Merge branch 'develop' of http://git.ubainsyun.com/bing/ubains-module-test into develop

......@@ -227,7 +227,7 @@
##### 12、容器信息收集(✅ 已实现):
函数名称:Test-ContainerInformation
查询当前服务器上所有容器信息(包含未运行与运行中的信息),可以通过docker inspect来获取MAC地址、端口映射信息、启动文件位置。
信息打印排版:先打印运行中的容器信息,再打印未运行的容器信息。
信息打印排版:先打印运行中的容器信息,再打印未运行的容器信息。在容器信息打印之间增加分隔线。
##### 13、定时任务查询(待实现):
......
......@@ -1111,15 +1111,30 @@ function Test-ServerResources {
# 4. 检测内存使用情况
Write-Log -Level "INFO" -Message "检测内存使用情况..."
# 强制使用 C 语言环境,输出 CSV,避免本地化小数点和杂质
$memCmd = "LC_ALL=C free -m | awk -v OFS=',' '/^Mem:/ { printf ""%.1f,%.1f,%.1f"", `$2/1024, `$3/1024, (`$3/`$2)*100 }'"
# 使用 available 计算已用:used = total - available;兼容不同 free 格式
$memCmd = @"
LC_ALL=C free -m | awk -v OFS=',' '
/^Mem:/ {
# 兼容:total used free shared buff/cache available
total = `$2
avail = `$7
if (avail == "" || avail == 0) {
# 某些 BusyBox/旧版 free 无 available,退化为: used = `$2 - `$4 (free)
avail = `$4
}
used = total - avail
pct = (total>0) ? (used/total)*100 : 0
printf "%.2f,%.2f,%.1f", total/1024, used/1024, pct
}'
"@
$memResult = Invoke-SSHCommand -HostName $Server.IP -User $Server.User -Pass $Server.Pass -Port $Server.Port -Command $memCmd
$memTotal = 0.0
$memUsed = 0.0
$memPercent = 0.0
if ($memResult.ExitCode -eq 0 -and $memResult.Output) {
$needFallback = ($memResult.ExitCode -ne 0 -or -not $memResult.Output)
if (-not $needFallback) {
$line = ($memResult.Output -split "`n" | Where-Object { $_ -match '\S' } | Select-Object -First 1)
if ($line) {
$parts = ($line.Trim() -replace "`r","") -split ','
......@@ -1129,38 +1144,55 @@ function Test-ServerResources {
$memTotal = [double]::Parse($parts[0], $ci)
$memUsed = [double]::Parse($parts[1], $ci)
$memPercent = [double]::Parse($parts[2], $ci)
} catch {
# Fallback: 读取 /proc/meminfo 计算
$fallbackCmd = @"
} catch { $needFallback = $true }
} else { $needFallback = $true }
} else { $needFallback = $true }
}
if ($memTotal -le 0 -or $memUsed -lt 0 -or $memPercent -le 0) { $needFallback = $true }
if ($needFallback) {
# Fallback: 用 /proc/meminfo 计算 (kB -> GB)
$fallbackCmd = @"
awk -v OFS=',' '
BEGIN { t=0; u=0 }
/^MemTotal:/ { t=`$2 }
/^MemAvailable:/ { a=`$2 }
BEGIN { t=0; a=0 }
/^MemTotal:/ { t=`$2 } # kB
/^MemAvailable:/ { a=`$2 } # kB
END {
if (t>0) {
u=t-a;
printf "%.1f,%.1f,%.1f", t/1024/1024, u/1024/1024, (u/t)*100
if (t>0 && a>=0) {
u=t-a
pct = (u/t)*100
printf "%.2f,%.2f,%.1f", t/1024/1024, u/1024/1024, pct
} else {
print "0,0,0"
}
}' /proc/meminfo
"@
$fbRes = Invoke-SSHCommand -HostName $Server.IP -User $Server.User -Pass $Server.Pass -Port $Server.Port -Command $fallbackCmd
if ($fbRes.ExitCode -eq 0 -and $fbRes.Output) {
$fbLine = ($fbRes.Output -split "`n" | Where-Object { $_ -match '\S' } | Select-Object -First 1)
if ($fbLine) {
$fbParts = ($fbLine.Trim() -replace "`r","") -split ','
if ($fbParts.Count -ge 3) {
$ci = [System.Globalization.CultureInfo]::InvariantCulture
$memTotal = [double]::Parse($fbParts[0], $ci)
$memUsed = [double]::Parse($fbParts[1], $ci)
$memPercent = [double]::Parse($fbParts[2], $ci)
}
}
}
$fbRes = Invoke-SSHCommand -HostName $Server.IP -User $Server.User -Pass $Server.Pass -Port $Server.Port -Command $fallbackCmd
if ($fbRes.ExitCode -eq 0 -and $fbRes.Output) {
$fbLine = ($fbRes.Output -split "`n" | Where-Object { $_ -match '\S' } | Select-Object -First 1)
if ($fbLine) {
$fbParts = ($fbLine.Trim() -replace "`r","") -split ','
if ($fbParts.Count -ge 3) {
$ci = [System.Globalization.CultureInfo]::InvariantCulture
$memTotal = [double]::Parse($fbParts[0], $ci)
$memUsed = [double]::Parse($fbParts[1], $ci)
$memPercent = [double]::Parse($fbParts[2], $ci)
}
}
}
}
# 规整与保护
if ($memTotal -gt 0) {
if ($memUsed -lt 0) { $memUsed = 0 }
if ($memUsed -gt $memTotal) { $memUsed = $memTotal }
$memPercent = if ($memTotal -gt 0) { [math]::Round(($memUsed / $memTotal) * 100, 1) } else { 0 }
$memTotal = [math]::Round($memTotal, 2)
$memUsed = [math]::Round($memUsed, 2)
} else {
Write-Log -Level "WARN" -Message "内存信息获取失败,free/awk或/proc/meminfo不可用"
}
$memStatus = if ($memPercent -lt 70) { "正常" } elseif ($memPercent -lt 90) { "警告" } else { "危险" }
$memColor = if ($memPercent -lt 70) { "SUCCESS" } elseif ($memPercent -lt 90) { "WARN" } else { "ERROR" }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论