43 lines
1.0 KiB
Go
43 lines
1.0 KiB
Go
package runtime
|
|
|
|
import (
|
|
"net"
|
|
|
|
yanic "github.com/FreifunkBremen/yanic/runtime"
|
|
|
|
"github.com/FreifunkBremen/freifunkmanager/lib/log"
|
|
"github.com/FreifunkBremen/freifunkmanager/ssh"
|
|
)
|
|
|
|
type Nodes struct {
|
|
node map[string]struct{}
|
|
ssh *ssh.Manager
|
|
iface string
|
|
}
|
|
|
|
func NewNodes(iface string, mgmt *ssh.Manager) *Nodes {
|
|
return &Nodes{
|
|
node: make(map[string]struct{}),
|
|
ssh: mgmt,
|
|
iface: iface,
|
|
}
|
|
}
|
|
|
|
func (nodes *Nodes) AddNode(node *yanic.Node) {
|
|
logger := log.Log.WithField("method", "AddNode").WithField("node_id", node.Nodeinfo.NodeID)
|
|
// session := nodes.ssh.ConnectTo(node.Address)
|
|
if _, ok := nodes.node[node.Address.String()]; ok {
|
|
logger.Debugf("know already these node")
|
|
return
|
|
}
|
|
address := net.TCPAddr{IP: node.Address, Port: 22, Zone: nodes.iface}
|
|
result, err := nodes.ssh.RunOn(address, "uptime")
|
|
if err != nil {
|
|
logger.Error("init ssh command not run")
|
|
return
|
|
}
|
|
uptime := ssh.SSHResultToString(result)
|
|
logger.Infof("new node with uptime: %s", uptime)
|
|
nodes.node[node.Address.String()] = struct{}{}
|
|
}
|