11package singleton
22
33import (
4+ "log"
45 "sync"
56 "time"
67
@@ -113,6 +114,12 @@ func (s *ServerAPIService) GetStatusByIDList(idList []uint64) *ServerStatusRespo
113114 if server == nil {
114115 continue
115116 }
117+
118+ // 确保host不为空
119+ if server .Host == nil {
120+ continue
121+ }
122+
116123 ipv4 , ipv6 , validIP := utils .SplitIPAddr (server .Host .IP )
117124 info := CommonServerInfo {
118125 ID : server .ID ,
@@ -126,22 +133,24 @@ func (s *ServerAPIService) GetStatusByIDList(idList []uint64) *ServerStatusRespo
126133 HideForGuest : server .HideForGuest ,
127134 }
128135
129- // 如果服务器离线但有最后状态,使用最后状态
130- var statusData * StatusResponse
131- if ! server .IsOnline && server .LastStateBeforeOffline != nil {
132- statusData = & StatusResponse {
133- CommonServerInfo : info ,
134- Host : server .Host ,
135- Status : server .LastStateBeforeOffline ,
136- }
137- } else {
138- statusData = & StatusResponse {
139- CommonServerInfo : info ,
140- Host : server .Host ,
141- Status : server .State ,
136+ // 确保状态数据不为空
137+ if server .State == nil {
138+ // 如果状态为空但有历史状态,使用历史状态
139+ if server .LastStateBeforeOffline != nil {
140+ server .State = server .LastStateBeforeOffline
141+ log .Printf ("NG>> 服务器 %s API返回使用了历史状态数据" , server .Name )
142+ } else {
143+ continue
142144 }
143145 }
144146
147+ // 构建状态响应
148+ statusData := & StatusResponse {
149+ CommonServerInfo : info ,
150+ Host : server .Host ,
151+ Status : server .State ,
152+ }
153+
145154 res .Result = append (res .Result , statusData )
146155 }
147156 res .CommonResponse = CommonResponse {
@@ -162,12 +171,26 @@ func (s *ServerAPIService) GetAllStatus() *ServerStatusResponse {
162171 res .Result = make ([]* StatusResponse , 0 )
163172 ServerLock .RLock ()
164173 defer ServerLock .RUnlock ()
174+
165175 for _ , v := range ServerList {
176+ // 确保host不为空
166177 host := v .Host
167- state := v .State
168- if host == nil || state == nil {
178+ if host == nil {
169179 continue
170180 }
181+
182+ // 确保状态数据不为空
183+ state := v .State
184+ if state == nil {
185+ // 如果状态为空但有历史状态,使用历史状态
186+ if v .LastStateBeforeOffline != nil {
187+ state = v .LastStateBeforeOffline
188+ log .Printf ("NG>> 服务器 %s GetAllStatus使用了历史状态数据" , v .Name )
189+ } else {
190+ continue
191+ }
192+ }
193+
171194 ipv4 , ipv6 , validIP := utils .SplitIPAddr (host .IP )
172195 info := CommonServerInfo {
173196 ID : v .ID ,
@@ -181,18 +204,10 @@ func (s *ServerAPIService) GetAllStatus() *ServerStatusResponse {
181204 HideForGuest : v .HideForGuest ,
182205 }
183206
184- // 如果服务器离线但有最后状态,使用最后状态
185- var status * model.HostState
186- if ! v .IsOnline && v .LastStateBeforeOffline != nil {
187- status = v .LastStateBeforeOffline
188- } else {
189- status = v .State
190- }
191-
192207 res .Result = append (res .Result , & StatusResponse {
193208 CommonServerInfo : info ,
194209 Host : v .Host ,
195- Status : status ,
210+ Status : state ,
196211 })
197212 }
198213 res .CommonResponse = CommonResponse {
0 commit comments