@@ -115,50 +115,38 @@ func (s *ServerAPIService) GetStatusByIDList(idList []uint64) *ServerStatusRespo
115115 continue
116116 }
117117
118- // 尝试从数据库加载Host信息
118+ // 获取Host信息,优先使用内存中的数据
119119 host := server .Host
120- if host == nil || host .MemTotal == 0 || len (host .CPU ) == 0 {
120+ if host == nil || (host .MemTotal == 0 && len (host .CPU ) == 0 ) {
121+ // 尝试从数据库重新加载Host信息
121122 var hostJSON []byte
122123 if err := DB .Raw ("SELECT host_json FROM servers WHERE id = ?" , server .ID ).Scan (& hostJSON ).Error ; err == nil && len (hostJSON ) > 0 {
123- tempHost := & model.Host {
124- CPU : []string {},
125- GPU : []string {},
126- }
124+ tempHost := & model.Host {}
127125 if err := utils .Json .Unmarshal (hostJSON , tempHost ); err == nil {
128- // 仅为特定问题服务器添加日志(ID为39)
129- if server .ID == 39 {
130- log .Printf ("NG>> [API] 离线服务器ID:39 (%s) Host数据: %s" , server .Name , string (hostJSON ))
131- }
132-
133- // 不再填充默认数据,只使用实际数据
134- if Conf .Debug {
135- log .Printf ("NG>> API - 服务器 %s (ID: %d) 成功加载Host数据" , server .Name , server .ID )
136- }
126+ tempHost .Initialize ()
137127 host = tempHost
138128 server .Host = tempHost // 更新内存中的数据
139- } else if Conf . Debug {
140- log .Printf ("NG>> API - 服务器 %s (ID: %d) 解析Host数据失败: %v" , server .Name , server .ID , err )
129+ } else {
130+ log .Printf ("API - 服务器 %s (ID: %d) 解析Host数据失败: %v" , server .Name , server .ID , err )
141131 }
142132 }
143133 }
144134
145- // 获取状态数据,优先使用当前状态,没有则使用离线前保存的最后状态
146- state := server .State
147- if state == nil && server .LastStateBeforeOffline != nil {
148- state = server .LastStateBeforeOffline
149- }
150-
151- // 如果没有有效的Host或状态数据,跳过该服务器
135+ // 如果仍然没有有效的Host数据,创建空的Host对象
152136 if host == nil {
153- // 确保至少有一个空的Host对象,避免前端报错
154137 host = & model.Host {}
155- // 确保初始化数组
156138 host .Initialize ()
157139 } else {
158140 // 确保已有的Host对象数组已初始化
159141 host .Initialize ()
160142 }
161143
144+ // 获取状态数据,优先使用当前状态,没有则使用离线前保存的最后状态
145+ state := server .State
146+ if state == nil && server .LastStateBeforeOffline != nil {
147+ state = server .LastStateBeforeOffline
148+ }
149+
162150 ipv4 , ipv6 , validIP := utils .SplitIPAddr (host .IP )
163151 info := CommonServerInfo {
164152 ID : server .ID ,
@@ -201,36 +189,30 @@ func (s *ServerAPIService) GetAllStatus() *ServerStatusResponse {
201189 defer ServerLock .RUnlock ()
202190
203191 for _ , v := range ServerList {
204- // 尝试从数据库加载Host信息
192+ // 获取Host信息,优先使用内存中的数据
205193 host := v .Host
206- if host == nil || host .MemTotal == 0 || len (host .CPU ) == 0 {
194+ if host == nil || (host .MemTotal == 0 && len (host .CPU ) == 0 ) {
195+ // 尝试从数据库重新加载Host信息
207196 var hostJSON []byte
208197 if err := DB .Raw ("SELECT host_json FROM servers WHERE id = ?" , v .ID ).Scan (& hostJSON ).Error ; err == nil && len (hostJSON ) > 0 {
209- tempHost := & model.Host {
210- CPU : []string {},
211- GPU : []string {},
212- }
198+ tempHost := & model.Host {}
213199 if err := utils .Json .Unmarshal (hostJSON , tempHost ); err == nil {
214- // 仅为特定问题服务器添加日志(ID为39)
215- if v .ID == 39 {
216- log .Printf ("NG>> [API] 离线服务器ID:39 (%s) Host数据: %s" , v .Name , string (hostJSON ))
217- }
218-
219- // 不再填充默认数据,只使用实际数据
220- if Conf .Debug {
221- log .Printf ("NG>> API - 服务器 %s (ID: %d) 成功加载Host数据" , v .Name , v .ID )
222- }
200+ tempHost .Initialize ()
223201 host = tempHost
224202 v .Host = tempHost // 更新内存中的数据
225- } else if Conf . Debug {
226- log .Printf ("NG>> API - 服务器 %s (ID: %d) 解析Host数据失败: %v" , v .Name , v .ID , err )
203+ } else {
204+ log .Printf ("API - 服务器 %s (ID: %d) 解析Host数据失败: %v" , v .Name , v .ID , err )
227205 }
228206 }
229207 }
230208
231- // 如果Host信息不可用,创建一个空对象而不是跳过
209+ // 如果仍然没有有效的Host数据,创建空的Host对象
232210 if host == nil {
233211 host = & model.Host {}
212+ host .Initialize ()
213+ } else {
214+ // 确保已有的Host对象数组已初始化
215+ host .Initialize ()
234216 }
235217
236218 // 获取状态数据,优先使用当前状态,没有则使用离线前保存的最后状态
@@ -239,17 +221,6 @@ func (s *ServerAPIService) GetAllStatus() *ServerStatusResponse {
239221 state = v .LastStateBeforeOffline
240222 }
241223
242- // 如果没有有效的Host或状态数据,跳过该服务器
243- if host == nil {
244- // 确保至少有一个空的Host对象,避免前端报错
245- host = & model.Host {}
246- // 确保初始化数组
247- host .Initialize ()
248- } else {
249- // 确保已有的Host对象数组已初始化
250- host .Initialize ()
251- }
252-
253224 ipv4 , ipv6 , validIP := utils .SplitIPAddr (host .IP )
254225 info := CommonServerInfo {
255226 ID : v .ID ,
0 commit comments