OSDN Git Service

clean
[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                 nodes := make([]*dht.Node, nodesToDiscv)
21                 n := m.sw.GetDiscv().ReadRandomNodes(nodes)
22                 for i := 0; i < n; i++ {
23                         m.discvCh <- nodes[i]
24                 }
25         }
26 }
27
28 func (m *monitor) collectDiscoveredNodes() {
29         // nodeMap maps a node's public key to the node itself
30         nodeMap := make(map[string]*dht.Node)
31         for node := range m.discvCh {
32                 if n, ok := nodeMap[node.ID.String()]; ok && n.String() == node.String() {
33                         continue
34                 }
35                 log.Info("discover new node: ", node)
36
37                 if err := m.upSertNode(&config.Node{
38                         PublicKey: node.ID.String(),
39                         Host:      node.IP.String(),
40                         Port:      node.TCP,
41                 }); err == nil {
42                         nodeMap[node.ID.String()] = node
43                 } else {
44                         log.Error(err)
45                 }
46         }
47 }