diff --git a/p2p/protocols/accounting.go b/p2p/protocols/accounting.go index 770406a27e..e3bfb15130 100644 --- a/p2p/protocols/accounting.go +++ b/p2p/protocols/accounting.go @@ -42,6 +42,8 @@ var ( mPeerDrops metrics.Counter //how many times local node overdrafted and dropped mSelfDrops metrics.Counter + + MetricsRegistry metrics.Registry ) //Prices defines how prices are being passed on to the accounting instance @@ -114,18 +116,18 @@ func NewAccounting(balance Balance, po Prices) *Accounting { //at the passed interval writes the metrics to a LevelDB func SetupAccountingMetrics(reportInterval time.Duration, path string) *AccountingMetrics { //create an empty registry - registry := metrics.NewRegistry() + MetricsRegistry = metrics.NewRegistry() //instantiate the metrics - mBalanceCredit = metrics.NewRegisteredCounterForced("account.balance.credit", registry) - mBalanceDebit = metrics.NewRegisteredCounterForced("account.balance.debit", registry) - mBytesCredit = metrics.NewRegisteredCounterForced("account.bytes.credit", registry) - mBytesDebit = metrics.NewRegisteredCounterForced("account.bytes.debit", registry) - mMsgCredit = metrics.NewRegisteredCounterForced("account.msg.credit", registry) - mMsgDebit = metrics.NewRegisteredCounterForced("account.msg.debit", registry) - mPeerDrops = metrics.NewRegisteredCounterForced("account.peerdrops", registry) - mSelfDrops = metrics.NewRegisteredCounterForced("account.selfdrops", registry) + mBalanceCredit = metrics.NewRegisteredCounterForced("account.balance.credit", MetricsRegistry) + mBalanceDebit = metrics.NewRegisteredCounterForced("account.balance.debit", MetricsRegistry) + mBytesCredit = metrics.NewRegisteredCounterForced("account.bytes.credit", MetricsRegistry) + mBytesDebit = metrics.NewRegisteredCounterForced("account.bytes.debit", MetricsRegistry) + mMsgCredit = metrics.NewRegisteredCounterForced("account.msg.credit", MetricsRegistry) + mMsgDebit = metrics.NewRegisteredCounterForced("account.msg.debit", MetricsRegistry) + mPeerDrops = metrics.NewRegisteredCounterForced("account.peerdrops", MetricsRegistry) + mSelfDrops = metrics.NewRegisteredCounterForced("account.selfdrops", MetricsRegistry) //create the DB and start persisting - return NewAccountingMetrics(registry, reportInterval, path) + return NewAccountingMetrics(MetricsRegistry, reportInterval, path) } //Implement Hook.Send diff --git a/swarm/network/stream/stream.go b/swarm/network/stream/stream.go index 5209069f79..981cd3870c 100644 --- a/swarm/network/stream/stream.go +++ b/swarm/network/stream/stream.go @@ -775,24 +775,24 @@ type StreamerPrices struct { registry *Registry } +//Price implements the accounting interface and returns the price for a specific message func (spo *StreamerPrices) Price(msg interface{}) *protocols.Price { typ := reflect.TypeOf(msg).Elem() return spo.priceMatrix[typ] } +//createPriceOracle sets up a matrix which can be queried to get +//the price for a message via the Price method func (r *Registry) createPriceOracle() { - po := &StreamerPrices{ registry: r, } po.priceMatrix = map[reflect.Type]*protocols.Price{ - reflect.TypeOf(ChunkDeliveryMsgRetrieval{}): &protocols.Price{ Value: uint64(100), PerByte: true, Payer: protocols.Receiver, }, - reflect.TypeOf(RetrieveRequestMsg{}): &protocols.Price{ Value: uint64(10), PerByte: false, diff --git a/swarm/swap_test.go b/swarm/swap_test.go index 8a3faee10b..d53a1fbd76 100644 --- a/swarm/swap_test.go +++ b/swarm/swap_test.go @@ -19,6 +19,7 @@ package swarm import ( "context" "errors" + "flag" "fmt" "io/ioutil" "math/rand" @@ -29,7 +30,6 @@ import ( "time" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/simulations/adapters" @@ -39,6 +39,11 @@ import ( "github.com/ethereum/go-ethereum/swarm/storage" ) +var ( + printStats = flag.Bool("printstats", false, "print swap stats") + bucketKeySwarm = simulation.BucketKey("swarm") +) + //In TestSwapNetworkSymmetricFileUpload we set up a network with arbitrary number of nodes //(16), and each of the nodes uploads a file of same size //Afterwards we check that every node's balance WITH ANOTHER PEER @@ -110,7 +115,7 @@ func TestSwapNetworkSymmetricFileUpload(t *testing.T) { } nodeIDs := sim.UpNodeIDs() - shuffle(len(nodeIDs), func(i, j int) { + rand.Shuffle(len(nodeIDs), func(i, j int) { nodeIDs[i], nodeIDs[j] = nodeIDs[j], nodeIDs[i] }) //upload a file for every node @@ -186,17 +191,6 @@ func TestSwapNetworkSymmetricFileUpload(t *testing.T) { fmt.Println(fmt.Sprintf(".........with node %s: balance %d", kk.TerminalString(), vv)) } } - //NOTE: this are currently metrics over ALL nodes, not per node - fmt.Println(fmt.Sprintf("Total units credited: %d", metrics.Get("account.balance.credit").(metrics.Counter).Count())) - fmt.Println(fmt.Sprintf("Total units debited: %d", metrics.Get("account.balance.debit").(metrics.Counter).Count())) - fmt.Println(fmt.Sprintf("Total bytes credited: %d", metrics.Get("account.bytes.credit").(metrics.Counter).Count())) - fmt.Println(fmt.Sprintf("Total bytes debited: %d", metrics.Get("account.bytes.debit").(metrics.Counter).Count())) - //fmt.Println(fmt.Sprintf("Cheques issued: %d", metrics.Get("account.cheques.issued").(metrics.Counter).Count())) - //fmt.Println(fmt.Sprintf("Cheques received: %d", metrics.Get("account.cheques.received").(metrics.Counter).Count())) - fmt.Println(fmt.Sprintf("Number of messages credited: %d", metrics.Get("account.msg.credit").(metrics.Counter).Count())) - fmt.Println(fmt.Sprintf("Number of messages debited: %d", metrics.Get("account.msg.debit").(metrics.Counter).Count())) - fmt.Println(fmt.Sprintf("Peers dropped: %d", metrics.Get("account.peerdrops").(metrics.Counter).Count())) - fmt.Println(fmt.Sprintf("Number of times node dropped itself: %d", metrics.Get("account.selfdrops").(metrics.Counter).Count())) } //now iterate the whole map @@ -308,7 +302,7 @@ func TestSwapNetworkAsymmetricFileUpload(t *testing.T) { } nodeIDs := sim.UpNodeIDs() - shuffle(len(nodeIDs), func(i, j int) { + rand.Shuffle(len(nodeIDs), func(i, j int) { nodeIDs[i], nodeIDs[j] = nodeIDs[j], nodeIDs[i] }) for i, id := range nodeIDs {