opentelemetry-metrics-sdk 0.15.0 → 0.16.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: fee8234836c749267c8ef70c3a6e1edd1e7f07f2f684be31be5bbb692783bbe5
4
- data.tar.gz: d95498e59164701c62e415db1d99d20f201f77a7a9d621667603bdb7485c668c
3
+ metadata.gz: f72c4249d5329efc05eafffbe85f1475d2ae238b63c1af22a71eca6925def1bb
4
+ data.tar.gz: 85a822d11b3e73032c44355dd83c64af8512b50a2a69146ff777246b7f4d5ed6
5
5
  SHA512:
6
- metadata.gz: 13fc13a8866034bbd502032c7b6aef1fe485591d065cd01d533eec77ed9aa3fc8c3e11def8317b891bda9347317558ea0322bc211c00d46c3ee0cbc3a57c2bce
7
- data.tar.gz: 123a2e82d19c865243d45d0e2e29dce12e2c3166813ccdc8ad5e10ea45fb6e31d6d9c54b9558f36c380e8ece670146c9ba1b2450286b03a6ab6c70ec28db0839
6
+ metadata.gz: d320ce1c51b00a0ca50b8bc18ec4d466e24ecbf3f5ca5aff63e27e001cfd7a467a4f7c71f57b2fcc048ff466c27dd9bd0333607cfaabda1469513288517d3cc6
7
+ data.tar.gz: d33515584f7c941b780019a0998a31a2cc3b30fd66438aa167d0f68ad7d1f747bd15216aec353a5cacdc0e61451a2eec64c9c8ce7bef436783f3ef8ba46a1c11
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Release History: opentelemetry-metrics-sdk
2
2
 
