fix(NET-1009): fix client connectivity metrics data (#2858)

This commit is contained in:
Aceix 2024-03-20 08:11:11 +00:00 committed by GitHub
parent 76a6ee7434
commit 4871a0dd1c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 13 additions and 21 deletions

View file

@ -2,9 +2,11 @@ package controllers
import (
"encoding/json"
proLogic "github.com/gravitl/netmaker/pro/logic"
"net/http"
proLogic "github.com/gravitl/netmaker/pro/logic"
"golang.org/x/exp/slog"
"github.com/gorilla/mux"
"github.com/gravitl/netmaker/database"
"github.com/gravitl/netmaker/logger"
@ -122,12 +124,13 @@ func getNetworkExtMetrics(w http.ResponseWriter, r *http.Request) {
continue
}
// if metrics for that client have been reported, append them
if len(ingressMetrics.Connectivity[clients[j].ClientID].NodeName) > 0 {
if _, ok := ingressMetrics.Connectivity[clients[j].ClientID]; ok {
networkMetrics.Connectivity[clients[j].ClientID] = ingressMetrics.Connectivity[clients[j].ClientID]
}
}
}
slog.Debug("sending collected client metrics", "metrics", networkMetrics.Connectivity)
logger.Log(1, r.Header.Get("user"), "fetched ext client metrics for network", network)
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(networkMetrics.Connectivity)

View file

@ -104,7 +104,6 @@ func MQUpdateMetrics(client mqtt.Client, msg mqtt.Message) {
}
func updateNodeMetrics(currentNode *models.Node, newMetrics *models.Metrics) {
oldMetrics, err := logic.GetMetrics(currentNode.ID.String())
if err != nil {
slog.Error("error finding old metrics for node", "id", currentNode.ID, "error", err)
@ -121,21 +120,13 @@ func updateNodeMetrics(currentNode *models.Node, newMetrics *models.Metrics) {
if newMetrics.Connectivity == nil {
newMetrics.Connectivity = make(map[string]models.Metric)
}
if len(attachedClients) > 0 {
// associate ext clients with IDs
for i := range attachedClients {
extMetric := newMetrics.Connectivity[attachedClients[i].PublicKey]
if len(extMetric.NodeName) == 0 &&
len(newMetrics.Connectivity[attachedClients[i].ClientID].NodeName) > 0 { // cover server clients
extMetric = newMetrics.Connectivity[attachedClients[i].ClientID]
if extMetric.TotalReceived > 0 && extMetric.TotalSent > 0 {
extMetric.Connected = true
}
}
extMetric.NodeName = attachedClients[i].ClientID
delete(newMetrics.Connectivity, attachedClients[i].PublicKey)
newMetrics.Connectivity[attachedClients[i].ClientID] = extMetric
}
for i := range attachedClients {
slog.Debug("[metrics] processing attached client", "client", attachedClients[i].ClientID, "public key", attachedClients[i].PublicKey)
clientMetric := newMetrics.Connectivity[attachedClients[i].PublicKey]
clientMetric.NodeName = attachedClients[i].ClientID
newMetrics.Connectivity[attachedClients[i].ClientID] = clientMetric
delete(newMetrics.Connectivity, attachedClients[i].PublicKey)
slog.Debug("[metrics] attached client metric", "metric", clientMetric)
}
// run through metrics for each peer
@ -168,7 +159,5 @@ func updateNodeMetrics(currentNode *models.Node, newMetrics *models.Metrics) {
}
for k := range oldMetrics.Connectivity { // cleanup any left over data, self healing
delete(newMetrics.Connectivity, k)
}
slog.Debug("[metrics] node metrics data", "node ID", currentNode.ID, "metrics", newMetrics)
}