From 05cb7a1bc2b83a70f17b0cb895922f2bc63ef8aa Mon Sep 17 00:00:00 2001 From: Lars Gierth Date: Wed, 18 May 2016 04:07:43 +0200 Subject: [PATCH] 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 --- core/corehttp/metrics.go | 27 +++++++++++++++++++-------- core/corehttp/metrics_test.go | 9 ++++++--- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/core/corehttp/metrics.go b/core/corehttp/metrics.go index 5d00a3c4c..4dee41aed 100644 --- a/core/corehttp/metrics.go +++ b/core/corehttp/metrics.go @@ -29,7 +29,7 @@ func MetricsCollectionOption(handlerName string) ServeOption { var ( peersTotalMetric = prometheus.NewDesc( prometheus.BuildFQName("ipfs", "p2p", "peers_total"), - "Number of connected peers", nil, nil) + "Number of connected peers", []string{"transport"}, nil) ) type IpfsNodeCollector struct { @@ -41,13 +41,24 @@ func (_ IpfsNodeCollector) Describe(ch chan<- *prometheus.Desc) { } func (c IpfsNodeCollector) Collect(ch chan<- prometheus.Metric) { - ch <- prometheus.MustNewConstMetric( - peersTotalMetric, - prometheus.GaugeValue, - c.PeersTotalValue(), - ) + for tr, val := range c.PeersTotalValues() { + ch <- prometheus.MustNewConstMetric( + peersTotalMetric, + prometheus.GaugeValue, + val, + tr, + ) + } } -func (c IpfsNodeCollector) PeersTotalValue() float64 { - return float64(len(c.Node.PeerHost.Network().Conns())) +func (c IpfsNodeCollector) PeersTotalValues() map[string]float64 { + vals := make(map[string]float64) + for _, conn := range c.Node.PeerHost.Network().Conns() { + tr := "" + for _, proto := range conn.RemoteMultiaddr().Protocols() { + tr = tr + "/" + proto.Name + } + vals[tr] = vals[tr] + 1 + } + return vals } diff --git a/core/corehttp/metrics_test.go b/core/corehttp/metrics_test.go index 7495360f7..98859f00f 100644 --- a/core/corehttp/metrics_test.go +++ b/core/corehttp/metrics_test.go @@ -39,8 +39,11 @@ func TestPeersTotal(t *testing.T) { node := &core.IpfsNode{PeerHost: hosts[0]} collector := IpfsNodeCollector{Node: node} - actual := collector.PeersTotalValue() - if actual != 3 { - t.Fatalf("expected 3 peers, got %d", int(actual)) + actual := collector.PeersTotalValues() + if len(actual) != 1 { + t.Fatalf("expected 1 peers transport, got %d", len(actual)) + } + if actual["/ip4/tcp"] != float64(3) { + t.Fatalf("expected 3 peers, got %s", actual["/ip4/tcp"]) } }