Skip to content

Commit 90099b3

Browse files
committed
Update.
1 parent 97f53ed commit 90099b3

File tree

3 files changed

+79
-2
lines changed

3 files changed

+79
-2
lines changed

service/rpc/server.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,14 @@ func (s *ServerHandler) ReportSystemState(c context.Context, r *pb.State) (*pb.R
125125
state.NetInTransfer)
126126
}
127127

128+
// 输出完整状态数据,用于调试
129+
log.Printf("NG>> 服务器 %s 状态上报: CPU:%.2f%% 内存:%d 硬盘:%d 进程:%d",
130+
singleton.ServerList[clientID].Name,
131+
state.CPU,
132+
state.MemUsed,
133+
state.DiskUsed,
134+
state.ProcessCount)
135+
128136
// 原始报告流量保存用于增量计算
129137
originalNetInTransfer := state.NetInTransfer
130138
originalNetOutTransfer := state.NetOutTransfer
@@ -152,6 +160,8 @@ func (s *ServerHandler) ReportSystemState(c context.Context, r *pb.State) (*pb.R
152160
"last_state_json": singleton.ServerList[clientID].LastStateJSON,
153161
"last_online": singleton.ServerList[clientID].LastOnline,
154162
})
163+
164+
log.Printf("NG>> 服务器 %s 最后状态已保存到数据库", singleton.ServerList[clientID].Name)
155165
}
156166

157167
// 应对 dashboard 重启的情况,如果从未记录过,先打点,等到小时时间点时入库
@@ -249,6 +259,20 @@ func (s *ServerHandler) ReportSystemInfo(c context.Context, r *pb.Host) (*pb.Rec
249259
host.CountryCode = singleton.ServerList[clientID].Host.CountryCode
250260
}
251261

262+
// 保存完整Host信息到数据库,用于重启后恢复
263+
hostJSON, err := utils.Json.Marshal(host)
264+
if err == nil {
265+
// 使用Replace语法,如果记录不存在则插入,存在则更新
266+
singleton.DB.Exec(`
267+
INSERT INTO last_reported_host (server_id, host_json)
268+
VALUES (?, ?)
269+
ON CONFLICT(server_id)
270+
DO UPDATE SET host_json = ?
271+
`, clientID, string(hostJSON), string(hostJSON))
272+
273+
log.Printf("NG>> 服务器 %s Host信息已保存到数据库", singleton.ServerList[clientID].Name)
274+
}
275+
252276
singleton.ServerList[clientID].Host = &host
253277
return &pb.Receipt{Proced: true}, nil
254278
}

service/singleton/server.go

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

service/singleton/singleton.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,22 @@ func InitDBFromPath(path string) {
142142
log.Println("NG>> 添加last_online字段失败:", err)
143143
}
144144
}
145+
146+
// 创建存储Host信息的表
147+
err = DB.Exec(`
148+
CREATE TABLE IF NOT EXISTS last_reported_host (
149+
server_id INTEGER PRIMARY KEY,
150+
host_json TEXT NOT NULL,
151+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
152+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
153+
)
154+
`).Error
155+
156+
if err != nil {
157+
log.Println("NG>> 创建last_reported_host表失败:", err)
158+
} else {
159+
log.Println("NG>> last_reported_host表检查/创建成功")
160+
}
145161
}
146162

147163
// RecordTransferHourlyUsage 对流量记录进行打点

0 commit comments

Comments
 (0)