opentelemetry-metrics-api 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 11ca6c01c75f4b661a2b67e40f24312889533c36575170671a7977625a4fb2cb
4
- data.tar.gz: 794dd2e1e001e012a4c398d136e9738a598d860970d1f172ba4baa52758f0b70
3
+ metadata.gz: b12f327c335cd467d0e0daa11cc0c441d58e41397bf489adeb1fb1334267feee
4
+ data.tar.gz: 8da54ae390e0424ebfc80a4db2fa03d93f070a14f30efd8330c56a86d21b13e3
5
5
  SHA512:
6
- metadata.gz: 674ba34d11d3d8e152bbd0d59317e03ec4b984db8541d7a6c15e7d375f9707e89f912be1ed5ce427ac14234d18fa25f7260df0dbb138d6bd192cc46faad17fce
7
- data.tar.gz: 352b08c237d6fe34f344130a6c414a092c4d7091f4e675f03e46ceb35a8e9910f258fd7ff328b29fc7fff99e9602c125c429b13a7adc3876afd6d856964ff51b
6
+ metadata.gz: '011425548b027c8548af12161d9689a43f77dd5817b10b719be103fccd3b34fd55d466ea70b688425d146541ba3e815eb6df4a2dcb721682989650858c240bc8'
7
+ data.tar.gz: 333241cd8ce10cc40214398a63169a3efafb5c3b3cd26cd4da1af2c09f5ebd905c6e40318b7f9983e15b0ba87c51250d7b9ca747e2f2882172427daf37b67174
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Release History: opentelemetry-metrics-api
2
2
 
