opentelemetry-propagator-jaeger 0.16.0 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e309829185d53b310beb404e6db7bf7c50bf1b52638e0c2abe4316d569bcf79d
4
- data.tar.gz: 1c70d8fc82e5833d8c93554662536b5b7f017d5e38367c19dd2ea9fdb07aa42e
3
+ metadata.gz: 7dece159e0c94c5fa48147b8ef28b92306061f4d6a2495f881ed485ab2e688eb
4
+ data.tar.gz: 73ba94fa32820c294d8831a06e9996f8b9b4e0ccf3f7c0faf6ed8bc9577a2834
5
5
  SHA512:
6
- metadata.gz: dab712ae65175d5b4024e0879ba8bcc1ff0403af73209f7596cf05994d5b8f4e868617ac22384cb75cfc11d2469f01bad51e3f4dd340dd307c1010ff03c3ca3e
7
- data.tar.gz: e607b7cd32db1fa516452084faaa9acf920a858c2d13c879ea883e86b8157b72af4ac8e901a07fbc863d26ddeb1ee58201ac6e8880ecc29dd44fef179f680c79
6
+ metadata.gz: 581dadd5c5b73c38c98ecd59f5be345eb956d44ddb83cdd95e6eb848e92e533e0a10b90e2f3e16d8d4fedf0809b22ec86a39cee9920cab155c59862b857664cf
7
+ data.tar.gz: f52229bd430039b17c031029a583fe0911e0afe69a7c1e9ae9c396e7c54c6ecf9066e5e86dd963c1bf528e9acdba92e94f4ac056313b676bc7935b08686e9311
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Release History: opentelemetry-propagator-jaeger
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.
data/README.md CHANGED
@@ -1,9 +1,9 @@
1
1
  # opentelemetry-propagator-jaeger
2
2
 
3
- The `opentelemetry-propagator-jaeger` gem contains injectors and extractors for the
4
- [Jaeger native propagation format][jaeger-spec] They can be used in
5
- conjunction with each other as well as with injectors and extractors for
6
- other formats to support a variety of context propagation scenarios.
3
+ The `opentelemetry-propagator-jaeger` gem contains a propagator for the
4
+ [Jaeger native propagation format][jaeger-spec] This can be used on its
5
+ own as well as with propagators for other formats to support a variety
6
+ of context propagation scenarios.
7
7
 
8
8
  ## What is OpenTelemetry?
9
9
 
@@ -4,8 +4,7 @@
4
4
  #
5
5
  # SPDX-License-Identifier: Apache-2.0
6
6
 
7
- require_relative './jaeger/text_map_extractor'
8
- require_relative './jaeger/text_map_injector'
7
+ require_relative './jaeger/text_map_propagator'
9
8
 
10
9
  # OpenTelemetry is an open source observability framework, providing a
11
10
  # general-purpose API, SDK, and related tools required for the instrumentation
@@ -23,28 +22,14 @@ module OpenTelemetry
23
22
  DEBUG_CONTEXT_KEY = Context.create_key('jaeger-debug-key')
24
23
  private_constant :DEBUG_CONTEXT_KEY
25
24
 
26
- TEXT_MAP_EXTRACTOR = TextMapExtractor.new
27
- TEXT_MAP_INJECTOR = TextMapInjector.new
25
+ TEXT_MAP_PROPAGATOR = TextMapPropagator.new
28
26
 
29
- private_constant :TEXT_MAP_INJECTOR, :TEXT_MAP_EXTRACTOR
27
+ private_constant :TEXT_MAP_PROPAGATOR
30
28
 
31
- IDENTITY_KEY = 'uber-trace-id'
32
- DEFAULT_FLAG_BIT = 0x0
33
- SAMPLED_FLAG_BIT = 0x01
34
- DEBUG_FLAG_BIT = 0x02
35
-
36
- private_constant :IDENTITY_KEY, :DEFAULT_FLAG_BIT, :SAMPLED_FLAG_BIT, :DEBUG_FLAG_BIT
37
-
38
- # Returns an extractor that extracts context in the Jaeger single header
39
- # format
40
- def text_map_injector
41
- TEXT_MAP_INJECTOR
42
- end
43
-
44
- # Returns an injector that injects context in the Jaeger single header
45
- # format
46
- def text_map_extractor
47
- TEXT_MAP_EXTRACTOR
29
+ # Returns a text map propagator that propagates context in the Jaeger
30
+ # format.
31
+ def text_map_propagator
32
+ TEXT_MAP_PROPAGATOR
48
33
  end
49
34
 
50
35
  # @api private
@@ -17,36 +17,33 @@ module OpenTelemetry
17
17
  module Propagator
18
18
  # Namespace for OpenTelemetry Jaeger propagation
19
19
  module Jaeger
