@@ -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}
0 commit comments