+++ /dev/null
-// Package prometheus provides Prometheus implementations for metrics.
-// Individual metrics are mapped to their Prometheus counterparts, and
-// (depending on the constructor used) may be automatically registered in the
-// global Prometheus metrics registry.
-package prometheus
-
-import (
- "github.com/prometheus/client_golang/prometheus"
-
- "github.com/go-kit/kit/metrics"
- "github.com/go-kit/kit/metrics/internal/lv"
-)
-
-// Counter implements Counter, via a Prometheus CounterVec.
-type Counter struct {
- cv *prometheus.CounterVec
- lvs lv.LabelValues
-}
-
-// NewCounterFrom constructs and registers a Prometheus CounterVec,
-// and returns a usable Counter object.
-func NewCounterFrom(opts prometheus.CounterOpts, labelNames []string) *Counter {
- cv := prometheus.NewCounterVec(opts, labelNames)
- prometheus.MustRegister(cv)
- return NewCounter(cv)
-}
-
-// NewCounter wraps the CounterVec and returns a usable Counter object.
-func NewCounter(cv *prometheus.CounterVec) *Counter {
- return &Counter{
- cv: cv,
- }
-}
-
-// With implements Counter.
-func (c *Counter) With(labelValues ...string) metrics.Counter {
- return &Counter{
- cv: c.cv,
- lvs: c.lvs.With(labelValues...),
- }
-}
-
-// Add implements Counter.
-func (c *Counter) Add(delta float64) {
- c.cv.With(makeLabels(c.lvs...)).Add(delta)
-}
-
-// Gauge implements Gauge, via a Prometheus GaugeVec.
-type Gauge struct {
- gv *prometheus.GaugeVec
- lvs lv.LabelValues
-}
-
-// NewGaugeFrom construts and registers a Prometheus GaugeVec,
-// and returns a usable Gauge object.
-func NewGaugeFrom(opts prometheus.GaugeOpts, labelNames []string) *Gauge {
- gv := prometheus.NewGaugeVec(opts, labelNames)
- prometheus.MustRegister(gv)
- return NewGauge(gv)
-}
-
-// NewGauge wraps the GaugeVec and returns a usable Gauge object.
-func NewGauge(gv *prometheus.GaugeVec) *Gauge {
- return &Gauge{
- gv: gv,
- }
-}
-
-// With implements Gauge.
-func (g *Gauge) With(labelValues ...string) metrics.Gauge {
- return &Gauge{
- gv: g.gv,
- lvs: g.lvs.With(labelValues...),
- }
-}
-
-// Set implements Gauge.
-func (g *Gauge) Set(value float64) {
- g.gv.With(makeLabels(g.lvs...)).Set(value)
-}
-
-// Add is supported by Prometheus GaugeVecs.
-func (g *Gauge) Add(delta float64) {
- g.gv.With(makeLabels(g.lvs...)).Add(delta)
-}
-
-// Summary implements Histogram, via a Prometheus SummaryVec. The difference
-// between a Summary and a Histogram is that Summaries don't require predefined
-// quantile buckets, but cannot be statistically aggregated.
-type Summary struct {
- sv *prometheus.SummaryVec
- lvs lv.LabelValues
-}
-
-// NewSummaryFrom constructs and registers a Prometheus SummaryVec,
-// and returns a usable Summary object.
-func NewSummaryFrom(opts prometheus.SummaryOpts, labelNames []string) *Summary {
- sv := prometheus.NewSummaryVec(opts, labelNames)
- prometheus.MustRegister(sv)
- return NewSummary(sv)
-}
-
-// NewSummary wraps the SummaryVec and returns a usable Summary object.
-func NewSummary(sv *prometheus.SummaryVec) *Summary {
- return &Summary{
- sv: sv,
- }
-}
-
-// With implements Histogram.
-func (s *Summary) With(labelValues ...string) metrics.Histogram {
- return &Summary{
- sv: s.sv,
- lvs: s.lvs.With(labelValues...),
- }
-}
-
-// Observe implements Histogram.
-func (s *Summary) Observe(value float64) {
- s.sv.With(makeLabels(s.lvs...)).Observe(value)
-}
-
-// Histogram implements Histogram via a Prometheus HistogramVec. The difference
-// between a Histogram and a Summary is that Histograms require predefined
-// quantile buckets, and can be statistically aggregated.
-type Histogram struct {
- hv *prometheus.HistogramVec
- lvs lv.LabelValues
-}
-
-// NewHistogramFrom constructs and registers a Prometheus HistogramVec,
-// and returns a usable Histogram object.
-func NewHistogramFrom(opts prometheus.HistogramOpts, labelNames []string) *Histogram {
- hv := prometheus.NewHistogramVec(opts, labelNames)
- prometheus.MustRegister(hv)
- return NewHistogram(hv)
-}
-
-// NewHistogram wraps the HistogramVec and returns a usable Histogram object.
-func NewHistogram(hv *prometheus.HistogramVec) *Histogram {
- return &Histogram{
- hv: hv,
- }
-}
-
-// With implements Histogram.
-func (h *Histogram) With(labelValues ...string) metrics.Histogram {
- return &Histogram{
- hv: h.hv,
- lvs: h.lvs.With(labelValues...),
- }
-}
-
-// Observe implements Histogram.
-func (h *Histogram) Observe(value float64) {
- h.hv.With(makeLabels(h.lvs...)).Observe(value)
-}
-
-func makeLabels(labelValues ...string) prometheus.Labels {
- labels := prometheus.Labels{}
- for i := 0; i < len(labelValues); i += 2 {
- labels[labelValues[i]] = labelValues[i+1]
- }
- return labels
-}