@cryptotaxi247 / kubo / commits / 05cb7a1bc

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 }