log
parent
42b2344fef
commit
2d18a6cdbe
|
|
@ -19,7 +19,7 @@ func NewConfig() *Config {
|
|||
as := args.NewArgSet()
|
||||
|
||||
as.Append(args.INT, "p", "port to listen on", 61113)
|
||||
as.Append(args.INT, "kbps", "port to listen on", 61113)
|
||||
as.Append(args.INT, "kbps", "kilobytes per sec limit", -1)
|
||||
as.Append(args.BOOL, "tls-insecure", "permit tls insecure", false)
|
||||
as.Append(args.DURATION, "t", "timeout", time.Minute)
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ package main
|
|||
import (
|
||||
"context"
|
||||
"io"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"golang.org/x/time/rate"
|
||||
)
|
||||
|
|
@ -15,12 +17,14 @@ type throttledWriter struct {
|
|||
|
||||
func (tw throttledWriter) Write(b []byte) (int, error) {
|
||||
if tw.limiter != nil {
|
||||
start := time.Now()
|
||||
if block := tw.limiter.Burst(); len(b) > block {
|
||||
b = b[:block]
|
||||
}
|
||||
if err := tw.limiter.WaitN(tw.ctx, len(b)); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
log.Printf("limited %v bytes for %v", len(b), time.Since(start))
|
||||
}
|
||||
return tw.w.Write(b)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue