From d545bb74ba6f2e4fc55b8a14e7b0e77d9c75669a Mon Sep 17 00:00:00 2001 From: Jerzy Date: Wed, 5 Dec 2018 20:06:13 +0100 Subject: [PATCH] p2p/protocols: accounting metrics rpc added (#847) --- internal/web3ext/web3ext.go | 41 ++++++++++++++++++ p2p/protocols/accounting_api.go | 73 +++++++++++++++++++++++++++++++++ swarm/swarm.go | 6 +++ 3 files changed, 120 insertions(+) create mode 100644 p2p/protocols/accounting_api.go diff --git a/internal/web3ext/web3ext.go b/internal/web3ext/web3ext.go index a5f3196535..3651085870 100644 --- a/internal/web3ext/web3ext.go +++ b/internal/web3ext/web3ext.go @@ -18,6 +18,7 @@ package web3ext var Modules = map[string]string{ + "account": Account_JS, "admin": Admin_JS, "chequebook": Chequebook_JS, "clique": Clique_JS, @@ -692,3 +693,43 @@ web3._extend({ ] }); ` + +const Account_JS = ` +web3._extend({ + property: 'account', + methods: [ + 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' + }), + ] +}); +` diff --git a/p2p/protocols/accounting_api.go b/p2p/protocols/accounting_api.go new file mode 100644 index 0000000000..356408c30f --- /dev/null +++ b/p2p/protocols/accounting_api.go @@ -0,0 +1,73 @@ +package protocols + +import ( + "errors" +) + +const AccountingVersion = "1.0" + +var errNoAccountingMetrics = errors.New("no accounting metrics") + +type AccountingApi struct { + metrics *AccountingMetrics +} + +func NewAccountingApi(m *AccountingMetrics) *AccountingApi { + return &AccountingApi{m} +} + +func (self *AccountingApi) BalanceCredit() (int64, error) { + if self.metrics == nil { + return 0, errNoAccountingMetrics + } + return mBalanceCredit.Count(), nil +} + +func (self *AccountingApi) BalanceDebit() (int64, error) { + if self.metrics == nil { + return 0, errNoAccountingMetrics + } + return mBalanceDebit.Count(), nil +} + +func (self *AccountingApi) BytesCredit() (int64, error) { + if self.metrics == nil { + return 0, errNoAccountingMetrics + } + return mBytesCredit.Count(), nil +} + +func (self *AccountingApi) BytesDebit() (int64, error) { + if self.metrics == nil { + return 0, errNoAccountingMetrics + } + return mBytesDebit.Count(), nil +} + +func (self *AccountingApi) MsgCredit() (int64, error) { + if self.metrics == nil { + return 0, errNoAccountingMetrics + } + return mMsgCredit.Count(), nil +} + +func (self *AccountingApi) MsgDebit() (int64, error) { + if self.metrics == nil { + return 0, errNoAccountingMetrics + } + return mMsgDebit.Count(), nil +} + +func (self *AccountingApi) PeerDrops() (int64, error) { + if self.metrics == nil { + return 0, errNoAccountingMetrics + } + return mPeerDrops.Count(), nil +} + +func (self *AccountingApi) SelfDrops() (int64, error) { + if self.metrics == nil { + return 0, errNoAccountingMetrics + } + return mSelfDrops.Count(), nil +} \ No newline at end of file diff --git a/swarm/swarm.go b/swarm/swarm.go index a4ff94051d..48048f34cd 100644 --- a/swarm/swarm.go +++ b/swarm/swarm.go @@ -518,6 +518,12 @@ func (self *Swarm) APIs() []rpc.API { Service: self.sfs, Public: false, }, + { + Namespace: "account", + Version: protocols.AccountingVersion, + Service: protocols.NewAccountingApi(self.accountingMetrics), + Public: false, + }, } apis = append(apis, self.bzz.APIs()...)