freifunkmanager/runtime/nodes.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{}{}
}