opentelemetry-exporter-otlp 0.35.1 → 0.36.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: aab12b9c747b15ac934de3019f3ec6e158b5cb449b2adf7bd82dfd277706fe40
4
- data.tar.gz: e964a0b367f4a2fa875b0b089291c09dbfdc4b68cd09c47c01d9920496e7f030
3
+ metadata.gz: a1de906e890f75402862cbba9120d504d61f6041fe4bac4d9c787dee989c0fcd
4
+ data.tar.gz: d85236cbeb25ba01fb8fbb9e3adb674706ec64424dd7e9019ebbeeda86624890
5
5
  SHA512:
6
- metadata.gz: 4fa989d717b311dfa3b0549f4f8d9ae97781e0155cc120e27e24ae59a183feb6a0325b833a0700ee5e94656de88384ba56ebff0eedb4380706f47b123c71e94d
7
- data.tar.gz: 993a85f5b384acf4f1f1f6a72c442e1d899356ba7eabe8e076d60b466ce1319a43798f01a270ea1454be71ea071c87319705b561f1236e2c0e73796356a22af6
6
+ metadata.gz: ca255e356b555aad9459ed65f38afe24f717e61fe5a9cf566535c2c24576f817d9bce9d59c7202a9c892c2215a9a2d8715afdf1ef8b55830e4dc0236c8eac38b
7
+ data.tar.gz: 865f747cebf455b0d145bc771a930ea0f60b374e531c4bdae7bb5768869a780e1ec62fca32b283b106717aba8939690eada84813b05e09bf2079553e70f702fc
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Release History: opentelemetry-exporter-otlp
2
2
 
