OSDN Git Service

clean
[bytom/vapor.git] / toolbar / precog / monitor / stats.go
index 92090b3..f16b09e 100644 (file)
@@ -21,22 +21,19 @@ func (m *monitor) upsertNode(node *config.Node) error {
                node.PublicKey = fmt.Sprintf("%v", node.XPub.PublicKey().String())
        }
 
-       ormNode := &orm.Node{PublicKey: node.PublicKey}
-       if err := m.db.Where(&orm.Node{PublicKey: node.PublicKey}).First(ormNode).Error; err != nil && err != gorm.ErrRecordNotFound {
+       ormNode := &orm.Node{
+               IP:   node.IP,
+               Port: node.Port,
+       }
+       if err := m.db.Where(ormNode).First(ormNode).Error; err != nil && err != gorm.ErrRecordNotFound {
                return err
        }
 
+       ormNode.PublicKey = node.PublicKey
        if node.XPub != nil {
                ormNode.Xpub = node.XPub.String()
        }
-       ormNode.IP = node.IP
-       ormNode.Port = node.Port
-       return m.db.Where(&orm.Node{PublicKey: ormNode.PublicKey}).
-               Assign(&orm.Node{
-                       Xpub: ormNode.Xpub,
-                       IP:   ormNode.IP,
-                       Port: ormNode.Port,
-               }).FirstOrCreate(ormNode).Error
+       return m.db.Save(ormNode).Error
 }
 
 // TODO: maybe return connected nodes here for checkStatus
@@ -124,6 +121,10 @@ func (m *monitor) processPeerInfo(dbTx *gorm.DB, peerInfo *peers.PeerInfo) error
                return err
        }
 
+       if ormNode.Status == common.NodeOfflineStatus {
+               return fmt.Errorf("node %s status error", ormNode.PublicKey)
+       }
+
        log.WithFields(log.Fields{"ping": peerInfo.Ping}).Debug("peerInfo")
        ping, err := time.ParseDuration(peerInfo.Ping)
        if err != nil {
@@ -142,14 +143,10 @@ func (m *monitor) processPeerInfo(dbTx *gorm.DB, peerInfo *peers.PeerInfo) error
 
        // update latest liveness
        latestLiveness := ormNodeLivenesses[0]
-       // if latestLiveness.Status == common.NodeOfflineStatus {
-       //      return fmt.Errorf("node %s latest liveness status error", ormNode.PublicKey)
-       // }
-
        lantencyMS := ping.Nanoseconds() / 1000
        if lantencyMS != 0 {
-               latestLiveness.AvgLantencyMS = sql.NullInt64{
-                       Int64: (latestLiveness.AvgLantencyMS.Int64*int64(latestLiveness.PongTimes) + lantencyMS) / int64(latestLiveness.PongTimes+1),
+               ormNode.AvgLantencyMS = sql.NullInt64{
+                       Int64: (ormNode.AvgLantencyMS.Int64*int64(latestLiveness.PongTimes) + lantencyMS) / int64(latestLiveness.PongTimes+1),
                        Valid: true,
                }
        }