)
type monitor struct {
- cfg *config.Config
- db *gorm.DB
- nodeCfg *vaporCfg.Config
- sw *p2p.Switch
- discvCh chan *dht.Node
- privKey chainkd.XPrv
- chain *mock.Chain
- txPool *mock.Mempool
- tryConnectStartCh chan struct{}
- tryConnectEndCh chan struct{}
+ cfg *config.Config
+ db *gorm.DB
+ nodeCfg *vaporCfg.Config
+ sw *p2p.Switch
+ discvCh chan *dht.Node
+ privKey chainkd.XPrv
+ chain *mock.Chain
+ txPool *mock.Mempool
}
// TODO: set myself as SPV?
}
return &monitor{
- cfg: cfg,
- db: db,
- nodeCfg: nodeCfg,
- discvCh: discvCh,
- privKey: privKey.(chainkd.XPrv),
- chain: chain,
- txPool: txPool,
- tryConnectStartCh: make(chan struct{}, 1),
- tryConnectEndCh: make(chan struct{}, 1),
+ cfg: cfg,
+ db: db,
+ nodeCfg: nodeCfg,
+ discvCh: discvCh,
+ privKey: privKey.(chainkd.XPrv),
+ chain: chain,
+ txPool: txPool,
}
}
bestHeight := uint64(0)
ticker := time.NewTicker(time.Duration(m.cfg.CheckFreqSeconds) * time.Second)
- // TODO: change back to start immediately
for range ticker.C {
+ log.Info("m.sw.GetPeers().List()", m.sw.GetPeers().List())
+
for _, peer := range m.sw.GetPeers().List() {
peer.Start()
protocolReactor.AddPeer(peer)
"github.com/jinzhu/gorm"
+ "github.com/vapor/crypto/ed25519/chainkd"
"github.com/vapor/netsync/peers"
"github.com/vapor/toolbar/precog/config"
"github.com/vapor/toolbar/precog/database/orm"
}
func (m *monitor) savePeerInfo(peerInfo *peers.PeerInfo) error {
+ xPub := &chainkd.XPub{}
+ if err := xPub.UnmarshalText([]peerInfo.ID()); err != nil {
+ return err
+ }
+
+ ormNode := &orm.Node{}
+ if err := m.db.Model(&orm.Node{}).Where(&orm.Node{PublicKey: xPub.PublicKey.String()}).
+ UpdateColumn(&orm.Node{
+ BestHeight: peerInfo.Height,
+ // LatestDailyUptimeMinutes uint64
+ }).First(ormNode).Error; err != nil {
+ return err
+ }
+
return nil
}