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 (
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
)
......@@ -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) {
......
......@@ -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",
}),
}
}
......
......@@ -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",
}),
}
}
......
......@@ -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
}
......
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