mirror of
https://github.com/libp2p/go-libp2p-core.git
synced 2025-01-15 02:30:05 +08:00
Merge pull request #71 from kpp/clear_bwc
Add API to reset bandwidth counters
This commit is contained in:
commit
42a4b347f6
2
go.mod
2
go.mod
@ -6,7 +6,7 @@ require (
|
||||
github.com/gogo/protobuf v1.3.1
|
||||
github.com/ipfs/go-cid v0.0.3
|
||||
github.com/jbenet/goprocess v0.1.3
|
||||
github.com/libp2p/go-flow-metrics v0.0.1
|
||||
github.com/libp2p/go-flow-metrics v0.0.2
|
||||
github.com/libp2p/go-msgio v0.0.4
|
||||
github.com/libp2p/go-openssl v0.0.3
|
||||
github.com/minio/sha256-simd v0.1.1
|
||||
|
4
go.sum
4
go.sum
@ -66,8 +66,8 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/libp2p/go-buffer-pool v0.0.1 h1:9Rrn/H46cXjaA2HQ5Y8lyhOS1NhTkZ4yuEs2r3Eechg=
|
||||
github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ=
|
||||
github.com/libp2p/go-flow-metrics v0.0.1 h1:0gxuFd2GuK7IIP5pKljLwps6TvcuYgvG7Atqi3INF5s=
|
||||
github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8=
|
||||
github.com/libp2p/go-flow-metrics v0.0.2 h1:U5TvqfoyR6GVRM+bC15Ux1ltar1kbj6Zw6xOVR02CZs=
|
||||
github.com/libp2p/go-flow-metrics v0.0.2/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs=
|
||||
github.com/libp2p/go-msgio v0.0.4 h1:agEFehY3zWJFUHK6SEMR7UYmk2z6kC3oeCM7ybLhguA=
|
||||
github.com/libp2p/go-msgio v0.0.4 h1:agEFehY3zWJFUHK6SEMR7UYmk2z6kC3oeCM7ybLhguA=
|
||||
github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ=
|
||||
|
@ -151,3 +151,15 @@ func (bwc *BandwidthCounter) GetBandwidthByProtocol() map[protocol.ID]Stats {
|
||||
|
||||
return protocols
|
||||
}
|
||||
|
||||
// Reset clears all stats.
|
||||
func (bwc *BandwidthCounter) Reset() {
|
||||
bwc.totalIn.Reset()
|
||||
bwc.totalOut.Reset()
|
||||
|
||||
bwc.protocolIn.Clear()
|
||||
bwc.protocolOut.Clear()
|
||||
|
||||
bwc.peerIn.Clear()
|
||||
bwc.peerOut.Clear()
|
||||
}
|
||||
|
@ -48,8 +48,8 @@ func round(bwc *BandwidthCounter, b *testing.B) {
|
||||
b.StopTimer()
|
||||
}
|
||||
|
||||
// Allow 7% errors for bw calculations.
|
||||
const acceptableError = 0.07
|
||||
// Allow 1% errors for bw calculations.
|
||||
const acceptableError = 0.01
|
||||
|
||||
func TestBandwidthCounter(t *testing.T) {
|
||||
bwc := NewBandwidthCounter()
|
||||
@ -62,12 +62,19 @@ func TestBandwidthCounter(t *testing.T) {
|
||||
proto := protocol.ID(fmt.Sprintf("proto-%d", j))
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
|
||||
// make sure the bandwidth counters are active
|
||||
bwc.LogSentMessage(100)
|
||||
bwc.LogRecvMessage(50)
|
||||
bwc.LogSentMessageStream(100, proto, p)
|
||||
bwc.LogRecvMessageStream(50, proto, p)
|
||||
|
||||
<-start
|
||||
|
||||
t := time.NewTicker(100 * time.Millisecond)
|
||||
defer t.Stop()
|
||||
|
||||
for i := 0; i < 40; i++ {
|
||||
for i := 0; i < 39; i++ {
|
||||
bwc.LogSentMessage(100)
|
||||
bwc.LogRecvMessage(50)
|
||||
bwc.LogSentMessageStream(100, proto, p)
|
||||
@ -104,6 +111,7 @@ func TestBandwidthCounter(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
time.Sleep(time.Second)
|
||||
close(start)
|
||||
time.Sleep(2*time.Second + 100*time.Millisecond)
|
||||
|
||||
@ -143,6 +151,71 @@ func TestBandwidthCounter(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestResetBandwidthCounter(t *testing.T) {
|
||||
bwc := NewBandwidthCounter()
|
||||
|
||||
p := peer.ID("peer-0")
|
||||
proto := protocol.ID("proto-0")
|
||||
|
||||
// We don't calculate bandwidth till we've been active for a second.
|
||||
bwc.LogSentMessage(42)
|
||||
bwc.LogRecvMessage(24)
|
||||
bwc.LogSentMessageStream(100, proto, p)
|
||||
bwc.LogRecvMessageStream(50, proto, p)
|
||||
|
||||
time.Sleep(1*time.Second + time.Millisecond)
|
||||
|
||||
bwc.LogSentMessage(42)
|
||||
bwc.LogRecvMessage(24)
|
||||
bwc.LogSentMessageStream(100, proto, p)
|
||||
bwc.LogRecvMessageStream(50, proto, p)
|
||||
|
||||
time.Sleep(1*time.Second + time.Millisecond)
|
||||
|
||||
{
|
||||
stats := bwc.GetBandwidthTotals()
|
||||
assertEq(t, 84, stats.TotalOut)
|
||||
assertEq(t, 48, stats.TotalIn)
|
||||
}
|
||||
|
||||
{
|
||||
stats := bwc.GetBandwidthByProtocol()
|
||||
assertApproxEq(t, 1, float64(len(stats)))
|
||||
stat := stats[proto]
|
||||
assertApproxEq(t, 100, stat.RateOut)
|
||||
assertApproxEq(t, 50, stat.RateIn)
|
||||
}
|
||||
|
||||
{
|
||||
stats := bwc.GetBandwidthByPeer()
|
||||
assertApproxEq(t, 1, float64(len(stats)))
|
||||
stat := stats[p]
|
||||
assertApproxEq(t, 100, stat.RateOut)
|
||||
assertApproxEq(t, 50, stat.RateIn)
|
||||
}
|
||||
|
||||
bwc.Reset()
|
||||
{
|
||||
stats := bwc.GetBandwidthTotals()
|
||||
assertEq(t, 0, stats.TotalOut)
|
||||
assertEq(t, 0, stats.TotalIn)
|
||||
}
|
||||
|
||||
{
|
||||
byProtocol := bwc.GetBandwidthByProtocol()
|
||||
if len(byProtocol) != 0 {
|
||||
t.Errorf("expected 0 protocols, got %d", len(byProtocol))
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
byPeer := bwc.GetBandwidthByPeer()
|
||||
if len(byPeer) != 0 {
|
||||
t.Errorf("expected 0 peers, got %d", len(byPeer))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func assertEq(t *testing.T, expected, actual int64) {
|
||||
if expected != actual {
|
||||
t.Errorf("expected %d, got %d", expected, actual)
|
||||
|
Loading…
Reference in New Issue
Block a user