Files
akvorado/common/reporter/metrics.go
Vincent Bernat 8be1bca4fd license: AGPL-3.0-only
```
git ls-files \*.js \*.go \
  | xargs sed -i '1i // SPDX-FileCopyrightText: 2022 Free Mobile\n// SPDX-License-Identifier: AGPL-3.0-only\n'
git ls-files \*.vue \
  | xargs sed -i '1i <!-- SPDX-FileCopyrightText: 2022 Free Mobile -->\n<!-- SPDX-License-Identifier: AGPL-3.0-only -->\n'
```
2022-06-29 11:42:28 +02:00

123 lines
4.0 KiB
Go

// SPDX-FileCopyrightText: 2022 Free Mobile
// SPDX-License-Identifier: AGPL-3.0-only
// Metrics façade for reporter.
//
// It supports all methods from a factory (except UntypedFunc). See
// https://pkg.go.dev/github.com/prometheus/client_golang/prometheus/promauto#Factory.
// Unlike promauto, it will accepts duplicate registration.
package reporter
import (
"net/http"
"github.com/prometheus/client_golang/prometheus"
)
// Register some aliases to avoid importing prometheus package.
type (
// CounterOpts defines options for counters
CounterOpts = prometheus.CounterOpts
// GaugeOpts defines options for gauges
GaugeOpts = prometheus.GaugeOpts
// HistogramOpts defines options for histograms
HistogramOpts = prometheus.HistogramOpts
// SummaryOpts defines options for summaries
SummaryOpts = prometheus.SummaryOpts
// UntypedOpts defines options for untypeds
UntypedOpts = prometheus.UntypedOpts
// Counter defines counters
Counter = prometheus.Counter
// CounterFunc defines counter functions
CounterFunc = prometheus.CounterFunc
// CounterVec defines counter vectors
CounterVec = prometheus.CounterVec
// Gauge defines gauges
Gauge = prometheus.Gauge
// GaugeFunc defines gauge functions
GaugeFunc = prometheus.GaugeFunc
// GaugeVec defines gauge vectors
GaugeVec = prometheus.GaugeVec
// Histogram defines histograms
Histogram = prometheus.Histogram
// HistogramVec defines histogram vectors
HistogramVec = prometheus.HistogramVec
// Summary defines summarys
Summary = prometheus.Summary
// SummaryVec defines summary vectors
SummaryVec = prometheus.SummaryVec
// UntypedFunc defines untyped functions
UntypedFunc = prometheus.UntypedFunc
// MetricDesc defines a metric description
MetricDesc = prometheus.Desc
)
// Counter mimics NewCounter from promauto package.
func (r *Reporter) Counter(opts CounterOpts) Counter {
return r.metrics.Factory(1).NewCounter(opts)
}
// CounterFunc mimics NewCounterFunc from promauto package.
func (r *Reporter) CounterFunc(opts CounterOpts, function func() float64) CounterFunc {
return r.metrics.Factory(1).NewCounterFunc(opts, function)
}
// CounterVec mimics NewCounterVec from promauto package.
func (r *Reporter) CounterVec(opts CounterOpts, labelNames []string) *CounterVec {
return r.metrics.Factory(1).NewCounterVec(opts, labelNames)
}
// Gauge mimics NewGauge from promauto package.
func (r *Reporter) Gauge(opts GaugeOpts) Gauge {
return r.metrics.Factory(1).NewGauge(opts)
}
// GaugeFunc mimics NewGaugeFunc from promauto package.
func (r *Reporter) GaugeFunc(opts GaugeOpts, function func() float64) GaugeFunc {
return r.metrics.Factory(1).NewGaugeFunc(opts, function)
}
// GaugeVec mimics NewGaugeVec from promauto package.
func (r *Reporter) GaugeVec(opts GaugeOpts, labelNames []string) *GaugeVec {
return r.metrics.Factory(1).NewGaugeVec(opts, labelNames)
}
// Histogram mimics NewHistogram from promauto package.
func (r *Reporter) Histogram(opts HistogramOpts) Histogram {
return r.metrics.Factory(1).NewHistogram(opts)
}
// HistogramVec mimics NewHistogramVec from promauto package.
func (r *Reporter) HistogramVec(opts HistogramOpts, labelNames []string) *HistogramVec {
return r.metrics.Factory(1).NewHistogramVec(opts, labelNames)
}
// Summary mimics NewSummary from promauto package.
func (r *Reporter) Summary(opts SummaryOpts) Summary {
return r.metrics.Factory(1).NewSummary(opts)
}
// SummaryVec mimics NewSummaryVec from promauto package.
func (r *Reporter) SummaryVec(opts SummaryOpts, labelNames []string) *SummaryVec {
return r.metrics.Factory(1).NewSummaryVec(opts, labelNames)
}
// MetricsHTTPHandler returns the HTTP handler to get metrics.
func (r *Reporter) MetricsHTTPHandler() http.Handler {
return r.metrics.HTTPHandler()
}
// MetricCollector register a custom collector.
func (r *Reporter) MetricCollector(c prometheus.Collector) {
r.metrics.Collector(c)
}
// MetricDesc defines a new metric description.
func (r *Reporter) MetricDesc(name, help string, variableLabels []string) *MetricDesc {
return r.metrics.Desc(1, name, help, variableLabels)
}