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:
parent
300983df4b
commit
eb24b39865
|
@ -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)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue