mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-13 16:44:52 +08:00
Merge pull request #1803 from gravitl/feature_nm_proxy_metrics
store proxy metrics in the server
This commit is contained in:
commit
bbbbb98995
3 changed files with 25 additions and 18 deletions
|
@ -1,19 +1,18 @@
|
||||||
package metrics
|
package metrics
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-ping/ping"
|
"github.com/go-ping/ping"
|
||||||
|
proxy_metrics "github.com/gravitl/netclient/nm-proxy/metrics"
|
||||||
"github.com/gravitl/netmaker/logger"
|
"github.com/gravitl/netmaker/logger"
|
||||||
"github.com/gravitl/netmaker/logic"
|
"github.com/gravitl/netmaker/logic"
|
||||||
"github.com/gravitl/netmaker/models"
|
"github.com/gravitl/netmaker/models"
|
||||||
"github.com/gravitl/netmaker/netclient/wireguard"
|
|
||||||
"golang.zx2c4.com/wireguard/wgctrl"
|
"golang.zx2c4.com/wireguard/wgctrl"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Collect - collects metrics
|
// 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
|
var metrics models.Metrics
|
||||||
metrics.Connectivity = make(map[string]models.Metric)
|
metrics.Connectivity = make(map[string]models.Metric)
|
||||||
var wgclient, err = wgctrl.New()
|
var wgclient, err = wgctrl.New()
|
||||||
|
@ -22,19 +21,13 @@ func Collect(iface string, peerMap models.PeerMap) (*models.Metrics, error) {
|
||||||
return &metrics, err
|
return &metrics, err
|
||||||
}
|
}
|
||||||
defer wgclient.Close()
|
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)
|
device, err := wgclient.Device(iface)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fillUnconnectedData(&metrics, peerMap)
|
fillUnconnectedData(&metrics, peerMap)
|
||||||
return &metrics, err
|
return &metrics, err
|
||||||
}
|
}
|
||||||
|
metrics.ProxyMetrics = make(map[string]proxy_metrics.Metric)
|
||||||
|
|
||||||
// TODO handle freebsd??
|
// TODO handle freebsd??
|
||||||
for i := range device.Peers {
|
for i := range device.Peers {
|
||||||
currPeer := device.Peers[i]
|
currPeer := device.Peers[i]
|
||||||
|
@ -88,6 +81,8 @@ func Collect(iface string, peerMap models.PeerMap) (*models.Metrics, error) {
|
||||||
|
|
||||||
newMetric.TotalTime = 1
|
newMetric.TotalTime = 1
|
||||||
metrics.Connectivity[id] = newMetric
|
metrics.Connectivity[id] = newMetric
|
||||||
|
metrics.ProxyMetrics[id] = proxy_metrics.GetMetric(network, currPeer.PublicKey.String())
|
||||||
|
proxy_metrics.ResetMetricsForPeer(network, currPeer.PublicKey.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
fillUnconnectedData(&metrics, peerMap)
|
fillUnconnectedData(&metrics, peerMap)
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
package models
|
package models
|
||||||
|
|
||||||
import "time"
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
proxy "github.com/gravitl/netclient/nm-proxy/metrics"
|
||||||
|
)
|
||||||
|
|
||||||
// Metrics - metrics struct
|
// Metrics - metrics struct
|
||||||
type Metrics struct {
|
type Metrics struct {
|
||||||
|
@ -10,6 +14,7 @@ type Metrics struct {
|
||||||
IsServer string `json:"isserver" bson:"isserver" yaml:"isserver" validate:"checkyesorno"`
|
IsServer string `json:"isserver" bson:"isserver" yaml:"isserver" validate:"checkyesorno"`
|
||||||
Connectivity map[string]Metric `json:"connectivity" bson:"connectivity" yaml:"connectivity"`
|
Connectivity map[string]Metric `json:"connectivity" bson:"connectivity" yaml:"connectivity"`
|
||||||
FailoverPeers map[string]string `json:"needsfailover" bson:"needsfailover" yaml:"needsfailover"`
|
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
|
// Metric - holds a metric for data between nodes
|
||||||
|
|
|
@ -273,6 +273,13 @@ func updateNodeMetrics(currentNode *models.Node, newMetrics *models.Metrics) boo
|
||||||
currMetric.ActualUptime = time.Duration(totalUpMinutes) * time.Minute
|
currMetric.ActualUptime = time.Duration(totalUpMinutes) * time.Minute
|
||||||
delete(oldMetrics.Connectivity, k) // remove from old data
|
delete(oldMetrics.Connectivity, k) // remove from old data
|
||||||
newMetrics.Connectivity[k] = currMetric
|
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
|
// add nodes that need failover
|
||||||
|
|
Loading…
Add table
Reference in a new issue