func handleAPI()

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()
	}
}