opentelemetry-propagator-ottrace 0.16.0 → 0.17.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: 72a92304ef5e150187a19816b80c09a4b619b1c0ebcf15ea06fcf242f07355cf
4
- data.tar.gz: a520eff87efdcb38cfb4f6d904bc7c1f96e5f2feb8e19f4c587377f1200e0b46
3
+ metadata.gz: 4665411db8f1b469735da32d19a756f490f289b8bc2780968b20490b29b43d58
4
+ data.tar.gz: dc0fd1103419b2cb322bc7aab68327e7084086fefe94b18bf3c337aea5aa292d
5
5
  SHA512:
6
- metadata.gz: 971279dcf6f405363d25f6e1215557300a0caa5d6c757da54883acbaf04a5212241e37acfa222185758b05246e769663d088e1abf6745c2cc21f958e61747fa3
7
- data.tar.gz: 6119312dec5fad82e0b8e741455c8cdfd554f2936cbac63ae822135b887a3c16d3646a7e723586e45a4fc7dcfcd2d99204033e2c75f41ed77266cbfc0a4e83a1
6
+ metadata.gz: 4392a5102af74a3ed5c45cdb34f46d84244da84b7b0f4e2a47ddf0ed32a1fc167af001becfd26c6bb603e018e50e38ff70e99aa35ab134c17c88c72a6a79cc41
7
+ data.tar.gz: 8b0211c420c8ebe892e41f874107d3ed8d829470050357ae61491e6a5ae0280148b672901b0d3ec4fe41e8f9a7aac1ee56a447afbc31438fb940c14f4829f192
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Release History: opentelemetry-propagator-ottrace
2
2
 
