metrics: add transport label to p2p_peers_total
Gives us per-transport peers counts: ipfs_p2p_peers_total{transport="/ip4/tcp"} 25 ipfs_p2p_peers_total{transport="/ip6/tcp"} 13 ipfs_p2p_peers_total{transport="/ip6/udp/utp"} 17 License: MIT Signed-off-by: Lars Gierth <larsg@systemli.org>
Lars Gierth committed
May 18, 2016 at 04:07 UTC
05cb7a1bc2b83a70f17b0cb895922f2bc63ef8aa
2 files changed
+25
-11
core/corehttp/metrics.go
+19
-8
@@ -29,7 +29,7 @@ func MetricsCollectionOption(handlerName string) ServeOption {
29
var (
30
peersTotalMetric = prometheus.NewDesc(
31
prometheus.BuildFQName("ipfs", "p2p", "peers_total"),
32
- "Number of connected peers", nil, nil)
32
+ "Number of connected peers", []string{"transport"}, nil)
33
)
34
35
type IpfsNodeCollector struct {
@@ -41,13 +41,24 @@ func (_ IpfsNodeCollector) Describe(ch chan<- *prometheus.Desc) {
41
}
42
43
func (c IpfsNodeCollector) Collect(ch chan<- prometheus.Metric) {
44
- ch <- prometheus.MustNewConstMetric(
45
- peersTotalMetric,
46
- prometheus.GaugeValue,
47
- c.PeersTotalValue(),
48
- )
44
+ for tr, val := range c.PeersTotalValues() {
45
+ ch <- prometheus.MustNewConstMetric(
46
+ peersTotalMetric,
47
+ prometheus.GaugeValue,
48
+ val,
49
+ tr,
50
+ )
51
+ }
52
}
53
51
-func (c IpfsNodeCollector) PeersTotalValue() float64 {
52
- return float64(len(c.Node.PeerHost.Network().Conns()))
54
+func (c IpfsNodeCollector) PeersTotalValues() map[string]float64 {
55
+ vals := make(map[string]float64)
56
+ for _, conn := range c.Node.PeerHost.Network().Conns() {
57
+ tr := ""
58
+ for _, proto := range conn.RemoteMultiaddr().Protocols() {
59
+ tr = tr + "/" + proto.Name
60
+ }
61
+ vals[tr] = vals[tr] + 1
62
+ }
63
+ return vals
64
}
core/corehttp/metrics_test.go
+6
-3
@@ -39,8 +39,11 @@ func TestPeersTotal(t *testing.T) {
39
40
node := &core.IpfsNode{PeerHost: hosts[0]}
41
collector := IpfsNodeCollector{Node: node}
42
- actual := collector.PeersTotalValue()
43
- if actual != 3 {
44
- t.Fatalf("expected 3 peers, got %d", int(actual))
42
+ actual := collector.PeersTotalValues()
43
+ if len(actual) != 1 {
44
+ t.Fatalf("expected 1 peers transport, got %d", len(actual))
45
+ }
46
+ if actual["/ip4/tcp"] != float64(3) {
47
+ t.Fatalf("expected 3 peers, got %s", actual["/ip4/tcp"])
48
}
49
}