swarm/network: counters for outgoing/incoming requests for chunks

This commit is contained in:
Anton Evangelatov 2018-04-25 15:26:47 +02:00
parent 0f3dc214e4
commit 5865adf67a

View file

@ -27,6 +27,7 @@ import (
"github.com/ethereum/go-ethereum/p2p/discover" "github.com/ethereum/go-ethereum/p2p/discover"
"github.com/ethereum/go-ethereum/swarm/network" "github.com/ethereum/go-ethereum/swarm/network"
"github.com/ethereum/go-ethereum/swarm/storage" "github.com/ethereum/go-ethereum/swarm/storage"
metrics "github.com/rcrowley/go-metrics"
) )
const ( const (
@ -34,6 +35,14 @@ const (
deliveryCap = 32 deliveryCap = 32
) )
var (
processReceivedChunksCount = metrics.NewRegisteredCounter("network.stream.received_chunks.count", nil)
handleRetrieveRequestMsgCount = metrics.NewRegisteredCounter("network.stream.handle_retrieve_request_msg.count", nil)
requestFromPeersCount = metrics.NewRegisteredCounter("network.stream.request_from_peers.count", nil)
requestFromPeersEachCount = metrics.NewRegisteredCounter("network.stream.request_from_peers_each.count", nil)
)
type Delivery struct { type Delivery struct {
db *storage.DBAPI db *storage.DBAPI
overlay network.Overlay overlay network.Overlay
@ -129,6 +138,8 @@ type RetrieveRequestMsg struct {
func (d *Delivery) handleRetrieveRequestMsg(sp *Peer, req *RetrieveRequestMsg) error { func (d *Delivery) handleRetrieveRequestMsg(sp *Peer, req *RetrieveRequestMsg) error {
log.Trace("received request", "peer", sp.ID(), "hash", req.Key) log.Trace("received request", "peer", sp.ID(), "hash", req.Key)
handleRetrieveRequestMsgCount.Inc(1)
s, err := sp.getServer(NewStream(swarmChunkServerStreamName, "", false)) s, err := sp.getServer(NewStream(swarmChunkServerStreamName, "", false))
if err != nil { if err != nil {
return err return err
@ -194,6 +205,8 @@ func (d *Delivery) handleChunkDeliveryMsg(sp *Peer, req *ChunkDeliveryMsg) error
func (d *Delivery) processReceivedChunks() { func (d *Delivery) processReceivedChunks() {
R: R:
for req := range d.receiveC { for req := range d.receiveC {
processReceivedChunksCount.Inc(1)
// this should be has locally // this should be has locally
chunk, err := d.db.Get(req.Key) chunk, err := d.db.Get(req.Key)
if !bytes.Equal(chunk.Key, req.Key) { if !bytes.Equal(chunk.Key, req.Key) {
@ -227,6 +240,7 @@ R:
func (d *Delivery) RequestFromPeers(hash []byte, skipCheck bool, peersToSkip ...discover.NodeID) error { func (d *Delivery) RequestFromPeers(hash []byte, skipCheck bool, peersToSkip ...discover.NodeID) error {
var success bool var success bool
var err error var err error
requestFromPeersCount.Inc(1)
d.overlay.EachConn(hash, 255, func(p network.OverlayConn, po int, nn bool) bool { d.overlay.EachConn(hash, 255, func(p network.OverlayConn, po int, nn bool) bool {
spId := p.(network.Peer).ID() spId := p.(network.Peer).ID()
for _, p := range peersToSkip { for _, p := range peersToSkip {
@ -248,6 +262,7 @@ func (d *Delivery) RequestFromPeers(hash []byte, skipCheck bool, peersToSkip ...
if err != nil { if err != nil {
return true return true
} }
requestFromPeersEachCount.Inc(1)
success = true success = true
return false return false
}) })