7
7
"container/list"
8
8
"reflect"
9
9
"sync"
10
- "sync/atomic"
11
10
12
11
"go.opentelemetry.io/otel/metric"
13
12
"go.opentelemetry.io/otel/metric/embedded"
@@ -97,7 +96,7 @@ type meter struct {
97
96
98
97
registry list.List
99
98
100
- delegate atomic. Value // metric.Meter
99
+ delegate metric.Meter
101
100
}
102
101
103
102
type delegatedInstrument interface {
@@ -123,12 +122,12 @@ type instID struct {
123
122
//
124
123
// It is guaranteed by the caller that this happens only once.
125
124
func (m * meter ) setDelegate (provider metric.MeterProvider ) {
126
- meter := provider .Meter (m .name , m .opts ... )
127
- m .delegate .Store (meter )
128
-
129
125
m .mtx .Lock ()
130
126
defer m .mtx .Unlock ()
131
127
128
+ meter := provider .Meter (m .name , m .opts ... )
129
+ m .delegate = meter
130
+
132
131
for _ , inst := range m .instruments {
133
132
inst .setDelegate (meter )
134
133
}
@@ -141,16 +140,18 @@ func (m *meter) setDelegate(provider metric.MeterProvider) {
141
140
m .registry .Remove (e )
142
141
}
143
142
144
- clear ( m .instruments )
143
+ m .instruments = nil
145
144
m .registry .Init ()
146
145
}
147
146
148
147
func (m * meter ) Int64Counter (name string , options ... metric.Int64CounterOption ) (metric.Int64Counter , error ) {
149
- if del , ok := m .delegate .Load ().(metric.Meter ); ok {
150
- return del .Int64Counter (name , options ... )
151
- }
152
148
m .mtx .Lock ()
153
149
defer m .mtx .Unlock ()
150
+
151
+ if m .delegate != nil {
152
+ return m .delegate .Int64Counter (name , options ... )
153
+ }
154
+
154
155
i := & siCounter {name : name , opts : options }
155
156
cfg := metric .NewInt64CounterConfig (options ... )
156
157
id := instID {
@@ -164,11 +165,13 @@ func (m *meter) Int64Counter(name string, options ...metric.Int64CounterOption)
164
165
}
165
166
166
167
func (m * meter ) Int64UpDownCounter (name string , options ... metric.Int64UpDownCounterOption ) (metric.Int64UpDownCounter , error ) {
167
- if del , ok := m .delegate .Load ().(metric.Meter ); ok {
168
- return del .Int64UpDownCounter (name , options ... )
169
- }
170
168
m .mtx .Lock ()
171
169
defer m .mtx .Unlock ()
170
+
171
+ if m .delegate != nil {
172
+ return m .delegate .Int64UpDownCounter (name , options ... )
173
+ }
174
+
172
175
i := & siUpDownCounter {name : name , opts : options }
173
176
cfg := metric .NewInt64UpDownCounterConfig (options ... )
174
177
id := instID {
@@ -182,11 +185,13 @@ func (m *meter) Int64UpDownCounter(name string, options ...metric.Int64UpDownCou
182
185
}
183
186
184
187
func (m * meter ) Int64Histogram (name string , options ... metric.Int64HistogramOption ) (metric.Int64Histogram , error ) {
185
- if del , ok := m .delegate .Load ().(metric.Meter ); ok {
186
- return del .Int64Histogram (name , options ... )
187
- }
188
188
m .mtx .Lock ()
189
189
defer m .mtx .Unlock ()
190
+
191
+ if m .delegate != nil {
192
+ return m .delegate .Int64Histogram (name , options ... )
193
+ }
194
+
190
195
i := & siHistogram {name : name , opts : options }
191
196
cfg := metric .NewInt64HistogramConfig (options ... )
192
197
id := instID {
@@ -200,11 +205,13 @@ func (m *meter) Int64Histogram(name string, options ...metric.Int64HistogramOpti
200
205
}
201
206
202
207
func (m * meter ) Int64Gauge (name string , options ... metric.Int64GaugeOption ) (metric.Int64Gauge , error ) {
203
- if del , ok := m .delegate .Load ().(metric.Meter ); ok {
204
- return del .Int64Gauge (name , options ... )
205
- }
206
208
m .mtx .Lock ()
207
209
defer m .mtx .Unlock ()
210
+
211
+ if m .delegate != nil {
212
+ return m .delegate .Int64Gauge (name , options ... )
213
+ }
214
+
208
215
i := & siGauge {name : name , opts : options }
209
216
cfg := metric .NewInt64GaugeConfig (options ... )
210
217
id := instID {
@@ -218,11 +225,13 @@ func (m *meter) Int64Gauge(name string, options ...metric.Int64GaugeOption) (met
218
225
}
219
226
220
227
func (m * meter ) Int64ObservableCounter (name string , options ... metric.Int64ObservableCounterOption ) (metric.Int64ObservableCounter , error ) {
221
- if del , ok := m .delegate .Load ().(metric.Meter ); ok {
222
- return del .Int64ObservableCounter (name , options ... )
223
- }
224
228
m .mtx .Lock ()
225
229
defer m .mtx .Unlock ()
230
+
231
+ if m .delegate != nil {
232
+ return m .delegate .Int64ObservableCounter (name , options ... )
233
+ }
234
+
226
235
i := & aiCounter {name : name , opts : options }
227
236
cfg := metric .NewInt64ObservableCounterConfig (options ... )
228
237
id := instID {
@@ -236,11 +245,13 @@ func (m *meter) Int64ObservableCounter(name string, options ...metric.Int64Obser
236
245
}
237
246
238
247
func (m * meter ) Int64ObservableUpDownCounter (name string , options ... metric.Int64ObservableUpDownCounterOption ) (metric.Int64ObservableUpDownCounter , error ) {
239
- if del , ok := m .delegate .Load ().(metric.Meter ); ok {
240
- return del .Int64ObservableUpDownCounter (name , options ... )
241
- }
242
248
m .mtx .Lock ()
243
249
defer m .mtx .Unlock ()
250
+
251
+ if m .delegate != nil {
252
+ return m .delegate .Int64ObservableUpDownCounter (name , options ... )
253
+ }
254
+
244
255
i := & aiUpDownCounter {name : name , opts : options }
245
256
cfg := metric .NewInt64ObservableUpDownCounterConfig (options ... )
246
257
id := instID {
@@ -254,11 +265,13 @@ func (m *meter) Int64ObservableUpDownCounter(name string, options ...metric.Int6
254
265
}
255
266
256
267
func (m * meter ) Int64ObservableGauge (name string , options ... metric.Int64ObservableGaugeOption ) (metric.Int64ObservableGauge , error ) {
257
- if del , ok := m .delegate .Load ().(metric.Meter ); ok {
258
- return del .Int64ObservableGauge (name , options ... )
259
- }
260
268
m .mtx .Lock ()
261
269
defer m .mtx .Unlock ()
270
+
271
+ if m .delegate != nil {
272
+ return m .delegate .Int64ObservableGauge (name , options ... )
273
+ }
274
+
262
275
i := & aiGauge {name : name , opts : options }
263
276
cfg := metric .NewInt64ObservableGaugeConfig (options ... )
264
277
id := instID {
@@ -272,11 +285,13 @@ func (m *meter) Int64ObservableGauge(name string, options ...metric.Int64Observa
272
285
}
273
286
274
287
func (m * meter ) Float64Counter (name string , options ... metric.Float64CounterOption ) (metric.Float64Counter , error ) {
275
- if del , ok := m .delegate .Load ().(metric.Meter ); ok {
276
- return del .Float64Counter (name , options ... )
277
- }
278
288
m .mtx .Lock ()
279
289
defer m .mtx .Unlock ()
290
+
291
+ if m .delegate != nil {
292
+ return m .delegate .Float64Counter (name , options ... )
293
+ }
294
+
280
295
i := & sfCounter {name : name , opts : options }
281
296
cfg := metric .NewFloat64CounterConfig (options ... )
282
297
id := instID {
@@ -290,11 +305,13 @@ func (m *meter) Float64Counter(name string, options ...metric.Float64CounterOpti
290
305
}
291
306
292
307
func (m * meter ) Float64UpDownCounter (name string , options ... metric.Float64UpDownCounterOption ) (metric.Float64UpDownCounter , error ) {
293
- if del , ok := m .delegate .Load ().(metric.Meter ); ok {
294
- return del .Float64UpDownCounter (name , options ... )
295
- }
296
308
m .mtx .Lock ()
297
309
defer m .mtx .Unlock ()
310
+
311
+ if m .delegate != nil {
312
+ return m .delegate .Float64UpDownCounter (name , options ... )
313
+ }
314
+
298
315
i := & sfUpDownCounter {name : name , opts : options }
299
316
cfg := metric .NewFloat64UpDownCounterConfig (options ... )
300
317
id := instID {
@@ -308,11 +325,13 @@ func (m *meter) Float64UpDownCounter(name string, options ...metric.Float64UpDow
308
325
}
309
326
310
327
func (m * meter ) Float64Histogram (name string , options ... metric.Float64HistogramOption ) (metric.Float64Histogram , error ) {
311
- if del , ok := m .delegate .Load ().(metric.Meter ); ok {
312
- return del .Float64Histogram (name , options ... )
313
- }
314
328
m .mtx .Lock ()
315
329
defer m .mtx .Unlock ()
330
+
331
+ if m .delegate != nil {
332
+ return m .delegate .Float64Histogram (name , options ... )
333
+ }
334
+
316
335
i := & sfHistogram {name : name , opts : options }
317
336
cfg := metric .NewFloat64HistogramConfig (options ... )
318
337
id := instID {
@@ -326,11 +345,13 @@ func (m *meter) Float64Histogram(name string, options ...metric.Float64Histogram
326
345
}
327
346
328
347
func (m * meter ) Float64Gauge (name string , options ... metric.Float64GaugeOption ) (metric.Float64Gauge , error ) {
329
- if del , ok := m .delegate .Load ().(metric.Meter ); ok {
330
- return del .Float64Gauge (name , options ... )
331
- }
332
348
m .mtx .Lock ()
333
349
defer m .mtx .Unlock ()
350
+
351
+ if m .delegate != nil {
352
+ return m .delegate .Float64Gauge (name , options ... )
353
+ }
354
+
334
355
i := & sfGauge {name : name , opts : options }
335
356
cfg := metric .NewFloat64GaugeConfig (options ... )
336
357
id := instID {
@@ -344,11 +365,13 @@ func (m *meter) Float64Gauge(name string, options ...metric.Float64GaugeOption)
344
365
}
345
366
346
367
func (m * meter ) Float64ObservableCounter (name string , options ... metric.Float64ObservableCounterOption ) (metric.Float64ObservableCounter , error ) {
347
- if del , ok := m .delegate .Load ().(metric.Meter ); ok {
348
- return del .Float64ObservableCounter (name , options ... )
349
- }
350
368
m .mtx .Lock ()
351
369
defer m .mtx .Unlock ()
370
+
371
+ if m .delegate != nil {
372
+ return m .delegate .Float64ObservableCounter (name , options ... )
373
+ }
374
+
352
375
i := & afCounter {name : name , opts : options }
353
376
cfg := metric .NewFloat64ObservableCounterConfig (options ... )
354
377
id := instID {
@@ -362,11 +385,13 @@ func (m *meter) Float64ObservableCounter(name string, options ...metric.Float64O
362
385
}
363
386
364
387
func (m * meter ) Float64ObservableUpDownCounter (name string , options ... metric.Float64ObservableUpDownCounterOption ) (metric.Float64ObservableUpDownCounter , error ) {
365
- if del , ok := m .delegate .Load ().(metric.Meter ); ok {
366
- return del .Float64ObservableUpDownCounter (name , options ... )
367
- }
368
388
m .mtx .Lock ()
369
389
defer m .mtx .Unlock ()
390
+
391
+ if m .delegate != nil {
392
+ return m .delegate .Float64ObservableUpDownCounter (name , options ... )
393
+ }
394
+
370
395
i := & afUpDownCounter {name : name , opts : options }
371
396
cfg := metric .NewFloat64ObservableUpDownCounterConfig (options ... )
372
397
id := instID {
@@ -380,11 +405,13 @@ func (m *meter) Float64ObservableUpDownCounter(name string, options ...metric.Fl
380
405
}
381
406
382
407
func (m * meter ) Float64ObservableGauge (name string , options ... metric.Float64ObservableGaugeOption ) (metric.Float64ObservableGauge , error ) {
383
- if del , ok := m .delegate .Load ().(metric.Meter ); ok {
384
- return del .Float64ObservableGauge (name , options ... )
385
- }
386
408
m .mtx .Lock ()
387
409
defer m .mtx .Unlock ()
410
+
411
+ if m .delegate != nil {
412
+ return m .delegate .Float64ObservableGauge (name , options ... )
413
+ }
414
+
388
415
i := & afGauge {name : name , opts : options }
389
416
cfg := metric .NewFloat64ObservableGaugeConfig (options ... )
390
417
id := instID {
@@ -399,14 +426,14 @@ func (m *meter) Float64ObservableGauge(name string, options ...metric.Float64Obs
399
426
400
427
// RegisterCallback captures the function that will be called during Collect.
401
428
func (m * meter ) RegisterCallback (f metric.Callback , insts ... metric.Observable ) (metric.Registration , error ) {
402
- if del , ok := m .delegate .Load ().(metric.Meter ); ok {
403
- insts = unwrapInstruments (insts )
404
- return del .RegisterCallback (f , insts ... )
405
- }
406
-
407
429
m .mtx .Lock ()
408
430
defer m .mtx .Unlock ()
409
431
432
+ if m .delegate != nil {
433
+ insts = unwrapInstruments (insts )
434
+ return m .delegate .RegisterCallback (f , insts ... )
435
+ }
436
+
410
437
reg := & registration {instruments : insts , function : f }
411
438
e := m .registry .PushBack (reg )
412
439
reg .unreg = func () error {
0 commit comments