-
Notifications
You must be signed in to change notification settings - Fork 2.8k
/
interfaces.go
199 lines (154 loc) · 6.37 KB
/
interfaces.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
// SPDX-License-Identifier: Apache-2.0
// Copyright Authors of Cilium
package metrics
import (
"github.com/cilium/cilium/api/v1/client/daemon"
"github.com/cilium/cilium/api/v1/health/client/connectivity"
metricpkg "github.com/cilium/cilium/pkg/metrics/metric"
"github.com/prometheus/client_golang/prometheus"
dto "github.com/prometheus/client_model/go"
)
type daemonHealthGetter interface {
GetHealthz(params *daemon.GetHealthzParams, opts ...daemon.ClientOption) (*daemon.GetHealthzOK, error)
}
type connectivityStatusGetter interface {
GetStatus(params *connectivity.GetStatusParams, opts ...connectivity.ClientOption) (*connectivity.GetStatusOK, error)
}
var (
NoOpMetric prometheus.Metric = &mockMetric{}
NoOpCollector prometheus.Collector = &collector{}
NoOpCounter metricpkg.Counter = &counter{NoOpMetric, NoOpCollector}
NoOpCounterVec metricpkg.Vec[metricpkg.Counter] = &counterVec{NoOpCollector}
NoOpObserver metricpkg.Observer = &observer{}
NoOpHistogram metricpkg.Histogram = &histogram{NoOpCollector}
NoOpObserverVec metricpkg.Vec[metricpkg.Observer] = &observerVec{NoOpCollector}
NoOpGauge metricpkg.Gauge = &gauge{NoOpMetric, NoOpCollector}
NoOpGaugeVec metricpkg.Vec[metricpkg.Gauge] = &gaugeVec{NoOpCollector}
NoOpGaugeDeletableVec metricpkg.DeletableVec[metricpkg.Gauge] = &gaugeDeletableVec{gaugeVec{NoOpCollector}}
)
// Metric
type mockMetric struct{}
// *WARNING*: Desc returns nil so do not register this metric into prometheus
// default register.
func (m *mockMetric) Desc() *prometheus.Desc { return nil }
func (m *mockMetric) Write(*dto.Metric) error { return nil }
// Collector
type collector struct{}
func (c *collector) Describe(chan<- *prometheus.Desc) {}
func (c *collector) Collect(chan<- prometheus.Metric) {}
// Counter
type counter struct {
prometheus.Metric
prometheus.Collector
}
func (cv *counter) Add(float64) {}
func (cv *counter) Get() float64 { return 0 }
func (cv *counter) Inc() {}
func (cv *counter) IsEnabled() bool { return false }
func (cv *counter) SetEnabled(bool) {}
func (cv *counter) Opts() metricpkg.Opts { return metricpkg.Opts{} }
// CounterVec
type counterVec struct{ prometheus.Collector }
func (cv *counterVec) With(prometheus.Labels) metricpkg.Counter { return NoOpGauge }
func (cv *counterVec) WithLabelValues(...string) metricpkg.Counter { return NoOpGauge }
func (cv *counterVec) CurryWith(prometheus.Labels) (metricpkg.Vec[metricpkg.Counter], error) {
return NoOpCounterVec, nil
}
func (cv *counterVec) MustCurryWith(prometheus.Labels) metricpkg.Vec[metricpkg.Counter] {
return NoOpCounterVec
}
func (cv *counterVec) GetMetricWith(prometheus.Labels) (metricpkg.Counter, error) {
return NoOpCounter, nil
}
func (cv *counterVec) GetMetricWithLabelValues(...string) (metricpkg.Counter, error) {
return NoOpCounter, nil
}
func (cv *counterVec) IsEnabled() bool { return false }
func (cv *counterVec) SetEnabled(bool) {}
func (cv *counterVec) Opts() metricpkg.Opts { return metricpkg.Opts{} }
// Observer
type observer struct{}
func (o *observer) Observe(float64) {}
func (o *observer) IsEnabled() bool { return false }
func (o *observer) SetEnabled(bool) {}
func (o *observer) Opts() metricpkg.Opts { return metricpkg.Opts{} }
// Histogram
type histogram struct {
prometheus.Collector
}
func (h *histogram) Observe(float64) {}
func (h *histogram) Desc() *prometheus.Desc { return nil }
func (h *histogram) Write(*dto.Metric) error { return nil }
func (h *histogram) IsEnabled() bool { return false }
func (h *histogram) SetEnabled(bool) {}
func (h *histogram) Opts() metricpkg.Opts { return metricpkg.Opts{} }
// ObserverVec
type observerVec struct {
prometheus.Collector
}
func (ov *observerVec) GetMetricWith(prometheus.Labels) (metricpkg.Observer, error) {
return NoOpObserver, nil
}
func (ov *observerVec) GetMetricWithLabelValues(lvs ...string) (metricpkg.Observer, error) {
return NoOpObserver, nil
}
func (ov *observerVec) With(prometheus.Labels) metricpkg.Observer { return NoOpObserver }
func (ov *observerVec) WithLabelValues(...string) metricpkg.Observer { return NoOpObserver }
func (ov *observerVec) CurryWith(prometheus.Labels) (metricpkg.Vec[metricpkg.Observer], error) {
return NoOpObserverVec, nil
}
func (ov *observerVec) MustCurryWith(prometheus.Labels) metricpkg.Vec[metricpkg.Observer] {
return NoOpObserverVec
}
func (ov *observerVec) IsEnabled() bool { return false }
func (ov *observerVec) SetEnabled(bool) {}
func (ov *observerVec) Opts() metricpkg.Opts { return metricpkg.Opts{} }
// Gauge
type gauge struct {
prometheus.Metric
prometheus.Collector
}
func (g *gauge) Set(float64) {}
func (g *gauge) Get() float64 { return 0 }
func (g *gauge) Inc() {}
func (g *gauge) Dec() {}
func (g *gauge) Add(float64) {}
func (g *gauge) Sub(float64) {}
func (g *gauge) SetToCurrentTime() {}
func (g *gauge) IsEnabled() bool { return false }
func (g *gauge) SetEnabled(bool) {}
func (g *gauge) Opts() metricpkg.Opts { return metricpkg.Opts{} }
// GaugeVec
type gaugeDeletableVec struct {
gaugeVec
}
func (*gaugeDeletableVec) Delete(ll prometheus.Labels) bool {
return false
}
func (*gaugeDeletableVec) DeleteLabelValues(lvs ...string) bool {
return false
}
func (*gaugeDeletableVec) DeletePartialMatch(labels prometheus.Labels) int {
return 0
}
func (*gaugeDeletableVec) Reset() {}
type gaugeVec struct {
prometheus.Collector
}
func (gv *gaugeVec) With(prometheus.Labels) metricpkg.Gauge { return NoOpGauge }
func (gv *gaugeVec) WithLabelValues(...string) metricpkg.Gauge { return NoOpGauge }
func (gv *gaugeVec) CurryWith(prometheus.Labels) (metricpkg.Vec[metricpkg.Gauge], error) {
return NoOpGaugeVec, nil
}
func (gv *gaugeVec) MustCurryWith(prometheus.Labels) metricpkg.Vec[metricpkg.Gauge] {
return NoOpGaugeVec
}
func (gv *gaugeVec) GetMetricWith(prometheus.Labels) (metricpkg.Gauge, error) {
return NoOpGauge, nil
}
func (gv *gaugeVec) GetMetricWithLabelValues(...string) (metricpkg.Gauge, error) {
return NoOpGauge, nil
}
func (gv *gaugeVec) IsEnabled() bool { return false }
func (gv *gaugeVec) SetEnabled(bool) {}
func (gv *gaugeVec) Opts() metricpkg.Opts { return metricpkg.Opts{} }