Browse Source

add servers to telemetry data

Abhishek Kondur 2 years ago
parent
commit
8cbe796748
5 changed files with 49 additions and 1 deletions
  1. 38 0
      logic/server.go
  2. 2 0
      logic/serverconf.go
  3. 2 0
      logic/telemetry.go
  4. 3 1
      main.go
  5. 4 0
      models/structs.go

+ 38 - 0
logic/server.go

@@ -1,6 +1,7 @@
 package logic
 
 import (
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net"
@@ -8,6 +9,7 @@ import (
 	"runtime"
 	"strings"
 
+	"github.com/gravitl/netmaker/database"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/netclient/ncutils"
@@ -285,3 +287,39 @@ func serverPush(serverNode *models.Node) error {
 	serverNode.SetLastCheckIn()
 	return UpdateNode(serverNode, serverNode)
 }
+
+// AddServerIDIfNotPresent - add's current server ID to DB if not present
+func AddServerIDIfNotPresent() error {
+	currentNodeID := servercfg.GetNodeID()
+	currentServerIDs := models.ServerIDs{}
+
+	record, err := database.FetchRecord(database.SERVERCONF_TABLE_NAME, server_id_key)
+	if err != nil && !database.IsEmptyRecord(err) {
+		return err
+	} else if err == nil {
+		if err = json.Unmarshal([]byte(record), &currentServerIDs); err != nil {
+			return err
+		}
+	}
+
+	if !StringSliceContains(currentServerIDs.ServerIDs, currentNodeID) {
+		currentServerIDs.ServerIDs = append(currentServerIDs.ServerIDs, currentNodeID)
+		data, err := json.Marshal(&currentServerIDs)
+		if err != nil {
+			return err
+		}
+		return database.Insert(server_id_key, string(data), database.SERVERCONF_TABLE_NAME)
+	}
+
+	return nil
+}
+
+func GetServerCount() int {
+	if record, err := database.FetchRecord(database.SERVERCONF_TABLE_NAME, server_id_key); err == nil {
+		currentServerIDs := models.ServerIDs{}
+		if err = json.Unmarshal([]byte(record), &currentServerIDs); err == nil {
+			return len(currentServerIDs.ServerIDs)
+		}
+	}
+	return 1
+}

+ 2 - 0
logic/serverconf.go

@@ -6,6 +6,8 @@ import (
 	"github.com/gravitl/netmaker/database"
 )
 
+const server_id_key = "nm-server-id"
+
 type serverData struct {
 	PrivateKey string `json:"privatekey,omitempty" bson:"privatekey,omitempty"`
 }

+ 2 - 0
logic/telemetry.go

@@ -65,6 +65,7 @@ func fetchTelemetryData() (telemetryData, error) {
 	data.Users = getDBLength(database.USERS_TABLE_NAME)
 	data.Networks = getDBLength(database.NETWORKS_TABLE_NAME)
 	data.Version = servercfg.GetVersion()
+	data.Servers = GetServerCount()
 	nodes, err := GetAllNodes()
 	if err == nil {
 		data.Nodes = len(nodes)
@@ -140,6 +141,7 @@ type telemetryData struct {
 	Users      int
 	Count      clientCount
 	Networks   int
+	Servers    int
 	Version    string
 }
 

+ 3 - 1
main.go

@@ -74,7 +74,9 @@ func initialize() { // Client Mode Prereq Check
 	}
 	logger.Log(0, "database successfully connected")
 	logic.SetJWTSecret()
-
+	if err = logic.AddServerIDIfNotPresent(); err != nil {
+		logger.Log(1, "failed to save server ID")
+	}
 	err = logic.TimerCheckpoint()
 	if err != nil {
 		logger.Log(1, "Timer error occurred: ", err.Error())

+ 4 - 0
models/structs.go

@@ -224,3 +224,7 @@ func (user *User) NameInCharSet() bool {
 	}
 	return true
 }
+
+type ServerIDs struct {
+	ServerIDs []string `json:"server_ids"`
+}