3
+ ### v0.16.0 / 2026-08-04
4
+
5
+ * ADDED: Add attributes to Meter InstrumentationScope (#2273)
6
+
3
7
  ### v0.15.0 / 2026-06-16
4
8
 
5
9
  * BREAKING CHANGE: Metrics cardinality limit (#1909)
@@ -43,10 +43,7 @@ module OpenTelemetry
43
43
  # @param aggregation_temporality [Symbol] :delta or :cumulative
44
44
  # @return [Array<Exemplar>] The collected exemplars
45
45
  def collect(attributes: nil, aggregation_temporality: nil)
46
- exemplars = []
47
- @exemplar_buckets.each do |bucket|
48
- exemplars << bucket.collect(point_attributes: attributes)
49
- end
46
+ exemplars = @exemplar_buckets.map { |bucket| bucket.collect(point_attributes: attributes) }
50
47
  reset if aggregation_temporality == :delta
51
48
  exemplars.compact!
52
49
  exemplars
@@ -35,10 +35,7 @@ module OpenTelemetry
35
35
 
36
36
  # Reset measurement counter on collection for delta temporality
37
37
  def collect(attributes: nil, aggregation_temporality: nil)
38
- exemplars = []
39
- @exemplar_buckets.each do |bucket|
40
- exemplars << bucket.collect(point_attributes: attributes)
41
- end
38
+ exemplars = @exemplar_buckets.map { |bucket| bucket.collect(point_attributes: attributes) }
42
39
  reset if aggregation_temporality == :delta
43
40
  exemplars.compact!
44
41
  exemplars
@@ -50,7 +47,7 @@ module OpenTelemetry
50
47
  end
51
48
 
52
49
  def find_histogram_bucket
53
- @num_measurements_seen < @max_size ? @num_measurements_seen : rand(0..@num_measurements_seen - 1)
50
+ @num_measurements_seen < @max_size ? @num_measurements_seen : rand(0..(@num_measurements_seen - 1))
54
51
  end
55
52
  end
56
53
  end
@@ -13,7 +13,7 @@ module OpenTelemetry
13
13
  # Potentially useful for exploratory purposes.
14
14
  class ConsoleMetricPullExporter < MetricReader
15
15
  def initialize(aggregation_cardinality_limit: nil)
16
- super(aggregation_cardinality_limit: aggregation_cardinality_limit)
16
+ super
17
17
  @stopped = false
18
18
  end
19
19
 
@@ -14,7 +14,7 @@ module OpenTelemetry
14
14
  attr_reader :metric_snapshots
15
15
 
16
16
  def initialize(aggregation_cardinality_limit: nil)
17
- super(aggregation_cardinality_limit: aggregation_cardinality_limit)
17
+ super
18
18
  @metric_snapshots = []
19
19
  @mutex = Mutex.new
20
20
  end
@@ -134,8 +134,8 @@ module OpenTelemetry
134
134
  OpenTelemetry.logger.debug 'Successfully exported metrics' if result_code == Export::SUCCESS
135
135
  end
136
136
 
137
- def lock(&block)
138
- @mutex.synchronize(&block)
137
+ def lock(&)
138
+ @mutex.synchronize(&)
139
139
  end
140
140
  end
141
141
  end
@@ -8,7 +8,7 @@ module OpenTelemetry
8
8
  module SDK
9
9
  module Metrics
10
10
  module Export
11
- ExportError = Class.new(OpenTelemetry::Error)
11
+ ExportError = Class.new(OpenTelemetry::Error) # rubocop:disable Style/EmptyClassDefinition
12
12
 
13
13
  # The operation finished successfully.
14
14
  SUCCESS = 0
@@ -17,14 +17,16 @@ module OpenTelemetry
17
17
  #
18
18
  # Returns a new {Meter} instance.
19
19
  #
20
- # @param [String] name Instrumentation package name
21
- # @param [String] version Instrumentation package version
20
+ # @param [String] name Instrumentation scope name
21
+ # @param [String] version Instrumentation scope version
22
+ # @param [optional Hash{String => String, Numeric, Boolean, Array<String, Numeric, Boolean>}] attributes
23
+ # Instrumentation scope attributes
22
24
  #
23
25
  # @return [Meter]
24
- def initialize(name, version, meter_provider)
26
+ def initialize(name, version, meter_provider, attributes: nil)
25
27
  @mutex = Mutex.new
26
28
  @instrument_registry = {}
27
- @instrumentation_scope = InstrumentationScope.new(name, version)
29
+ @instrumentation_scope = InstrumentationScope.new(name, version, attributes || {}.freeze)
28
30
  @meter_provider = meter_provider
29
31
  end
30
32
 
@@ -12,7 +12,9 @@ module OpenTelemetry
12
12
  # {MeterProvider} is the SDK implementation of {OpenTelemetry::Metrics::MeterProvider}.
13
13
  # rubocop:disable Metrics/ClassLength
14
14
  class MeterProvider < OpenTelemetry::Metrics::MeterProvider
15
- Key = Struct.new(:name, :version)
15
+ EMPTY_ATTRIBUTES = {}.freeze
16
+
17
+ Key = Struct.new(:name, :version, :attributes)
16
18
  private_constant(:Key)
17
19
 
18
20
  attr_reader :resource, :metric_readers, :registered_views, :exemplar_filter
@@ -29,18 +31,22 @@ module OpenTelemetry
29
31
 
30
32
  # Returns a {Meter} instance.
31
33
  #
32
- # @param [String] name Instrumentation package name
33
- # @param [optional String] version Instrumentation package version
34
+ # @param [String] name Instrumentation scope name
35
+ # @param [optional String] version Instrumentation scope version
36
+ # @param [optional Hash{String => String, Numeric, Boolean, Array<String, Numeric, Boolean>}] attributes
37
+ # Instrumentation scope attributes
34
38
  #
35
39
  # @return [Meter]
36
- def meter(name, version: nil)
40
+ def meter(name, version: nil, attributes: nil)
37
41
  version ||= ''
42
+ attributes = attributes&.dup&.freeze || EMPTY_ATTRIBUTES
43
+
38
44
  if @stopped
39
45
  OpenTelemetry.logger.warn 'calling MeterProvider#meter after shutdown, a noop meter will be returned.'
40
46
  OpenTelemetry::Metrics::Meter.new
41
47
  else
42
48
  OpenTelemetry.logger.warn "Invalid meter name provided: #{name.nil? ? 'nil' : 'empty'} value" if name.to_s.empty?
43
- @mutex.synchronize { @meter_registry[Key.new(name, version)] ||= Meter.new(name, version, self) }
49
+ @mutex.synchronize { @meter_registry[Key.new(name, version, attributes)] ||= Meter.new(name, version, self, attributes: attributes) }
44
50
  end
45
51
  end
46
52
 
@@ -131,7 +137,7 @@ module OpenTelemetry
131
137
  alias register_asynchronous_instrument register_synchronous_instrument
132
138
 
133
139
  def exemplar_filter_setup
134
- case ENV['OTEL_METRICS_EXEMPLAR_FILTER']
140
+ case ENV.fetch('OTEL_METRICS_EXEMPLAR_FILTER', nil)
135
141
  when 'always_on'
136
142
  @exemplar_filter = Exemplar::AlwaysOnExemplarFilter
137
143
  when nil, '', 'trace_based'
@@ -139,7 +145,7 @@ module OpenTelemetry
139
145
  when 'always_off'
140
146
  @exemplar_filter = Exemplar::AlwaysOffExemplarFilter
141
147
  else
142
- OpenTelemetry.logger.warn("OTEL_METRICS_EXEMPLAR_FILTER #{ENV['OTEL_METRICS_EXEMPLAR_FILTER']} is not part of the provided exemplar filters. Using trace_based.")
148
+ OpenTelemetry.logger.warn("OTEL_METRICS_EXEMPLAR_FILTER #{ENV.fetch('OTEL_METRICS_EXEMPLAR_FILTER', nil)} is not part of the provided exemplar filters. Using trace_based.")
143
149
  @exemplar_filter = Exemplar::TraceBasedExemplarFilter
144
150
  end
145
151
  end
@@ -177,9 +183,9 @@ module OpenTelemetry
177
183
  #
178
184
  # @return [nil] returns nil
179
185
  #
180
- def add_view(name, **options)
186
+ def add_view(name, **)
181
187
  # TODO: add schema_url as part of options
182
- @registered_views << View::RegisteredView.new(name, **options)
188
+ @registered_views << View::RegisteredView.new(name, **)
183
189
  nil
184
190
  end
185
191
  end
@@ -46,7 +46,7 @@ module OpenTelemetry
46
46
  invoke_callback(@timeout, @attributes)
47
47
 
48
48
  # Call parent collect method for the core collection logic
49
- super(start_time, end_time)
49
+ super
50
50
  end
51
51
 
52
52
  def invoke_callback(timeout, attributes)
@@ -8,7 +8,7 @@ module OpenTelemetry
8
8
  module SDK
9
9
  module Metrics
10
10
  # Current OpenTelemetry metrics sdk version
11
- VERSION = '0.15.0'
11
+ VERSION = '0.16.0'
12
12
  end
13
13
  end
14
14
  end
@@ -32,7 +32,7 @@ module OpenTelemetry
32
32
  true
33
33
  end
34
34
 
35
- def name_match(stream_name)
35
+ def name_match(stream_name) # rubocop:disable Naming/PredicateMethod
36
36
  !!@regex&.match(stream_name)
37
37
  end
38
38
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-metrics-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.0
4
+ version: 0.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
@@ -43,14 +43,14 @@ dependencies:
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '1.2'
46
+ version: 1.13.0
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '1.2'
53
+ version: 1.13.0
54
54
  description: A stats collection and distributed tracing framework
55
55
  email:
56
56
  - cncf-opentelemetry-contributors@lists.cncf.io
@@ -121,10 +121,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
121
121
  licenses:
122
122
  - Apache-2.0
123
123
  metadata:
124
- changelog_uri: https://rubydoc.info/gems/opentelemetry-metrics-sdk/0.15.0/file/CHANGELOG.md
125
- source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/opentelemetry-metrics-sdk/v0.15.0/metrics_sdk
124
+ changelog_uri: https://rubydoc.info/gems/opentelemetry-metrics-sdk/0.16.0/file/CHANGELOG.md
125
+ source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/opentelemetry-metrics-sdk/v0.16.0/metrics_sdk
126
126
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
127
- documentation_uri: https://rubydoc.info/gems/opentelemetry-metrics-sdk/0.15.0
127
+ documentation_uri: https://rubydoc.info/gems/opentelemetry-metrics-sdk/0.16.0
128
128
  rdoc_options: []
129
129
  require_paths:
130
130
  - lib
@@ -139,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
139
  - !ruby/object:Gem::Version
140
140
  version: '0'
141
141
  requirements: []
142
- rubygems_version: 4.0.10
142
+ rubygems_version: 4.0.16
143
143
  specification_version: 4
144
144
  summary: A stats collection and distributed tracing framework
145
145
  test_files: []