nop.go raw
1 package metrics
2
3 import "context"
4
5 // NopMeterProvider is a no-op metrics implementation.
6 type NopMeterProvider struct{}
7
8 var _ MeterProvider = (*NopMeterProvider)(nil)
9
10 // Meter returns a meter which creates no-op instruments.
11 func (NopMeterProvider) Meter(string, ...MeterOption) Meter {
12 return NopMeter{}
13 }
14
15 // NopMeter creates no-op instruments.
16 type NopMeter struct{}
17
18 var _ Meter = (*NopMeter)(nil)
19
20 // Int64Counter creates a no-op instrument.
21 func (NopMeter) Int64Counter(string, ...InstrumentOption) (Int64Counter, error) {
22 return nopInstrumentInt64, nil
23 }
24
25 // Int64UpDownCounter creates a no-op instrument.
26 func (NopMeter) Int64UpDownCounter(string, ...InstrumentOption) (Int64UpDownCounter, error) {
27 return nopInstrumentInt64, nil
28 }
29
30 // Int64Gauge creates a no-op instrument.
31 func (NopMeter) Int64Gauge(string, ...InstrumentOption) (Int64Gauge, error) {
32 return nopInstrumentInt64, nil
33 }
34
35 // Int64Histogram creates a no-op instrument.
36 func (NopMeter) Int64Histogram(string, ...InstrumentOption) (Int64Histogram, error) {
37 return nopInstrumentInt64, nil
38 }
39
40 // Int64AsyncCounter creates a no-op instrument.
41 func (NopMeter) Int64AsyncCounter(string, Int64Callback, ...InstrumentOption) (AsyncInstrument, error) {
42 return nopInstrumentInt64, nil
43 }
44
45 // Int64AsyncUpDownCounter creates a no-op instrument.
46 func (NopMeter) Int64AsyncUpDownCounter(string, Int64Callback, ...InstrumentOption) (AsyncInstrument, error) {
47 return nopInstrumentInt64, nil
48 }
49
50 // Int64AsyncGauge creates a no-op instrument.
51 func (NopMeter) Int64AsyncGauge(string, Int64Callback, ...InstrumentOption) (AsyncInstrument, error) {
52 return nopInstrumentInt64, nil
53 }
54
55 // Float64Counter creates a no-op instrument.
56 func (NopMeter) Float64Counter(string, ...InstrumentOption) (Float64Counter, error) {
57 return nopInstrumentFloat64, nil
58 }
59
60 // Float64UpDownCounter creates a no-op instrument.
61 func (NopMeter) Float64UpDownCounter(string, ...InstrumentOption) (Float64UpDownCounter, error) {
62 return nopInstrumentFloat64, nil
63 }
64
65 // Float64Gauge creates a no-op instrument.
66 func (NopMeter) Float64Gauge(string, ...InstrumentOption) (Float64Gauge, error) {
67 return nopInstrumentFloat64, nil
68 }
69
70 // Float64Histogram creates a no-op instrument.
71 func (NopMeter) Float64Histogram(string, ...InstrumentOption) (Float64Histogram, error) {
72 return nopInstrumentFloat64, nil
73 }
74
75 // Float64AsyncCounter creates a no-op instrument.
76 func (NopMeter) Float64AsyncCounter(string, Float64Callback, ...InstrumentOption) (AsyncInstrument, error) {
77 return nopInstrumentFloat64, nil
78 }
79
80 // Float64AsyncUpDownCounter creates a no-op instrument.
81 func (NopMeter) Float64AsyncUpDownCounter(string, Float64Callback, ...InstrumentOption) (AsyncInstrument, error) {
82 return nopInstrumentFloat64, nil
83 }
84
85 // Float64AsyncGauge creates a no-op instrument.
86 func (NopMeter) Float64AsyncGauge(string, Float64Callback, ...InstrumentOption) (AsyncInstrument, error) {
87 return nopInstrumentFloat64, nil
88 }
89
90 type nopInstrument[N any] struct{}
91
92 func (nopInstrument[N]) Add(context.Context, N, ...RecordMetricOption) {}
93 func (nopInstrument[N]) Sample(context.Context, N, ...RecordMetricOption) {}
94 func (nopInstrument[N]) Record(context.Context, N, ...RecordMetricOption) {}
95 func (nopInstrument[_]) Stop() {}
96
97 var nopInstrumentInt64 = nopInstrument[int64]{}
98 var nopInstrumentFloat64 = nopInstrument[float64]{}
99