mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-27 17:21:34 +00:00
* Rework Scope metrics according to Prometheus conventions. - counters should end with _total - elaborated and added units to help strings - recommended for cache hit/miss metrics: track only the total and the hits and in separate metrics, since the most common query will be "hits / total" - track all times in seconds (base units), which has become the standard recommendation - other small changes There could be more changes that would require more thinking (what dimensions to use, summaries vs. histograms, etc.), but this is probably enough controversial material already :) * Use timeRequestStatus() in sqs_control_router.go.
41 lines
1.1 KiB
Go
41 lines
1.1 KiB
Go
package multitenant
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
)
|
|
|
|
func errorCode(err error) string {
|
|
if err == nil {
|
|
return "200"
|
|
}
|
|
return "500"
|
|
}
|
|
|
|
// timeRequest runs 'f' and records how long it took in the given Prometheus
|
|
// metric. If 'f' returns successfully, record a "200". Otherwise, record
|
|
// "500".
|
|
//
|
|
// If you want more complicated logic for translating errors into statuses,
|
|
// use 'timeRequestStatus'.
|
|
func timeRequest(method string, metric *prometheus.SummaryVec, f func() error) error {
|
|
return timeRequestStatus(method, metric, errorCode, f)
|
|
}
|
|
|
|
// timeRequestStatus runs 'f' and records how long it took in the given
|
|
// Prometheus metric.
|
|
//
|
|
// toStatusCode is a function that translates errors returned by 'f' into
|
|
// HTTP-like status codes.
|
|
func timeRequestStatus(method string, metric *prometheus.SummaryVec, toStatusCode func(error) string, f func() error) error {
|
|
if toStatusCode == nil {
|
|
toStatusCode = errorCode
|
|
}
|
|
startTime := time.Now()
|
|
err := f()
|
|
duration := time.Now().Sub(startTime)
|
|
metric.WithLabelValues(method, toStatusCode(err)).Observe(duration.Seconds())
|
|
return err
|
|
}
|