3
+ ### v0.17.0 / 2021-04-22
4
+
5
+ * BREAKING CHANGE: Replace TextMapInjector/TextMapExtractor pairs with a TextMapPropagator.
6
+
7
+ [Check the propagator documentation](https://open-telemetry.github.io/opentelemetry-ruby/) for the new usage.
8
+
9
+ * FIXED: Refactor propagators to add #fields
10
+
3
11
  ### v0.16.0 / 2021-03-17
4
12
 
5
13
  * Initial release.
@@ -6,6 +6,7 @@
6
6
 
7
7
  require 'opentelemetry-api'
8
8
  require 'opentelemetry/propagator/ottrace/version'
9
+ require 'opentelemetry/propagator/ottrace/text_map_propagator'
9
10
 
10
11
  # OpenTelemetry is an open source observability framework, providing a
11
12
  # general-purpose API, SDK, and related tools required for the instrumentation
@@ -20,27 +21,15 @@ module OpenTelemetry
20
21
  module OTTrace
21
22
  extend self
22
23
 
23
- TRACE_ID_HEADER = 'ot-tracer-traceid'
24
- SPAN_ID_HEADER = 'ot-tracer-spanid'
25
- SAMPLED_HEADER = 'ot-tracer-sampled'
26
- BAGGAGE_HEADER_PREFIX = 'ot-baggage-'
24
+ TEXT_MAP_PROPAGATOR = TextMapPropagator.new
27
25
 
28
- # https://github.com/open-telemetry/opentelemetry-specification/blob/14d123c121b6caa53bffd011292c42a181c9ca26/specification/context/api-propagators.md#textmap-propagator0
29
- VALID_BAGGAGE_HEADER_NAME_CHARS = /^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/.freeze
30
- INVALID_BAGGAGE_HEADER_VALUE_CHARS = /[^\t\u0020-\u007E\u0080-\u00FF]/.freeze
26
+ private_constant :TEXT_MAP_PROPAGATOR
31
27
 
32
- ## Returns an extractor that extracts context from OTTrace carrier
33
- def text_map_extractor
34
- TextMapExtractor.new
35
- end
36
-
37
- ## Returns an injector that injects context into a carrier
38
- def text_map_injector
39
- TextMapInjector.new
28
+ # Returns a text map propagator that propagates context using the
29
+ # OTTrace format.
30
+ def text_map_propagator
31
+ TEXT_MAP_PROPAGATOR
40
32
  end
41
33
  end
42
34
  end
43
35
  end
44
-
45
- require_relative './ottrace/text_map_injector'
46
- require_relative './ottrace/text_map_extractor'
@@ -15,36 +15,38 @@ module OpenTelemetry
15
15
  module Propagator
16
16
  # Namespace for OpenTelemetry OTTrace propagation
17
17
  module OTTrace
18
- # Extracts context from carriers using OTTrace header format
19
- class TextMapExtractor
18
+ # Propagates context using OTTrace header format
19
+ class TextMapPropagator
20
20
  PADDING = '0' * 16
21
21
  VALID_TRACE_ID_REGEX = /^[0-9a-f]{32}$/.freeze
22
22
  VALID_SPAN_ID_REGEX = /^[0-9a-f]{16}$/.freeze
23
+ TRACE_ID_64_BIT_WIDTH = 64 / 4
24
+ TRACE_ID_HEADER = 'ot-tracer-traceid'
25
+ SPAN_ID_HEADER = 'ot-tracer-spanid'
26
+ SAMPLED_HEADER = 'ot-tracer-sampled'
27
+ BAGGAGE_HEADER_PREFIX = 'ot-baggage-'
28
+ FIELDS = [TRACE_ID_HEADER, SPAN_ID_HEADER, SAMPLED_HEADER].freeze
23
29
 
24
- # Returns a new TextMapExtractor that extracts OTTrace context using the
25
- # specified getter
26
- #
27
- # @param [optional Getter] default_getter The default getter used to read
28
- # headers from a carrier during extract. Defaults to a
29
- # {OpenTelemetry::Context:Propagation::TextMapGetter} instance.
30
- # @return [TextMapExtractor]
31
- def initialize(default_getter: Context::Propagation.text_map_getter)
32
- @default_getter = default_getter
33
- end
30
+ # https://github.com/open-telemetry/opentelemetry-specification/blob/14d123c121b6caa53bffd011292c42a181c9ca26/specification/context/api-propagators.md#textmap-propagator0
31
+ VALID_BAGGAGE_HEADER_NAME_CHARS = /^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/.freeze
32
+ INVALID_BAGGAGE_HEADER_VALUE_CHARS = /[^\t\u0020-\u007E\u0080-\u00FF]/.freeze
33
+
34
+ private_constant :PADDING, :VALID_TRACE_ID_REGEX, :VALID_SPAN_ID_REGEX, :TRACE_ID_64_BIT_WIDTH, :TRACE_ID_HEADER,
35
+ :SPAN_ID_HEADER, :SAMPLED_HEADER, :BAGGAGE_HEADER_PREFIX, :FIELDS, :VALID_BAGGAGE_HEADER_NAME_CHARS,
36
+ :INVALID_BAGGAGE_HEADER_VALUE_CHARS
34
37
 
35
38
  # Extract OTTrace context from the supplied carrier and set the active span
36
39
  # in the given context. The original context will be returned if OTTrace
37
40
  # cannot be extracted from the carrier.
38
41
  #
39
42
  # @param [Carrier] carrier The carrier to get the header from.
40
- # @param [Context] context The context to be updated with extracted context
43
+ # @param [optional Context] context The context to be updated with extracted context
41
44
  # @param [optional Getter] getter If the optional getter is provided, it
42
45
  # will be used to read the header from the carrier, otherwise the default
43
46
  # getter will be used.
44
47
  # @return [Context] Updated context with active span derived from the header, or the original
45
48
  # context if parsing fails.
46
- def extract(carrier, context, getter = nil)
47
- getter ||= default_getter
49
+ def extract(carrier, context: Context.current, getter: Context::Propagation.text_map_getter)
48
50
  trace_id = optionally_pad_trace_id(getter.get(carrier, TRACE_ID_HEADER))
49
51
  span_id = getter.get(carrier, SPAN_ID_HEADER)
50
52
  sampled = getter.get(carrier, SAMPLED_HEADER)
@@ -62,9 +64,30 @@ module OpenTelemetry
62
64
  Trace.context_with_span(span, parent_context: set_baggage(carrier: carrier, context: context, getter: getter))
63
65
  end
64
66
 
65
- private
67
+ # @param [Object] carrier to update with context.
68
+ # @param [optional Context] context The active Context.
69
+ # @param [optional Setter] setter If the optional setter is provided, it
70
+ # will be used to write context into the carrier, otherwise the default
71
+ # setter will be used.
72
+ def inject(carrier, context: Context.current, setter: Context::Propagation.text_map_setter)
73
+ span_context = Trace.current_span(context).context
74
+ return unless span_context.valid?
75
+
76
+ inject_span_context(span_context: span_context, carrier: carrier, setter: setter)
77
+ inject_baggage(context: context, carrier: carrier, setter: setter)
66
78
 
67
- attr_reader :default_getter
79
+ nil
80
+ end
81
+
82
+ # Returns the predefined propagation fields. If your carrier is reused, you
83
+ # should delete the fields returned by this method before calling +inject+.
84
+ #
85
+ # @return [Array<String>] a list of fields that will be used by this propagator.
86
+ def fields
87
+ FIELDS
88
+ end
89
+
90
+ private
68
91
 
69
92
  def valid?(trace_id:, span_id:)
70
93
  !(VALID_TRACE_ID_REGEX !~ trace_id || VALID_SPAN_ID_REGEX !~ span_id)
@@ -80,7 +103,7 @@ module OpenTelemetry
80
103
 
81
104
  def set_baggage(carrier:, context:, getter:)
82
105
  baggage.build(context: context) do |builder|
83
- prefix = OTTrace::BAGGAGE_HEADER_PREFIX
106
+ prefix = BAGGAGE_HEADER_PREFIX
84
107
  getter.keys(carrier).each do |carrier_key|
85
108
  baggage_key = carrier_key.start_with?(prefix) && carrier_key[prefix.length..-1]
86
109
  next unless baggage_key
@@ -97,6 +120,22 @@ module OpenTelemetry
97
120
  def baggage
98
121
  OpenTelemetry.baggage
99
122
  end
123
+
124
+ def inject_span_context(span_context:, carrier:, setter:)
125
+ setter.set(carrier, TRACE_ID_HEADER, span_context.hex_trace_id[TRACE_ID_64_BIT_WIDTH, TRACE_ID_64_BIT_WIDTH])
126
+ setter.set(carrier, SPAN_ID_HEADER, span_context.hex_span_id)
127
+ setter.set(carrier, SAMPLED_HEADER, span_context.trace_flags.sampled?.to_s)
128
+ end
129
+
130
+ def inject_baggage(context:, carrier:, setter:)
131
+ baggage.values(context: context)
132
+ .select { |key, value| valid_baggage_entry?(key, value) }
133
+ .each { |key, value| setter.set(carrier, "#{BAGGAGE_HEADER_PREFIX}#{key}", value) }
134
+ end
135
+
136
+ def valid_baggage_entry?(key, value)
137
+ VALID_BAGGAGE_HEADER_NAME_CHARS =~ key && INVALID_BAGGAGE_HEADER_VALUE_CHARS !~ value
138
+ end
100
139
  end
101
140
  end
102
141
  end
@@ -15,7 +15,7 @@ module OpenTelemetry
15
15
  module Propagator
16
16
  # Namespace for OpenTelemetry OTTrace propagation
17
17
  module OTTrace
18
- VERSION = '0.16.0'
18
+ VERSION = '0.17.0'
19
19
  end
20
20
  end
21
21
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-propagator-ottrace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.0
4
+ version: 0.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-22 00:00:00.000000000 Z
11
+ date: 2021-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opentelemetry-api
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.16.0
19
+ version: 0.17.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.16.0
26
+ version: 0.17.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.16.0
61
+ version: 0.17.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.16.0
68
+ version: 0.17.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -149,17 +149,16 @@ files:
149
149
  - README.md
150
150
  - lib/opentelemetry-propagator-ottrace.rb
151
151
  - lib/opentelemetry/propagator/ottrace.rb
152
- - lib/opentelemetry/propagator/ottrace/text_map_extractor.rb
153
- - lib/opentelemetry/propagator/ottrace/text_map_injector.rb
152
+ - lib/opentelemetry/propagator/ottrace/text_map_propagator.rb
154
153
  - lib/opentelemetry/propagator/ottrace/version.rb
155
154
  homepage: https://github.com/open-telemetry/opentelemetry-ruby
156
155
  licenses:
157
156
  - Apache-2.0
158
157
  metadata:
159
- changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-propagator-ottrace/v0.16.0/file.CHANGELOG.html
158
+ changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-propagator-ottrace/v0.17.0/file.CHANGELOG.html
160
159
  source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/propagator/ottrace
161
160
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
162
- documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-propagator-ottrace/v0.16.0
161
+ documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-propagator-ottrace/v0.17.0
163
162
  post_install_message:
164
163
  rdoc_options: []
165
164
  require_paths:
@@ -175,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
174
  - !ruby/object:Gem::Version
176
175
  version: '0'
177
176
  requirements: []
178
- rubygems_version: 3.1.4
177
+ rubygems_version: 3.1.6
179
178
  signing_key:
180
179
  specification_version: 4
181
180
  summary: OTTrace Context Propagation Extension for the OpenTelemetry framework
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright The OpenTelemetry Authors
4
- #
5
- # SPDX-License-Identifier: Apache-2.0
6
-
7
- # OpenTelemetry is an open source observability framework, providing a
8
- # general-purpose API, SDK, and related tools required for the instrumentation
9
- # of cloud-native software, frameworks, and libraries.
10
- #
11
- # The OpenTelemetry module provides global accessors for telemetry objects.
12
- # See the documentation for the `opentelemetry-api` gem for details.
13
- module OpenTelemetry
14
- # Namespace for OpenTelemetry propagator extension libraries
15
- module Propagator
16
- # Namespace for OpenTelemetry OTTrace propagation
17
- module OTTrace
18
- # Injects context into carriers using the OTTrace format
19
- class TextMapInjector
20
- TRACE_ID_64_BIT_WIDTH = 64 / 4
21
-
22
- # Returns a new TextMapInjector that injects context using the specified setter
23
- #
24
- # @param [optional Setter] default_setter The default setter used to
25
- # write context into a carrier during inject. Defaults to a
26
- # {OpenTelemetry::Context:Propagation::TextMapSetter} instance.
27
- # @return [TextMapInjector]
28
- def initialize(default_setter: Context::Propagation.text_map_setter)
29
- @default_setter = default_setter
30
- end
31
-
32
- # @param [Object] carrier to update with context.
33
- # @param [Context] context The active Context.
34
- # @param [optional Setter] setter If the optional setter is provided, it
35
- # will be used to write context into the carrier, otherwise the default
36
- # setter will be used.
37
- def inject(carrier, context, setter = nil)
38
- setter ||= default_setter
39
- span_context = Trace.current_span(context).context
40
- return unless span_context.valid?
41
-
42
- inject_span_context(span_context: span_context, carrier: carrier, setter: setter)
43
- inject_baggage(context: context, carrier: carrier, setter: setter)
44
-
45
- nil
46
- end
47
-
48
- private
49
-
50
- attr_reader :default_setter
51
-
52
- def inject_span_context(span_context:, carrier:, setter:)
53
- setter.set(carrier, TRACE_ID_HEADER, span_context.hex_trace_id[TRACE_ID_64_BIT_WIDTH, TRACE_ID_64_BIT_WIDTH])
54
- setter.set(carrier, SPAN_ID_HEADER, span_context.hex_span_id)
55
- setter.set(carrier, SAMPLED_HEADER, span_context.trace_flags.sampled?.to_s)
56
- end
57
-
58
- def inject_baggage(context:, carrier:, setter:)
59
- baggage.values(context: context)
60
- .select { |key, value| valid_baggage_entry?(key, value) }
61
- .each { |key, value| setter.set(carrier, "#{BAGGAGE_HEADER_PREFIX}#{key}", value) }
62
- end
63
-
64
- def valid_baggage_entry?(key, value)
65
- VALID_BAGGAGE_HEADER_NAME_CHARS =~ key && INVALID_BAGGAGE_HEADER_VALUE_CHARS !~ value
66
- end
67
-
68
- def baggage
69
- OpenTelemetry.baggage
70
- end
71
- end
72
- end
73
- end
74
- end