singleServerScan 单个服务器状态扫描
(oldSubStatus *serverStatus)
| 232 | |
| 233 | // singleServerScan 单个服务器状态扫描 |
| 234 | func singleServerScan(oldSubStatus *serverStatus) (changed bool, notifyMsg message.Message, err error) { |
| 235 | notifyMsg = make(message.Message, 0) |
| 236 | newSubStatus := &serverStatus{} |
| 237 | // 获取服务器状态 & 检查是否需要更新 |
| 238 | rawServerStatus, err := getMinecraftServerStatus(oldSubStatus.ServerAddr) |
| 239 | if err != nil { |
| 240 | // logrus.Warnln(logPrefix+"getMinecraftServerStatus error: ", err) |
| 241 | err = nil |
| 242 | // 计数器没有超限,增加计数器并跳过 |
| 243 | if cnt, ts := addPingServerUnreachableCounter(oldSubStatus.ServerAddr, time.Now()); cnt < pingServerUnreachableCounterThreshold && |
| 244 | time.Since(ts) < pingServerUnreachableCounterTimeThreshold { |
| 245 | // logrus.Warnln(logPrefix+"server ", oldSubStatus.ServerAddr, " unreachable, counter: ", cnt, " ts:", ts) |
| 246 | return |
| 247 | } |
| 248 | // 不可达计数器已经超限,则更新服务器状态 |
| 249 | // 深拷贝,设置PingDelay为不可达 |
| 250 | newSubStatus = oldSubStatus.deepCopy() |
| 251 | newSubStatus.PingDelay = pingDelayUnreachable |
| 252 | } else { |
| 253 | newSubStatus = rawServerStatus.genServerSubscribeSchema(oldSubStatus.ServerAddr, oldSubStatus.ID) |
| 254 | } |
| 255 | if newSubStatus == nil { |
| 256 | // logrus.Errorln(logPrefix + "newSubStatus is nil") |
| 257 | return |
| 258 | } |
| 259 | // 检查是否有订阅信息变化 |
| 260 | if oldSubStatus.isServerStatusSpecChanged(newSubStatus) { |
| 261 | // logrus.Warnf(logPrefix+"server subscribe spec changed: (%+v) -> (%+v)", oldSubStatus, newSubStatus) |
| 262 | changed = true |
| 263 | // 更新数据库 |
| 264 | err = dbInstance.updateServerStatus(newSubStatus) |
| 265 | if err != nil { |
| 266 | // logrus.Errorln(logPrefix+"updateServerSubscribeStatus error: ", err) |
| 267 | return |
| 268 | } |
| 269 | // 纯文本信息 |
| 270 | notifyMsg = append(notifyMsg, message.Text(formatSubStatusChangeText(oldSubStatus, newSubStatus))) |
| 271 | // 如果有图标变更 |
| 272 | if oldSubStatus.FaviconMD5 != newSubStatus.FaviconMD5 { |
| 273 | // 有图标变更 |
| 274 | notifyMsg = append(notifyMsg, message.Text("\n-----[图标变更]-----\n")) |
| 275 | // 旧图标 |
| 276 | notifyMsg = append(notifyMsg, message.Text("[旧]\n")) |
| 277 | if oldSubStatus.FaviconRaw != "" { |
| 278 | notifyMsg = append(notifyMsg, message.Image(oldSubStatus.FaviconRaw.toBase64String())) |
| 279 | } else { |
| 280 | notifyMsg = append(notifyMsg, message.Text("(空)\n")) |
| 281 | } |
| 282 | // 新图标 |
| 283 | notifyMsg = append(notifyMsg, message.Text("[新]\n")) |
| 284 | if newSubStatus.FaviconRaw != "" { |
| 285 | notifyMsg = append(notifyMsg, message.Image(newSubStatus.FaviconRaw.toBase64String())) |
| 286 | } else { |
| 287 | notifyMsg = append(notifyMsg, message.Text("(空)\n")) |
| 288 | } |
| 289 | } |
| 290 | notifyMsg = append(notifyMsg, message.Text("\n-------最新状态-------\n")) |
| 291 | // 服务状态 |