From e164e6446f8f1d598b1a4f044dfcd78342740f0a Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Fri, 21 Jan 2022 17:22:56 -0500 Subject: [PATCH] publish node update when UI updates a node --- controllers/node.go | 4 ++++ mq/mq.go | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/controllers/node.go b/controllers/node.go index 174d0156..f27fadb4 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -11,6 +11,7 @@ import ( "github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/logic" "github.com/gravitl/netmaker/models" + "github.com/gravitl/netmaker/mq" "github.com/gravitl/netmaker/servercfg" "golang.org/x/crypto/bcrypt" ) @@ -552,6 +553,9 @@ func updateNode(w http.ResponseWriter, r *http.Request) { logger.Log(1, r.Header.Get("user"), "updated node", node.MacAddress, "on network", node.Network) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(newNode) + if err := mq.NodeUpdate(&newNode); err != nil { + logger.Log(1, "error publishing node update"+err.Error()) + } } func deleteNode(w http.ResponseWriter, r *http.Request) { diff --git a/mq/mq.go b/mq/mq.go index 6a8f67f9..45c342cb 100644 --- a/mq/mq.go +++ b/mq/mq.go @@ -117,6 +117,28 @@ func GetID(topic string) (string, error) { return parts[count-1], nil } +// UpdateNode -- publishes a node update +func NodeUpdate(node *models.Node) error { + opts := mqtt.NewClientOptions() + broker := servercfg.GetMessageQueueEndpoint() + logger.Log(0, "broker: "+broker) + opts.AddBroker(broker) + client := mqtt.NewClient(opts) + if token := client.Connect(); token.Wait() && token.Error() != nil { + return token.Error() + } + data, err := json.Marshal(node) + if err != nil { + logger.Log(2, "error marshalling node update "+err.Error()) + return err + } + if token := client.Publish("/update/"+node.ID, 0, false, data); token.Wait() && token.Error() != nil { + logger.Log(2, "error publishing peer update to peer "+node.ID+" "+token.Error().Error()) + return err + } + return nil +} + // NewPeer -- publishes a peer update to all the peers of a newNode func NewPeer(node models.Node) error { opts := mqtt.NewClientOptions()