github.com/pingcap/chaos@v0.0.0-20190710112158-c86faf4b3719/pkg/generator/gen.go (about)

     1  package generator
     2  
     3  import (
     4  	"math/rand"
     5  	"time"
     6  )
     7  
     8  // Generator generates a series of operations
     9  type Generator = func() interface{}
    10  
    11  // Stagger introduces uniform random timing noise with a mean delay of
    12  // dt duration for every operation. Delays range from 0 to 2 * dt."
    13  func Stagger(dt time.Duration, gen Generator) Generator {
    14  	r := rand.New(rand.NewSource(time.Now().UnixNano()))
    15  	return func() interface{} {
    16  		time.Sleep(time.Duration(r.Int63n(2 * int64(dt))))
    17  		return gen()
    18  	}
    19  }