OSDN Git Service

try
[bytom/vapor.git] / toolbar / precog / monitor / connection.go
1 package monitor
2
3 import (
4         "net"
5         "time"
6
7         log "github.com/sirupsen/logrus"
8         "github.com/vapor/p2p"
9         "github.com/vapor/toolbar/precog/database/orm"
10 )
11
12 func (m *monitor) connectNodesRoutine() {
13         // TODO: change name?
14         ticker := time.NewTicker(time.Duration(m.cfg.CheckFreqSeconds) * time.Second)
15         for ; true; <-ticker.C {
16                 if err := m.dialNodes(); err != nil {
17                         log.Error(err)
18                 }
19         }
20 }
21
22 func (m *monitor) dialNodes() error {
23         // m.Lock()
24         log.Info("Start to reconnect to nodes...")
25         var nodes []*orm.Node
26         if err := m.db.Model(&orm.Node{}).Find(&nodes).Error; err != nil {
27                 return err
28         }
29
30         addresses := make([]*p2p.NetAddress, 0)
31         for i := 0; i < len(nodes); i++ {
32                 ips, err := net.LookupIP(nodes[i].Host)
33                 if err != nil {
34                         log.Error(err)
35                         continue
36                 }
37                 if len(ips) == 0 {
38                         log.Errorf("fail to look up ip for %s", nodes[i].Host)
39                         continue
40                 }
41
42                 address := p2p.NewNetAddressIPPort(ips[0], nodes[i].Port)
43                 addresses = append(addresses, address)
44         }
45
46         // connected peers will be skipped in switch.DialPeers()
47         m.sw.DialPeers(addresses)
48         log.Info("DialPeers done.")
49         m.checkStatusCh <- struct{}{}
50         // m.Unlock()
51         return nil
52 }