Browse Source

Merge pull request #705 from gravitl/feature_v0.10.0_messge_queue_ids

add ids to mqtt
dcarns 3 years ago
parent
commit
4f81e0cebc
3 changed files with 36 additions and 0 deletions
  1. 3 0
      mq/mq.go
  2. 2 0
      netclient/functions/daemon.go
  3. 31 0
      netclient/ncutils/netclientutils.go

+ 3 - 0
mq/mq.go

@@ -14,6 +14,7 @@ import (
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logic"
 	"github.com/gravitl/netmaker/models"
+	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/servercfg"
 	"github.com/gravitl/netmaker/serverctl"
 )
@@ -192,6 +193,8 @@ func SetupMQTT() mqtt.Client {
 	opts := mqtt.NewClientOptions()
 	broker := servercfg.GetMessageQueueEndpoint()
 	opts.AddBroker(broker)
+	id := ncutils.MakeRandomString(23)
+	opts.ClientID = id
 	client := mqtt.NewClient(opts)
 	tperiod := time.Now().Add(10 * time.Second)
 	for {

+ 2 - 0
netclient/functions/daemon.go

@@ -93,6 +93,8 @@ func SetupMQTT(cfg *config.ClientConfig) mqtt.Client {
 	opts := mqtt.NewClientOptions()
 	server := getServerAddress(cfg)
 	opts.AddBroker(server + ":1883")
+	id := ncutils.MakeRandomString(23)
+	opts.ClientID = id
 	opts.SetDefaultPublishHandler(All)
 	client := mqtt.NewClient(opts)
 	tperiod := time.Now().Add(12 * time.Second)

+ 31 - 0
netclient/ncutils/netclientutils.go

@@ -32,6 +32,9 @@ import (
 // Version - version of the netclient
 var Version = "dev"
 
+// src - for random strings
+var src = rand.NewSource(time.Now().UnixNano())
+
 // MAX_NAME_LENGTH - maximum node name length
 const MAX_NAME_LENGTH = 62
 
@@ -62,6 +65,14 @@ const DEFAULT_GC_PERCENT = 10
 // KEY_SIZE = ideal length for keys
 const KEY_SIZE = 2048
 
+// constants for random strings
+const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
+const (
+	letterIdxBits = 6                    // 6 bits to represent a letter index
+	letterIdxMask = 1<<letterIdxBits - 1 // All 1-bits, as many as letterIdxBits
+	letterIdxMax  = 63 / letterIdxBits   // # of letter indices fitting in 63 bits
+)
+
 // Log - logs a message
 func Log(message string) {
 	log.SetFlags(log.Flags() &^ (log.Llongfile | log.Lshortfile))
@@ -618,3 +629,23 @@ func BoxDecrypt(encrypted []byte, senderPublicKey *[32]byte, recipientPrivateKey
 	}
 	return decrypted, nil
 }
+
+// MakeRandomString - generates a random string of len n
+func MakeRandomString(n int) string {
+	sb := strings.Builder{}
+	sb.Grow(n)
+	// A src.Int63() generates 63 random bits, enough for letterIdxMax characters!
+	for i, cache, remain := n-1, src.Int63(), letterIdxMax; i >= 0; {
+		if remain == 0 {
+			cache, remain = src.Int63(), letterIdxMax
+		}
+		if idx := int(cache & letterIdxMask); idx < len(letterBytes) {
+			sb.WriteByte(letterBytes[idx])
+			i--
+		}
+		cache >>= letterIdxBits
+		remain--
+	}
+
+	return sb.String()
+}