From 84e58d0d5a41d8ba343e90b23933a231449d314f Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Thu, 8 Sep 2022 06:19:10 -0400 Subject: [PATCH] send connected status on checkin --- models/node.go | 6 ++++++ mq/handlers.go | 10 ++++++++-- netclient/functions/connection.go | 9 --------- netclient/functions/mqpublish.go | 10 +++++++++- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/models/node.go b/models/node.go index 59f252c6..6c8ea9c1 100644 --- a/models/node.go +++ b/models/node.go @@ -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"` diff --git a/mq/handlers.go b/mq/handlers.go index 22bddfce..e00646b7 100644 --- a/mq/handlers.go +++ b/mq/handlers.go @@ -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 diff --git a/netclient/functions/connection.go b/netclient/functions/connection.go index b727b0ef..eb6753d2 100644 --- a/netclient/functions/connection.go +++ b/netclient/functions/connection.go @@ -3,7 +3,6 @@ package functions import ( "fmt" - "github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/netclient/config" "github.com/gravitl/netmaker/netclient/ncutils" "github.com/gravitl/netmaker/netclient/wireguard" @@ -24,10 +23,6 @@ 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) } @@ -46,9 +41,5 @@ 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) } diff --git a/netclient/functions/mqpublish.go b/netclient/functions/mqpublish.go index df2706de..3eddfa57 100644 --- a/netclient/functions/mqpublish.go +++ b/netclient/functions/mqpublish.go @@ -123,7 +123,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)