opentelemetry-sdk 1.12.0 → 1.13.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: d3df2132b43045e07cb0f13e49c8d7e00d9f624396fea32fda8e21cabf2e7e55
4
- data.tar.gz: 5ac5bc174189cefdf16fcc0579c52c5121c4590847b600ed1d2a7ae996449537
3
+ metadata.gz: d263c7e1224cad3b9e7a9ac1fc958dae76c9bc9788df4dde53b56d5603cfd22e
4
+ data.tar.gz: e2a8d6e023dfbc277b37bd0df76a4903adab343e3b3be2173a6943806141904d
5
5
  SHA512:
6
- metadata.gz: 34379d5470bf7049327bc9d39c1ce33efed2239e5485145fd1e37382502c68fa73e81bf3808dbd665b54cbc88e0701a40829ed47e5df4112c0464eaf69fa7c7e
7
- data.tar.gz: 675da7f819bf56f36b4290d29fe18bb2ffade8af3ad3a7c11a720730422bc31e6980af5621d45ed1441c31c45eee3e88b2d2e0633e33b4c93eb328d0df0f5679
6
+ metadata.gz: '088ced3e6d379e35df9790f999287ecca88c2f79ac7b4c8bdf162c89e8e19bca49bebd1d084ff4dfe872e2d70aaad1b0c8dd1c11e0e1686fd297b05d42f3435f'
7
+ data.tar.gz: 7b1c670d348ba097b8721c3b30843ceb693d62985e8e798d9589e87792d85388c7d32cd2c618c90317f53a780f2199a6916b07fc817456fec3c0c431f90e442e
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Release History: opentelemetry-sdk
2
2
 
