8
8
"sync"
9
9
"time"
10
10
11
+ "github.com/prometheus/client_golang/prometheus"
12
+
11
13
stdmath "math"
12
14
13
15
"go.uber.org/zap"
@@ -16,6 +18,7 @@ import (
16
18
"github.com/ava-labs/avalanchego/utils/logging"
17
19
"github.com/ava-labs/avalanchego/utils/math"
18
20
"github.com/ava-labs/avalanchego/utils/set"
21
+ "github.com/ava-labs/avalanchego/utils/wrappers"
19
22
"github.com/ava-labs/avalanchego/version"
20
23
)
21
24
@@ -52,27 +55,56 @@ type peerTracker struct {
52
55
// Peers that we're connected to that responded to the last request they were sent.
53
56
responsivePeers set.Set [ids.NodeID ]
54
57
// Max heap that contains the average bandwidth of peers.
55
- bandwidthHeap math.AveragerHeap
56
- averageBandwidth math.Averager
57
- log logging.Logger
58
- // numTrackedPeers prometheus.Gauge
59
- // numResponsivePeers prometheus.Gauge
60
- // averageBandwidthMetric prometheus.Gauge
58
+ bandwidthHeap math.AveragerHeap
59
+ averageBandwidth math.Averager
60
+ log logging.Logger
61
+ numTrackedPeers prometheus.Gauge
62
+ numResponsivePeers prometheus.Gauge
63
+ averageBandwidthMetric prometheus.Gauge
61
64
}
62
65
63
- func newPeerTracker (log logging.Logger ) * peerTracker {
64
- // TODO: initialize metrics
65
- return & peerTracker {
66
+ func newPeerTracker (
67
+ log logging.Logger ,
68
+ metricsNamespace string ,
69
+ registerer prometheus.Registerer ,
70
+ ) (* peerTracker , error ) {
71
+ t := & peerTracker {
66
72
peers : make (map [ids.NodeID ]* peerInfo ),
67
73
trackedPeers : make (set.Set [ids.NodeID ]),
68
74
responsivePeers : make (set.Set [ids.NodeID ]),
69
75
bandwidthHeap : math .NewMaxAveragerHeap (),
70
76
averageBandwidth : math .NewAverager (0 , bandwidthHalflife , time .Now ()),
71
77
log : log ,
72
- // numTrackedPeers: metrics.GetOrRegisterGauge("net_tracked_peers", nil),
73
- // numResponsivePeers: metrics.GetOrRegisterGauge("net_responsive_peers", nil),
74
- // averageBandwidthMetric: metrics.GetOrRegisterGaugeFloat64("net_average_bandwidth", nil),
78
+ numTrackedPeers : prometheus .NewGauge (
79
+ prometheus.GaugeOpts {
80
+ Namespace : metricsNamespace ,
81
+ Name : "num_tracked_peers" ,
82
+ Help : "number of tracked peers" ,
83
+ },
84
+ ),
85
+ numResponsivePeers : prometheus .NewGauge (
86
+ prometheus.GaugeOpts {
87
+ Namespace : metricsNamespace ,
88
+ Name : "num_responsive_peers" ,
89
+ Help : "number of responsive peers" ,
90
+ },
91
+ ),
92
+ averageBandwidthMetric : prometheus .NewGauge (
93
+ prometheus.GaugeOpts {
94
+ Namespace : metricsNamespace ,
95
+ Name : "average_bandwidth" ,
96
+ Help : "average sync bandwidth used by peers" ,
97
+ },
98
+ ),
75
99
}
100
+
101
+ errs := wrappers.Errs {}
102
+ errs .Add (
103
+ registerer .Register (t .numTrackedPeers ),
104
+ registerer .Register (t .numResponsivePeers ),
105
+ registerer .Register (t .averageBandwidthMetric ),
106
+ )
107
+ return t , errs .Err
76
108
}
77
109
78
110
// Returns true if we're not connected to enough peers.
@@ -158,7 +190,7 @@ func (p *peerTracker) TrackPeer(nodeID ids.NodeID) {
158
190
defer p .lock .Unlock ()
159
191
160
192
p .trackedPeers .Add (nodeID )
161
- // p.numTrackedPeers.Set(float64(p.trackedPeers.Len()))
193
+ p .numTrackedPeers .Set (float64 (p .trackedPeers .Len ()))
162
194
}
163
195
164
196
// Record that we observed that [nodeID]'s bandwidth is [bandwidth].
@@ -189,9 +221,9 @@ func (p *peerTracker) TrackBandwidth(nodeID ids.NodeID, bandwidth float64) {
189
221
// TODO danlaine: shouldn't we add the observation of 0
190
222
// to the average bandwidth in the if statement?
191
223
p .averageBandwidth .Observe (bandwidth , now )
192
- // p.averageBandwidthMetric.Set(p.averageBandwidth.Read())
224
+ p .averageBandwidthMetric .Set (p .averageBandwidth .Read ())
193
225
}
194
- // p.numResponsivePeers.Set(float64(p.responsivePeers.Len()))
226
+ p .numResponsivePeers .Set (float64 (p .responsivePeers .Len ()))
195
227
}
196
228
197
229
// Connected should be called when [nodeID] connects to this node
@@ -236,9 +268,9 @@ func (p *peerTracker) Disconnected(nodeID ids.NodeID) {
236
268
237
269
p .bandwidthHeap .Remove (nodeID )
238
270
p .trackedPeers .Remove (nodeID )
239
- // p.numTrackedPeers.Set(float64(p.trackedPeers.Len()))
271
+ p .numTrackedPeers .Set (float64 (p .trackedPeers .Len ()))
240
272
p .responsivePeers .Remove (nodeID )
241
- // p.numResponsivePeers.Set(float64(p.responsivePeers.Len()))
273
+ p .numResponsivePeers .Set (float64 (p .responsivePeers .Len ()))
242
274
delete (p .peers , nodeID )
243
275
}
244
276
0 commit comments