OSDN Git Service

clean up
[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         m.updateBootstrapNodes()
27         go m.discovery()
28         ticker := time.NewTicker(time.Duration(m.cfg.CheckFreqSeconds) * time.Second)
29         for ; true; <-ticker.C {
30                 // TODO: lock?
31                 m.monitorRountine()
32         }
33 }
34
35 // create or update: https://github.com/jinzhu/gorm/issues/1307
36 func (m *monitor) updateBootstrapNodes() {
37         for _, node := range m.cfg.Nodes {
38                 ormNode := &orm.Node{
39                         PubKey: node.PubKey.String(),
40                         Alias:  node.Alias,
41                         Host:   node.Host,
42                         Port:   node.Port,
43                 }
44
45                 if err := m.db.Where(&orm.Node{PubKey: ormNode.PubKey}).
46                         Assign(&orm.Node{
47                                 Alias: node.Alias,
48                                 Host:  node.Host,
49                                 Port:  node.Port,
50                         }).FirstOrCreate(ormNode).Error; err != nil {
51                         log.Error(err)
52                         continue
53                 }
54         }
55 }
56
57 // TODO:
58 func (m *monitor) discovery() {
59 }
60
61 func (m *monitor) monitorRountine() error {
62         // TODO: dail, get lantency & best_height
63         // TODO: decide check_height("best best_height" - "confirmations")
64         // TODO: get blockhash by check_height, get latency
65         // TODO: update lantency, active_time and status
66         return nil
67 }