20
- # Extracts context from carriers
21
- class TextMapExtractor
20
+ # Propagates trace context using the Jaeger format
21
+ class TextMapPropagator
22
+ IDENTITY_KEY = 'uber-trace-id'
23
+ DEFAULT_FLAG_BIT = 0x0
24
+ SAMPLED_FLAG_BIT = 0x01
25
+ DEBUG_FLAG_BIT = 0x02
26
+ FIELDS = [IDENTITY_KEY].freeze
22
27
  TRACE_SPAN_IDENTITY_REGEX = /\A(?<trace_id>(?:[0-9a-f]){1,32}):(?<span_id>([0-9a-f]){1,16}):[0-9a-f]{1,16}:(?<sampling_flags>[0-9a-f]{1,2})\z/.freeze
23
28
  ZERO_ID_REGEX = /^0+$/.freeze
24
29
 
25
- # Returns a new TextMapExtractor that extracts Jaeger context using the
26
- # specified header keys
27
- #
28
- # @param [optional Getter] default_getter The default getter used to read
29
- # headers from a carrier during extract. Defaults to a
30
- # {OpenTelemetry::Context:Propagation::TextMapGetter} instance.
31
- # @return [TextMapExtractor]
32
- def initialize(default_getter = Context::Propagation.text_map_getter)
33
- @default_getter = default_getter
34
- end
30
+ private_constant \
31
+ :IDENTITY_KEY, :DEFAULT_FLAG_BIT, :SAMPLED_FLAG_BIT, :DEBUG_FLAG_BIT,
32
+ :FIELDS, :TRACE_SPAN_IDENTITY_REGEX, :ZERO_ID_REGEX
35
33
 
36
- # Extract Jaeger context from the supplied carrier and set the active
37
- # span in the given context. The original context will be return if
38
- # Jaeger cannot be extracted from the carrier.
34
+ # Extract trace context from the supplied carrier.
35
+ # If extraction fails, the original context will be returned
39
36
  #
40
- # @param [Carrier] carrier The carrier to get the header from.
41
- # @param [Context] context The context to be updated with extracted
42
- # context
37
+ # @param [Carrier] carrier The carrier to get the header from
38
+ # @param [optional Context] context Context to be updated with the trace context
39
+ # extracted from the carrier. Defaults to +Context.current+.
43
40
  # @param [optional Getter] getter If the optional getter is provided, it
44
41
  # will be used to read the header from the carrier, otherwise the default
45
- # getter will be used.
46
- # @return [Context] Updated context with active span derived from the
47
- # header, or the original context if parsing fails.
48
- def extract(carrier, context, getter = nil)
49
- getter ||= @default_getter
42
+ # text map getter will be used.
43
+ #
44
+ # @return [Context] context updated with extracted baggage, or the original context
45
+ # if extraction fails
46
+ def extract(carrier, context: Context.current, getter: Context::Propagation.text_map_getter)
50
47
  header = getter.get(carrier, IDENTITY_KEY)
51
48
  return context unless (match = header.match(TRACE_SPAN_IDENTITY_REGEX))
52
49
  return context if match['trace_id'] =~ ZERO_ID_REGEX
@@ -55,10 +52,42 @@ module OpenTelemetry
55
52
  sampling_flags = match['sampling_flags'].to_i
56
53
  span = build_span(match, sampling_flags)
57
54
  context = Jaeger.context_with_debug(context) if sampling_flags & DEBUG_FLAG_BIT != 0
58
- context = set_baggage(carrier, context, getter)
55
+ context = context_with_extracted_baggage(carrier, context, getter)
59
56
  Trace.context_with_span(span, parent_context: context)
60
57
  end
61
58
 
59
+ # Inject trace context into the supplied carrier.
60
+ #
61
+ # @param [Carrier] carrier The mutable carrier to inject trace context into
62
+ # @param [Context] context The context to read trace context from
63
+ # @param [optional Setter] setter If the optional setter is provided, it
64
+ # will be used to write context into the carrier, otherwise the default
65
+ # text map setter will be used.
66
+ def inject(carrier, context: Context.current, setter: Context::Propagation.text_map_setter)
67
+ span_context = Trace.current_span(context).context
68
+ return unless span_context.valid?
69
+
70
+ flags = to_jaeger_flags(context, span_context)
71
+ trace_span_identity_value = [
72
+ span_context.hex_trace_id, span_context.hex_span_id, '0', flags
73
+ ].join(':')
74
+ setter.set(carrier, IDENTITY_KEY, trace_span_identity_value)
75
+ OpenTelemetry.baggage.values(context: context).each do |key, value|
76
+ baggage_key = 'uberctx-' + key
77
+ encoded_value = CGI.escape(value)
78
+ setter.set(carrier, baggage_key, encoded_value)
79
+ end
80
+ carrier
81
+ end
82
+
83
+ # Returns the predefined propagation fields. If your carrier is reused, you
84
+ # should delete the fields returned by this method before calling +inject+.
85
+ #
86
+ # @return [Array<String>] a list of fields that will be used by this propagator.
87
+ def fields
88
+ FIELDS
89
+ end
90
+
62
91
  private
