// TODO: set myself as SPV?
func NewMonitor(cfg *config.Config, db *gorm.DB) *monitor {
//TODO: for test
- cfg.CheckFreqSeconds = 10
+ cfg.CheckFreqSeconds = 15
dbPath, err := makePath()
if err != nil {
// TODO:
// 现象是,时间区间过小时, 会一直有 dial ,但是不能 send业务层 msg
-// 还不确定是不是死锁,时间调大一点比如10s 就可以正确运行
+// 还不确定是不是死锁,时间调大一点比如15s 就可以正确运行
// 想法,自己再另外加锁,或者找到锁住的真正原因
func (m *monitor) checkStatusRoutine() {
peers := peers.NewPeerSet(m.sw)
package monitor
import (
+ "database/sql"
"fmt"
"github.com/jinzhu/gorm"
"github.com/vapor/crypto/ed25519/chainkd"
"github.com/vapor/netsync/peers"
+ "github.com/vapor/toolbar/precog/common"
"github.com/vapor/toolbar/precog/config"
"github.com/vapor/toolbar/precog/database/orm"
)
return err
}
+ ormNodeLiveness := &orm.NodeLiveness{
+ NodeID: ormNode.ID,
+ BestHeight: ormNode.BestHeight,
+ AvgLantencyMS: sql.NullInt64{Int64: 1, Valid: true},
+ // PingTimes uint64
+ // PongTimes uint64
+ }
+ if err := m.db.Model(&orm.NodeLiveness{}).Where("node_id = ?, status is NOT ?", ormNode.ID, common.NodeOfflineStatus).
+ UpdateColumn(&orm.NodeLiveness{
+ BestHeight: ormNodeLiveness.BestHeight,
+ AvgLantencyMS: ormNodeLiveness.AvgLantencyMS,
+ }).FirstOrCreate(ormNodeLiveness).Error; err != nil {
+ return err
+ }
+
return nil
}