mirror of
https://github.com/ipfs/kubo.git
synced 2025-09-16 04:02:05 +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
53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package meterstream
|
|
|
|
import (
|
|
metrics "github.com/ipfs/go-ipfs/metrics"
|
|
inet "github.com/ipfs/go-ipfs/p2p/net"
|
|
peer "github.com/ipfs/go-ipfs/p2p/peer"
|
|
protocol "github.com/ipfs/go-ipfs/p2p/protocol"
|
|
)
|
|
|
|
type meteredStream struct {
|
|
// keys for accessing metrics data
|
|
protoKey protocol.ID
|
|
peerKey peer.ID
|
|
|
|
inet.Stream
|
|
|
|
// callbacks for reporting bandwidth usage
|
|
mesSent metrics.StreamMeterCallback
|
|
mesRecv metrics.StreamMeterCallback
|
|
}
|
|
|
|
func newMeteredStream(base inet.Stream, pid protocol.ID, p peer.ID, recvCB, sentCB metrics.StreamMeterCallback) inet.Stream {
|
|
return &meteredStream{
|
|
Stream: base,
|
|
mesSent: sentCB,
|
|
mesRecv: recvCB,
|
|
protoKey: pid,
|
|
peerKey: p,
|
|
}
|
|
}
|
|
|
|
func WrapStream(base inet.Stream, pid protocol.ID, bwc metrics.Reporter) inet.Stream {
|
|
return newMeteredStream(base, pid, base.Conn().RemotePeer(), bwc.LogRecvMessageStream, bwc.LogSentMessageStream)
|
|
}
|
|
|
|
func (s *meteredStream) Read(b []byte) (int, error) {
|
|
n, err := s.Stream.Read(b)
|
|
|
|
// Log bytes read
|
|
s.mesRecv(int64(n), s.protoKey, s.peerKey)
|
|
|
|
return n, err
|
|
}
|
|
|
|
func (s *meteredStream) Write(b []byte) (int, error) {
|
|
n, err := s.Stream.Write(b)
|
|
|
|
// Log bytes written
|
|
s.mesSent(int64(n), s.protoKey, s.peerKey)
|
|
|
|
return n, err
|
|
}
|