mirror of https://github.com/hashicorp/consul
24 lines
599 B
Go
24 lines
599 B
Go
|
package lib
|
||
|
|
||
|
import (
|
||
|
"math/rand"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
// Returns a random stagger interval between 0 and the duration
|
||
|
func RandomStagger(intv time.Duration) time.Duration {
|
||
|
return time.Duration(uint64(rand.Int63()) % uint64(intv))
|
||
|
}
|
||
|
|
||
|
// RateScaledInterval is used to choose an interval to perform an action in
|
||
|
// order to target an aggregate number of actions per second across the whole
|
||
|
// cluster.
|
||
|
func RateScaledInterval(rate float64, min time.Duration, n int) time.Duration {
|
||
|
interval := time.Duration(float64(time.Second) * float64(n) / rate)
|
||
|
if interval < min {
|
||
|
return min
|
||
|
}
|
||
|
|
||
|
return interval
|
||
|
}
|