opentelemetry-api 1.10.0 → 1.11.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: c73be354c7e8b1904d9b1e68db9c61dcce2accbca66b98e01dcfec6b0e0ed049
4
- data.tar.gz: c2465cae1e0da0b093aef81546481fd78e7e26f79fc434f457365ec3abaa24ba
3
+ metadata.gz: 54f9aefb3cf00989b6f8ec91622bfcf4ed990bcc898fe8850655a13aa7502153
4
+ data.tar.gz: cdbe2376c9bed2b603dbd6fe0b554a506c2c82f21b340e43cc54368acfebc9e4
5
5
  SHA512:
6
- metadata.gz: dd1a8b3b3854aba2ccb9a43130f56410e169c8299d73ea224c4cfbb33688d9e09640de176396d39a3aad3f479d03b8d99ba4079164bbec1997492758a2bf4eff
7
- data.tar.gz: 8d3d993995f3c4bce31b2491db27f4e378579e91ba1b0f6cc12acd42d21d9c64f97b7be985769cc584a7e369407ed223ac4899b175763252445dfc4312de9472
6
+ metadata.gz: 5cca57e3ddc7cbe682f1d606d45bd0336e0256f69acce2060d9905d2e5c54e96ff05ee30c5bbba671fa95ed736344873f1af8361f7a3a6ede6bd4ce2ee5a3558
7
+ data.tar.gz: 1ddc9c956939364f9b783abb42660859bbc2020a36d77b4b1cf348b401e1d3736a9b7758b44d7f41ff153db1eb2f102fee6ab708b555b79b05a35e1463068b63
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Release History: opentelemetry-api
2
2
 
