mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-06 09:22:42 +08:00
rough draft
This commit is contained in:
@@ -15,7 +15,7 @@ func MetricHandlers(r *mux.Router) {
|
|||||||
r.HandleFunc("/api/metrics/{network}/{nodeid}", logic.SecurityCheck(true, http.HandlerFunc(getNodeMetrics))).Methods("GET")
|
r.HandleFunc("/api/metrics/{network}/{nodeid}", logic.SecurityCheck(true, http.HandlerFunc(getNodeMetrics))).Methods("GET")
|
||||||
r.HandleFunc("/api/metrics/{network}", logic.SecurityCheck(true, http.HandlerFunc(getNetworkNodesMetrics))).Methods("GET")
|
r.HandleFunc("/api/metrics/{network}", logic.SecurityCheck(true, http.HandlerFunc(getNetworkNodesMetrics))).Methods("GET")
|
||||||
r.HandleFunc("/api/metrics", logic.SecurityCheck(true, http.HandlerFunc(getAllMetrics))).Methods("GET")
|
r.HandleFunc("/api/metrics", logic.SecurityCheck(true, http.HandlerFunc(getAllMetrics))).Methods("GET")
|
||||||
r.HandleFunc("/api/metrics-ext/{network}", logic.SecurityCheck(true, http.HandlerFunc(getAllMetrics))).Methods("GET")
|
r.HandleFunc("/api/metrics-ext/{network}", logic.SecurityCheck(true, http.HandlerFunc(getNetworkExtMetrics))).Methods("GET")
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the metrics of a given node
|
// get the metrics of a given node
|
||||||
@@ -96,8 +96,8 @@ func getNetworkExtMetrics(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
networkMetrics := models.NetworkMetrics{}
|
networkMetrics := models.Metrics{}
|
||||||
networkMetrics.Nodes = make(models.MetricsMap)
|
networkMetrics.Connectivity = make(map[string]models.Metric)
|
||||||
|
|
||||||
for i := range ingresses {
|
for i := range ingresses {
|
||||||
id := ingresses[i].ID
|
id := ingresses[i].ID
|
||||||
@@ -115,14 +115,14 @@ func getNetworkExtMetrics(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
// if metrics for that client have been reported, append them
|
// if metrics for that client have been reported, append them
|
||||||
if len(ingressMetrics.Connectivity[clients[j].ClientID].NodeName) > 0 {
|
if len(ingressMetrics.Connectivity[clients[j].ClientID].NodeName) > 0 {
|
||||||
networkMetrics.Nodes[clients[j].ClientID] = *ingressMetrics
|
networkMetrics.Connectivity[clients[j].ClientID] = ingressMetrics.Connectivity[clients[j].ClientID]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.Log(1, r.Header.Get("user"), "fetched ext client metrics for network", network)
|
logger.Log(1, r.Header.Get("user"), "fetched ext client metrics for network", network)
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
json.NewEncoder(w).Encode(networkMetrics)
|
json.NewEncoder(w).Encode(networkMetrics.Connectivity)
|
||||||
}
|
}
|
||||||
|
|
||||||
// get Metrics of all nodes on server, lots of data
|
// get Metrics of all nodes on server, lots of data
|
||||||
|
@@ -2,7 +2,6 @@ package logic
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/gravitl/netmaker/database"
|
"github.com/gravitl/netmaker/database"
|
||||||
"github.com/gravitl/netmaker/models"
|
"github.com/gravitl/netmaker/models"
|
||||||
@@ -74,8 +73,7 @@ func CollectServerMetrics(serverID string, networkNodes []models.Node) *models.M
|
|||||||
for i := range clients {
|
for i := range clients {
|
||||||
for j := range peers {
|
for j := range peers {
|
||||||
if clients[i].PublicKey == peers[j].PublicKey.String() {
|
if clients[i].PublicKey == peers[j].PublicKey.String() {
|
||||||
if peers[j].LastHandshakeTime.Before(time.Now().Add(-(time.Minute * 3))) &&
|
if peers[j].ReceiveBytes > 0 &&
|
||||||
peers[j].ReceiveBytes > 0 &&
|
|
||||||
peers[j].TransmitBytes > 0 {
|
peers[j].TransmitBytes > 0 {
|
||||||
newServerMetrics.Connectivity[clients[i].ClientID] = models.Metric{
|
newServerMetrics.Connectivity[clients[i].ClientID] = models.Metric{
|
||||||
NodeName: clients[i].ClientID,
|
NodeName: clients[i].ClientID,
|
||||||
|
@@ -238,6 +238,12 @@ func updateNodeMetrics(currentNode *models.Node, newMetrics *models.Metrics) boo
|
|||||||
// associate ext clients with IDs
|
// associate ext clients with IDs
|
||||||
for i := range attachedClients {
|
for i := range attachedClients {
|
||||||
extMetric := newMetrics.Connectivity[attachedClients[i].PublicKey]
|
extMetric := newMetrics.Connectivity[attachedClients[i].PublicKey]
|
||||||
|
if len(extMetric.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
|
extMetric.NodeName = attachedClients[i].ClientID
|
||||||
extMetric.IsServer = "no"
|
extMetric.IsServer = "no"
|
||||||
delete(newMetrics.Connectivity, attachedClients[i].PublicKey)
|
delete(newMetrics.Connectivity, attachedClients[i].PublicKey)
|
||||||
|
Reference in New Issue
Block a user