Skip to content

Commit 138e4ef

Browse files
committed
Update.
1 parent f1a1c4b commit 138e4ef

File tree

2 files changed

+55
-58
lines changed

2 files changed

+55
-58
lines changed

service/rpc/server.go

Lines changed: 38 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ func (s *ServerHandler) ReportSystemState(c context.Context, r *pb.State) (*pb.R
112112
singleton.ServerLock.RLock()
113113
defer singleton.ServerLock.RUnlock()
114114

115+
log.Printf("[状态上报] 服务器 %d 开始上报状态", clientID)
116+
115117
// 更新服务器在线状态
116118
singleton.ServerList[clientID].IsOnline = true
117119
singleton.ServerList[clientID].LastActive = time.Now()
@@ -120,14 +122,17 @@ func (s *ServerHandler) ReportSystemState(c context.Context, r *pb.State) (*pb.R
120122
originalNetInTransfer := state.NetInTransfer
121123
originalNetOutTransfer := state.NetOutTransfer
122124

125+
log.Printf("[状态上报] 服务器 %d 原始流量数据: 入站=%d, 出站=%d",
126+
clientID, originalNetInTransfer, originalNetOutTransfer)
127+
123128
// 检查是否是服务器重启
124129
isRestart := false
125130
if singleton.ServerList[clientID].Host != nil && singleton.ServerList[clientID].State != nil {
126131
// 如果当前流量小于之前保存的流量,可能是重启
127132
if originalNetInTransfer < singleton.ServerList[clientID].State.NetInTransfer ||
128133
originalNetOutTransfer < singleton.ServerList[clientID].State.NetOutTransfer {
129134
isRestart = true
130-
log.Printf("检测到服务器 %s 可能重启: 当前入站=%d < 之前入站=%d 或 当前出站=%d < 之前出站=%d",
135+
log.Printf("[状态上报] 检测到服务器 %s 可能重启: 当前入站=%d < 之前入站=%d 或 当前出站=%d < 之前出站=%d",
131136
singleton.ServerList[clientID].Name,
132137
originalNetInTransfer,
133138
singleton.ServerList[clientID].State.NetInTransfer,
@@ -137,65 +142,44 @@ func (s *ServerHandler) ReportSystemState(c context.Context, r *pb.State) (*pb.R
137142
}
138143

139144
// 更新状态中的累计流量
140-
if singleton.ServerList[clientID].LastActive.IsZero() || isRestart {
141-
// 首次上线或重启,使用当前流量加上数据库中的累计流量
142-
state.NetInTransfer = originalNetInTransfer + singleton.ServerList[clientID].CumulativeNetInTransfer
143-
state.NetOutTransfer = originalNetOutTransfer + singleton.ServerList[clientID].CumulativeNetOutTransfer
144-
145-
// 根据状态选择日志消息
146-
statusMsg := "首次上线"
145+
if singleton.ServerList[clientID].LastActive.IsZero() {
146+
// 首次上线,直接使用当前值
147+
state.NetInTransfer = originalNetInTransfer
148+
state.NetOutTransfer = originalNetOutTransfer
149+
log.Printf("[状态上报] 服务器 %d 首次上线,使用当前流量值: 入站=%d, 出站=%d",
150+
clientID, state.NetInTransfer, state.NetOutTransfer)
151+
} else {
152+
// 非首次上线,累加流量
147153
if isRestart {
148-
statusMsg = "重启"
154+
// 重启情况,使用增量
155+
state.NetInTransfer = singleton.ServerList[clientID].State.NetInTransfer +
156+
(originalNetInTransfer - uint64(singleton.ServerList[clientID].PrevTransferInSnapshot))
157+
state.NetOutTransfer = singleton.ServerList[clientID].State.NetOutTransfer +
158+
(originalNetOutTransfer - uint64(singleton.ServerList[clientID].PrevTransferOutSnapshot))
159+
log.Printf("[状态上报] 服务器 %d 重启后累加流量: 入站=%d, 出站=%d",
160+
clientID, state.NetInTransfer, state.NetOutTransfer)
161+
} else {
162+
// 正常情况,直接累加
163+
state.NetInTransfer = singleton.ServerList[clientID].State.NetInTransfer +
164+
(originalNetInTransfer - uint64(singleton.ServerList[clientID].PrevTransferInSnapshot))
165+
state.NetOutTransfer = singleton.ServerList[clientID].State.NetOutTransfer +
166+
(originalNetOutTransfer - uint64(singleton.ServerList[clientID].PrevTransferOutSnapshot))
167+
log.Printf("[状态上报] 服务器 %d 正常累加流量: 入站=%d, 出站=%d",
168+
clientID, state.NetInTransfer, state.NetOutTransfer)
149169
}
150-
151-
log.Printf("服务器 %s %s,使用当前流量+累计流量: 当前入站=%d, 当前出站=%d, 累计入站=%d, 累计出站=%d",
152-
singleton.ServerList[clientID].Name,
153-
statusMsg,
154-
originalNetInTransfer,
155-
originalNetOutTransfer,
156-
singleton.ServerList[clientID].CumulativeNetInTransfer,
157-
singleton.ServerList[clientID].CumulativeNetOutTransfer)
158-
} else {
159-
// 正常更新,使用增量计算
160-
state.NetInTransfer = originalNetInTransfer + singleton.ServerList[clientID].CumulativeNetInTransfer
161-
state.NetOutTransfer = originalNetOutTransfer + singleton.ServerList[clientID].CumulativeNetOutTransfer
162-
log.Printf("服务器 %s 正常更新流量: 当前入站=%d, 当前出站=%d, 累计入站=%d, 累计出站=%d",
163-
singleton.ServerList[clientID].Name,
164-
originalNetInTransfer,
165-
originalNetOutTransfer,
166-
singleton.ServerList[clientID].CumulativeNetInTransfer,
167-
singleton.ServerList[clientID].CumulativeNetOutTransfer)
168170
}
169171

170-
// 保存当前状态
171-
singleton.ServerList[clientID].State = &state
172+
// 保存当前流量快照用于下次计算
173+
singleton.ServerList[clientID].PrevTransferInSnapshot = int64(originalNetInTransfer)
174+
singleton.ServerList[clientID].PrevTransferOutSnapshot = int64(originalNetOutTransfer)
172175

173-
// 保存最后状态,用于离线后显示
174-
lastState := model.HostState{}
175-
copier.Copy(&lastState, &state)
176-
singleton.ServerList[clientID].LastStateBeforeOffline = &lastState
176+
// 更新服务器状态
177+
stateCopy := state // 创建一个副本
178+
singleton.ServerList[clientID].State = &stateCopy
179+
singleton.UpdateServer(singleton.ServerList[clientID])
177180

178-
// 也将当前状态保存到数据库中的LastStateJSON字段,用于面板重启后恢复离线机器状态
179-
lastStateJSON, err := utils.Json.Marshal(lastState)
180-
if err == nil {
181-
singleton.ServerList[clientID].LastStateJSON = string(lastStateJSON)
182-
singleton.ServerList[clientID].LastOnline = singleton.ServerList[clientID].LastActive
183-
184-
// 立即更新到数据库
185-
singleton.DB.Model(singleton.ServerList[clientID]).Updates(map[string]interface{}{
186-
"last_state_json": singleton.ServerList[clientID].LastStateJSON,
187-
"last_online": singleton.ServerList[clientID].LastOnline,
188-
})
189-
} else {
190-
log.Printf("序列化服务器 %s 的最后状态失败: %v", singleton.ServerList[clientID].Name, err)
191-
}
192-
193-
// 确保PrevTransferSnapshot值被正确初始化
194-
// 这些值用于计算每小时的增量流量
195-
if singleton.ServerList[clientID].PrevTransferInSnapshot == 0 || singleton.ServerList[clientID].PrevTransferOutSnapshot == 0 {
196-
singleton.ServerList[clientID].PrevTransferInSnapshot = int64(originalNetInTransfer)
197-
singleton.ServerList[clientID].PrevTransferOutSnapshot = int64(originalNetOutTransfer)
198-
}
181+
log.Printf("[状态上报] 服务器 %d 状态更新完成: 入站=%d, 出站=%d",
182+
clientID, state.NetInTransfer, state.NetOutTransfer)
199183

200184
return &pb.Receipt{Proced: true}, nil
201185
}

service/singleton/traffic_manager.go

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,22 +88,31 @@ func (tm *TrafficManager) UpdateTraffic(serverID uint64, inBytes, outBytes uint6
8888
lastOutBytes: outBytes,
8989
}
9090
tm.trafficStats[serverID] = stats
91-
log.Printf("服务器 %d 初始化流量统计: 入站=%d, 出站=%d", serverID, inBytes, outBytes)
91+
log.Printf("[流量统计] 服务器 %d 初始化流量统计: 入站=%d, 出站=%d", serverID, inBytes, outBytes)
9292
return
9393
}
9494

95+
// 记录更新前的值
96+
log.Printf("[流量统计] 服务器 %d 更新前: 入站=%d, 出站=%d, 最后更新=%v",
97+
serverID, stats.InBytes, stats.OutBytes, stats.LastTime)
98+
9599
// 验证数据有效性
96100
if inBytes < stats.InBytes || outBytes < stats.OutBytes {
97-
log.Printf("警告: 服务器 %d 的流量数据异常: 新入站=%d < 旧入站=%d 或 新出站=%d < 旧出站=%d",
101+
log.Printf("[流量统计] 警告: 服务器 %d 的流量数据异常: 新入站=%d < 旧入站=%d 或 新出站=%d < 旧出站=%d",
98102
serverID, inBytes, stats.InBytes, outBytes, stats.OutBytes)
99103
// 如果新数据小于旧数据,可能是服务器重启,使用增量
104+
oldInBytes := inBytes
105+
oldOutBytes := outBytes
100106
inBytes = stats.InBytes + (inBytes - stats.lastInBytes)
101107
outBytes = stats.OutBytes + (outBytes - stats.lastOutBytes)
108+
log.Printf("[流量统计] 服务器 %d 调整后: 入站=%d->%d, 出站=%d->%d",
109+
serverID, oldInBytes, inBytes, oldOutBytes, outBytes)
102110
}
103111

104112
// 计算时间差
105113
duration := now.Sub(stats.LastTime)
106114
if duration < minUpdateInterval {
115+
log.Printf("[流量统计] 服务器 %d 更新过于频繁,忽略更新: 间隔=%v", serverID, duration)
107116
return // 忽略过于频繁的更新
108117
}
109118

@@ -121,8 +130,8 @@ func (tm *TrafficManager) UpdateTraffic(serverID uint64, inBytes, outBytes uint6
121130
stats.LastTime = now
122131
stats.UpdateCount++
123132

124-
log.Printf("服务器 %d 更新流量统计: 入站=%d, 出站=%d, 入站速率=%d/s, 出站速率=%d/s",
125-
serverID, inBytes, outBytes, stats.InSpeed, stats.OutSpeed)
133+
log.Printf("[流量统计] 服务器 %d 更新完成: 入站=%d, 出站=%d, 入站速率=%d/s, 出站速率=%d/s, 更新计数=%d",
134+
serverID, inBytes, outBytes, stats.InSpeed, stats.OutSpeed, stats.UpdateCount)
126135

127136
// 缓存最新数据
128137
tm.cache.Set(
@@ -140,16 +149,20 @@ func (tm *TrafficManager) UpdateTraffic(serverID uint64, inBytes, outBytes uint6
140149

141150
// 检查是否需要立即写入
142151
if len(tm.batchBuffer) >= batchSize || now.Sub(tm.lastBatchWrite) >= batchInterval {
152+
log.Printf("[流量统计] 服务器 %d 触发批量写入: 缓冲区大小=%d", serverID, len(tm.batchBuffer))
143153
tm.writeBatchToDatabase()
144154
}
145155

146156
// 强制更新服务器状态
147157
if server, ok := ServerList[serverID]; ok {
158+
log.Printf("[流量统计] 服务器 %d 更新状态: 入站=%d, 出站=%d", serverID, inBytes, outBytes)
148159
server.State.NetInTransfer = inBytes
149160
server.State.NetOutTransfer = outBytes
150161
server.State.NetInSpeed = stats.InSpeed
151162
server.State.NetOutSpeed = stats.OutSpeed
152163
UpdateServer(server)
164+
} else {
165+
log.Printf("[流量统计] 警告: 服务器 %d 不在服务器列表中", serverID)
153166
}
154167
}
155168

0 commit comments

Comments
 (0)