send connected status on checkin

This commit is contained in:
Matthew R. Kasun
2022-09-08 06:19:10 -04:00
parent 0ade279ca7
commit 84e58d0d5a
4 changed files with 23 additions and 12 deletions

View File

@@ -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"`

View File

@@ -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

View File

@@ -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)
} }

View File

@@ -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)