added controller for ext client metrics and logic for ingress server

This commit is contained in:
0xdcarns
2022-10-11 14:13:17 -04:00
parent e0964fccfe
commit b7a24b98ba
4 changed files with 113 additions and 3 deletions

View File

@@ -2,9 +2,11 @@ package logic
import (
"encoding/json"
"time"
"github.com/gravitl/netmaker/database"
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/netclient/wireguard"
)
// GetMetrics - gets the metrics
@@ -42,9 +44,11 @@ func DeleteMetrics(nodeid string) error {
func CollectServerMetrics(serverID string, networkNodes []models.Node) *models.Metrics {
newServerMetrics := models.Metrics{}
newServerMetrics.Connectivity = make(map[string]models.Metric)
var serverNode models.Node
for i := range networkNodes {
currNodeID := networkNodes[i].ID
if currNodeID == serverID {
serverNode = networkNodes[i]
continue
}
if currMetrics, err := GetMetrics(currNodeID); err == nil {
@@ -61,5 +65,43 @@ func CollectServerMetrics(serverID string, networkNodes []models.Node) *models.M
}
}
}
if serverNode.IsIngressGateway == "yes" {
clients, err := GetExtClientsByID(serverID, serverNode.Network)
if err == nil {
peers, err := wireguard.GetDevicePeers(serverNode.Interface)
if err == nil {
for i := range clients {
for j := range peers {
if clients[i].PublicKey == peers[j].PublicKey.String() {
if peers[j].LastHandshakeTime.Before(time.Now().Add(-(time.Minute * 3))) &&
peers[j].ReceiveBytes > 0 &&
peers[j].TransmitBytes > 0 {
newServerMetrics.Connectivity[clients[i].ClientID] = models.Metric{
NodeName: clients[i].ClientID,
TotalTime: 1,
Uptime: 1,
IsServer: "no",
TotalReceived: peers[j].ReceiveBytes,
TotalSent: peers[j].TransmitBytes,
Connected: true,
}
} else {
newServerMetrics.Connectivity[clients[i].ClientID] = models.Metric{
NodeName: clients[i].ClientID,
TotalTime: 1,
Uptime: 0,
IsServer: "no",
Connected: false,
Latency: 999,
}
}
}
}
}
}
}
}
return &newServerMetrics
}