forked from iotaledger/goshimmer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
global_metrics.go
103 lines (87 loc) · 2.51 KB
/
global_metrics.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package prometheus
import (
"strconv"
"github.com/prometheus/client_golang/prometheus"
analysisserver "github.com/izuc/zipp/plugins/analysis/server"
"github.com/izuc/zipp/plugins/banner"
"github.com/izuc/zipp/plugins/metrics"
)
// These metrics store information collected via the analysis server.
var (
// Process related metrics.
nodesInfoCPU *prometheus.GaugeVec
nodesInfoMemory *prometheus.GaugeVec
// Autopeering related metrics.
nodesNeighborCount *prometheus.GaugeVec
networkDiameter prometheus.Gauge
)
func registerClientsMetrics() {
nodesInfoCPU = prometheus.NewGaugeVec(
prometheus.GaugeOpts{
Name: "global_nodes_info_cpu",
Help: "Info about node's cpu load labeled with nodeID, OS, ARCH and number of cpu cores",
},
[]string{
"nodeID",
"OS",
"ARCH",
"NUM_CPU",
},
)
nodesInfoMemory = prometheus.NewGaugeVec(
prometheus.GaugeOpts{
Name: "global_nodes_info_mem",
Help: "Info about node's memory usage labeled with nodeID, OS, ARCH and number of cpu cores",
},
[]string{
"nodeID",
"OS",
"ARCH",
"NUM_CPU",
},
)
nodesNeighborCount = prometheus.NewGaugeVec(
prometheus.GaugeOpts{
Name: "global_nodes_neighbor_count",
Help: "Info about node's neighbors count",
},
[]string{
"nodeID",
"direction",
},
)
networkDiameter = prometheus.NewGauge(prometheus.GaugeOpts{
Name: "global_network_diameter",
Help: "Autopeering network diameter",
})
registry.MustRegister(nodesInfoCPU)
registry.MustRegister(nodesInfoMemory)
registry.MustRegister(nodesNeighborCount)
registry.MustRegister(networkDiameter)
addCollect(collectNodesInfo)
}
func collectNodesInfo() {
nodeInfoMap := metrics.NodesMetrics()
for nodeID, nodeMetrics := range nodeInfoMap {
nodesInfoCPU.WithLabelValues(
nodeID,
nodeMetrics.OS,
nodeMetrics.Arch,
strconv.Itoa(nodeMetrics.NumCPU),
).Set(nodeMetrics.CPUUsage)
nodesInfoMemory.WithLabelValues(
nodeID,
nodeMetrics.OS,
nodeMetrics.Arch,
strconv.Itoa(nodeMetrics.NumCPU),
).Set(float64(nodeMetrics.MemoryUsage))
}
// TODO: send data for all available networkIDs, not just current
if analysisserver.Networks[banner.SimplifiedAppVersion] != nil {
for nodeID, neighborCount := range analysisserver.Networks[banner.SimplifiedAppVersion].NumOfNeighbors() {
nodesNeighborCount.WithLabelValues(nodeID, "in").Set(float64(neighborCount.Inbound))
nodesNeighborCount.WithLabelValues(nodeID, "out").Set(float64(neighborCount.Outbound))
}
}
networkDiameter.Set(float64(metrics.NetworkDiameter()))
}