+ // update latest liveness
+ latestLiveness := ormNodeLivenesses[0]
+ rttMS := ping.Nanoseconds() / 1000000
+ if rttMS != 0 {
+ ormNode.AvgRttMS = sql.NullInt64{
+ Int64: (ormNode.AvgRttMS.Int64*int64(latestLiveness.PongTimes) + rttMS) / int64(latestLiveness.PongTimes+1),
+ Valid: true,
+ }
+ }
+ if rttMS > 0 && rttMs < 2000 {
+ ormNode.Status = common.NodeHealthyStatus
+ } else if rttMS > 2000 {
+ ormNode.Status = common.NodeCongestedStatus
+ }
+ latestLiveness.PongTimes += 1
+ if peerInfo.Height != 0 {
+ latestLiveness.BestHeight = peerInfo.Height
+ ormNode.BestHeight = peerInfo.Height
+ }
+ if err := dbTx.Save(latestLiveness).Error; err != nil {
+ return err
+ }
+
+ // calc LatestDailyUptimeMinutes
+ total := 0 * time.Minute
+ ormNodeLivenesses[0].UpdatedAt = now
+ for _, ormNodeLiveness := range ormNodeLivenesses {
+ if ormNodeLiveness.CreatedAt.Before(yesterday) {
+ ormNodeLiveness.CreatedAt = yesterday
+ }
+
+ total += ormNodeLiveness.UpdatedAt.Sub(ormNodeLiveness.CreatedAt)
+ }
+ ormNode.LatestDailyUptimeMinutes = uint64(total.Minutes())
+ ormNode.Alias = peerInfo.Moniker
+ ormNode.Xpub = peerInfo.ID
+ return dbTx.Save(ormNode).Error