in tools/fake-webserver/server.go [141:178]
func handleAPI(method, path string) {
requestsInProgress.Inc()
status := http.StatusOK
duration := time.Millisecond
defer func() {
requestsInProgress.Dec()
requestHistogram.With(prometheus.Labels{
"method": method,
"path": path,
"status": fmt.Sprint(status),
}).Observe(duration.Seconds())
requestsTotal.WithLabelValues(method, path, fmt.Sprint(status)).Inc()
}()
pathOpts, ok := opts[path]
if !ok {
status = http.StatusNotFound
return
}
methodOpts, ok := pathOpts[method]
if !ok {
status = http.StatusMethodNotAllowed
return
}
latencyFactor := time.Duration(1)
errorFactor := 1.
if time.Since(start)%(10*methodOpts.outageDuration) < methodOpts.outageDuration {
latencyFactor *= 3
errorFactor *= 10
}
duration = (methodOpts.baseLatency + time.Duration(rand.NormFloat64()*float64(methodOpts.baseLatency)/10)) * latencyFactor
if rand.Float64() <= methodOpts.errorRatio*errorFactor {
status = http.StatusInternalServerError
requestErrorsTotal.WithLabelValues(method, path, fmt.Sprint(status)).Inc()
}
}