Implement --bwlimit to limit data transfer bandwidth

This commit is contained in:
Nick Craig-Wood
2015-02-27 15:03:47 +00:00
parent 8e4d8d13b8
commit a287e3ced7
5 changed files with 132 additions and 1 deletions
+16 -1
View File
@@ -10,13 +10,24 @@ import (
"strings"
"sync"
"time"
"github.com/tsenart/tb"
)
// Globals
var (
Stats = NewStats()
Stats = NewStats()
tokenBucket *tb.Bucket
)
// Start the token bucket if necessary
func startTokenBucket() {
if bwLimit > 0 {
tokenBucket = tb.NewBucket(int64(bwLimit), 100*time.Millisecond)
Log(nil, "Starting bandwidth limiter at %vBytes/s", &bwLimit)
}
}
// Stringset holds some strings
type StringSet map[string]bool
@@ -178,6 +189,10 @@ func (file *Account) Read(p []byte) (n int, err error) {
if err == io.EOF {
// FIXME Do something?
}
// Limit the transfer speed if required
if tokenBucket != nil {
tokenBucket.Wait(int64(n))
}
return
}