3
+ ### v1.11.0 / 2026-07-21
4
+
5
+ * ADDED: Add attributes support to instrumentation scope for tracers (#2094)
6
+
7
+ ### v1.10.1 / 2026-07-08
8
+
9
+ * DOCS: Update source for gemspec links to RubyDoc (#2123)
10
+
3
11
  ### v1.10.0 / 2026-05-12
4
12
 
5
13
  * ADDED: Add git tag to source URI in gemspec (#2101)
@@ -126,9 +134,6 @@
126
134
  ### v0.17.0 / 2021-04-22
127
135
 
128
136
  - BREAKING CHANGE: Replace TextMapInjector/TextMapExtractor pairs with a TextMapPropagator.
129
-
130
- [Check the propagator documentation](https://open-telemetry.github.io/opentelemetry-ruby/) for the new usage.
131
-
132
137
  - BREAKING CHANGE: Remove metrics API.
133
138
 
134
139
  `OpenTelemetry::Metrics` and all of its behavior removed until spec stabilizes.
@@ -34,7 +34,7 @@ module OpenTelemetry
34
34
  return if baggage.nil? || baggage.empty?
35
35
 
36
36
  encoded_baggage = encode(baggage)
37
- setter.set(carrier, BAGGAGE_KEY, encoded_baggage) unless encoded_baggage&.empty?
37
+ setter.set(carrier, BAGGAGE_KEY, encoded_baggage) if encoded_baggage && !encoded_baggage.empty?
38
38
  nil
39
39
  end
40
40
 
@@ -63,7 +63,7 @@ module OpenTelemetry
63
63
  # the W3C spec where it's referred to as properties. We preserve
64
64
  # the properties (as-is) so that they can be propagated elsewhere.
65
65
  kv, meta = entry.split(';', 2)
66
- k, v = kv.split('=').map!(&URI.method(:decode_uri_component))
66
+ k, v = kv.split('=').map! { |part| URI.decode_uri_component(part) }
67
67
  builder.set_value(k, v, metadata: meta)
68
68
  end
69
69
  end
@@ -99,7 +99,7 @@ module OpenTelemetry
99
99
  end
100
100
 
101
101
  def encode_value(key, entry)
102
- result = +"#{URI.encode_uri_component(key.to_s)}=#{URI.encode_uri_component(entry.value.to_s)}"
102
+ result = "#{URI.encode_uri_component(key.to_s)}=#{URI.encode_uri_component(entry.value.to_s)}"
103
103
  # We preserve metadata received on extract and assume it's already formatted
104
104
  # for transport. It's sent as-is without further processing.
105
105
  result << ";#{entry.metadata}" if entry.metadata
@@ -26,14 +26,13 @@ module OpenTelemetry
26
26
  # form to the original. The resulting keys will be lowercase and
27
27
  # underscores will be replaced with dashes.
28
28
  def keys(carrier)
29
- carrier.keys.map(&method(:from_rack_key))
29
+ carrier.keys.map { |k| from_rack_key(k) }
30
30
  end
31
31
 
32
32
  private
33
33
 
34
34
  def to_rack_key(key)
35
- # Use + for mutable string interpolation in pre-Ruby 3.0.
36
- ret = +"HTTP_#{key}"
35
+ ret = "HTTP_#{key}"
37
36
  ret.tr!('-', '_')
38
37
  ret.upcase!
39
38
  ret
@@ -15,7 +15,7 @@ module OpenTelemetry # rubocop:disable Style/Documentation
15
15
  EMPTY_ENTRIES = {}.freeze
16
16
  private_constant :EMPTY_ENTRIES
17
17
 
18
- DetachError = Class.new(OpenTelemetry::Error)
18
+ DetachError = Class.new(OpenTelemetry::Error) # rubocop:disable Style/EmptyClassDefinition
19
19
 
20
20
  class << self
21
21
  # Returns a key used to index a value in a Context
@@ -162,7 +162,7 @@ module OpenTelemetry # rubocop:disable Style/Documentation
162
162
  # entries.
163
163
  # @param [Object] value Object to be stored under key
164
164
  # @return [Context]
165
- def set_values(values) # rubocop:disable Naming/AccessorMethodName:
165
+ def set_values(values) # rubocop:disable Naming/AccessorMethodName
166
166
  Context.new(@entries.merge(values))
167
167
  end
168
168
 
@@ -13,9 +13,22 @@ module OpenTelemetry
13
13
  # It delegates to a "real" TracerProvider after the global tracer provider is registered.
14
14
  # It returns {ProxyTracer} instances until the delegate is installed.
15
15
  class ProxyTracerProvider < Trace::TracerProvider
16
- Key = Struct.new(:name, :version)
16
+ Key = Struct.new(:name, :version, :attributes)
17
17
  private_constant(:Key)
18
18
 
19
+ # Wraps a legacy TracerProvider whose `#tracer` method does not accept
20
+ # the `attributes:` keyword argument, dropping the argument on delegation.
21
+ class LegacyProviderWrapper
22
+ def initialize(legacy_provider)
23
+ @legacy_provider = legacy_provider
24
+ end
25
+
26
+ def tracer(name = nil, version = nil, attributes: nil)
27
+ @legacy_provider.tracer(name, version)
28
+ end
29
+ end
30
+ private_constant(:LegacyProviderWrapper)
31
+
19
32
  # Returns a new {ProxyTracerProvider} instance.
20
33
  #
21
34
  # @return [ProxyTracerProvider]
@@ -35,25 +48,45 @@ module OpenTelemetry
35
48
  return
36
49
  end
37
50
 
51
+ provider = LegacyProviderWrapper.new(provider) unless supports_attributes?(provider)
52
+
38
53
  @mutex.synchronize do
39
54
  @delegate = provider
40
- @registry.each { |key, tracer| tracer.delegate = provider.tracer(key.name, key.version) }
55
+ @registry.each { |key, tracer| tracer.delegate = @delegate.tracer(key.name, key.version, attributes: key.attributes) }
41
56
  end
42
57
  end
43
58
 
44
59
  # Returns a {Tracer} instance.
45
60
  #
46
- # @param [optional String] name Instrumentation package name
47
- # @param [optional String] version Instrumentation package version
61
+ # Supports both positional arguments (legacy) and keyword arguments:
62
+ # tracer('name', '1.0') # legacy positional
63
+ # tracer(name: 'name', version: '1.0', attributes: {...}) # keyword
64
+ #
65
+ # When both positional and keyword arguments are provided for the same
66
+ # parameter, the keyword argument takes precedence.
67
+ #
68
+ # @param [String] name Instrumentation scope name
69
+ # @param [String] version Instrumentation scope version
70
+ # @param [Hash{String => String, Numeric, Boolean, Array<String, Numeric, Boolean>}] attributes
71
+ # Instrumentation scope attributes
48
72
  #
49
73
  # @return [Tracer]
50
- def tracer(name = nil, version = nil)
74
+ def tracer(deprecated_name = nil, deprecated_version = nil, name: nil, version: nil, attributes: nil)
75
+ name ||= deprecated_name
76
+ version ||= deprecated_version
51
77
  @mutex.synchronize do
52
- return @delegate.tracer(name, version) unless @delegate.nil?
78
+ return @delegate.tracer(name, version, attributes: attributes) unless @delegate.nil?
53
79
 
54
- @registry[Key.new(name, version)] ||= ProxyTracer.new
80
+ @registry[Key.new(name, version, attributes)] ||= ProxyTracer.new
55
81
  end
56
82
  end
83
+
84
+ private
85
+
86
+ def supports_attributes?(provider)
87
+ provider.respond_to?(:tracer) &&
88
+ provider.method(:tracer).parameters.any? { |_, n| n == :attributes }
89
+ end
57
90
  end
58
91
  end
59
92
  end
@@ -11,10 +11,12 @@ module OpenTelemetry
11
11
  # https://www.w3.org/TR/trace-context/
12
12
  # {Trace::SpanContext}
13
13
  class TraceParent
14
+ # rubocop:disable Style/EmptyClassDefinition
14
15
  InvalidFormatError = Class.new(Error)
15
16
  InvalidVersionError = Class.new(Error)
16
17
  InvalidTraceIDError = Class.new(Error)
17
18
  InvalidSpanIDError = Class.new(Error)
19
+ # rubocop:enable Style/EmptyClassDefinition
18
20
 
19
21
  TRACE_PARENT_HEADER = 'traceparent'
20
22
  SUPPORTED_VERSION = 0
@@ -14,6 +14,7 @@ module OpenTelemetry
14
14
  # for context propagation in the W3C Trace Context format.
15
15
  module TraceContext
16
16
  extend self
17
+
17
18
  TEXT_MAP_PROPAGATOR = TextMapPropagator.new
18
19
 
19
20
  private_constant :TEXT_MAP_PROPAGATOR
@@ -40,7 +40,7 @@ module OpenTelemetry
40
40
  #
41
41
  # @return [Boolean]
42
42
  def sampled?
43
- (@flags & 1) != 0
43
+ @flags.anybits?(1)
44
44
  end
45
45
 
46
46
  DEFAULT = from_byte(0)
@@ -34,7 +34,7 @@ module OpenTelemetry
34
34
  def in_span(name, attributes: nil, links: nil, start_timestamp: nil, kind: nil, record_exception: true)
35
35
  span = nil
36
36
  span = start_span(name, attributes: attributes, links: links, start_timestamp: start_timestamp, kind: kind)
37
- Trace.with_span(span) { |s, c| yield s, c }
37
+ Trace.with_span(span) { |s, c| yield s, c } # rubocop:disable Style/ExplicitBlockArgument
38
38
  rescue Exception => e # rubocop:disable Lint/RescueException
39
39
  span&.record_exception(e) if record_exception
40
40
  span&.status = Status.error("Unhandled exception of type: #{e.class}")
@@ -10,11 +10,20 @@ module OpenTelemetry
10
10
  class TracerProvider
11
11
  # Returns a {Tracer} instance.
12
12
  #
13
- # @param [optional String] name Instrumentation package name
14
- # @param [optional String] version Instrumentation package version
13
+ # Supports both positional arguments (legacy) and keyword arguments:
14
+ # tracer('name', '1.0') # legacy positional
15
+ # tracer(name: 'name', version: '1.0', attributes: {...}) # keyword
16
+ #
17
+ # When both positional and keyword arguments are provided for the same
18
+ # parameter, the keyword argument takes precedence.
19
+ #
20
+ # @param [String] name Instrumentation scope name
21
+ # @param [String] version Instrumentation scope version
22
+ # @param [Hash{String => String, Numeric, Boolean, Array<String, Numeric, Boolean>}] attributes
23
+ # Instrumentation scope attributes
15
24
  #
16
25
  # @return [Tracer]
17
- def tracer(name = nil, version = nil)
26
+ def tracer(deprecated_name = nil, deprecated_version = nil, name: nil, version: nil, attributes: nil)
18
27
  @tracer ||= Tracer.new
19
28
  end
20
29
  end
@@ -18,7 +18,7 @@ module OpenTelemetry
18
18
  # @param [String] header Encoding of the tracestate header defined by
19
19
  # the W3C Trace Context specification https://www.w3.org/TR/trace-context/
20
20
  # @return [Tracestate] A new Tracestate instance or DEFAULT
21
- def from_string(header) # rubocop:disable Metrics/CyclomaticComplexity:
21
+ def from_string(header) # rubocop:disable Metrics/CyclomaticComplexity
22
22
  return DEFAULT if header.nil? || header.empty?
23
23
 
24
24
  hash = header.split(',').each_with_object({}) do |member, memo|
@@ -75,7 +75,7 @@ module OpenTelemetry
75
75
  # @return [Tracestate]
76
76
  def initialize(hash)
77
77
  excess = hash.size - MAX_MEMBER_COUNT
78
- hash = Hash[hash.drop(excess)] if excess.positive?
78
+ hash = hash.drop(excess).to_h if excess.positive?
79
79
  @hash = hash.freeze
80
80
  end
81
81
 
@@ -105,7 +105,7 @@ module OpenTelemetry
105
105
  return self
106
106
  end
107
107
 
108
- h = Hash[@hash]
108
+ h = @hash.to_h.dup
109
109
  h[key] = value
110
110
  self.class.create(h)
111
111
  end
@@ -118,7 +118,7 @@ module OpenTelemetry
118
118
  def delete(key)
119
119
  return self unless @hash.key?(key)
120
120
 
121
- h = Hash[@hash]
121
+ h = @hash.to_h.dup
122
122
  h.delete(key)
123
123
  self.class.create(h)
124
124
  end
@@ -6,5 +6,5 @@
6
6
 
7
7
  module OpenTelemetry
8
8
  ## Current OpenTelemetry version
9
- VERSION = '1.10.0'
9
+ VERSION = '1.11.0'
10
10
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.0
4
+ version: 1.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
@@ -23,20 +23,6 @@ dependencies:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
25
  version: '0'
26
- - !ruby/object:Gem::Dependency
27
- name: benchmark-ips
28
- requirement: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - "~>"
31
- - !ruby/object:Gem::Version
32
- version: 2.14.0
33
- type: :development
34
- prerelease: false
35
- version_requirements: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: 2.14.0
40
26
  - !ruby/object:Gem::Dependency
41
27
  name: concurrent-ruby
42
28
  requirement: !ruby/object:Gem::Requirement
@@ -51,104 +37,6 @@ dependencies:
51
37
  - - "~>"
52
38
  - !ruby/object:Gem::Version
53
39
  version: '1.3'
54
- - !ruby/object:Gem::Dependency
55
- name: minitest
56
- requirement: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '5.0'
61
- type: :development
62
- prerelease: false
63
- version_requirements: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '5.0'
68
- - !ruby/object:Gem::Dependency
69
- name: opentelemetry-test-helpers
70
- requirement: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- version: '0'
75
- type: :development
76
- prerelease: false
77
- version_requirements: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - ">="
80
- - !ruby/object:Gem::Version
81
- version: '0'
82
- - !ruby/object:Gem::Dependency
83
- name: rake
84
- requirement: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '13.3'
89
- type: :development
90
- prerelease: false
91
- version_requirements: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '13.3'
96
- - !ruby/object:Gem::Dependency
97
- name: rubocop
98
- requirement: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '1.65'
103
- type: :development
104
- prerelease: false
105
- version_requirements: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: '1.65'
110
- - !ruby/object:Gem::Dependency
111
- name: simplecov
112
- requirement: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - "~>"
115
- - !ruby/object:Gem::Version
116
- version: '0.17'
117
- type: :development
118
- prerelease: false
119
- version_requirements: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: '0.17'
124
- - !ruby/object:Gem::Dependency
125
- name: yard
126
- requirement: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - "~>"
129
- - !ruby/object:Gem::Version
130
- version: '0.9'
131
- type: :development
132
- prerelease: false
133
- version_requirements: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - "~>"
136
- - !ruby/object:Gem::Version
137
- version: '0.9'
138
- - !ruby/object:Gem::Dependency
139
- name: yard-doctest
140
- requirement: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - "~>"
143
- - !ruby/object:Gem::Version
144
- version: 0.1.6
145
- type: :development
146
- prerelease: false
147
- version_requirements: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - "~>"
150
- - !ruby/object:Gem::Version
151
- version: 0.1.6
152
40
  description: A stats collection and distributed tracing framework
153
41
  email:
154
42
  - cncf-opentelemetry-contributors@lists.cncf.io
@@ -200,10 +88,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
200
88
  licenses:
201
89
  - Apache-2.0
202
90
  metadata:
203
- changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-api/v1.10.0/file.CHANGELOG.html
204
- source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/opentelemetry-api/v1.10.0/api
91
+ changelog_uri: https://rubydoc.info/gems/opentelemetry-api/1.11.0/file/CHANGELOG.md
92
+ source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/opentelemetry-api/v1.11.0/api
205
93
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
206
- documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-api/v1.10.0
94
+ documentation_uri: https://rubydoc.info/gems/opentelemetry-api/1.11.0
207
95
  rdoc_options: []
208
96
  require_paths:
209
97
  - lib
@@ -218,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
218
106
  - !ruby/object:Gem::Version
219
107
  version: '0'
220
108
  requirements: []
221
- rubygems_version: 4.0.6
109
+ rubygems_version: 4.0.16
222
110
  specification_version: 4
223
111
  summary: A stats collection and distributed tracing framework
224
112
  test_files: []