Browse Source

send connected status on checkin

Matthew R. Kasun 2 years ago
parent
commit
84e58d0d5a
4 changed files with 23 additions and 12 deletions
  1. 6 0
      models/node.go
  2. 8 2
      mq/handlers.go
  3. 0 9
      netclient/functions/connection.go
  4. 9 1
      netclient/functions/mqpublish.go

+ 6 - 0
models/node.go

@@ -39,6 +39,12 @@ const (
 var seededRand *rand.Rand = rand.New(
 var seededRand *rand.Rand = rand.New(
 	rand.NewSource(time.Now().UnixNano()))
 	rand.NewSource(time.Now().UnixNano()))
 
 
+// NodeCheckin - struct for node checkins with server
+type NodeCheckin struct {
+	Version   string
+	Connected string
+}
+
 // Node - struct for node model
 // Node - struct for node model
 type Node struct {
 type Node struct {
 	ID                      string               `json:"id,omitempty" bson:"id,omitempty" yaml:"id,omitempty" validate:"required,min=5,id_unique"`
 	ID                      string               `json:"id,omitempty" bson:"id,omitempty" yaml:"id,omitempty" validate:"required,min=5,id_unique"`

+ 8 - 2
mq/handlers.go

@@ -36,13 +36,19 @@ func Ping(client mqtt.Client, msg mqtt.Message) {
 			logger.Log(0, record)
 			logger.Log(0, record)
 			return
 			return
 		}
 		}
-		version, decryptErr := decryptMsg(&node, msg.Payload())
+		decrypted, decryptErr := decryptMsg(&node, msg.Payload())
 		if decryptErr != nil {
 		if decryptErr != nil {
 			logger.Log(0, "error decrypting when updating node ", node.ID, decryptErr.Error())
 			logger.Log(0, "error decrypting when updating node ", node.ID, decryptErr.Error())
 			return
 			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.SetLastCheckIn()
-		node.Version = string(version)
+		node.Version = checkin.Version
+		node.Connected = checkin.Connected
 		if err := logic.UpdateNode(&node, &node); err != nil {
 		if err := logic.UpdateNode(&node, &node); err != nil {
 			logger.Log(0, "error updating node", node.Name, node.ID, " on checkin", err.Error())
 			logger.Log(0, "error updating node", node.Name, node.ID, " on checkin", err.Error())
 			return
 			return

+ 0 - 9
netclient/functions/connection.go

@@ -3,7 +3,6 @@ package functions
 import (
 import (
 	"fmt"
 	"fmt"
 
 
-	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/netclient/config"
 	"github.com/gravitl/netmaker/netclient/config"
 	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/netclient/wireguard"
 	"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 {
 	if err = wireguard.ApplyConf(&cfg.Node, cfg.Node.Interface, filePath); err != nil {
 		return err
 		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)
 	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 {
 	if err = wireguard.ApplyConf(&cfg.Node, cfg.Node.Interface, filePath); err != nil {
 		return err
 		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)
 	return config.ModNodeConfig(&cfg.Node)
 }
 }

+ 9 - 1
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
 // Hello -- ping the broker to let server know node it's alive and well
 func Hello(nodeCfg *config.ClientConfig) {
 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, fmt.Sprintf("Network: %s error publishing ping, %v", nodeCfg.Node.Network, err))
 		logger.Log(0, "running pull on "+nodeCfg.Node.Network+" to reconnect")
 		logger.Log(0, "running pull on "+nodeCfg.Node.Network+" to reconnect")
 		_, err := Pull(nodeCfg.Node.Network, true)
 		_, err := Pull(nodeCfg.Node.Network, true)