@@ -40,6 +40,24 @@ func loadServers() {
4040 innerS .LastStateBeforeOffline = nil
4141 innerS .IsOnline = false // 初始状态为离线,等待agent报告
4242
43+ // 从数据库加载最后一次上报的Host信息
44+ var hostJSON []byte
45+ if err := DB .Raw ("SELECT host_json FROM last_reported_host WHERE server_id = ?" , innerS .ID ).Scan (& hostJSON ).Error ; err == nil && len (hostJSON ) > 0 {
46+ if err := utils .Json .Unmarshal (hostJSON , innerS .Host ); err != nil {
47+ log .Printf ("NG>> 解析服务器 %s 的Host数据失败: %v" , innerS .Name , err )
48+ } else {
49+ log .Printf ("NG>> 服务器 %s 加载了Host数据,内存总量: %d" , innerS .Name , innerS .Host .MemTotal )
50+ }
51+ } else {
52+ // 如果没有保存的Host信息,设置默认值防止页面显示不正确
53+ innerS .Host .MemTotal = 1024 * 1024 * 1024 // 1GB
54+ innerS .Host .DiskTotal = 10 * 1024 * 1024 * 1024 // 10GB
55+ innerS .Host .SwapTotal = 512 * 1024 * 1024 // 512MB
56+ innerS .Host .OS = "Unknown"
57+ innerS .Host .Platform = "Unknown"
58+ innerS .Host .CPU = []string {"Unknown CPU" }
59+ }
60+
4361 // 加载离线前的最后状态
4462 if innerS .LastStateJSON != "" {
4563 lastState := & model.HostState {}
@@ -52,6 +70,20 @@ func loadServers() {
5270 stateCopy := & model.HostState {}
5371 if copyErr := copier .Copy (stateCopy , lastState ); copyErr == nil {
5472 innerS .State = stateCopy
73+
74+ // 确保状态中的数据不为零
75+ if innerS .State .ProcessCount == 0 && lastState .ProcessCount > 0 {
76+ innerS .State .ProcessCount = lastState .ProcessCount
77+ }
78+ if innerS .State .CPU == 0 && lastState .CPU > 0 {
79+ innerS .State .CPU = lastState .CPU
80+ }
81+ if innerS .State .MemUsed == 0 && lastState .MemUsed > 0 {
82+ innerS .State .MemUsed = lastState .MemUsed
83+ }
84+ if innerS .State .DiskUsed == 0 && lastState .DiskUsed > 0 {
85+ innerS .State .DiskUsed = lastState .DiskUsed
86+ }
5587 } else {
5688 log .Printf ("NG>> 复制服务器 %s 的状态数据失败: %v" , innerS .Name , copyErr )
5789 }
@@ -60,8 +92,13 @@ func loadServers() {
6092 innerS .State .NetInTransfer = innerS .CumulativeNetInTransfer
6193 innerS .State .NetOutTransfer = innerS .CumulativeNetOutTransfer
6294
63- log .Printf ("NG>> 服务器 %s 加载了离线前的最后状态,累计流量入站: %d, 出站: %d" ,
64- innerS .Name , innerS .CumulativeNetInTransfer , innerS .CumulativeNetOutTransfer )
95+ log .Printf ("NG>> 服务器 %s 加载了离线前的最后状态,CPU:%.2f%% 内存:%d 硬盘:%d 流量入站:%d 出站:%d" ,
96+ innerS .Name ,
97+ innerS .State .CPU ,
98+ innerS .State .MemUsed ,
99+ innerS .State .DiskUsed ,
100+ innerS .CumulativeNetInTransfer ,
101+ innerS .CumulativeNetOutTransfer )
65102 } else {
66103 log .Printf ("NG>> 解析服务器 %s 的最后状态失败: %v" , innerS .Name , err )
67104 }
0 commit comments