Skip to content

Commit 9413847

Browse files
authored
Merge pull request #500 from shutter-network/feat/peer_metrics
libp2p peer metrics
2 parents e6640c0 + 1ccb5b2 commit 9413847

File tree

5 files changed

+57
-3
lines changed

5 files changed

+57
-3
lines changed

rolling-shutter/cmd/shversion/shversion.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"runtime/debug"
99
)
1010

11-
// This gets set via ldflags when building via the Makefile
11+
// This gets set via ldflags when building via the Makefile.
1212
var version string
1313

1414
// Version returns shuttermint's version string.

rolling-shutter/keyper/epochkghandler/key.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,12 @@ func (handler *DecryptionKeyHandler) ValidateMessage(ctx context.Context, msg p2
8686
return validationResult, err
8787
}
8888

89-
func checkKeysErrors(ctx context.Context, decryptionKeys *p2pmsg.DecryptionKeys, pureDKGResult *puredkg.Result, queries *database.Queries) (pubsub.ValidationResult, error) {
89+
func checkKeysErrors(
90+
ctx context.Context,
91+
decryptionKeys *p2pmsg.DecryptionKeys,
92+
pureDKGResult *puredkg.Result,
93+
queries *database.Queries,
94+
) (pubsub.ValidationResult, error) {
9095
for i, k := range decryptionKeys.Keys {
9196
epochSecretKey, err := k.GetEpochSecretKey()
9297
if err != nil {

rolling-shutter/p2p/dht.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ func findPeers(ctx context.Context, h host.Host, d discovery.Discoverer, ns stri
7676
case <-ticker.C:
7777
peersBefore := len(h.Network().Peers())
7878
if peersBefore >= peerTarget {
79+
log.Debug().Int("peers-before", peersBefore).Int("peer-target", peerTarget).Msg("have enough peers")
7980
continue
8081
}
8182

@@ -86,10 +87,17 @@ func findPeers(ctx context.Context, h host.Host, d discovery.Discoverer, ns stri
8687

8788
newConnections := 0
8889
failedDials := 0
90+
ourId := h.ID().String()
8991
for _, p := range peers {
92+
collectPeerAddresses(p)
9093
if p.ID == h.ID() {
9194
continue
9295
}
96+
metricsP2PPeerConnectedness.WithLabelValues(ourId, p.ID.String()).Add(float64(h.Network().Connectedness(p.ID)))
97+
peerPing := h.Peerstore().LatencyEWMA(p.ID)
98+
if peerPing != 0 {
99+
metricsP2PPeerPing.WithLabelValues(ourId, p.ID.String()).Set(peerPing.Seconds())
100+
}
93101
if h.Network().Connectedness(p.ID) != network.Connected {
94102
_, err = h.Network().DialPeer(ctx, p.ID)
95103
if err != nil {

rolling-shutter/p2p/metrics.go

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package p2p
22

3-
import "github.com/prometheus/client_golang/prometheus"
3+
import (
4+
"github.com/libp2p/go-libp2p/core/peer"
5+
"github.com/prometheus/client_golang/prometheus"
6+
)
47

58
var metricsP2PMessageValidationTime = prometheus.NewHistogramVec(
69
prometheus.HistogramOpts{
@@ -24,7 +27,44 @@ var metricsP2PMessageHandlingTime = prometheus.NewHistogramVec(
2427
[]string{"topic"},
2528
)
2629

30+
var metricsP2PPeerTuples = prometheus.NewGaugeVec(
31+
prometheus.GaugeOpts{
32+
Namespace: "shutter",
33+
Subsystem: "p2p",
34+
Name: "peer_candidate_info",
35+
Help: "Collection of the encountered peer tuples.",
36+
},
37+
[]string{"peer_id", "peer_ip"})
38+
39+
var metricsP2PPeerConnectedness = prometheus.NewGaugeVec(
40+
prometheus.GaugeOpts{
41+
Namespace: "shutter",
42+
Subsystem: "p2p",
43+
Name: "peer_connectedness",
44+
Help: "Collection of the connectedness (0=NotConnected; 1=Connected; 2=CanConnect; 3=CannotConnect) to a peer ID.",
45+
},
46+
[]string{"our_id", "peer_id"})
47+
48+
var metricsP2PPeerPing = prometheus.NewGaugeVec(
49+
prometheus.GaugeOpts{
50+
Namespace: "shutter",
51+
Subsystem: "p2p",
52+
Name: "peer_ping_time_seconds",
53+
Help: "Collection of the ping time to a peer ID.",
54+
},
55+
[]string{"our_id", "peer_id"},
56+
)
57+
58+
func collectPeerAddresses(p peer.AddrInfo) {
59+
for _, multiAddr := range p.Addrs {
60+
metricsP2PPeerTuples.WithLabelValues(p.ID.String(), multiAddr.String()).Add(1)
61+
}
62+
}
63+
2764
func init() {
2865
prometheus.MustRegister(metricsP2PMessageValidationTime)
2966
prometheus.MustRegister(metricsP2PMessageHandlingTime)
67+
prometheus.MustRegister(metricsP2PPeerTuples)
68+
prometheus.MustRegister(metricsP2PPeerConnectedness)
69+
prometheus.MustRegister(metricsP2PPeerPing)
3070
}

rolling-shutter/p2p/p2p.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ func createHost(
200200
libp2p.ListenAddrs(config.ListenAddrs...),
201201
libp2p.ConnectionManager(connectionManager),
202202
libp2p.ProtocolVersion(protocolVersion),
203+
libp2p.Ping(true),
203204
}
204205

205206
localNetworking := bool(config.Environment == env.EnvironmentLocal)

0 commit comments

Comments
 (0)