From ebedbfe7620e6b9a92f746529340cd9e5e213a85 Mon Sep 17 00:00:00 2001 From: Ralph Pichler Date: Mon, 7 Jun 2021 12:46:04 +0200 Subject: [PATCH] feat: add more metrics to accounting and settlements (#2013) --- go.mod | 2 +- pkg/accounting/accounting.go | 2 ++ pkg/accounting/metrics.go | 7 ++++ pkg/settlement/pseudosettle/metrics.go | 36 ++++++++++++++++++--- pkg/settlement/pseudosettle/pseudosettle.go | 9 ++++++ 5 files changed, 51 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 45f3e5ded78..7e1d9d3297c 100644 --- a/go.mod +++ b/go.mod @@ -76,6 +76,6 @@ require ( gopkg.in/yaml.v2 v2.3.0 gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect honnef.co/go/tools v0.0.1-2020.1.4 // indirect - resenje.org/singleflight v0.2.0 // indirect + resenje.org/singleflight v0.2.0 resenje.org/web v0.4.3 ) diff --git a/pkg/accounting/accounting.go b/pkg/accounting/accounting.go index 9285a8a3765..c15fd958569 100644 --- a/pkg/accounting/accounting.go +++ b/pkg/accounting/accounting.go @@ -163,6 +163,8 @@ func (a *Accounting) Reserve(ctx context.Context, peer swarm.Address, price uint accountingPeer.lock.Lock() defer accountingPeer.lock.Unlock() + a.metrics.AccountingReserveCount.Inc() + currentBalance, err := a.Balance(peer) if err != nil { if !errors.Is(err, ErrPeerNoBalance) { diff --git a/pkg/accounting/metrics.go b/pkg/accounting/metrics.go index cfb3a0698da..9b83a1a60d3 100644 --- a/pkg/accounting/metrics.go +++ b/pkg/accounting/metrics.go @@ -19,6 +19,7 @@ type metrics struct { CreditEventsCount prometheus.Counter AccountingDisconnectsCount prometheus.Counter AccountingBlocksCount prometheus.Counter + AccountingReserveCount prometheus.Counter } func newMetrics() metrics { @@ -61,6 +62,12 @@ func newMetrics() metrics { Name: "accounting_blocks_count", Help: "Number of occurrences of temporarily skipping a peer to avoid crossing their disconnect thresholds", }), + AccountingReserveCount: prometheus.NewCounter(prometheus.CounterOpts{ + Namespace: m.Namespace, + Subsystem: subsystem, + Name: "accounting_reserve_count", + Help: "Number of reserve calls", + }), } } diff --git a/pkg/settlement/pseudosettle/metrics.go b/pkg/settlement/pseudosettle/metrics.go index a8c3528833e..b3530500be0 100644 --- a/pkg/settlement/pseudosettle/metrics.go +++ b/pkg/settlement/pseudosettle/metrics.go @@ -13,8 +13,12 @@ type metrics struct { // all metrics fields must be exported // to be able to return them by Metrics() // using reflection - TotalReceivedPseudoSettlements prometheus.Counter - TotalSentPseudoSettlements prometheus.Counter + TotalReceivedPseudoSettlements prometheus.Counter + TotalSentPseudoSettlements prometheus.Counter + ReceivedPseudoSettlements prometheus.Counter + SentPseudoSettlements prometheus.Counter + ReceivedPseudoSettlementsErrors prometheus.Counter + SentPseudoSettlementsErrors prometheus.Counter } func newMetrics() metrics { @@ -25,13 +29,37 @@ func newMetrics() metrics { Namespace: m.Namespace, Subsystem: subsystem, Name: "total_received_pseudosettlements", - Help: "Amount of pseudotokens received from peers (income of the node)", + Help: "Amount of time settlements received from peers (income of the node)", }), TotalSentPseudoSettlements: prometheus.NewCounter(prometheus.CounterOpts{ Namespace: m.Namespace, Subsystem: subsystem, Name: "total_sent_pseudosettlements", - Help: "Amount of pseudotokens sent to peers (costs paid by the node)", + Help: "Amount of of time settlements sent to peers (costs paid by the node)", + }), + ReceivedPseudoSettlements: prometheus.NewCounter(prometheus.CounterOpts{ + Namespace: m.Namespace, + Subsystem: subsystem, + Name: "received_pseudosettlements", + Help: "Number of time settlements received from peers", + }), + SentPseudoSettlements: prometheus.NewCounter(prometheus.CounterOpts{ + Namespace: m.Namespace, + Subsystem: subsystem, + Name: "sent_pseudosettlements", + Help: "Number of time settlements sent to peers", + }), + ReceivedPseudoSettlementsErrors: prometheus.NewCounter(prometheus.CounterOpts{ + Namespace: m.Namespace, + Subsystem: subsystem, + Name: "received_pseudosettlements_errors", + Help: "Errors of time settlements received from peers", + }), + SentPseudoSettlementsErrors: prometheus.NewCounter(prometheus.CounterOpts{ + Namespace: m.Namespace, + Subsystem: subsystem, + Name: "sent_pseudosettlements_errorss", + Help: "Errors of time settlements sent to peers", }), } } diff --git a/pkg/settlement/pseudosettle/pseudosettle.go b/pkg/settlement/pseudosettle/pseudosettle.go index bb748c1fa90..1eabdf75c49 100644 --- a/pkg/settlement/pseudosettle/pseudosettle.go +++ b/pkg/settlement/pseudosettle/pseudosettle.go @@ -163,6 +163,7 @@ func (s *Service) handler(ctx context.Context, p p2p.Peer, stream p2p.Stream) (e defer func() { if err != nil { _ = stream.Reset() + s.metrics.ReceivedPseudoSettlementsErrors.Inc() } else { go stream.FullClose() } @@ -230,6 +231,7 @@ func (s *Service) handler(ctx context.Context, p p2p.Peer, stream p2p.Stream) (e receivedPaymentF64, _ := big.NewFloat(0).SetInt(paymentAmount).Float64() s.metrics.TotalReceivedPseudoSettlements.Add(receivedPaymentF64) + s.metrics.ReceivedPseudoSettlements.Inc() return s.accounting.NotifyRefreshmentReceived(p.Address, paymentAmount) } @@ -240,6 +242,12 @@ func (s *Service) Pay(ctx context.Context, peer swarm.Address, amount *big.Int, var err error + defer func() { + if err != nil { + s.metrics.ReceivedPseudoSettlementsErrors.Inc() + } + }() + var lastTime lastPayment err = s.store.Get(totalKey(peer, SettlementSentPrefix), &lastTime) if err != nil { @@ -339,6 +347,7 @@ func (s *Service) Pay(ctx context.Context, peer swarm.Address, amount *big.Int, amountFloat, _ := new(big.Float).SetInt(acceptedAmount).Float64() s.metrics.TotalSentPseudoSettlements.Add(amountFloat) + s.metrics.SentPseudoSettlements.Inc() return acceptedAmount, lastTime.CheckTimestamp, nil }