Browse Source

Merge pull request #1541 from gravitl/feature_servers_telemetry

add servers to telemetry data
Alex Feiszli 2 years ago
parent
commit
728555502f
5 changed files with 53 additions and 1 deletions
  1. 39 0
      logic/server.go
  2. 3 0
      logic/serverconf.go
  3. 3 0
      logic/telemetry.go
  4. 3 1
      main.go
  5. 5 0
      models/structs.go

+ 39 - 0
logic/server.go

@@ -1,6 +1,7 @@
 package logic
 package logic
 
 
 import (
 import (
+	"encoding/json"
 	"errors"
 	"errors"
 	"fmt"
 	"fmt"
 	"net"
 	"net"
@@ -8,6 +9,7 @@ import (
 	"runtime"
 	"runtime"
 	"strings"
 	"strings"
 
 
+	"github.com/gravitl/netmaker/database"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/netclient/ncutils"
@@ -285,3 +287,40 @@ func serverPush(serverNode *models.Node) error {
 	serverNode.SetLastCheckIn()
 	serverNode.SetLastCheckIn()
 	return UpdateNode(serverNode, serverNode)
 	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
+}
+
+// GetServerCount - fetches server count from DB
+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
+}

+ 3 - 0
logic/serverconf.go

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

+ 3 - 0
logic/telemetry.go

@@ -43,6 +43,7 @@ func sendTelemetry() error {
 		Event:      "daily checkin",
 		Event:      "daily checkin",
 		Properties: posthog.NewProperties().
 		Properties: posthog.NewProperties().
 			Set("nodes", d.Nodes).
 			Set("nodes", d.Nodes).
+			Set("servers", d.Servers).
 			Set("non-server nodes", d.Count.NonServer).
 			Set("non-server nodes", d.Count.NonServer).
 			Set("extclients", d.ExtClients).
 			Set("extclients", d.ExtClients).
 			Set("users", d.Users).
 			Set("users", d.Users).
@@ -65,6 +66,7 @@ func fetchTelemetryData() (telemetryData, error) {
 	data.Users = getDBLength(database.USERS_TABLE_NAME)
 	data.Users = getDBLength(database.USERS_TABLE_NAME)
 	data.Networks = getDBLength(database.NETWORKS_TABLE_NAME)
 	data.Networks = getDBLength(database.NETWORKS_TABLE_NAME)
 	data.Version = servercfg.GetVersion()
 	data.Version = servercfg.GetVersion()
+	data.Servers = GetServerCount()
 	nodes, err := GetAllNodes()
 	nodes, err := GetAllNodes()
 	if err == nil {
 	if err == nil {
 		data.Nodes = len(nodes)
 		data.Nodes = len(nodes)
@@ -140,6 +142,7 @@ type telemetryData struct {
 	Users      int
 	Users      int
 	Count      clientCount
 	Count      clientCount
 	Networks   int
 	Networks   int
+	Servers    int
 	Version    string
 	Version    string
 }
 }
 
 

+ 3 - 1
main.go

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

+ 5 - 0
models/structs.go

@@ -224,3 +224,8 @@ func (user *User) NameInCharSet() bool {
 	}
 	}
 	return true
 	return true
 }
 }
+
+// ServerIDs - struct to hold server ids.
+type ServerIDs struct {
+	ServerIDs []string `json:"server_ids"`
+}