3
+ ### v1.13.0 / 2026-07-21
4
+
5
+ * ADDED: Add attributes support to instrumentation scope for tracers (#2094)
6
+
7
+ ### v1.12.1 / 2026-07-08
8
+
9
+ * DOCS: Update source for gemspec links to RubyDoc (#2123)
10
+
3
11
  ### v1.12.0 / 2026-05-12
4
12
 
5
13
  * ADDED: Add git tag to source URI in gemspec (#2101)
@@ -162,9 +170,6 @@
162
170
  ### v0.17.0 / 2021-04-22
163
171
 
164
172
  - BREAKING CHANGE: Replace TextMapInjector/TextMapExtractor pairs with a TextMapPropagator.
165
-
166
- [Check the propagator documentation](https://open-telemetry.github.io/opentelemetry-ruby/) for the new usage.
167
-
168
173
  - ADDED: Add zipkin exporter
169
174
  - ADDED: Processors validate exporters on init.
170
175
  - ADDED: Add configurable truncation of span and event attribute values
@@ -190,11 +190,11 @@ module OpenTelemetry
190
190
  when 'otlp'
191
191
  otlp_protocol = ENV['OTEL_EXPORTER_OTLP_TRACES_PROTOCOL'] || ENV['OTEL_EXPORTER_OTLP_PROTOCOL'] || 'http/protobuf'
192
192
 
193
- if otlp_protocol != 'http/protobuf'
193
+ if otlp_protocol == 'http/protobuf'
194
+ fetch_exporter(exporter, 'OpenTelemetry::Exporter::OTLP::Exporter')
195
+ else
194
196
  OpenTelemetry.logger.warn "The #{otlp_protocol} transport protocol is not supported by the OTLP exporter, spans will not be exported."
195
197
  nil
196
- else
197
- fetch_exporter(exporter, 'OpenTelemetry::Exporter::OTLP::Exporter')
198
198
  end
199
199
  when 'jaeger' then fetch_exporter(exporter, 'OpenTelemetry::Exporter::Jaeger::CollectorExporter')
200
200
  when 'zipkin' then fetch_exporter(exporter, 'OpenTelemetry::Exporter::Zipkin::Exporter')
@@ -35,34 +35,34 @@ module OpenTelemetry
35
35
  end
36
36
  end
37
37
 
38
- def add(severity, message = nil, progname = nil, &block)
38
+ def add(severity, message = nil, progname = nil, &)
39
39
  return true if severity < @level
40
40
 
41
- @logger.add(severity, message, progname, &block)
41
+ @logger.add(severity, message, progname, &)
42
42
  end
43
43
 
44
- def debug(progname = nil, &block)
45
- add(Logger::DEBUG, nil, progname, &block)
44
+ def debug(progname = nil, &)
45
+ add(Logger::DEBUG, nil, progname, &)
46
46
  end
47
47
 
48
- def info(progname = nil, &block)
49
- add(Logger::INFO, nil, progname, &block)
48
+ def info(progname = nil, &)
49
+ add(Logger::INFO, nil, progname, &)
50
50
  end
51
51
 
52
- def warn(progname = nil, &block)
53
- add(Logger::WARN, nil, progname, &block)
52
+ def warn(progname = nil, &)
53
+ add(Logger::WARN, nil, progname, &)
54
54
  end
55
55
 
56
- def error(progname = nil, &block)
57
- add(Logger::ERROR, nil, progname, &block)
56
+ def error(progname = nil, &)
57
+ add(Logger::ERROR, nil, progname, &)
58
58
  end
59
59
 
60
- def fatal(progname = nil, &block)
61
- add(Logger::FATAL, nil, progname, &block)
60
+ def fatal(progname = nil, &)
61
+ add(Logger::FATAL, nil, progname, &)
62
62
  end
63
63
 
64
- def unknown(progname = nil, &block)
65
- add(Logger::UNKNOWN, nil, progname, &block)
64
+ def unknown(progname = nil, &)
65
+ add(Logger::UNKNOWN, nil, progname, &)
66
66
  end
67
67
  end
68
68
  end
@@ -8,6 +8,7 @@ module OpenTelemetry
8
8
  module SDK
9
9
  # InstrumentationScope is a struct containing scope information for export.
10
10
  InstrumentationScope = Struct.new(:name,
11
- :version)
11
+ :version,
12
+ :attributes)
12
13
  end
13
14
  end
@@ -34,7 +34,7 @@ module OpenTelemetry
34
34
 
35
35
  case value.first
36
36
  when String
37
- value.all? { |v| v.instance_of?(String) }
37
+ value.all?(String)
38
38
  when TrueClass, FalseClass
39
39
  value.all? { |v| boolean?(v) }
40
40
  when Numeric
@@ -41,7 +41,7 @@ module OpenTelemetry
41
41
  SemanticConventions::Resource::TELEMETRY_SDK_VERSION => OpenTelemetry::SDK::VERSION
42
42
  }
43
43
 
44
- resource_pairs = ENV['OTEL_RESOURCE_ATTRIBUTES']
44
+ resource_pairs = ENV.fetch('OTEL_RESOURCE_ATTRIBUTES', nil)
45
45
  return create(resource_attributes) unless resource_pairs.is_a?(String)
46
46
 
47
47
  resource_pairs.split(',').each do |pair|
@@ -68,7 +68,7 @@ module OpenTelemetry
68
68
  private
69
69
 
70
70
  def service_name_from_env
71
- service_name = ENV['OTEL_SERVICE_NAME']
71
+ service_name = ENV.fetch('OTEL_SERVICE_NAME', nil)
72
72
  create(SemanticConventions::Resource::SERVICE_NAME => service_name) unless service_name.nil?
73
73
  end
74
74
  end
@@ -49,7 +49,7 @@ module OpenTelemetry
49
49
  schedule_delay: Float(ENV.fetch('OTEL_BSP_SCHEDULE_DELAY', 5_000)),
50
50
  max_queue_size: Integer(ENV.fetch('OTEL_BSP_MAX_QUEUE_SIZE', 2048)),
51
51
  max_export_batch_size: Integer(ENV.fetch('OTEL_BSP_MAX_EXPORT_BATCH_SIZE', 512)),
52
- start_thread_on_boot: String(ENV['OTEL_RUBY_BSP_START_THREAD_ON_BOOT']) !~ /false/i,
52
+ start_thread_on_boot: String(ENV.fetch('OTEL_RUBY_BSP_START_THREAD_ON_BOOT', nil)) !~ /false/i,
53
53
  metrics_reporter: nil)
54
54
  raise ArgumentError if max_export_batch_size > max_queue_size
55
55
  raise ArgumentError, "exporter #{exporter.inspect} does not appear to be a valid exporter" unless Common::Utilities.valid_exporter?(exporter)
@@ -210,9 +210,11 @@ module OpenTelemetry
210
210
  end
211
211
 
212
212
  def lock
213
+ # rubocop:disable Style/ExplicitBlockArgument
213
214
  @mutex.synchronize do
214
215
  yield
215
216
  end
217
+ # rubocop:enable Style/ExplicitBlockArgument
216
218
  end
217
219
  end
218
220
  end
@@ -16,7 +16,7 @@ module OpenTelemetry
16
16
 
17
17
  def initialize(probability)
18
18
  @probability = probability
19
- @id_upper_bound = (probability * (2**64 - 1)).ceil
19
+ @id_upper_bound = (probability * ((2**64) - 1)).ceil
20
20
  @description = format('TraceIdRatioBased{%.6f}', probability)
21
21
  end
22
22
 
@@ -39,7 +39,9 @@ module OpenTelemetry
39
39
  private
40
40
 
41
41
  def sample?(trace_id)
42
+ # rubocop:disable Lint/FloatComparison
42
43
  @probability == 1.0 || trace_id[8, 8].unpack1('Q>') < @id_upper_bound
44
+ # rubocop:enable Lint/FloatComparison
43
45
  end
44
46
  end
45
47
  end
@@ -418,7 +418,7 @@ module OpenTelemetry
418
418
  excess_link_count = valid_links.size - link_count_limit
419
419
  valid_links.pop(excess_link_count) if excess_link_count.positive?
420
420
  valid_links.map! do |link|
421
- attrs = Hash[link.attributes] # link.attributes is frozen, so we need an unfrozen copy to adjust.
421
+ attrs = link.attributes.to_h.dup # link.attributes is frozen, so we need an unfrozen copy to adjust.
422
422
  attrs.keep_if { |key, value| Internal.valid_key?(key) && Internal.valid_value?(value) }
423
423
  excess = attrs.size - link_attribute_count_limit
424
424
  excess.times { attrs.shift } if excess.positive?
@@ -444,7 +444,7 @@ module OpenTelemetry
444
444
 
445
445
  excess = event.attributes.size - event_attribute_count_limit
446
446
  if excess.positive? || !valid_attributes
447
- attrs = Hash[event.attributes] # event.attributes is frozen, so we need an unfrozen copy to adjust.
447
+ attrs = event.attributes.to_h.dup # event.attributes is frozen, so we need an unfrozen copy to adjust.
448
448
  attrs.keep_if { |key, value| Internal.valid_key?(key) && Internal.valid_value?(value) }
449
449
  excess = attrs.size - event_attribute_count_limit
450
450
  excess.times { attrs.shift } if excess.positive?
@@ -13,13 +13,15 @@ module OpenTelemetry
13
13
  #
14
14
  # Returns a new {Tracer} instance.
15
15
  #
16
- # @param [String] name Instrumentation package name
17
- # @param [String] version Instrumentation package version
16
+ # @param [String] name Instrumentation scope name
17
+ # @param [String] version Instrumentation scope version
18
18
  # @param [TracerProvider] tracer_provider TracerProvider that initialized the tracer
19
+ # @param [Hash{String => String, Numeric, Boolean, Array<String, Numeric, Boolean>}] attributes
20
+ # Instrumentation scope attributes
19
21
  #
20
22
  # @return [Tracer]
21
- def initialize(name, version, tracer_provider)
22
- @instrumentation_scope = InstrumentationScope.new(name, version)
23
+ def initialize(name, version, tracer_provider, attributes: nil)
24
+ @instrumentation_scope = InstrumentationScope.new(name, version, attributes || {}.freeze)
23
25
  @tracer_provider = tracer_provider
24
26
  end
25
27
 
@@ -9,8 +9,10 @@ module OpenTelemetry
9
9
  module Trace
10
10
  # {TracerProvider} is the SDK implementation of {OpenTelemetry::Trace::TracerProvider}.
11
11
  class TracerProvider < OpenTelemetry::Trace::TracerProvider # rubocop:disable Metrics/ClassLength
12
- Key = Struct.new(:name, :version)
13
- private_constant(:Key)
12
+ Key = Struct.new(:name, :version, :attributes)
13
+ EMPTY_ATTRIBUTES = {}.freeze
14
+
15
+ private_constant(:Key, :EMPTY_ATTRIBUTES)
14
16
 
15
17
  attr_accessor :span_limits, :id_generator, :sampler
16
18
  attr_reader :resource
@@ -44,15 +46,28 @@ module OpenTelemetry
44
46
 
45
47
  # Returns a {Tracer} instance.
46
48
  #
47
- # @param [optional String] name Instrumentation package name
48
- # @param [optional String] version Instrumentation package version
49
+ # Supports both positional arguments (legacy) and keyword arguments:
50
+ # tracer('name', '1.0') # legacy positional
51
+ # tracer(name: 'name', version: '1.0', attributes: {...}) # keyword
52
+ #
53
+ # When both positional and keyword arguments are provided for the same
54
+ # parameter, the keyword argument takes precedence.
55
+ #
56
+ # @param [String] name Instrumentation scope name
57
+ # @param [String] version Instrumentation scope version
58
+ # @param [Hash{String => String, Numeric, Boolean, Array<String, Numeric, Boolean>}] attributes
59
+ # Instrumentation scope attributes
49
60
  #
50
61
  # @return [Tracer]
51
- def tracer(name = nil, version = nil)
52
- name ||= ''
53
- version ||= ''
62
+ def tracer(deprecated_name = nil, deprecated_version = nil, name: nil, version: nil, attributes: nil) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
63
+ name ||= deprecated_name || ''
64
+ version ||= deprecated_version || ''
65
+ attributes = attributes&.dup&.freeze || EMPTY_ATTRIBUTES
54
66
  OpenTelemetry.logger.warn 'calling TracerProvider#tracer without providing a tracer name.' if name.empty?
55
- @registry_mutex.synchronize { @registry[Key.new(name, version)] ||= Tracer.new(name, version, self) }
67
+ @registry_mutex.synchronize do
68
+ @registry[Key.new(name, version, attributes)] ||=
69
+ Tracer.new(name, version, self, attributes: attributes)
70
+ end
56
71
  end
57
72
 
58
73
  # Attempts to stop all the activity for this {TracerProvider}. Calls
@@ -170,7 +185,7 @@ module OpenTelemetry
170
185
  private
171
186
 
172
187
  def sampler_from_environment(default_sampler)
173
- case ENV['OTEL_TRACES_SAMPLER']
188
+ case ENV.fetch('OTEL_TRACES_SAMPLER', nil)
174
189
  when 'always_on' then Samplers::ALWAYS_ON
175
190
  when 'always_off' then Samplers::ALWAYS_OFF
176
191
  when 'traceidratio' then Samplers.trace_id_ratio_based(Float(ENV.fetch('OTEL_TRACES_SAMPLER_ARG', 1.0)))
@@ -7,6 +7,6 @@
7
7
  module OpenTelemetry
8
8
  module SDK
9
9
  ## Current OpenTelemetry version
10
- VERSION = '1.12.0'
10
+ VERSION = '1.13.0'
11
11
  end
12
12
  end
@@ -23,7 +23,7 @@ module OpenTelemetry
23
23
  # ConfigurationError is an exception type used to wrap configuration errors
24
24
  # passed to OpenTelemetry.error_handler. This can be used to distinguish
25
25
  # errors reported during SDK configuration.
26
- ConfigurationError = Class.new(OpenTelemetry::Error)
26
+ ConfigurationError = Class.new(OpenTelemetry::Error) # rubocop:disable Style/EmptyClassDefinition
27
27
 
28
28
  # Configures SDK and instrumentation
29
29
  #
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.0
4
+ version: 1.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
@@ -79,160 +79,6 @@ dependencies:
79
79
  - - ">="
80
80
  - !ruby/object:Gem::Version
81
81
  version: '0'
82
- - !ruby/object:Gem::Dependency
83
- name: minitest
84
- requirement: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '5.0'
89
- type: :development
90
- prerelease: false
91
- version_requirements: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '5.0'
96
- - !ruby/object:Gem::Dependency
97
- name: opentelemetry-exporter-zipkin
98
- requirement: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '0.19'
103
- type: :development
104
- prerelease: false
105
- version_requirements: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: '0.19'
110
- - !ruby/object:Gem::Dependency
111
- name: opentelemetry-instrumentation-base
112
- requirement: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - "~>"
115
- - !ruby/object:Gem::Version
116
- version: '0.20'
117
- type: :development
118
- prerelease: false
119
- version_requirements: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: '0.20'
124
- - !ruby/object:Gem::Dependency
125
- name: opentelemetry-test-helpers
126
- requirement: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - ">="
129
- - !ruby/object:Gem::Version
130
- version: '0'
131
- type: :development
132
- prerelease: false
133
- version_requirements: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - ">="
136
- - !ruby/object:Gem::Version
137
- version: '0'
138
- - !ruby/object:Gem::Dependency
139
- name: pry
140
- requirement: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - ">="
143
- - !ruby/object:Gem::Version
144
- version: '0'
145
- type: :development
146
- prerelease: false
147
- version_requirements: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - ">="
150
- - !ruby/object:Gem::Version
151
- version: '0'
152
- - !ruby/object:Gem::Dependency
153
- name: rake
154
- requirement: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - "~>"
157
- - !ruby/object:Gem::Version
158
- version: '13.3'
159
- type: :development
160
- prerelease: false
161
- version_requirements: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - "~>"
164
- - !ruby/object:Gem::Version
165
- version: '13.3'
166
- - !ruby/object:Gem::Dependency
167
- name: rubocop
168
- requirement: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - "~>"
171
- - !ruby/object:Gem::Version
172
- version: '1.65'
173
- type: :development
174
- prerelease: false
175
- version_requirements: !ruby/object:Gem::Requirement
176
- requirements:
177
- - - "~>"
178
- - !ruby/object:Gem::Version
179
- version: '1.65'
180
- - !ruby/object:Gem::Dependency
181
- name: simplecov
182
- requirement: !ruby/object:Gem::Requirement
183
- requirements:
184
- - - "~>"
185
- - !ruby/object:Gem::Version
186
- version: '0.17'
187
- type: :development
188
- prerelease: false
189
- version_requirements: !ruby/object:Gem::Requirement
190
- requirements:
191
- - - "~>"
192
- - !ruby/object:Gem::Version
193
- version: '0.17'
194
- - !ruby/object:Gem::Dependency
195
- name: yard
196
- requirement: !ruby/object:Gem::Requirement
197
- requirements:
198
- - - "~>"
199
- - !ruby/object:Gem::Version
200
- version: '0.9'
201
- type: :development
202
- prerelease: false
203
- version_requirements: !ruby/object:Gem::Requirement
204
- requirements:
205
- - - "~>"
206
- - !ruby/object:Gem::Version
207
- version: '0.9'
208
- - !ruby/object:Gem::Dependency
209
- name: yard-doctest
210
- requirement: !ruby/object:Gem::Requirement
211
- requirements:
212
- - - "~>"
213
- - !ruby/object:Gem::Version
214
- version: 0.1.6
215
- type: :development
216
- prerelease: false
217
- version_requirements: !ruby/object:Gem::Requirement
218
- requirements:
219
- - - "~>"
220
- - !ruby/object:Gem::Version
221
- version: 0.1.6
222
- - !ruby/object:Gem::Dependency
223
- name: pry-byebug
224
- requirement: !ruby/object:Gem::Requirement
225
- requirements:
226
- - - ">="
227
- - !ruby/object:Gem::Version
228
- version: '0'
229
- type: :development
230
- prerelease: false
231
- version_requirements: !ruby/object:Gem::Requirement
232
- requirements:
233
- - - ">="
234
- - !ruby/object:Gem::Version
235
- version: '0'
236
82
  description: A stats collection and distributed tracing framework
237
83
  email:
238
84
  - cncf-opentelemetry-contributors@lists.cncf.io
@@ -279,10 +125,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
279
125
  licenses:
280
126
  - Apache-2.0
281
127
  metadata:
282
- changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-sdk/v1.12.0/file.CHANGELOG.html
283
- source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/opentelemetry-sdk/v1.12.0/sdk'
128
+ changelog_uri: https://rubydoc.info/gems/opentelemetry-sdk/1.13.0/file/CHANGELOG.md
129
+ source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/opentelemetry-sdk/v1.13.0/sdk
284
130
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
285
- documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-sdk/v1.12.0
131
+ documentation_uri: https://rubydoc.info/gems/opentelemetry-sdk/1.13.0
286
132
  rdoc_options: []
287
133
  require_paths:
288
134
  - lib
@@ -297,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
297
143
  - !ruby/object:Gem::Version
298
144
  version: '0'
299
145
  requirements: []
300
- rubygems_version: 4.0.6
146
+ rubygems_version: 4.0.16
301
147
  specification_version: 4
302
148
  summary: A stats collection and distributed tracing framework
303
149
  test_files: []