OSDN Git Service

add
[bytom/vapor.git] / toolbar / precog / monitor / monitor.go
1 package monitor
2
3 import (
4         "time"
5
6         "github.com/jinzhu/gorm"
7         log "github.com/sirupsen/logrus"
8
9         "github.com/vapor/toolbar/precog/config"
10         "github.com/vapor/toolbar/precog/database/orm"
11 )
12
13 type monitor struct {
14         cfg *config.Config
15         db  *gorm.DB
16 }
17
18 func NewMonitor(cfg *config.Config, db *gorm.DB) *monitor {
19         return &monitor{
20                 cfg: cfg,
21                 db:  db,
22         }
23 }
24
25 func (m *monitor) Run() {
26         if err := m.updateBootstrapNodes(); err != nil {
27                 log.Error(err)
28         }
29
30         go m.discovery()
31         ticker := time.NewTicker(time.Duration(m.cfg.CheckFreqSeconds) * time.Second)
32         for ; true; <-ticker.C {
33                 // TODO: lock?
34                 m.monitorRountine()
35         }
36 }
37
38 // create or update: https://github.com/jinzhu/gorm/issues/1307
39 func (m *monitor) updateBootstrapNodes() error {
40         for _, node := range m.cfg.Nodes {
41                 ormNode := &orm.Node{
42                         PubKey: node.PubKey.String(),
43                         Alias:  node.Alias,
44                         Host:   node.Host,
45                         Port:   node.Port,
46                 }
47                 if err := m.db.Where(&orm.Node{PubKey: ormNode.PubKey}).
48                         Assign(&orm.Node{
49                                 Alias: node.Alias,
50                                 Host:  node.Host,
51                                 Port:  node.Port,
52                         }).FirstOrCreate(ormNode).Error; err != nil {
53                         return err
54                 }
55         }
56
57         return nil
58 }
59
60 // TODO:
61 func (m *monitor) discovery() {
62 }
63
64 func (m *monitor) monitorRountine() error {
65         // TODO: dail, get lantency & best_height
66         // TODO: decide check_height("best best_height" - "confirmations")
67         // TODO: get blockhash by check_height, get latency
68         // TODO: update lantency, active_time and status
69         return nil
70 }