From f58fe84e9b29fc6409801ca66b75438eb7959f2d Mon Sep 17 00:00:00 2001 From: HAOYUatHZ Date: Tue, 27 Aug 2019 20:00:26 +0800 Subject: [PATCH] add avgLatency --- toolbar/precog/monitor/stats.go | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/toolbar/precog/monitor/stats.go b/toolbar/precog/monitor/stats.go index 72c2203b..2162892d 100644 --- a/toolbar/precog/monitor/stats.go +++ b/toolbar/precog/monitor/stats.go @@ -127,7 +127,6 @@ func (m *monitor) processPeerInfos(peerInfos []*peers.PeerInfo) error { return nil } -// TODO: fix pong time func (m *monitor) processPeerInfo(dbTx *gorm.DB, peerInfo *peers.PeerInfo) error { xPub := &chainkd.XPub{} if err := xPub.UnmarshalText([]byte(peerInfo.ID)); err != nil { @@ -145,19 +144,21 @@ func (m *monitor) processPeerInfo(dbTx *gorm.DB, peerInfo *peers.PeerInfo) error log.Debugf("Parse ping time err: %v", err) } - // TODO: preload? - ormNodeLiveness := &orm.NodeLiveness{ - NodeID: ormNode.ID, - BestHeight: ormNode.BestHeight, - AvgLantencyMS: sql.NullInt64{Int64: ping.Nanoseconds() / 1000, Valid: true}, - // PingTimes uint64 - // PongTimes uint64 + ormNodeLiveness := &orm.NodeLiveness{} + if err := dbTx.Model(&orm.NodeLiveness{}).Where("node_id = ? AND status != ?", ormNode.ID, common.NodeOfflineStatus).Last(ormNodeLiveness).Error; err != nil { + return err } - if err := dbTx.Model(&orm.NodeLiveness{}).Where("node_id = ? AND status != ?", ormNode.ID, common.NodeOfflineStatus). - UpdateColumn(&orm.NodeLiveness{ - BestHeight: ormNodeLiveness.BestHeight, - AvgLantencyMS: ormNodeLiveness.AvgLantencyMS, - }).FirstOrCreate(ormNodeLiveness).Error; err != nil { + + lantencyMS := ping.Nanoseconds() / 1000 + if lantencyMS != 0 { + ormNodeLiveness.AvgLantencyMS = sql.NullInt64{ + Int64: (ormNodeLiveness.AvgLantencyMS.Int64*int64(ormNodeLiveness.PongTimes) + lantencyMS) / int64(ormNodeLiveness.PongTimes+1), + Valid: true, + } + } + ormNodeLiveness.PongTimes += 1 + ormNodeLiveness.BestHeight = peerInfo.Height + if err := dbTx.Save(ormNodeLiveness).Error; err != nil { return err } -- 2.11.0