...
1
16
17
18
19
20 package cache
21
22 import (
23 "sync"
24 )
25
26
27
28 type GaugeMetric interface {
29 Set(float64)
30 }
31
32
33
34 type CounterMetric interface {
35 Inc()
36 }
37
38
39 type SummaryMetric interface {
40 Observe(float64)
41 }
42
43 type noopMetric struct{}
44
45 func (noopMetric) Inc() {}
46 func (noopMetric) Dec() {}
47 func (noopMetric) Observe(float64) {}
48 func (noopMetric) Set(float64) {}
49
50
51 type MetricsProvider interface {
52 NewListsMetric(name string) CounterMetric
53 NewListDurationMetric(name string) SummaryMetric
54 NewItemsInListMetric(name string) SummaryMetric
55
56 NewWatchesMetric(name string) CounterMetric
57 NewShortWatchesMetric(name string) CounterMetric
58 NewWatchDurationMetric(name string) SummaryMetric
59 NewItemsInWatchMetric(name string) SummaryMetric
60
61 NewLastResourceVersionMetric(name string) GaugeMetric
62 }
63
64 type noopMetricsProvider struct{}
65
66 func (noopMetricsProvider) NewListsMetric(name string) CounterMetric { return noopMetric{} }
67 func (noopMetricsProvider) NewListDurationMetric(name string) SummaryMetric { return noopMetric{} }
68 func (noopMetricsProvider) NewItemsInListMetric(name string) SummaryMetric { return noopMetric{} }
69 func (noopMetricsProvider) NewWatchesMetric(name string) CounterMetric { return noopMetric{} }
70 func (noopMetricsProvider) NewShortWatchesMetric(name string) CounterMetric { return noopMetric{} }
71 func (noopMetricsProvider) NewWatchDurationMetric(name string) SummaryMetric { return noopMetric{} }
72 func (noopMetricsProvider) NewItemsInWatchMetric(name string) SummaryMetric { return noopMetric{} }
73 func (noopMetricsProvider) NewLastResourceVersionMetric(name string) GaugeMetric {
74 return noopMetric{}
75 }
76
77 var metricsFactory = struct {
78 metricsProvider MetricsProvider
79 setProviders sync.Once
80 }{
81 metricsProvider: noopMetricsProvider{},
82 }
83
84
85 func SetReflectorMetricsProvider(metricsProvider MetricsProvider) {
86 metricsFactory.setProviders.Do(func() {
87 metricsFactory.metricsProvider = metricsProvider
88 })
89 }
90
View as plain text