Browse Source

publish node update when UI updates a node

Matthew R Kasun 3 years ago
parent
commit
e164e6446f
2 changed files with 26 additions and 0 deletions
  1. 4 0
      controllers/node.go
  2. 22 0
      mq/mq.go

+ 4 - 0
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) {

+ 22 - 0
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()