OSDN Git Service

fix log
[bytom/vapor.git] / toolbar / precog / monitor / discover.go
1 package monitor
2
3 import (
4         "time"
5
6         log "github.com/sirupsen/logrus"
7
8         "github.com/vapor/p2p/discover/dht"
9         "github.com/vapor/toolbar/precog/config"
10 )
11
12 var (
13         nodesToDiscv = 150
14         discvFreqSec = 60
15 )
16
17 func (m *monitor) discoveryRoutine() {
18         ticker := time.NewTicker(time.Duration(discvFreqSec) * time.Second)
19         for range ticker.C {
20                 m.Lock()
21
22                 nodes := make([]*dht.Node, nodesToDiscv)
23                 num := m.sw.GetDiscv().ReadRandomNodes(nodes)
24                 for _, node := range nodes[:num] {
25                         if n, ok := m.discvMap[node.ID.String()]; ok && n.String() == node.String() {
26                                 continue
27                         }
28
29                         log.WithFields(log.Fields{"new node": node}).Info("discover")
30                         m.saveDiscoveredNode(node)
31                 }
32
33                 m.Unlock()
34         }
35 }
36
37 func (m *monitor) saveDiscoveredNode(node *dht.Node) {
38         if err := m.upSertNode(&config.Node{
39                 PublicKey: node.ID.String(),
40                 IP:        node.IP.String(),
41                 Port:      node.TCP,
42         }); err == nil {
43                 m.discvMap[node.ID.String()] = node
44         } else {
45                 log.WithFields(log.Fields{
46                         "node": node,
47                         "err":  err,
48                 }).Error("upSertNode")
49         }
50 }