OSDN Git Service

fix for status
[bytom/vapor.git] / toolbar / precog / monitor / stats.go
index 3fdfcf9..ec52d66 100644 (file)
@@ -17,7 +17,7 @@ import (
 )
 
 // create or update: https://github.com/jinzhu/gorm/issues/1307
-func (m *monitor) upSertNode(node *config.Node) error {
+func (m *monitor) upsertNode(node *config.Node) error {
        if node.XPub != nil {
                node.PublicKey = fmt.Sprintf("%v", node.XPub.PublicKey().String())
        }
@@ -27,9 +27,6 @@ func (m *monitor) upSertNode(node *config.Node) error {
                return err
        }
 
-       if node.Alias != "" {
-               ormNode.Alias = node.Alias
-       }
        if node.XPub != nil {
                ormNode.Xpub = node.XPub.String()
        }
@@ -37,10 +34,9 @@ func (m *monitor) upSertNode(node *config.Node) error {
        ormNode.Port = node.Port
        return m.db.Where(&orm.Node{PublicKey: ormNode.PublicKey}).
                Assign(&orm.Node{
-                       Xpub:  ormNode.Xpub,
-                       Alias: ormNode.Alias,
-                       IP:    ormNode.IP,
-                       Port:  ormNode.Port,
+                       Xpub: ormNode.Xpub,
+                       IP:   ormNode.IP,
+                       Port: ormNode.Port,
                }).FirstOrCreate(ormNode).Error
 }
 
@@ -86,27 +82,19 @@ func (m *monitor) processDialResults() error {
 }
 
 func (m *monitor) processConnectedPeer(ormNode *orm.Node, peer *p2p.Peer) error {
-       ormNodeLiveness := &orm.NodeLiveness{}
-       err := m.db.Model(&orm.NodeLiveness{}).Joins("join nodes on nodes.id = node_livenesses.node_id").
-               Where("nodes.public_key = ? AND status != ?", ormNode.PublicKey, common.NodeOfflineStatus).Last(ormNodeLiveness).Error
-       if err == nil {
-               return m.db.Model(&orm.NodeLiveness{}).Where(ormNodeLiveness).UpdateColumn(&orm.NodeLiveness{
-                       PingTimes: ormNodeLiveness.PingTimes + 1,
-               }).Error
-       } else if err != gorm.ErrRecordNotFound {
+       ormNodeLiveness := &orm.NodeLiveness{NodeID: ormNode.ID}
+       err := m.db.Where(ormNodeLiveness).Last(ormNodeLiveness).Error
+       if err != nil && err != gorm.ErrRecordNotFound {
                return err
        }
 
-       // gorm.ErrRecordNotFound
-       return m.db.Create(&orm.NodeLiveness{
-               NodeID:    ormNode.ID,
-               PingTimes: 1,
-               Status:    common.NodeUnknownStatus,
-       }).Error
+       ormNodeLiveness.PongTimes += 1
+       return m.db.Save(ormNodeLiveness).Error
 }
 
 func (m *monitor) processOfflinePeer(ormNode *orm.Node) error {
-       return m.db.Model(&orm.NodeLiveness{}).Where(&orm.NodeLiveness{NodeID: ormNode.ID}).UpdateColumn(&orm.NodeLiveness{Status: common.NodeOfflineStatus}).Error
+       ormNode.Status = common.NodeOfflineStatus
+       return m.db.Save(ormNode).Error
 }
 
 func (m *monitor) processPeerInfos(peerInfos []*peers.PeerInfo) {