5
5
"github.com/libp2p/go-libp2p/core/host"
6
6
"github.com/libp2p/go-libp2p/core/peer"
7
7
"github.com/prometheus/client_golang/prometheus"
8
+ "github.com/rs/zerolog/log"
8
9
)
9
10
10
11
var metricsP2PMessageValidationTime = prometheus .NewHistogramVec (
@@ -57,6 +58,16 @@ var metricsP2PPeerPing = prometheus.NewGaugeVec(
57
58
[]string {"our_id" , "peer_id" },
58
59
)
59
60
61
+ var metricsP2PPeerUserAgent = prometheus .NewGaugeVec (
62
+ prometheus.GaugeOpts {
63
+ Namespace : "shutter" ,
64
+ Subsystem : "p2p" ,
65
+ Name : "peer_user_agent" ,
66
+ Help : "Collection of the user agent of a peer ID." ,
67
+ },
68
+ []string {"peer_id" , "user_agent" },
69
+ )
70
+
60
71
func collectPeerAddresses (p peer.AddrInfo ) {
61
72
for _ , multiAddr := range p .Addrs {
62
73
metricsP2PPeerTuples .WithLabelValues (p .ID .String (), multiAddr .String ()).Set (1 )
@@ -69,6 +80,7 @@ func init() {
69
80
prometheus .MustRegister (metricsP2PPeerTuples )
70
81
prometheus .MustRegister (metricsP2PPeerConnectedness )
71
82
prometheus .MustRegister (metricsP2PPeerPing )
83
+ prometheus .MustRegister (metricsP2PPeerUserAgent )
72
84
}
73
85
74
86
func updatePeersMetrics (h host.Host , peerIds mapset.Set [peer.ID ]) {
@@ -80,5 +92,13 @@ func updatePeersMetrics(h host.Host, peerIds mapset.Set[peer.ID]) {
80
92
if peerPing != 0 {
81
93
metricsP2PPeerPing .WithLabelValues (ourID , p .String ()).Set (peerPing .Seconds ())
82
94
}
95
+ ua , err := h .Peerstore ().Get (p , "AgentVersion" )
96
+ if err != nil {
97
+ log .Warn ().Str ("peer" , p .String ()).Msg ("Can't get user agent for peer" )
98
+ continue
99
+ }
100
+ if ua != nil {
101
+ metricsP2PPeerUserAgent .WithLabelValues (p .String (), ua .(string )).Set (1 )
102
+ }
83
103
}
84
104
}
0 commit comments