mirror of
https://github.com/ipfs/kubo.git
synced 2026-03-01 06:17:56 +08:00
humanize bandwidth output instrument conn.Conn for bandwidth metrics add poll command for continuous bandwidth reporting move bandwidth tracking onto multiaddr net connections another mild refactor of recording locations address concerns from PR lower mock nodes in race test due to increased goroutines per connection
40 lines
824 B
Go
40 lines
824 B
Go
package meterconn
|
|
|
|
import (
|
|
manet "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr-net"
|
|
metrics "github.com/ipfs/go-ipfs/metrics"
|
|
)
|
|
|
|
type MeteredConn struct {
|
|
mesRecv metrics.MeterCallback
|
|
mesSent metrics.MeterCallback
|
|
|
|
manet.Conn
|
|
}
|
|
|
|
func WrapConn(bwc metrics.Reporter, c manet.Conn) manet.Conn {
|
|
return newMeteredConn(c, bwc.LogRecvMessage, bwc.LogSentMessage)
|
|
}
|
|
|
|
func newMeteredConn(base manet.Conn, rcb metrics.MeterCallback, scb metrics.MeterCallback) manet.Conn {
|
|
return &MeteredConn{
|
|
Conn: base,
|
|
mesRecv: rcb,
|
|
mesSent: scb,
|
|
}
|
|
}
|
|
|
|
func (mc *MeteredConn) Read(b []byte) (int, error) {
|
|
n, err := mc.Conn.Read(b)
|
|
|
|
mc.mesRecv(int64(n))
|
|
return n, err
|
|
}
|
|
|
|
func (mc *MeteredConn) Write(b []byte) (int, error) {
|
|
n, err := mc.Conn.Write(b)
|
|
|
|
mc.mesSent(int64(n))
|
|
return n, err
|
|
}
|