...
1
16
17 package prometheusextension
18
19 import (
20 "github.com/prometheus/client_golang/prometheus"
21 )
22
23
24
25 type WeightedObserverVec interface {
26 GetMetricWith(prometheus.Labels) (WeightedObserver, error)
27 GetMetricWithLabelValues(lvs ...string) (WeightedObserver, error)
28 With(prometheus.Labels) WeightedObserver
29 WithLabelValues(...string) WeightedObserver
30 CurryWith(prometheus.Labels) (WeightedObserverVec, error)
31 MustCurryWith(prometheus.Labels) WeightedObserverVec
32 }
33
34
35 type WeightedHistogramVec struct {
36 *prometheus.MetricVec
37 }
38
39 var _ WeightedObserverVec = &WeightedHistogramVec{}
40 var _ prometheus.Collector = &WeightedHistogramVec{}
41
42 func NewWeightedHistogramVec(opts WeightedHistogramOpts, labelNames ...string) *WeightedHistogramVec {
43 desc := prometheus.NewDesc(
44 prometheus.BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
45 wrapWeightedHelp(opts.Help),
46 labelNames,
47 opts.ConstLabels,
48 )
49 return &WeightedHistogramVec{
50 MetricVec: prometheus.NewMetricVec(desc, func(lvs ...string) prometheus.Metric {
51 metric, err := newWeightedHistogram(desc, opts, lvs...)
52 if err != nil {
53 panic(err)
54 }
55 return metric
56 }),
57 }
58 }
59
60 func (hv *WeightedHistogramVec) GetMetricWith(labels prometheus.Labels) (WeightedObserver, error) {
61 metric, err := hv.MetricVec.GetMetricWith(labels)
62 if metric != nil {
63 return metric.(WeightedObserver), err
64 }
65 return nil, err
66 }
67
68 func (hv *WeightedHistogramVec) GetMetricWithLabelValues(lvs ...string) (WeightedObserver, error) {
69 metric, err := hv.MetricVec.GetMetricWithLabelValues(lvs...)
70 if metric != nil {
71 return metric.(WeightedObserver), err
72 }
73 return nil, err
74 }
75
76 func (hv *WeightedHistogramVec) With(labels prometheus.Labels) WeightedObserver {
77 h, err := hv.GetMetricWith(labels)
78 if err != nil {
79 panic(err)
80 }
81 return h
82 }
83
84 func (hv *WeightedHistogramVec) WithLabelValues(lvs ...string) WeightedObserver {
85 h, err := hv.GetMetricWithLabelValues(lvs...)
86 if err != nil {
87 panic(err)
88 }
89 return h
90 }
91
92 func (hv *WeightedHistogramVec) CurryWith(labels prometheus.Labels) (WeightedObserverVec, error) {
93 vec, err := hv.MetricVec.CurryWith(labels)
94 if vec != nil {
95 return &WeightedHistogramVec{MetricVec: vec}, err
96 }
97 return nil, err
98 }
99
100 func (hv *WeightedHistogramVec) MustCurryWith(labels prometheus.Labels) WeightedObserverVec {
101 vec, err := hv.CurryWith(labels)
102 if err != nil {
103 panic(err)
104 }
105 return vec
106 }
107
View as plain text