freifunkmanager/runtime/yanic.go

99 lines
2.2 KiB
Go
Raw Normal View History

2018-06-30 01:45:51 +02:00
package runtime
import (
"time"
2018-07-26 14:14:23 +02:00
"github.com/jinzhu/gorm"
log "github.com/sirupsen/logrus"
2018-06-30 01:45:51 +02:00
databaseYanic "github.com/FreifunkBremen/yanic/database"
"github.com/FreifunkBremen/yanic/lib/jsontime"
2018-06-30 01:45:51 +02:00
runtimeYanic "github.com/FreifunkBremen/yanic/runtime"
"github.com/FreifunkBremen/freifunkmanager/ssh"
2018-06-30 01:45:51 +02:00
)
type YanicDB struct {
databaseYanic.Connection
2018-07-26 14:14:23 +02:00
db *gorm.DB
ssh *ssh.Manager
2018-08-10 13:46:18 +02:00
sendNode func(*Node)
2018-07-26 14:14:23 +02:00
sendStats func(*runtimeYanic.GlobalStats)
prefix string
2018-06-30 01:45:51 +02:00
}
2018-08-10 13:46:18 +02:00
func NewYanicDB(db *gorm.DB, ssh *ssh.Manager, sendNode func(*Node), sendStats func(*runtimeYanic.GlobalStats), prefix string) *YanicDB {
2018-06-30 01:45:51 +02:00
return &YanicDB{
2018-07-26 14:14:23 +02:00
db: db,
ssh: ssh,
sendNode: sendNode,
sendStats: sendStats,
prefix: prefix,
2018-06-30 01:45:51 +02:00
}
}
func (conn *YanicDB) InsertNode(n *runtimeYanic.Node) {
2018-08-10 13:46:18 +02:00
nodeid := ""
if nodeinfo := n.Nodeinfo; nodeinfo != nil {
nodeid = nodeinfo.NodeID
} else {
return
}
2018-08-10 13:46:18 +02:00
logger := log.WithField("method", "LearnNode").WithField("node_id", nodeid)
2018-07-26 14:14:23 +02:00
lNode := Node{
2018-08-10 13:46:18 +02:00
NodeID: nodeid,
}
2018-07-26 14:14:23 +02:00
if conn.db.First(&lNode).Error == nil {
2018-08-10 13:46:18 +02:00
lNode.Update(n, conn.prefix)
2018-07-26 14:14:23 +02:00
conn.db.Model(&lNode).Update(map[string]interface{}{
"Lastseen": jsontime.Now(),
//"StatsWireless": node.StatsWireless,
//"StatsClients": node.StatsClients,
2018-08-10 13:46:18 +02:00
"Address": lNode.Address,
2018-07-26 14:14:23 +02:00
})
if lNode.Blacklist {
logger.Debug("on blacklist")
return
}
2018-08-10 13:46:18 +02:00
conn.sendNode(&lNode)
if !lNode.CheckRespondd() {
lNode.SSHUpdate(conn.ssh)
2018-07-27 13:40:04 +02:00
logger.Debug("yanic trigger sshupdate again")
} else {
logger.Debug("yanic update")
2018-07-26 14:14:23 +02:00
}
return
}
2018-08-10 13:46:18 +02:00
node := NewNode(n, conn.prefix)
if node == nil {
return
}
2018-07-26 14:14:23 +02:00
node.Lastseen = jsontime.Now()
_, err := conn.ssh.RunOn(node.GetAddress(), "uptime")
if err != nil {
2018-08-10 13:46:18 +02:00
logger.Debugf("set on blacklist: %s", err.Error())
2018-07-26 14:14:23 +02:00
node.Blacklist = true
}
2018-07-26 14:14:23 +02:00
conn.db.Create(&node)
2018-08-10 13:46:18 +02:00
if !node.Blacklist {
conn.sendNode(node)
}
2018-06-30 01:45:51 +02:00
}
func (conn *YanicDB) InsertLink(link *runtimeYanic.Link, time time.Time) {
}
func (conn *YanicDB) InsertGlobals(stats *runtimeYanic.GlobalStats, time time.Time, site string, domain string) {
if runtimeYanic.GLOBAL_SITE == site && runtimeYanic.GLOBAL_DOMAIN == domain {
2018-07-26 14:14:23 +02:00
conn.sendStats(stats)
2018-06-30 01:45:51 +02:00
}
2018-06-30 01:45:51 +02:00
}
func (conn *YanicDB) PruneNodes(deleteAfter time.Duration) {
}
func (conn *YanicDB) Close() {
}