From 9a0d4407d726cf3e5b98151604622b14c9eef36b Mon Sep 17 00:00:00 2001 From: tycho garen Date: Tue, 14 Jun 2022 06:59:20 -0400 Subject: [PATCH] add metrics --- internal/p2p/metrics.go | 3 +++ internal/p2p/peermanager.go | 12 +++++++++++- node/node.go | 2 +- node/setup.go | 2 ++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/internal/p2p/metrics.go b/internal/p2p/metrics.go index b45f128e5..2a18de9f0 100644 --- a/internal/p2p/metrics.go +++ b/internal/p2p/metrics.go @@ -28,6 +28,9 @@ var ( type Metrics struct { // Number of peers. Peers metrics.Gauge + + PeersStored metrics.Gauge + PeersInactivated metrics.Gauge // Number of bytes per channel received from a given peer. PeerReceiveBytesTotal metrics.Counter `metrics_labels:"peer_id, chID, message_type"` // Number of bytes per channel sent to a given peer. diff --git a/internal/p2p/peermanager.go b/internal/p2p/peermanager.go index 7d6728985..e0570c7ef 100644 --- a/internal/p2p/peermanager.go +++ b/internal/p2p/peermanager.go @@ -145,6 +145,9 @@ type PeerManagerOptions struct { // persistentPeers provides fast PersistentPeers lookups. It is built // by optimize(). persistentPeers map[types.NodeID]bool + + // Peer Metrics + Metrics *Metrics } // Validate validates the options. @@ -377,6 +380,7 @@ func (m *PeerManager) prunePeers() error { if err := m.store.Delete(peerID); err != nil { return err } + m.options.Metrics.PeersStored.Add(-1) } } return nil @@ -414,6 +418,8 @@ func (m *PeerManager) Add(address NodeAddress) (bool, error) { if err := m.store.Set(peer); err != nil { return false, err } + + m.options.Metrics.PeersStored.Add(1) if err := m.prunePeers(); err != nil { return true, err } @@ -590,7 +596,11 @@ func (m *PeerManager) Dialed(address NodeAddress) error { return fmt.Errorf("peer %q was removed while dialing", address.NodeID) } now := time.Now().UTC() + if peer.Inactive { + m.options.Metrics.PeersInactivated.Add(-1) + } peer.Inactive = false + peer.LastConnected = now if addressInfo, ok := peer.AddressInfo[address]; ok { addressInfo.DialFailures = 0 @@ -811,7 +821,7 @@ func (m *PeerManager) Inactivate(peerID types.NodeID) error { } peer.Inactive = true - + m.options.Metrics.PeersInactivated.Add(1) return m.store.Set(*peer) } diff --git a/node/node.go b/node/node.go index 1bda1f0f7..77773044b 100644 --- a/node/node.go +++ b/node/node.go @@ -203,7 +203,7 @@ func makeNode( } } - peerManager, peerCloser, err := createPeerManager(cfg, dbProvider, nodeKey.ID) + peerManager, peerCloser, err := createPeerManager(cfg, dbProvider, nodeKey.ID, nodeMetrics.p2p) closers = append(closers, peerCloser) if err != nil { return nil, combineCloseError( diff --git a/node/setup.go b/node/setup.go index 51a048249..60f50b4f9 100644 --- a/node/setup.go +++ b/node/setup.go @@ -202,6 +202,7 @@ func createPeerManager( cfg *config.Config, dbProvider config.DBProvider, nodeID types.NodeID, + metrics *p2p.Metrics, ) (*p2p.PeerManager, closer, error) { selfAddr, err := p2p.ParseNodeAddress(nodeID.AddressString(cfg.P2P.ExternalAddress)) @@ -235,6 +236,7 @@ func createPeerManager( MaxRetryTimePersistent: 5 * time.Minute, RetryTimeJitter: 5 * time.Second, PrivatePeers: privatePeerIDs, + Metrics: metrics, } peers := []p2p.NodeAddress{}