Select Git revision
mongo_test.go
request.go 2.02 KiB
package metrics
import (
"github.com/prometheus/client_golang/prometheus"
)
type RequestMetrics struct {
Total *prometheus.CounterVec
FailedTotal *prometheus.CounterVec
DurationSeconds *prometheus.HistogramVec
}
// NewRequestMetrics возвращает метрики для подсчета количества удачных/неудачных запросов, а так же длительности ответов.
//
// subsystem указывает подсистему, к которой принадлежат метрики.
// Значение должно быть уникальным, совпадение разрешено только при совпадении ключей labels. Пустое значение допустимо.
//
// labels - список меток, где каждый элемент метки соответствует парам ключ-значение. Отсутствие допустимо.
// Значения меток должны быть уникальными в рамках одной subsystem.
//
// Метрики записываются в prometheus.DefaultRegisterer
func NewRequestMetrics(subsystem string, durationBuckets []float64, labels ...string) *RequestMetrics {
if len(durationBuckets) == 0 {
durationBuckets = prometheus.DefBuckets
}
metrics := &RequestMetrics{
Total: prometheus.NewCounterVec(prometheus.CounterOpts{
Subsystem: subsystem,
Name: "service_requests_total",
}, []string{"method"}),
FailedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{
Subsystem: subsystem,
Name: "service_requests_failed_total",
}, []string{"method"}),
DurationSeconds: prometheus.NewHistogramVec(prometheus.HistogramOpts{
Subsystem: subsystem,
Name: "service_request_duration_seconds",
Buckets: durationBuckets,
}, []string{"method"}),
}
prometheus.WrapRegistererWith(GetLabelsFromKV(labels), prometheus.DefaultRegisterer).MustRegister(
metrics.Total,
metrics.FailedTotal,
metrics.DurationSeconds,
)
return metrics
}