jitterbug
Tickers with random jitter
Installation
go get -u github.com/lthibault/jitterbug
Usage
Jitterbug is used by instantiating a jitterbug.Ticker
with an interval and a
jitterbug.Jitter
. The former specifies a baseline interval for the ticker,
to which a jitter is added by the latter.
package main
import (
"log"
"github.com/lthibault/jitterbug"
)
func main() {
t := jitterbug.New(
time.Millisecond * 300,
&jitterbug.Norm{ Stdev: time.Millisecond * 100 },
)
// jitterbug.Ticker behaves like time.Ticker
for tick := <- range t.C {
log.Println(tick)
}
}
Jitterbug is compatible with the univariate distributions from GoNum. For example:
t := jitterbug.New(
time.Millisecond * 300,
&jitterbug.Univariate{
Sampler: &distruv.Gamma{
// Tip: cast time.Duration as float64 when using gonum's distruv
Alpha: float64(time.Millisecond * 100),
Beta: float64(time.Millisecond * 200),
}
},
)
Compatible libraries
- GoNum, specifically the univariate distributions.
- Suture can use jitterbug for it's backoff durations.
RFC
If you find this useful please let me know: l.thibault@sentimens.com
Seriously, even if you just used it in your weekend project, I'd like to hear about it :)