63
92
 
64
93
  def build_span(match, sampling_flags)
@@ -72,7 +101,7 @@ module OpenTelemetry
72
101
  Trace::Span.new(span_context: span_context)
73
102
  end
74
103
 
75
- def set_baggage(carrier, context, getter)
104
+ def context_with_extracted_baggage(carrier, context, getter)
76
105
  baggage_key_prefix = 'uberctx-'
77
106
  OpenTelemetry.baggage.build(context: context) do |b|
78
107
  getter.keys(carrier).each do |carrier_key|
@@ -86,6 +115,18 @@ module OpenTelemetry
86
115
  end
87
116
  end
88
117
 
118
+ def to_jaeger_flags(context, span_context)
119
+ if span_context.trace_flags == Trace::TraceFlags::SAMPLED
120
+ if Jaeger.debug?(context)
121
+ SAMPLED_FLAG_BIT | DEBUG_FLAG_BIT
122
+ else
123
+ SAMPLED_FLAG_BIT
124
+ end
125
+ else
126
+ DEFAULT_FLAG_BIT
127
+ end
128
+ end
129
+
89
130
  def to_trace_flags(sampling_flags)
90
131
  if (sampling_flags & SAMPLED_FLAG_BIT) != 0
91
132
  Trace::TraceFlags::SAMPLED
@@ -7,7 +7,7 @@
7
7
  module OpenTelemetry
8
8
  module Propagator
9
9
  module Jaeger
10
- VERSION = '0.16.0'
10
+ VERSION = '0.17.0'
11
11
  end
12
12
  end
13
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-propagator-jaeger
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
@@ -149,17 +149,16 @@ files:
149
149
  - README.md
150
150
  - lib/opentelemetry-propagator-jaeger.rb
151
151
  - lib/opentelemetry/propagator/jaeger.rb
152
- - lib/opentelemetry/propagator/jaeger/text_map_extractor.rb
153
- - lib/opentelemetry/propagator/jaeger/text_map_injector.rb
152
+ - lib/opentelemetry/propagator/jaeger/text_map_propagator.rb
154
153
  - lib/opentelemetry/propagator/jaeger/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-jaeger/v0.16.0/file.CHANGELOG.html
158
+ changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-propagator-jaeger/v0.17.0/file.CHANGELOG.html
160
159
  source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/master/propagator/jaeger
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-jaeger/v0.16.0
161
+ documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-propagator-jaeger/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: Jaeger Context Propagation Extension for the OpenTelemetry framework
@@ -1,68 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright The OpenTelemetry Authors
4
- #
5
- # SPDX-License-Identifier: Apache-2.0
6
-
7
- require 'cgi'
8
-
9
- module OpenTelemetry
10
- # Namespace for OpenTelemetry propagator extension libraries
11
- module Propagator
12
- # Namespace for OpenTelemetry Jaeger propagation
13
- module Jaeger
14
- # Injects context into carriers
15
- class TextMapInjector
16
- # Returns a new TextMapInjector that extracts Jaeger context using the
17
- # specified header keys
18
- #
19
- # @param [optional Setter] default_setter The default setter used to
20
- # write context into a carrier during inject. Defaults to a
21
- # {OpenTelemetry::Context:Propagation::TextMapSetter} instance.
22
- # @return [TextMapInjector]
23
- def initialize(default_setter = Context::Propagation.text_map_setter)
24
- @default_setter = default_setter
25
- end
26
-
27
- # Set the span context on the supplied carrier.
28
- #
29
- # @param [Context] context The active Context.
30
- # @param [optional Setter] setter If the optional setter is provided, it
31
- # will be used to write context into the carrier, otherwise the default
32
- # setter will be used.
33
- # @return [Object] the carrier with context injected
34
- def inject(carrier, context, setter = nil)
35
- span_context = Trace.current_span(context).context
36
- return unless span_context.valid?
37
-
38
- flags = to_flags(context, span_context)
39
- trace_span_identity_value = [
40
- span_context.hex_trace_id, span_context.hex_span_id, '0', flags
41
- ].join(':')
42
- setter ||= @default_setter
43
- setter.set(carrier, IDENTITY_KEY, trace_span_identity_value)
44
- OpenTelemetry.baggage.values(context: context).each do |key, value|
45
- baggage_key = 'uberctx-' + key
46
- encoded_value = CGI.escape(value)
47
- setter.set(carrier, baggage_key, encoded_value)
48
- end
49
- carrier
50
- end
51
-
52
- private
53
-
54
- def to_flags(context, span_context)
55
- if span_context.trace_flags == Trace::TraceFlags::SAMPLED
56
- if Jaeger.debug?(context)
57
- SAMPLED_FLAG_BIT | DEBUG_FLAG_BIT
58
- else
59
- SAMPLED_FLAG_BIT
60
- end
61
- else
62
- DEFAULT_FLAG_BIT
63
- end
64
- end
65
- end
66
- end
67
- end
68
- end