Make random example more interesting.

Have different RPC rates for the three services and vary them according
to a diurnal period.
This commit is contained in:
Julius Volz 2015-01-06 17:02:26 +01:00
parent 300983df4b
commit eb24b39865
1 changed files with 27 additions and 8 deletions

View File

@ -18,6 +18,7 @@ package main
import ( import (
"flag" "flag"
"math"
"math/rand" "math/rand"
"net/http" "net/http"
"time" "time"
@ -27,9 +28,10 @@ import (
var ( var (
addr = flag.String("listen-address", ":8080", "The address to listen on for HTTP requests.") addr = flag.String("listen-address", ":8080", "The address to listen on for HTTP requests.")
uniformDomain = flag.Float64("random.uniform.domain", 200, "The domain for the uniform distribution.") uniformDomain = flag.Float64("uniform.domain", 200, "The domain for the uniform distribution.")
normDomain = flag.Float64("random.exponential.domain", 200, "The domain for the normal distribution.") normDomain = flag.Float64("exponential.domain", 200, "The domain for the normal distribution.")
normMean = flag.Float64("random.exponential.mean", 10, "The mean for the normal distribution.") normMean = flag.Float64("exponential.mean", 10, "The mean for the normal distribution.")
oscillationPeriod = flag.Duration("oscillation-period", 10*time.Minute, "The duration of the rate oscillation period.")
) )
var ( var (
@ -53,14 +55,31 @@ func init() {
func main() { func main() {
flag.Parse() flag.Parse()
start := time.Now()
oscillationFactor := func() float64 {
return 2 + math.Sin(math.Sin(2*math.Pi*float64(time.Since(start))/float64(*oscillationPeriod)))
}
// Periodically record some sample latencies for the three services.
go func() { go func() {
for { for {
// Periodically record some sample latencies for the three services.
rpcDurations.WithLabelValues("uniform").Observe(rand.Float64() * *uniformDomain) rpcDurations.WithLabelValues("uniform").Observe(rand.Float64() * *uniformDomain)
rpcDurations.WithLabelValues("normal").Observe((rand.NormFloat64() * *normDomain) + *normMean) time.Sleep(time.Duration(100*oscillationFactor()) * time.Millisecond)
rpcDurations.WithLabelValues("exponential").Observe(rand.ExpFloat64()) }
}()
time.Sleep(100 * time.Millisecond) go func() {
for {
rpcDurations.WithLabelValues("normal").Observe((rand.NormFloat64() * *normDomain) + *normMean)
time.Sleep(time.Duration(75*oscillationFactor()) * time.Millisecond)
}
}()
go func() {
for {
rpcDurations.WithLabelValues("exponential").Observe(rand.ExpFloat64())
time.Sleep(time.Duration(50*oscillationFactor()) * time.Millisecond)
} }
}() }()