3
+ ### v0.36.0 / 2026-09-09
4
+
5
+ * ADDED: Use common conversion including supporting flags (#2333)
6
+ * ADDED: Add opentelemetry-exporter-otlp as a dependency (#2333)
7
+
3
8
  ### v0.35.1 / 2026-09-01
4
9
 
5
10
  * REVERT: Use common conversion including supporting flags (#2328)
@@ -5,6 +5,7 @@
5
5
  # SPDX-License-Identifier: Apache-2.0
6
6
 
7
7
  require 'opentelemetry/common'
8
+ require 'opentelemetry/exporter/otlp/common'
8
9
  require 'opentelemetry/sdk'
9
10
  require 'net/http'
10
11
  require 'zlib'
@@ -35,7 +36,7 @@ module OpenTelemetry
35
36
 
36
37
  DEFAULT_USER_AGENT = "OTel-OTLP-Exporter-Ruby/#{OpenTelemetry::Exporter::OTLP::VERSION} Ruby/#{RUBY_VERSION} (#{RUBY_PLATFORM}; #{RUBY_ENGINE}/#{RUBY_ENGINE_VERSION})".freeze
37
38
 
38
- # rubocop:disable Lint/DuplicateBranch
39
+ # rubocop:disable-next Lint/DuplicateBranch
39
40
  def self.ssl_verify_mode
40
41
  if ENV.key?('OTEL_RUBY_EXPORTER_OTLP_SSL_VERIFY_PEER')
41
42
  OpenSSL::SSL::VERIFY_PEER
@@ -45,7 +46,6 @@ module OpenTelemetry
45
46
  OpenSSL::SSL::VERIFY_PEER
46
47
  end
47
48
  end
48
- # rubocop:enable Lint/DuplicateBranch
49
49
 
50
50
  def initialize(endpoint: nil,
51
51
  certificate_file: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE', 'OTEL_EXPORTER_OTLP_CERTIFICATE'),
@@ -105,26 +105,6 @@ module OpenTelemetry
105
105
 
106
106
  private
107
107
 
108
- # Builds span flags based on whether the parent span context is remote.
109
- # This follows the OTLP specification for span flags.
110
- def build_span_flags(parent_span_is_remote, base_flags)
111
- # Extract integer value from TraceFlags object if needed
112
- # Derive the low 8-bit W3C trace flags using the public API.
113
- base_flags_int =
114
- if base_flags.sampled?
115
- 1
116
- else
117
- 0
118
- end
119
-
120
- has_remote_mask = Opentelemetry::Proto::Trace::V1::SpanFlags::SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK
121
- is_remote_mask = Opentelemetry::Proto::Trace::V1::SpanFlags::SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK
122
-
123
- flags = base_flags_int | has_remote_mask
124
- flags |= is_remote_mask if parent_span_is_remote
125
- flags
126
- end
127
-
128
108
  def http_connection(uri, ssl_verify_mode, certificate_file, client_certificate_file, client_key_file)
129
109
  http = Net::HTTP.new(uri.hostname, uri.port)
130
110
  http.use_ssl = uri.scheme == 'https'
@@ -293,32 +273,9 @@ module OpenTelemetry
293
273
  true
294
274
  end
295
275
 
296
- def encode(span_data) # rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity
276
+ def encode(span_data)
297
277
  start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
298
- Opentelemetry::Proto::Collector::Trace::V1::ExportTraceServiceRequest.encode(
299
- Opentelemetry::Proto::Collector::Trace::V1::ExportTraceServiceRequest.new(
300
- resource_spans: span_data
301
- .group_by(&:resource)
302
- .map do |resource, span_datas|
303
- Opentelemetry::Proto::Trace::V1::ResourceSpans.new(
304
- resource: Opentelemetry::Proto::Resource::V1::Resource.new(
305
- attributes: resource.attribute_enumerator.map { |key, value| as_otlp_key_value(key, value) }
306
- ),
307
- scope_spans: span_datas
308
- .group_by(&:instrumentation_scope)
309
- .map do |il, sds|
310
- Opentelemetry::Proto::Trace::V1::ScopeSpans.new(
311
- scope: Opentelemetry::Proto::Common::V1::InstrumentationScope.new(
312
- name: il.name,
313
- version: il.version
314
- ),
315
- spans: sds.map { |sd| as_otlp_span(sd) }
316
- )
317
- end
318
- )
319
- end
320
- )
321
- )
278
+ OpenTelemetry::Exporter::OTLP::Common.as_encoded_etsr(span_data)
322
279
  rescue StandardError => e
323
280
  OpenTelemetry.handle_error(exception: e, message: 'unexpected error in OTLP::Exporter#encode')
324
281
  nil
@@ -329,93 +286,6 @@ module OpenTelemetry
329
286
  value: duration_ms)
330
287
  end
331
288
 
332
- def as_otlp_span(span_data) # rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
333
- Opentelemetry::Proto::Trace::V1::Span.new(
334
- trace_id: span_data.trace_id,
335
- span_id: span_data.span_id,
336
- trace_state: span_data.tracestate.to_s,
337
- parent_span_id: span_data.parent_span_id == OpenTelemetry::Trace::INVALID_SPAN_ID ? nil : span_data.parent_span_id,
338
- name: span_data.name,
339
- kind: as_otlp_span_kind(span_data.kind),
340
- start_time_unix_nano: span_data.start_timestamp,
341
- end_time_unix_nano: span_data.end_timestamp,
342
- attributes: span_data.attributes&.map { |k, v| as_otlp_key_value(k, v) },
343
- dropped_attributes_count: span_data.total_recorded_attributes - span_data.attributes&.size.to_i,
344
- events: span_data.events&.map do |event|
345
- Opentelemetry::Proto::Trace::V1::Span::Event.new(
346
- time_unix_nano: event.timestamp,
347
- name: event.name,
348
- attributes: event.attributes&.map { |k, v| as_otlp_key_value(k, v) }
349
- # TODO: track dropped_attributes_count in Span#append_event
350
- )
351
- end,
352
- dropped_events_count: span_data.total_recorded_events - span_data.events&.size.to_i,
353
- links: span_data.links&.map do |link|
354
- Opentelemetry::Proto::Trace::V1::Span::Link.new(
355
- trace_id: link.span_context.trace_id,
356
- span_id: link.span_context.span_id,
357
- trace_state: link.span_context.tracestate.to_s,
358
- attributes: link.attributes&.map { |k, v| as_otlp_key_value(k, v) },
359
- # TODO: track dropped_attributes_count in Span#trim_links
360
- flags: build_span_flags(link.span_context.remote?, link.span_context.trace_flags)
361
- )
362
- end,
363
- dropped_links_count: span_data.total_recorded_links - span_data.links&.size.to_i,
364
- status: span_data.status&.then do |status|
365
- Opentelemetry::Proto::Trace::V1::Status.new(
366
- code: as_otlp_status_code(status.code),
367
- message: status.description
368
- )
369
- end,
370
- flags: build_span_flags(span_data.parent_span_is_remote, span_data.trace_flags)
371
- )
372
- end
373
-
374
- def as_otlp_status_code(code)
375
- case code
376
- when OpenTelemetry::Trace::Status::OK then Opentelemetry::Proto::Trace::V1::Status::StatusCode::STATUS_CODE_OK
377
- when OpenTelemetry::Trace::Status::ERROR then Opentelemetry::Proto::Trace::V1::Status::StatusCode::STATUS_CODE_ERROR
378
- else Opentelemetry::Proto::Trace::V1::Status::StatusCode::STATUS_CODE_UNSET
379
- end
380
- end
381
-
382
- def as_otlp_span_kind(kind)
383
- case kind
384
- when :internal then Opentelemetry::Proto::Trace::V1::Span::SpanKind::SPAN_KIND_INTERNAL
385
- when :server then Opentelemetry::Proto::Trace::V1::Span::SpanKind::SPAN_KIND_SERVER
386
- when :client then Opentelemetry::Proto::Trace::V1::Span::SpanKind::SPAN_KIND_CLIENT
387
- when :producer then Opentelemetry::Proto::Trace::V1::Span::SpanKind::SPAN_KIND_PRODUCER
388
- when :consumer then Opentelemetry::Proto::Trace::V1::Span::SpanKind::SPAN_KIND_CONSUMER
389
- else Opentelemetry::Proto::Trace::V1::Span::SpanKind::SPAN_KIND_UNSPECIFIED
390
- end
391
- end
392
-
393
- def as_otlp_key_value(key, value)
394
- Opentelemetry::Proto::Common::V1::KeyValue.new(key: key, value: as_otlp_any_value(value))
395
- rescue Encoding::UndefinedConversionError => e
396
- encoded_value = value.encode('UTF-8', invalid: :replace, undef: :replace, replace: '�')
397
- OpenTelemetry.handle_error(exception: e, message: "encoding error for key #{key} and value #{encoded_value}")
398
- Opentelemetry::Proto::Common::V1::KeyValue.new(key: key, value: as_otlp_any_value('Encoding Error'))
399
- end
400
-
401
- def as_otlp_any_value(value)
402
- result = Opentelemetry::Proto::Common::V1::AnyValue.new
403
- case value
404
- when String
405
- result.string_value = value
406
- when Integer
407
- result.int_value = value
408
- when Float
409
- result.double_value = value
410
- when true, false
411
- result.bool_value = value
412
- when Array
413
- values = value.map { |element| as_otlp_any_value(element) }
414
- result.array_value = Opentelemetry::Proto::Common::V1::ArrayValue.new(values: values)
415
- end
416
- result
417
- end
418
-
419
289
  def prepare_endpoint(endpoint)
420
290
  endpoint ||= ENV.fetch('OTEL_EXPORTER_OTLP_TRACES_ENDPOINT', nil)
421
291
  if endpoint.nil?
@@ -8,7 +8,7 @@ module OpenTelemetry
8
8
  module Exporter
9
9
  module OTLP
10
10
  ## Current OpenTelemetry OTLP exporter version
11
- VERSION = '0.35.1'
11
+ VERSION = '0.36.0'
12
12
  end
13
13
  end
14
14
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-exporter-otlp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.35.1
4
+ version: 0.36.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
@@ -65,6 +65,20 @@ dependencies:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0.20'
68
+ - !ruby/object:Gem::Dependency
69
+ name: opentelemetry-exporter-otlp-common
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
68
82
  - !ruby/object:Gem::Dependency
69
83
  name: opentelemetry-sdk
70
84
  requirement: !ruby/object:Gem::Requirement
@@ -122,10 +136,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
122
136
  licenses:
123
137
  - Apache-2.0
124
138
  metadata:
125
- changelog_uri: https://rubydoc.info/gems/opentelemetry-exporter-otlp/0.35.1/file/CHANGELOG.md
126
- source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/opentelemetry-exporter-otlp/v0.35.1/exporter/otlp
139
+ changelog_uri: https://rubydoc.info/gems/opentelemetry-exporter-otlp/0.36.0/file/CHANGELOG.md
140
+ source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/opentelemetry-exporter-otlp/v0.36.0/exporter/otlp
127
141
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
128
- documentation_uri: https://rubydoc.info/gems/opentelemetry-exporter-otlp/0.35.1
142
+ documentation_uri: https://rubydoc.info/gems/opentelemetry-exporter-otlp/0.36.0
129
143
  rdoc_options: []
130
144
  require_paths:
131
145
  - lib