opentelemetry-propagator-xray 0.26.0 → 0.26.1

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: 37138890a1f8a087cbc71dfaa0414769db2623732dd79604da90e3eeef97de57
4
- data.tar.gz: 6a4211c77df3b7b4916015339d761ffbee303590947d766fd8ba52110f8d3b66
3
+ metadata.gz: 7a8c7896357a650015a8d008da4faf15b525b783fbe7a894042251cdafcfd7b1
4
+ data.tar.gz: 921e90d4e947e60fc777cd48c762cf86bdb0c7c971b7e120117434d85bd5de73
5
5
  SHA512:
6
- metadata.gz: 9bece17356a7fdd2eef0c0a9ce874d9c332a1408835d150931613f6841a22fd0f4147bbefe757df68d26c7d792bb9e0281925000139d95b52bb0002d58805854
7
- data.tar.gz: d8e9479299857e615ed428ae1af4a8e38e318f15756cc0d6d2ed11710a7609a5791c14efc815975f3f6d4facba08f04f68b2eb988d94fa529b1f3d96a0976e31
6
+ metadata.gz: 1e703d3c64879aa9e67c6e4489733e0c37559c7f869e88145f0907434d4fbad5c122827ee9aeb2a311a5ceb05808abd08bc14a50ff6ae0a27abfef15bb05a862
7
+ data.tar.gz: c3cf2ba012c420c6407ab357db1b2a2a6674e7dad6f60caf738a2c97dffe082d7b7c622672e545ed70d64350e854f6215ca4dd04db3aacb073660d11e078fa07
data/CHANGELOG.md CHANGED
@@ -1,9 +1,13 @@
1
1
  # Release History: opentelemetry-propagator-xray
2
2
 
