Merge pull request #1803 from gravitl/feature_nm_proxy_metrics

store proxy metrics in the server
This commit is contained in:
Abhishek K 2022-12-08 14:26:40 +05:30 committed by GitHub
commit bbbbb98995
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 18 deletions

View file

@ -1,19 +1,18 @@
package metrics
import (
"runtime"
"time"
"github.com/go-ping/ping"
proxy_metrics "github.com/gravitl/netclient/nm-proxy/metrics"
"github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/logic"
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/netclient/wireguard"
"golang.zx2c4.com/wireguard/wgctrl"
)
// Collect - collects metrics
func Collect(iface string, peerMap models.PeerMap) (*models.Metrics, error) {
func Collect(iface, network string, proxy bool, peerMap models.PeerMap) (*models.Metrics, error) {
var metrics models.Metrics
metrics.Connectivity = make(map[string]models.Metric)
var wgclient, err = wgctrl.New()
@ -22,19 +21,13 @@ func Collect(iface string, peerMap models.PeerMap) (*models.Metrics, error) {
return &metrics, err
}
defer wgclient.Close()
if runtime.GOOS == "darwin" {
iface, err = wireguard.GetRealIface(iface)
if err != nil {
fillUnconnectedData(&metrics, peerMap)
return &metrics, err
}
}
device, err := wgclient.Device(iface)
if err != nil {
fillUnconnectedData(&metrics, peerMap)
return &metrics, err
}
metrics.ProxyMetrics = make(map[string]proxy_metrics.Metric)
// TODO handle freebsd??
for i := range device.Peers {
currPeer := device.Peers[i]
@ -88,6 +81,8 @@ func Collect(iface string, peerMap models.PeerMap) (*models.Metrics, error) {
newMetric.TotalTime = 1
metrics.Connectivity[id] = newMetric
metrics.ProxyMetrics[id] = proxy_metrics.GetMetric(network, currPeer.PublicKey.String())
proxy_metrics.ResetMetricsForPeer(network, currPeer.PublicKey.String())
}
fillUnconnectedData(&metrics, peerMap)

View file

@ -1,15 +1,20 @@
package models
import "time"
import (
"time"
proxy "github.com/gravitl/netclient/nm-proxy/metrics"
)
// Metrics - metrics struct
type Metrics struct {
Network string `json:"network" bson:"network" yaml:"network"`
NodeID string `json:"node_id" bson:"node_id" yaml:"node_id"`
NodeName string `json:"node_name" bson:"node_name" yaml:"node_name"`
IsServer string `json:"isserver" bson:"isserver" yaml:"isserver" validate:"checkyesorno"`
Connectivity map[string]Metric `json:"connectivity" bson:"connectivity" yaml:"connectivity"`
FailoverPeers map[string]string `json:"needsfailover" bson:"needsfailover" yaml:"needsfailover"`
Network string `json:"network" bson:"network" yaml:"network"`
NodeID string `json:"node_id" bson:"node_id" yaml:"node_id"`
NodeName string `json:"node_name" bson:"node_name" yaml:"node_name"`
IsServer string `json:"isserver" bson:"isserver" yaml:"isserver" validate:"checkyesorno"`
Connectivity map[string]Metric `json:"connectivity" bson:"connectivity" yaml:"connectivity"`
FailoverPeers map[string]string `json:"needsfailover" bson:"needsfailover" yaml:"needsfailover"`
ProxyMetrics map[string]proxy.Metric `json:"proxy_metrics" bson:"proxy_metrics" yaml:"proxy_metrics"`
}
// Metric - holds a metric for data between nodes

View file

@ -273,6 +273,13 @@ func updateNodeMetrics(currentNode *models.Node, newMetrics *models.Metrics) boo
currMetric.ActualUptime = time.Duration(totalUpMinutes) * time.Minute
delete(oldMetrics.Connectivity, k) // remove from old data
newMetrics.Connectivity[k] = currMetric
if oldProxyMetric, ok := oldMetrics.ProxyMetrics[k]; ok {
newProxyMetric := newMetrics.ProxyMetrics[k]
newProxyMetric.TrafficSent += oldProxyMetric.TrafficSent
newProxyMetric.TrafficRecieved += oldProxyMetric.TrafficRecieved
newMetrics.ProxyMetrics[k] = newProxyMetric
}
}
// add nodes that need failover