Commit ebedbfe7 authored by Ralph Pichler's avatar Ralph Pichler Committed by GitHub

feat: add more metrics to accounting and settlements (#2013)

parent 2c5f15be
...@@ -76,6 +76,6 @@ require ( ...@@ -76,6 +76,6 @@ require (
gopkg.in/yaml.v2 v2.3.0 gopkg.in/yaml.v2 v2.3.0
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect
honnef.co/go/tools v0.0.1-2020.1.4 // 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 resenje.org/web v0.4.3
) )
...@@ -163,6 +163,8 @@ func (a *Accounting) Reserve(ctx context.Context, peer swarm.Address, price uint ...@@ -163,6 +163,8 @@ func (a *Accounting) Reserve(ctx context.Context, peer swarm.Address, price uint
accountingPeer.lock.Lock() accountingPeer.lock.Lock()
defer accountingPeer.lock.Unlock() defer accountingPeer.lock.Unlock()
a.metrics.AccountingReserveCount.Inc()
currentBalance, err := a.Balance(peer) currentBalance, err := a.Balance(peer)
if err != nil { if err != nil {
if !errors.Is(err, ErrPeerNoBalance) { if !errors.Is(err, ErrPeerNoBalance) {
......
...@@ -19,6 +19,7 @@ type metrics struct { ...@@ -19,6 +19,7 @@ type metrics struct {
CreditEventsCount prometheus.Counter CreditEventsCount prometheus.Counter
AccountingDisconnectsCount prometheus.Counter AccountingDisconnectsCount prometheus.Counter
AccountingBlocksCount prometheus.Counter AccountingBlocksCount prometheus.Counter
AccountingReserveCount prometheus.Counter
} }
func newMetrics() metrics { func newMetrics() metrics {
...@@ -61,6 +62,12 @@ func newMetrics() metrics { ...@@ -61,6 +62,12 @@ func newMetrics() metrics {
Name: "accounting_blocks_count", Name: "accounting_blocks_count",
Help: "Number of occurrences of temporarily skipping a peer to avoid crossing their disconnect thresholds", 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",
}),
} }
} }
......
...@@ -13,8 +13,12 @@ type metrics struct { ...@@ -13,8 +13,12 @@ type metrics struct {
// all metrics fields must be exported // all metrics fields must be exported
// to be able to return them by Metrics() // to be able to return them by Metrics()
// using reflection // using reflection
TotalReceivedPseudoSettlements prometheus.Counter TotalReceivedPseudoSettlements prometheus.Counter
TotalSentPseudoSettlements prometheus.Counter TotalSentPseudoSettlements prometheus.Counter
ReceivedPseudoSettlements prometheus.Counter
SentPseudoSettlements prometheus.Counter
ReceivedPseudoSettlementsErrors prometheus.Counter
SentPseudoSettlementsErrors prometheus.Counter
} }
func newMetrics() metrics { func newMetrics() metrics {
...@@ -25,13 +29,37 @@ func newMetrics() metrics { ...@@ -25,13 +29,37 @@ func newMetrics() metrics {
Namespace: m.Namespace, Namespace: m.Namespace,
Subsystem: subsystem, Subsystem: subsystem,
Name: "total_received_pseudosettlements", 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{ TotalSentPseudoSettlements: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: m.Namespace, Namespace: m.Namespace,
Subsystem: subsystem, Subsystem: subsystem,
Name: "total_sent_pseudosettlements", 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",
}), }),
} }
} }
......
...@@ -163,6 +163,7 @@ func (s *Service) handler(ctx context.Context, p p2p.Peer, stream p2p.Stream) (e ...@@ -163,6 +163,7 @@ func (s *Service) handler(ctx context.Context, p p2p.Peer, stream p2p.Stream) (e
defer func() { defer func() {
if err != nil { if err != nil {
_ = stream.Reset() _ = stream.Reset()
s.metrics.ReceivedPseudoSettlementsErrors.Inc()
} else { } else {
go stream.FullClose() go stream.FullClose()
} }
...@@ -230,6 +231,7 @@ func (s *Service) handler(ctx context.Context, p p2p.Peer, stream p2p.Stream) (e ...@@ -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() receivedPaymentF64, _ := big.NewFloat(0).SetInt(paymentAmount).Float64()
s.metrics.TotalReceivedPseudoSettlements.Add(receivedPaymentF64) s.metrics.TotalReceivedPseudoSettlements.Add(receivedPaymentF64)
s.metrics.ReceivedPseudoSettlements.Inc()
return s.accounting.NotifyRefreshmentReceived(p.Address, paymentAmount) return s.accounting.NotifyRefreshmentReceived(p.Address, paymentAmount)
} }
...@@ -240,6 +242,12 @@ func (s *Service) Pay(ctx context.Context, peer swarm.Address, amount *big.Int, ...@@ -240,6 +242,12 @@ func (s *Service) Pay(ctx context.Context, peer swarm.Address, amount *big.Int,
var err error var err error
defer func() {
if err != nil {
s.metrics.ReceivedPseudoSettlementsErrors.Inc()
}
}()
var lastTime lastPayment var lastTime lastPayment
err = s.store.Get(totalKey(peer, SettlementSentPrefix), &lastTime) err = s.store.Get(totalKey(peer, SettlementSentPrefix), &lastTime)
if err != nil { if err != nil {
...@@ -339,6 +347,7 @@ func (s *Service) Pay(ctx context.Context, peer swarm.Address, amount *big.Int, ...@@ -339,6 +347,7 @@ func (s *Service) Pay(ctx context.Context, peer swarm.Address, amount *big.Int,
amountFloat, _ := new(big.Float).SetInt(acceptedAmount).Float64() amountFloat, _ := new(big.Float).SetInt(acceptedAmount).Float64()
s.metrics.TotalSentPseudoSettlements.Add(amountFloat) s.metrics.TotalSentPseudoSettlements.Add(amountFloat)
s.metrics.SentPseudoSettlements.Inc()
return acceptedAmount, lastTime.CheckTimestamp, nil return acceptedAmount, lastTime.CheckTimestamp, nil
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment