mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-06 13:14:24 +08:00
Merge pull request #1536 from gravitl/feature_v0.15.2_connect_status
send connected status on checkin
This commit is contained in:
commit
5d27db6e22
4 changed files with 34 additions and 15 deletions
|
@ -39,6 +39,12 @@ const (
|
|||
var seededRand *rand.Rand = rand.New(
|
||||
rand.NewSource(time.Now().UnixNano()))
|
||||
|
||||
// NodeCheckin - struct for node checkins with server
|
||||
type NodeCheckin struct {
|
||||
Version string
|
||||
Connected string
|
||||
}
|
||||
|
||||
// Node - struct for node model
|
||||
type Node struct {
|
||||
ID string `json:"id,omitempty" bson:"id,omitempty" yaml:"id,omitempty" validate:"required,min=5,id_unique"`
|
||||
|
|
|
@ -36,13 +36,19 @@ func Ping(client mqtt.Client, msg mqtt.Message) {
|
|||
logger.Log(0, record)
|
||||
return
|
||||
}
|
||||
version, decryptErr := decryptMsg(&node, msg.Payload())
|
||||
decrypted, decryptErr := decryptMsg(&node, msg.Payload())
|
||||
if decryptErr != nil {
|
||||
logger.Log(0, "error decrypting when updating node ", node.ID, decryptErr.Error())
|
||||
return
|
||||
}
|
||||
var checkin models.NodeCheckin
|
||||
if err := json.Unmarshal(decrypted, &checkin); err != nil {
|
||||
logger.Log(1, "error unmarshaling payload ", err.Error())
|
||||
return
|
||||
}
|
||||
node.SetLastCheckIn()
|
||||
node.Version = string(version)
|
||||
node.Version = checkin.Version
|
||||
node.Connected = checkin.Connected
|
||||
if err := logic.UpdateNode(&node, &node); err != nil {
|
||||
logger.Log(0, "error updating node", node.Name, node.ID, " on checkin", err.Error())
|
||||
return
|
||||
|
|
|
@ -3,8 +3,8 @@ package functions
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/gravitl/netmaker/logger"
|
||||
"github.com/gravitl/netmaker/netclient/config"
|
||||
"github.com/gravitl/netmaker/netclient/daemon"
|
||||
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||
"github.com/gravitl/netmaker/netclient/wireguard"
|
||||
)
|
||||
|
@ -24,11 +24,9 @@ func Connect(network string) error {
|
|||
if err = wireguard.ApplyConf(&cfg.Node, cfg.Node.Interface, filePath); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := PublishNodeUpdate(cfg); err != nil {
|
||||
logger.Log(0, "network:", cfg.Node.Network, "could not publish connection change, it will likely get reverted")
|
||||
}
|
||||
|
||||
return config.ModNodeConfig(&cfg.Node)
|
||||
err = config.ModNodeConfig(&cfg.Node)
|
||||
daemon.Restart()
|
||||
return err
|
||||
}
|
||||
|
||||
// Disconnect - attempts to disconnect a node on given network
|
||||
|
@ -46,9 +44,7 @@ func Disconnect(network string) error {
|
|||
if err = wireguard.ApplyConf(&cfg.Node, cfg.Node.Interface, filePath); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := PublishNodeUpdate(cfg); err != nil {
|
||||
logger.Log(0, "network:", cfg.Node.Network, "could not publish connection change, it will likely get reverted")
|
||||
}
|
||||
|
||||
return config.ModNodeConfig(&cfg.Node)
|
||||
err = config.ModNodeConfig(&cfg.Node)
|
||||
daemon.Restart()
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -26,13 +26,16 @@ import (
|
|||
func Checkin(ctx context.Context, wg *sync.WaitGroup) {
|
||||
logger.Log(2, "starting checkin goroutine")
|
||||
defer wg.Done()
|
||||
checkin()
|
||||
ticker := time.NewTicker(time.Second * 60)
|
||||
defer ticker.Stop()
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
logger.Log(0, "checkin routine closed")
|
||||
return
|
||||
//delay should be configuraable -> use cfg.Node.NetworkSettings.DefaultCheckInInterval ??
|
||||
case <-time.After(time.Second * 60):
|
||||
case <-ticker.C:
|
||||
checkin()
|
||||
}
|
||||
}
|
||||
|
@ -123,7 +126,15 @@ func PublishNodeUpdate(nodeCfg *config.ClientConfig) error {
|
|||
|
||||
// Hello -- ping the broker to let server know node it's alive and well
|
||||
func Hello(nodeCfg *config.ClientConfig) {
|
||||
if err := publish(nodeCfg, fmt.Sprintf("ping/%s", nodeCfg.Node.ID), []byte(ncutils.Version), 0); err != nil {
|
||||
var checkin models.NodeCheckin
|
||||
checkin.Version = ncutils.Version
|
||||
checkin.Connected = nodeCfg.Node.Connected
|
||||
data, err := json.Marshal(checkin)
|
||||
if err != nil {
|
||||
logger.Log(0, "unable to marshal checkin data", err.Error())
|
||||
return
|
||||
}
|
||||
if err := publish(nodeCfg, fmt.Sprintf("ping/%s", nodeCfg.Node.ID), data, 0); err != nil {
|
||||
logger.Log(0, fmt.Sprintf("Network: %s error publishing ping, %v", nodeCfg.Node.Network, err))
|
||||
logger.Log(0, "running pull on "+nodeCfg.Node.Network+" to reconnect")
|
||||
_, err := Pull(nodeCfg.Node.Network, true)
|
||||
|
|
Loading…
Add table
Reference in a new issue