blob: b7fc973a66c2992411f94f75ec3394ddc2212cd6 [file] [log] [blame]
Abhay Kumara2ae5992025-11-10 14:02:24 +00001// Copyright The OpenTelemetry Authors
2// SPDX-License-Identifier: Apache-2.0
3
4package metric // import "go.opentelemetry.io/otel/metric"
5
6import (
7 "context"
8
9 "go.opentelemetry.io/otel/metric/embedded"
10)
11
12// Float64Observable describes a set of instruments used asynchronously to
13// record float64 measurements once per collection cycle. Observations of
14// these instruments are only made within a callback.
15//
16// Warning: Methods may be added to this interface in minor releases.
17type Float64Observable interface {
18 Observable
19
20 float64Observable()
21}
22
23// Float64ObservableCounter is an instrument used to asynchronously record
24// increasing float64 measurements once per collection cycle. Observations are
25// only made within a callback for this instrument. The value observed is
26// assumed the to be the cumulative sum of the count.
27//
28// Warning: Methods may be added to this interface in minor releases. See
29// package documentation on API implementation for information on how to set
30// default behavior for
31// unimplemented methods.
32type Float64ObservableCounter interface {
33 // Users of the interface can ignore this. This embedded type is only used
34 // by implementations of this interface. See the "API Implementations"
35 // section of the package documentation for more information.
36 embedded.Float64ObservableCounter
37
38 Float64Observable
39}
40
41// Float64ObservableCounterConfig contains options for asynchronous counter
42// instruments that record float64 values.
43type Float64ObservableCounterConfig struct {
44 description string
45 unit string
46 callbacks []Float64Callback
47}
48
49// NewFloat64ObservableCounterConfig returns a new
50// [Float64ObservableCounterConfig] with all opts applied.
51func NewFloat64ObservableCounterConfig(opts ...Float64ObservableCounterOption) Float64ObservableCounterConfig {
52 var config Float64ObservableCounterConfig
53 for _, o := range opts {
54 config = o.applyFloat64ObservableCounter(config)
55 }
56 return config
57}
58
59// Description returns the configured description.
60func (c Float64ObservableCounterConfig) Description() string {
61 return c.description
62}
63
64// Unit returns the configured unit.
65func (c Float64ObservableCounterConfig) Unit() string {
66 return c.unit
67}
68
69// Callbacks returns the configured callbacks.
70func (c Float64ObservableCounterConfig) Callbacks() []Float64Callback {
71 return c.callbacks
72}
73
74// Float64ObservableCounterOption applies options to a
75// [Float64ObservableCounterConfig]. See [Float64ObservableOption] and
76// [InstrumentOption] for other options that can be used as a
77// Float64ObservableCounterOption.
78type Float64ObservableCounterOption interface {
79 applyFloat64ObservableCounter(Float64ObservableCounterConfig) Float64ObservableCounterConfig
80}
81
82// Float64ObservableUpDownCounter is an instrument used to asynchronously
83// record float64 measurements once per collection cycle. Observations are only
84// made within a callback for this instrument. The value observed is assumed
85// the to be the cumulative sum of the count.
86//
87// Warning: Methods may be added to this interface in minor releases. See
88// package documentation on API implementation for information on how to set
89// default behavior for unimplemented methods.
90type Float64ObservableUpDownCounter interface {
91 // Users of the interface can ignore this. This embedded type is only used
92 // by implementations of this interface. See the "API Implementations"
93 // section of the package documentation for more information.
94 embedded.Float64ObservableUpDownCounter
95
96 Float64Observable
97}
98
99// Float64ObservableUpDownCounterConfig contains options for asynchronous
100// counter instruments that record float64 values.
101type Float64ObservableUpDownCounterConfig struct {
102 description string
103 unit string
104 callbacks []Float64Callback
105}
106
107// NewFloat64ObservableUpDownCounterConfig returns a new
108// [Float64ObservableUpDownCounterConfig] with all opts applied.
109func NewFloat64ObservableUpDownCounterConfig(
110 opts ...Float64ObservableUpDownCounterOption,
111) Float64ObservableUpDownCounterConfig {
112 var config Float64ObservableUpDownCounterConfig
113 for _, o := range opts {
114 config = o.applyFloat64ObservableUpDownCounter(config)
115 }
116 return config
117}
118
119// Description returns the configured description.
120func (c Float64ObservableUpDownCounterConfig) Description() string {
121 return c.description
122}
123
124// Unit returns the configured unit.
125func (c Float64ObservableUpDownCounterConfig) Unit() string {
126 return c.unit
127}
128
129// Callbacks returns the configured callbacks.
130func (c Float64ObservableUpDownCounterConfig) Callbacks() []Float64Callback {
131 return c.callbacks
132}
133
134// Float64ObservableUpDownCounterOption applies options to a
135// [Float64ObservableUpDownCounterConfig]. See [Float64ObservableOption] and
136// [InstrumentOption] for other options that can be used as a
137// Float64ObservableUpDownCounterOption.
138type Float64ObservableUpDownCounterOption interface {
139 applyFloat64ObservableUpDownCounter(Float64ObservableUpDownCounterConfig) Float64ObservableUpDownCounterConfig
140}
141
142// Float64ObservableGauge is an instrument used to asynchronously record
143// instantaneous float64 measurements once per collection cycle. Observations
144// are only made within a callback for this instrument.
145//
146// Warning: Methods may be added to this interface in minor releases. See
147// package documentation on API implementation for information on how to set
148// default behavior for unimplemented methods.
149type Float64ObservableGauge interface {
150 // Users of the interface can ignore this. This embedded type is only used
151 // by implementations of this interface. See the "API Implementations"
152 // section of the package documentation for more information.
153 embedded.Float64ObservableGauge
154
155 Float64Observable
156}
157
158// Float64ObservableGaugeConfig contains options for asynchronous counter
159// instruments that record float64 values.
160type Float64ObservableGaugeConfig struct {
161 description string
162 unit string
163 callbacks []Float64Callback
164}
165
166// NewFloat64ObservableGaugeConfig returns a new [Float64ObservableGaugeConfig]
167// with all opts applied.
168func NewFloat64ObservableGaugeConfig(opts ...Float64ObservableGaugeOption) Float64ObservableGaugeConfig {
169 var config Float64ObservableGaugeConfig
170 for _, o := range opts {
171 config = o.applyFloat64ObservableGauge(config)
172 }
173 return config
174}
175
176// Description returns the configured description.
177func (c Float64ObservableGaugeConfig) Description() string {
178 return c.description
179}
180
181// Unit returns the configured unit.
182func (c Float64ObservableGaugeConfig) Unit() string {
183 return c.unit
184}
185
186// Callbacks returns the configured callbacks.
187func (c Float64ObservableGaugeConfig) Callbacks() []Float64Callback {
188 return c.callbacks
189}
190
191// Float64ObservableGaugeOption applies options to a
192// [Float64ObservableGaugeConfig]. See [Float64ObservableOption] and
193// [InstrumentOption] for other options that can be used as a
194// Float64ObservableGaugeOption.
195type Float64ObservableGaugeOption interface {
196 applyFloat64ObservableGauge(Float64ObservableGaugeConfig) Float64ObservableGaugeConfig
197}
198
199// Float64Observer is a recorder of float64 measurements.
200//
201// Warning: Methods may be added to this interface in minor releases. See
202// package documentation on API implementation for information on how to set
203// default behavior for unimplemented methods.
204type Float64Observer interface {
205 // Users of the interface can ignore this. This embedded type is only used
206 // by implementations of this interface. See the "API Implementations"
207 // section of the package documentation for more information.
208 embedded.Float64Observer
209
210 // Observe records the float64 value.
211 //
212 // Use the WithAttributeSet (or, if performance is not a concern,
213 // the WithAttributes) option to include measurement attributes.
214 Observe(value float64, options ...ObserveOption)
215}
216
217// Float64Callback is a function registered with a Meter that makes
218// observations for a Float64Observable instrument it is registered with.
219// Calls to the Float64Observer record measurement values for the
220// Float64Observable.
221//
222// The function needs to complete in a finite amount of time and the deadline
223// of the passed context is expected to be honored.
224//
225// The function needs to make unique observations across all registered
226// Float64Callbacks. Meaning, it should not report measurements with the same
227// attributes as another Float64Callbacks also registered for the same
228// instrument.
229//
230// The function needs to be concurrent safe.
231type Float64Callback func(context.Context, Float64Observer) error
232
233// Float64ObservableOption applies options to float64 Observer instruments.
234type Float64ObservableOption interface {
235 Float64ObservableCounterOption
236 Float64ObservableUpDownCounterOption
237 Float64ObservableGaugeOption
238}
239
240type float64CallbackOpt struct {
241 cback Float64Callback
242}
243
244func (o float64CallbackOpt) applyFloat64ObservableCounter(
245 cfg Float64ObservableCounterConfig,
246) Float64ObservableCounterConfig {
247 cfg.callbacks = append(cfg.callbacks, o.cback)
248 return cfg
249}
250
251func (o float64CallbackOpt) applyFloat64ObservableUpDownCounter(
252 cfg Float64ObservableUpDownCounterConfig,
253) Float64ObservableUpDownCounterConfig {
254 cfg.callbacks = append(cfg.callbacks, o.cback)
255 return cfg
256}
257
258func (o float64CallbackOpt) applyFloat64ObservableGauge(cfg Float64ObservableGaugeConfig) Float64ObservableGaugeConfig {
259 cfg.callbacks = append(cfg.callbacks, o.cback)
260 return cfg
261}
262
263// WithFloat64Callback adds callback to be called for an instrument.
264func WithFloat64Callback(callback Float64Callback) Float64ObservableOption {
265 return float64CallbackOpt{callback}
266}