3
+ ### v0.5.0 / 2026-04-07
4
+
5
+ * ADDED: Min Ruby Version 3.3 (#2070)
6
+ * ADDED: Add basic support for metrics exemplar (#1609)
7
+
3
8
  ### v0.4.0 / 2025-08-14
4
9
 
5
10
  - ADDED: Support asynchronous instruments: ObservableGauge, ObservableCounter and ObservableUpDownCounter
@@ -8,21 +8,23 @@ module OpenTelemetry
8
8
  module Internal
9
9
  # @api private
10
10
  class ProxyInstrument
11
- def initialize(kind, name, unit, desc, callable)
11
+ def initialize(kind, name, unit, desc, callable, exemplar_filter, exemplar_reservoir)
12
12
  @kind = kind
13
13
  @name = name
14
14
  @unit = unit
15
15
  @desc = desc
16
16
  @callable = callable
17
+ @exemplar_filter = exemplar_filter
18
+ @exemplar_reservoir = exemplar_reservoir
17
19
  @delegate = nil
18
20
  end
19
21
 
20
22
  def upgrade_with(meter)
21
23
  @delegate = case @kind
22
- when :counter, :histogram, :up_down_counter, :gauge
23
- meter.send("create_#{@kind}", @name, unit: @unit, description: @desc)
24
+ when :counter, :histogram, :up_down_counter
25
+ meter.send("create_#{@kind}", @name, unit: @unit, description: @desc, exemplar_filter: @exemplar_filter, exemplar_reservoir: @exemplar_reservoir)
24
26
  when :observable_counter, :observable_gauge, :observable_up_down_counter
25
- meter.send("create_#{@kind}", @name, unit: @unit, description: @desc, callback: @callback)
27
+ meter.send("create_#{@kind}", @name, unit: @unit, description: @desc, exemplar_filter: @exemplar_filter, exemplar_reservoir: @exemplar_reservoir, callback: @callback)
26
28
  end
27
29
  end
28
30
 
@@ -38,18 +38,18 @@ module OpenTelemetry
38
38
 
39
39
  private
40
40
 
41
- def create_instrument(kind, name, unit, description, callback)
41
+ def create_instrument(kind, name, unit, description, callback, exemplar_filter, exemplar_reservoir)
42
42
  super do
43
- next ProxyInstrument.new(kind, name, unit, description, callback) if @delegate.nil?
43
+ next ProxyInstrument.new(kind, name, unit, description, callback, exemplar_filter, exemplar_reservoir) if @delegate.nil?
44
44
 
45
45
  case kind
46
- when :counter then @delegate.create_counter(name, unit: unit, description: description)
47
- when :histogram then @delegate.create_histogram(name, unit: unit, description: description)
48
- when :gauge then @delegate.create_gauge(name, unit: unit, description: description)
49
- when :up_down_counter then @delegate.create_up_down_counter(name, unit: unit, description: description)
50
- when :observable_counter then @delegate.create_observable_counter(name, unit: unit, description: description, callback: callback)
51
- when :observable_gauge then @delegate.create_observable_gauge(name, unit: unit, description: description, callback: callback)
52
- when :observable_up_down_counter then @delegate.create_observable_up_down_counter(name, unit: unit, description: description, callback: callback)
46
+ when :counter then @delegate.create_counter(name, unit: unit, description: description, exemplar_filter: exemplar_filter, exemplar_reservoir: exemplar_reservoir)
47
+ when :histogram then @delegate.create_histogram(name, unit: unit, description: description, exemplar_filter: exemplar_filter, exemplar_reservoir: exemplar_reservoir)
48
+ when :up_down_counter then @delegate.create_up_down_counter(name, unit: unit, description: description, exemplar_filter: exemplar_filter, exemplar_reservoir: exemplar_reservoir)
49
+ when :gauge then @delegate.create_gauge(name, unit: unit, description: description, exemplar_filter: exemplar_filter, exemplar_reservoir: exemplar_reservoir)
50
+ when :observable_counter then @delegate.create_observable_counter(name, unit: unit, description: description, exemplar_filter: exemplar_filter, exemplar_reservoir: exemplar_reservoir, callback: callback)
51
+ when :observable_gauge then @delegate.create_observable_gauge(name, unit: unit, description: description, exemplar_filter: exemplar_filter, exemplar_reservoir: exemplar_reservoir, callback: callback)
52
+ when :observable_up_down_counter then @delegate.create_observable_up_down_counter(name, unit: unit, description: description, exemplar_filter: exemplar_filter, exemplar_reservoir: exemplar_reservoir, callback: callback)
53
53
  end
54
54
  end
55
55
  end
@@ -36,15 +36,27 @@ module OpenTelemetry
36
36
  #
37
37
  # exception_counter = meter.create_counter("exceptions",
38
38
  # description: "number of exceptions caught",
39
- # unit: 's')
39
+ # unit: 's',
40
+ # exemplar_filter: OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter,
41
+ # exemplar_reservoir: OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir.new)
40
42
  #
41
43
  # @param name [String] the name of the counter
42
44
  # @param unit [optional String] an optional string provided by user.
43
45
  # @param description [optional String] an optional free-form text provided by user.
46
+ # @param exemplar_filter [optional Object] an optional filter to control which measurements are
47
+ # eligible to become exemplars. Must respond to `#should_sample?`. Available SDK implementations:
48
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOnExemplarFilter` - all measurements are eligible
49
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOffExemplarFilter` - no measurements are eligible
50
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter` - only measurements in a sampled span context are eligible
51
+ # @param exemplar_reservoir [optional Object] an optional reservoir used to sample exemplars
52
+ # from eligible measurements. Must respond to `#offer` and `#collect`. Available SDK implementations:
53
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir` - uniformly-weighted sampling
54
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlignedHistogramBucketExemplarReservoir` - one exemplar per histogram bucket (recommended for histograms)
55
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::NoopExemplarReservoir` - no-op, disables exemplar collection
44
56
  #
45
57
  # @return [nil] after creation of counter, it will be stored in instrument_registry
46
- def create_counter(name, unit: nil, description: nil)
47
- create_instrument(:counter, name, unit, description, nil) { COUNTER }
58
+ def create_counter(name, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil)
59
+ create_instrument(:counter, name, unit, description, nil, exemplar_filter, exemplar_reservoir) { COUNTER }
48
60
  end
49
61
 
50
62
  # Histogram is a synchronous Instrument which can be used to report arbitrary values that are likely
@@ -55,15 +67,27 @@ module OpenTelemetry
55
67
  #
56
68
  # http_server_duration = meter.create_histogram("http.server.duration",
57
69
  # description: "measures the duration of the inbound HTTP request",
58
- # unit: "s")
70
+ # unit: "s",
71
+ # exemplar_filter: OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter,
72
+ # exemplar_reservoir: OpenTelemetry::SDK::Metrics::Exemplar::AlignedHistogramBucketExemplarReservoir.new)
59
73
  #
60
74
  # @param name [String] the name of the histogram
61
75
  # @param unit [optional String] an optional string provided by user.
62
76
  # @param description [optional String] an optional free-form text provided by user.
77
+ # @param exemplar_filter [optional Object] an optional filter to control which measurements are
78
+ # eligible to become exemplars. Must respond to `#should_sample?`. Available SDK implementations:
79
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOnExemplarFilter` - all measurements are eligible
80
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOffExemplarFilter` - no measurements are eligible
81
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter` - only measurements in a sampled span context are eligible
82
+ # @param exemplar_reservoir [optional Object] an optional reservoir used to sample exemplars
83
+ # from eligible measurements. Must respond to `#offer` and `#collect`. Available SDK implementations:
84
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir` - uniformly-weighted sampling
85
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlignedHistogramBucketExemplarReservoir` - one exemplar per histogram bucket (recommended for histograms)
86
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::NoopExemplarReservoir` - no-op, disables exemplar collection
63
87
  #
64
88
  # @return [nil] after creation of histogram, it will be stored in instrument_registry
65
- def create_histogram(name, unit: nil, description: nil)
66
- create_instrument(:histogram, name, unit, description, nil) { HISTOGRAM }
89
+ def create_histogram(name, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil)
90
+ create_instrument(:histogram, name, unit, description, nil, exemplar_filter, exemplar_reservoir) { HISTOGRAM }
67
91
  end
68
92
 
69
93
  # Gauge is an synchronous Instrument which reports non-additive value(s)
@@ -72,16 +96,27 @@ module OpenTelemetry
72
96
  #
73
97
  # meter.create_gauge("cpu.frequency",
74
98
  # description: "the real-time CPU clock speed",
75
- # unit: "ms")
76
- #
99
+ # unit: "ms",
100
+ # exemplar_filter: OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter,
101
+ # exemplar_reservoir: OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir.new)
77
102
  #
78
103
  # @param name [String] the name of the gauge.
79
104
  # @param unit [optional String] an optional string provided by user.
80
105
  # @param description [optional String] an optional free-form text provided by user.
106
+ # @param exemplar_filter [optional Object] an optional filter to control which measurements are
107
+ # eligible to become exemplars. Must respond to `#should_sample?`. Available SDK implementations:
108
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOnExemplarFilter` - all measurements are eligible
109
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOffExemplarFilter` - no measurements are eligible
110
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter` - only measurements in a sampled span context are eligible
111
+ # @param exemplar_reservoir [optional Object] an optional reservoir used to sample exemplars
112
+ # from eligible measurements. Must respond to `#offer` and `#collect`. Available SDK implementations:
113
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir` - uniformly-weighted sampling
114
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlignedHistogramBucketExemplarReservoir` - one exemplar per histogram bucket (recommended for histograms)
115
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::NoopExemplarReservoir` - no-op, disables exemplar collection
81
116
  #
82
117
  # @return [nil] after creation of gauge, it will be stored in instrument_registry
83
- def create_gauge(name, unit: nil, description: nil)
84
- create_instrument(:gauge, name, unit, description, nil) { GAUGE }
118
+ def create_gauge(name, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil)
119
+ create_instrument(:gauge, name, unit, description, nil, exemplar_filter, exemplar_reservoir) { GAUGE }
85
120
  end
86
121
 
87
122
  # UpDownCounter is a synchronous Instrument which supports increments and decrements.
@@ -90,15 +125,27 @@ module OpenTelemetry
90
125
  #
91
126
  # items_counter = meter.create_up_down_counter("store.inventory",
92
127
  # description: "the number of the items available",
93
- # unit: "s")
128
+ # unit: "s",
129
+ # exemplar_filter: OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter,
130
+ # exemplar_reservoir: OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir.new)
94
131
  #
95
132
  # @param name [String] the name of the up_down_counter
96
133
  # @param unit [optional String] an optional string provided by user.
97
134
  # @param description [optional String] an optional free-form text provided by user.
135
+ # @param exemplar_filter [optional Object] an optional filter to control which measurements are
136
+ # eligible to become exemplars. Must respond to `#should_sample?`. Available SDK implementations:
137
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOnExemplarFilter` - all measurements are eligible
138
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOffExemplarFilter` - no measurements are eligible
139
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter` - only measurements in a sampled span context are eligible
140
+ # @param exemplar_reservoir [optional Object] an optional reservoir used to sample exemplars
141
+ # from eligible measurements. Must respond to `#offer` and `#collect`. Available SDK implementations:
142
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir` - uniformly-weighted sampling
143
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlignedHistogramBucketExemplarReservoir` - one exemplar per histogram bucket (recommended for histograms)
144
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::NoopExemplarReservoir` - no-op, disables exemplar collection
98
145
  #
99
146
  # @return [nil] after creation of up_down_counter, it will be stored in instrument_registry
100
- def create_up_down_counter(name, unit: nil, description: nil)
101
- create_instrument(:up_down_counter, name, unit, description, nil) { UP_DOWN_COUNTER }
147
+ def create_up_down_counter(name, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil)
148
+ create_instrument(:up_down_counter, name, unit, description, nil, exemplar_filter, exemplar_reservoir) { UP_DOWN_COUNTER }
102
149
  end
103
150
 
104
151
  # ObservableCounter is an asynchronous Instrument which reports monotonically
@@ -110,17 +157,28 @@ module OpenTelemetry
110
157
  # meter.create_observable_counter("PF",
111
158
  # pf_callback,
112
159
  # description: "process page faults",
113
- # unit: 'ms')
114
- #
160
+ # unit: 'ms',
161
+ # exemplar_filter: OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter,
162
+ # exemplar_reservoir: OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir.new)
115
163
  #
116
164
  # @param name [String] the name of the observable_counter
117
165
  # @param callback [Proc] the callback function that used to collect metrics
118
166
  # @param unit [optional String] an optional string provided by user.
119
167
  # @param description [optional String] an optional free-form text provided by user.
168
+ # @param exemplar_filter [optional Object] an optional filter to control which measurements are
169
+ # eligible to become exemplars. Must respond to `#should_sample?`. Available SDK implementations:
170
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOnExemplarFilter` - all measurements are eligible
171
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOffExemplarFilter` - no measurements are eligible
172
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter` - only measurements in a sampled span context are eligible
173
+ # @param exemplar_reservoir [optional Object] an optional reservoir used to sample exemplars
174
+ # from eligible measurements. Must respond to `#offer` and `#collect`. Available SDK implementations:
175
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir` - uniformly-weighted sampling
176
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlignedHistogramBucketExemplarReservoir` - one exemplar per histogram bucket (recommended for histograms)
177
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::NoopExemplarReservoir` - no-op, disables exemplar collection
120
178
  #
121
179
  # @return [nil] after creation of observable_counter, it will be stored in instrument_registry
122
- def create_observable_counter(name, callback:, unit: nil, description: nil)
123
- create_instrument(:observable_counter, name, unit, description, callback) { OBSERVABLE_COUNTER }
180
+ def create_observable_counter(name, callback:, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil)
181
+ create_instrument(:observable_counter, name, unit, description, callback, exemplar_filter, exemplar_reservoir) { OBSERVABLE_COUNTER }
124
182
  end
125
183
 
126
184
  # ObservableGauge is an asynchronous Instrument which reports non-additive value(s)
@@ -130,20 +188,31 @@ module OpenTelemetry
130
188
  # With this api call:
131
189
  #
132
190
  # pf_callback = -> { # collect metrics here }
133
- # meter.create_observable_counter("cpu.frequency",
134
- # pf_callback,
135
- # description: "the real-time CPU clock speed",
136
- # unit: 'ms')
137
- #
191
+ # meter.create_observable_gauge("cpu.frequency",
192
+ # pf_callback,
193
+ # description: "the real-time CPU clock speed",
194
+ # unit: 'ms',
195
+ # exemplar_filter: OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter,
196
+ # exemplar_reservoir: OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir.new)
138
197
  #
139
198
  # @param name [String] the name of the observable_gauge
140
199
  # @param callback [Proc] the callback function that used to collect metrics
141
200
  # @param unit [optional String] an optional string provided by user.
142
201
  # @param description [optional String] an optional free-form text provided by user.
202
+ # @param exemplar_filter [optional Object] an optional filter to control which measurements are
203
+ # eligible to become exemplars. Must respond to `#should_sample?`. Available SDK implementations:
204
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOnExemplarFilter` - all measurements are eligible
205
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOffExemplarFilter` - no measurements are eligible
206
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter` - only measurements in a sampled span context are eligible
207
+ # @param exemplar_reservoir [optional Object] an optional reservoir used to sample exemplars
208
+ # from eligible measurements. Must respond to `#offer` and `#collect`. Available SDK implementations:
209
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir` - uniformly-weighted sampling
210
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlignedHistogramBucketExemplarReservoir` - one exemplar per histogram bucket (recommended for histograms)
211
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::NoopExemplarReservoir` - no-op, disables exemplar collection
143
212
  #
144
213
  # @return [nil] after creation of observable_gauge, it will be stored in instrument_registry
145
- def create_observable_gauge(name, callback:, unit: nil, description: nil)
146
- create_instrument(:observable_gauge, name, unit, description, callback) { OBSERVABLE_GAUGE }
214
+ def create_observable_gauge(name, callback:, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil)
215
+ create_instrument(:observable_gauge, name, unit, description, callback, exemplar_filter, exemplar_reservoir) { OBSERVABLE_GAUGE }
147
216
  end
148
217
 
149
218
  # ObservableUpDownCounter is an asynchronous Instrument which reports additive value(s)
@@ -156,22 +225,33 @@ module OpenTelemetry
156
225
  # meter.create_observable_up_down_counter("process.workingset",
157
226
  # pf_callback,
158
227
  # description: "process working set",
159
- # unit: 'KB')
160
- #
228
+ # unit: 'KB',
229
+ # exemplar_filter: OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter,
230
+ # exemplar_reservoir: OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir.new)
161
231
  #
162
232
  # @param name [String] the name of the observable_up_down_counter
163
233
  # @param callback [Proc] the callback function that used to collect metrics
164
234
  # @param unit [optional String] an optional string provided by user.
165
235
  # @param description [optional String] an optional free-form text provided by user.
236
+ # @param exemplar_filter [optional Object] an optional filter to control which measurements are
237
+ # eligible to become exemplars. Must respond to `#should_sample?`. Available SDK implementations:
238
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOnExemplarFilter` - all measurements are eligible
239
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlwaysOffExemplarFilter` - no measurements are eligible
240
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::TraceBasedExemplarFilter` - only measurements in a sampled span context are eligible
241
+ # @param exemplar_reservoir [optional Object] an optional reservoir used to sample exemplars
242
+ # from eligible measurements. Must respond to `#offer` and `#collect`. Available SDK implementations:
243
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::SimpleFixedSizeExemplarReservoir` - uniformly-weighted sampling
244
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::AlignedHistogramBucketExemplarReservoir` - one exemplar per histogram bucket (recommended for histograms)
245
+ # - `OpenTelemetry::SDK::Metrics::Exemplar::NoopExemplarReservoir` - no-op, disables exemplar collection
166
246
  #
167
247
  # @return [nil] after creation of observable_up_down_counter, it will be stored in instrument_registry
168
- def create_observable_up_down_counter(name, callback:, unit: nil, description: nil)
169
- create_instrument(:observable_up_down_counter, name, unit, description, callback) { OBSERVABLE_UP_DOWN_COUNTER }
248
+ def create_observable_up_down_counter(name, callback:, unit: nil, description: nil, exemplar_filter: nil, exemplar_reservoir: nil)
249
+ create_instrument(:observable_up_down_counter, name, unit, description, callback, exemplar_filter, exemplar_reservoir) { OBSERVABLE_UP_DOWN_COUNTER }
170
250
  end
171
251
 
172
252
  private
173
253
 
174
- def create_instrument(kind, name, unit, description, callback)
254
+ def create_instrument(kind, name, unit, description, callback, exemplar_filter, exemplar_reservoir)
175
255
  @mutex.synchronize do
176
256
  OpenTelemetry.logger.warn("duplicate instrument registration occurred for instrument #{name}") if @instrument_registry.include? name
177
257
 
@@ -7,6 +7,6 @@
7
7
  module OpenTelemetry
8
8
  module Metrics
9
9
  ## Current OpenTelemetry metrics version
10
- VERSION = '0.4.0'
10
+ VERSION = '0.5.0'
11
11
  end
12
12
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-metrics-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2025-08-14 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: opentelemetry-api
@@ -38,34 +37,6 @@ dependencies:
38
37
  - - "~>"
39
38
  - !ruby/object:Gem::Version
40
39
  version: 0.2.0
41
- - !ruby/object:Gem::Dependency
42
- name: bundler
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '1.17'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '1.17'
55
- - !ruby/object:Gem::Dependency
56
- name: faraday
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '0.13'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '0.13'
69
40
  - !ruby/object:Gem::Dependency
70
41
  name: minitest
71
42
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +71,14 @@ dependencies:
100
71
  requirements:
101
72
  - - "~>"
102
73
  - !ruby/object:Gem::Version
103
- version: '12.0'
74
+ version: '13.3'
104
75
  type: :development
105
76
  prerelease: false
106
77
  version_requirements: !ruby/object:Gem::Requirement
107
78
  requirements:
108
79
  - - "~>"
109
80
  - !ruby/object:Gem::Version
110
- version: '12.0'
81
+ version: '13.3'
111
82
  - !ruby/object:Gem::Dependency
112
83
  name: rubocop
113
84
  requirement: !ruby/object:Gem::Requirement
@@ -164,7 +135,6 @@ dependencies:
164
135
  - - "~>"
165
136
  - !ruby/object:Gem::Version
166
137
  version: 0.1.6
167
- description:
168
138
  email:
169
139
  - cncf-opentelemetry-contributors@lists.cncf.io
170
140
  executables: []
@@ -196,11 +166,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
196
166
  licenses:
197
167
  - Apache-2.0
198
168
  metadata:
199
- changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-metrics-api/v0.4.0/file.CHANGELOG.html
169
+ changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-metrics-api/v0.5.0/file.CHANGELOG.html
200
170
  source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/metrics_api
201
171
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
202
- documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-metrics-api/v0.4.0
203
- post_install_message:
172
+ documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-metrics-api/v0.5.0
204
173
  rdoc_options: []
205
174
  require_paths:
206
175
  - lib
@@ -208,15 +177,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
208
177
  requirements:
209
178
  - - ">="
210
179
  - !ruby/object:Gem::Version
211
- version: '3.1'
180
+ version: '3.3'
212
181
  required_rubygems_version: !ruby/object:Gem::Requirement
213
182
  requirements:
214
183
  - - ">="
215
184
  - !ruby/object:Gem::Version
216
185
  version: '0'
217
186
  requirements: []
218
- rubygems_version: 3.3.27
219
- signing_key:
187
+ rubygems_version: 4.0.6
220
188
  specification_version: 4
221
189
  summary: A stats collection and distributed tracing framework
222
190
  test_files: []