3
+ ### v0.26.1 / 2026-02-24
4
+
5
+ * FIXED: Handle `Self` field in X-Amzn-Trace-Id header (#1958)
6
+ * FIXED: Parse X-Amzn-Trace-Id header fields individually by name
7
+
3
8
  ### v0.26.0 / 2025-10-22
4
9
 
5
10
  * BREAKING CHANGE: Min Ruby Version 3.2
6
-
7
11
  * ADDED: Min Ruby Version 3.2
8
12
 
9
13
  ### v0.25.0 / 2025-09-30
@@ -17,7 +21,6 @@
17
21
  ### v0.23.0 / 2025-01-16
18
22
 
19
23
  * BREAKING CHANGE: Set minimum supported version to Ruby 3.1
20
-
21
24
  * ADDED: Set minimum supported version to Ruby 3.1
22
25
 
23
26
  ### v0.22.3 / 2024-11-26
@@ -34,14 +37,13 @@
34
37
 
35
38
  ### v0.22.0 / 2023-04-17
36
39
 
37
- * BREAKING CHANGE: Drop support for EoL Ruby 2.7
38
-
39
- * ADDED: Drop support for EoL Ruby 2.7
40
+ * BREAKING CHANGE: Drop support for EoL Ruby 2.7
41
+ * ADDED: Drop support for EoL Ruby 2.7
40
42
 
41
43
  ### v0.21.1 / 2023-01-14
42
44
 
43
- * DOCS: Fix gem homepage
44
- * DOCS: More gem documentation fixes
45
+ * DOCS: Fix gem homepage
46
+ * DOCS: More gem documentation fixes
45
47
 
46
48
  ### v0.21.0 / 2022-06-09
47
49
 
@@ -53,12 +55,12 @@
53
55
 
54
56
  ### v0.20.0 / 2021-08-12
55
57
 
56
- * ADDED: Xray compliant ids
58
+ * ADDED: Xray compliant ids
57
59
 
58
60
  ### v0.19.0 / 2021-06-23
59
61
 
60
62
  * FIXED: XRay propagator null exception (#833)
61
- * ADDED: Add Tracer.non_recording_span to API
63
+ * ADDED: Add Tracer.non_recording_span to API
62
64
 
63
65
  ### v0.18.0 / 2021-05-21
64
66
 
@@ -18,11 +18,23 @@ module OpenTelemetry
18
18
  # Propagates context in carriers in the xray single header format
19
19
  class TextMapPropagator
20
20
  XRAY_CONTEXT_KEY = 'X-Amzn-Trace-Id'
21
- XRAY_CONTEXT_REGEX = /\ARoot=(?<trace_id>([a-z0-9\-]{35}))(?:;Parent=(?<span_id>([a-z0-9]{16})))?(?:;Sampled=(?<sampling_state>[01d](?![0-9a-f])))?(?:;(?<trace_state>.*))?\Z/ # rubocop:disable Lint/MixedRegexpCaptureTypes
22
21
  SAMPLED_VALUES = %w[1 d].freeze
23
22
  FIELDS = [XRAY_CONTEXT_KEY].freeze
24
23
 
25
- private_constant :XRAY_CONTEXT_KEY, :XRAY_CONTEXT_REGEX, :SAMPLED_VALUES, :FIELDS
24
+ # Header parsing constants
25
+ KV_PAIR_DELIMITER = ';'
26
+ KEY_AND_VALUE_DELIMITER = '='
27
+ TRACE_ID_KEY = 'Root'
28
+ PARENT_ID_KEY = 'Parent'
29
+ SAMPLED_FLAG_KEY = 'Sampled'
30
+ TRACE_ID_LENGTH = 35
31
+ SPAN_ID_LENGTH = 16
32
+ VALID_SAMPLED_VALUES = %w[0 1 d].freeze
33
+
34
+ private_constant :XRAY_CONTEXT_KEY, :SAMPLED_VALUES, :FIELDS,
35
+ :KV_PAIR_DELIMITER, :KEY_AND_VALUE_DELIMITER,
36
+ :TRACE_ID_KEY, :PARENT_ID_KEY, :SAMPLED_FLAG_KEY,
37
+ :TRACE_ID_LENGTH, :SPAN_ID_LENGTH, :VALID_SAMPLED_VALUES
26
38
 
27
39
  # Extract trace context from the supplied carrier.
28
40
  # If extraction fails, the original context will be returned
@@ -90,11 +102,56 @@ module OpenTelemetry
90
102
  private
91
103
 
92
104
  def parse_header(header)
93
- return nil unless (match = header.match(XRAY_CONTEXT_REGEX))
94
- return nil unless match['trace_id']
95
- return nil unless match['span_id']
105
+ trace_id = nil
106
+ span_id = nil
107
+ sampling_state = nil
108
+ trace_state_parts = []
109
+
110
+ header.split(KV_PAIR_DELIMITER).each do |pair|
111
+ # Split only on first '=' to handle values that might contain '='
112
+ key, value = pair.split(KEY_AND_VALUE_DELIMITER, 2)
113
+ next unless key && value
114
+
115
+ case key
116
+ when TRACE_ID_KEY
117
+ trace_id = value if valid_trace_id?(value)
118
+ when PARENT_ID_KEY
119
+ span_id = value if valid_span_id?(value)
120
+ when SAMPLED_FLAG_KEY
121
+ sampling_state = value if valid_sampling_state?(value)
122
+ when 'Self'
123
+ # Ignore Self field added by load balancers
124
+ next
125
+ else
126
+ # Collect other fields as potential tracestate
127
+ trace_state_parts << pair
128
+ end
129
+ end
130
+
131
+ return nil unless trace_id && span_id
132
+
133
+ {
134
+ 'trace_id' => trace_id,
135
+ 'span_id' => span_id,
136
+ 'sampling_state' => sampling_state,
137
+ 'trace_state' => trace_state_parts.empty? ? nil : trace_state_parts.join(KV_PAIR_DELIMITER)
138
+ }
139
+ end
140
+
141
+ def valid_trace_id?(value)
142
+ return false unless value.length == TRACE_ID_LENGTH
143
+ return false unless value.start_with?('1-')
144
+ return false unless value[10] == '-'
145
+
146
+ true
147
+ end
148
+
149
+ def valid_span_id?(value)
150
+ value.length == SPAN_ID_LENGTH && value.match?(/\A[a-f0-9]+\z/)
151
+ end
96
152
 
97
- match
153
+ def valid_sampling_state?(value)
154
+ VALID_SAMPLED_VALUES.include?(value)
98
155
  end
99
156
 
100
157
  # Convert an id from a hex encoded string to byte array. Assumes the input id has already been
@@ -7,7 +7,7 @@
7
7
  module OpenTelemetry
8
8
  module Propagator
9
9
  module XRay
10
- VERSION = '0.26.0'
10
+ VERSION = '0.26.1'
11
11
  end
12
12
  end
13
13
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-propagator-xray
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.26.0
4
+ version: 0.26.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2025-10-22 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
@@ -45,10 +44,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby-contrib
45
44
  licenses:
46
45
  - Apache-2.0
47
46
  metadata:
48
- changelog_uri: https://rubydoc.info/gems/opentelemetry-propagator-xray/0.26.0/file/CHANGELOG.md
47
+ changelog_uri: https://rubydoc.info/gems/opentelemetry-propagator-xray/0.26.1/file/CHANGELOG.md
49
48
  source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/main/propagator/xray
50
49
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/issues
51
- documentation_uri: https://rubydoc.info/gems/opentelemetry-propagator-xray/0.26.0
50
+ documentation_uri: https://rubydoc.info/gems/opentelemetry-propagator-xray/0.26.1
52
51
  post_install_message: ''
53
52
  rdoc_options: []
54
53
  require_paths:
@@ -64,8 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
63
  - !ruby/object:Gem::Version
65
64
  version: '0'
66
65
  requirements: []
67
- rubygems_version: 3.4.19
68
- signing_key:
66
+ rubygems_version: 4.0.3
69
67
  specification_version: 4
70
68
  summary: XRay Context Propagation Extension for the OpenTelemetry framework
71
69
  test_files: []