github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/metrics/conn/conn.go (about)

     1  package meterconn
     2  
     3  import (
     4  	manet "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr-net"
     5  	metrics "github.com/ipfs/go-ipfs/metrics"
     6  )
     7  
     8  type MeteredConn struct {
     9  	mesRecv metrics.MeterCallback
    10  	mesSent metrics.MeterCallback
    11  
    12  	manet.Conn
    13  }
    14  
    15  func WrapConn(bwc metrics.Reporter, c manet.Conn) manet.Conn {
    16  	return newMeteredConn(c, bwc.LogRecvMessage, bwc.LogSentMessage)
    17  }
    18  
    19  func newMeteredConn(base manet.Conn, rcb metrics.MeterCallback, scb metrics.MeterCallback) manet.Conn {
    20  	return &MeteredConn{
    21  		Conn:    base,
    22  		mesRecv: rcb,
    23  		mesSent: scb,
    24  	}
    25  }
    26  
    27  func (mc *MeteredConn) Read(b []byte) (int, error) {
    28  	n, err := mc.Conn.Read(b)
    29  
    30  	mc.mesRecv(int64(n))
    31  	return n, err
    32  }
    33  
    34  func (mc *MeteredConn) Write(b []byte) (int, error) {
    35  	n, err := mc.Conn.Write(b)
    36  
    37  	mc.mesSent(int64(n))
    38  	return n, err
    39  }