Bläddra i källkod

p2p/protocols: accounting metrics rpc (#18336)

* p2p/protocols: accounting metrics rpc added (#847)

* p2p/protocols: accounting api documentation added (#847)

* p2p/protocols: accounting api doc updated (#847)

* p2p/protocols: accounting api doc update (#847)

* p2p/protocols: accounting api doc update (#847)

* p2p/protocols: fix file is not gofmted

* fix lint error

* updated comments after review

* add account balance to rpc

* naming changed after review
Jerzy Lasyk 6 år sedan
förälder
incheckning
880de230b4
3 ändrade filer med 145 tillägg och 0 borttagningar
  1. 45 0
      internal/web3ext/web3ext.go
  2. 94 0
      p2p/protocols/accounting_api.go
  3. 6 0
      swarm/swarm.go

+ 45 - 0
internal/web3ext/web3ext.go

@@ -18,6 +18,7 @@
 package web3ext
 
 var Modules = map[string]string{
+	"accounting": Accounting_JS,
 	"admin":      Admin_JS,
 	"chequebook": Chequebook_JS,
 	"clique":     Clique_JS,
@@ -704,3 +705,47 @@ web3._extend({
 	]
 });
 `
+
+const Accounting_JS = `
+web3._extend({
+	property: 'accounting',
+	methods: [
+		new web3._extend.Property({
+			name: 'balance',
+			getter: 'account_balance'
+		}),
+		new web3._extend.Property({
+			name: 'balanceCredit',
+			getter: 'account_balanceCredit'
+		}),
+		new web3._extend.Property({
+			name: 'balanceDebit',
+			getter: 'account_balanceDebit'
+		}),
+		new web3._extend.Property({
+			name: 'bytesCredit',
+			getter: 'account_bytesCredit'
+		}),
+		new web3._extend.Property({
+			name: 'bytesDebit',
+			getter: 'account_bytesDebit'
+		}),
+		new web3._extend.Property({
+			name: 'msgCredit',
+			getter: 'account_msgCredit'
+		}),
+		new web3._extend.Property({
+			name: 'msgDebit',
+			getter: 'account_msgDebit'
+		}),
+		new web3._extend.Property({
+			name: 'peerDrops',
+			getter: 'account_peerDrops'
+		}),
+		new web3._extend.Property({
+			name: 'selfDrops',
+			getter: 'account_selfDrops'
+		}),
+	]
+});
+`

+ 94 - 0
p2p/protocols/accounting_api.go

@@ -0,0 +1,94 @@
+package protocols
+
+import (
+	"errors"
+)
+
+// Textual version number of accounting API
+const AccountingVersion = "1.0"
+
+var errNoAccountingMetrics = errors.New("accounting metrics not enabled")
+
+// AccountingApi provides an API to access account related information
+type AccountingApi struct {
+	metrics *AccountingMetrics
+}
+
+// NewAccountingApi creates a new AccountingApi
+// m will be used to check if accounting metrics are enabled
+func NewAccountingApi(m *AccountingMetrics) *AccountingApi {
+	return &AccountingApi{m}
+}
+
+// Balance returns local node balance (units credited - units debited)
+func (self *AccountingApi) Balance() (int64, error) {
+	if self.metrics == nil {
+		return 0, errNoAccountingMetrics
+	}
+	balance := mBalanceCredit.Count() - mBalanceDebit.Count()
+	return balance, nil
+}
+
+// BalanceCredit returns total amount of units credited by local node
+func (self *AccountingApi) BalanceCredit() (int64, error) {
+	if self.metrics == nil {
+		return 0, errNoAccountingMetrics
+	}
+	return mBalanceCredit.Count(), nil
+}
+
+// BalanceCredit returns total amount of units debited by local node
+func (self *AccountingApi) BalanceDebit() (int64, error) {
+	if self.metrics == nil {
+		return 0, errNoAccountingMetrics
+	}
+	return mBalanceDebit.Count(), nil
+}
+
+// BytesCredit returns total amount of bytes credited by local node
+func (self *AccountingApi) BytesCredit() (int64, error) {
+	if self.metrics == nil {
+		return 0, errNoAccountingMetrics
+	}
+	return mBytesCredit.Count(), nil
+}
+
+// BalanceCredit returns total amount of bytes debited by local node
+func (self *AccountingApi) BytesDebit() (int64, error) {
+	if self.metrics == nil {
+		return 0, errNoAccountingMetrics
+	}
+	return mBytesDebit.Count(), nil
+}
+
+// MsgCredit returns total amount of messages credited by local node
+func (self *AccountingApi) MsgCredit() (int64, error) {
+	if self.metrics == nil {
+		return 0, errNoAccountingMetrics
+	}
+	return mMsgCredit.Count(), nil
+}
+
+// MsgDebit returns total amount of messages debited by local node
+func (self *AccountingApi) MsgDebit() (int64, error) {
+	if self.metrics == nil {
+		return 0, errNoAccountingMetrics
+	}
+	return mMsgDebit.Count(), nil
+}
+
+// PeerDrops returns number of times when local node had to drop remote peers
+func (self *AccountingApi) PeerDrops() (int64, error) {
+	if self.metrics == nil {
+		return 0, errNoAccountingMetrics
+	}
+	return mPeerDrops.Count(), nil
+}
+
+// SelfDrops returns number of times when local node was overdrafted and dropped
+func (self *AccountingApi) SelfDrops() (int64, error) {
+	if self.metrics == nil {
+		return 0, errNoAccountingMetrics
+	}
+	return mSelfDrops.Count(), nil
+}

+ 6 - 0
swarm/swarm.go

@@ -518,6 +518,12 @@ func (self *Swarm) APIs() []rpc.API {
 			Service:   self.sfs,
 			Public:    false,
 		},
+		{
+			Namespace: "accounting",
+			Version:   protocols.AccountingVersion,
+			Service:   protocols.NewAccountingApi(self.accountingMetrics),
+			Public:    false,
+		},
 	}
 
 	apis = append(apis, self.bzz.APIs()...)