25 lines
559 B
Go
25 lines
559 B
Go
package utilities
|
|
|
|
import (
|
|
"math"
|
|
"math/rand/v2"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
ApplyJitter = DefaultApplyJitter
|
|
)
|
|
|
|
func DefaultApplyJitter(pauseDuration time.Duration, jitter time.Duration) time.Duration {
|
|
switch {
|
|
case jitter == 0, pauseDuration == 0:
|
|
return pauseDuration
|
|
case jitter > pauseDuration:
|
|
pauseDuration, jitter = jitter, pauseDuration
|
|
}
|
|
min := pauseDuration.Nanoseconds() - jitter.Nanoseconds()
|
|
max := pauseDuration.Nanoseconds() + jitter.Nanoseconds()
|
|
rnd := int64(math.Max(float64(rand.Int64N(max-min)+min), 0))
|
|
return time.Duration(rnd)
|
|
}
|