opentelemetry-propagator-jaeger 0.16.0 → 0.19.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 +4 -4
- data/CHANGELOG.md +23 -0
- data/README.md +4 -4
- data/lib/opentelemetry/propagator/jaeger.rb +7 -22
- data/lib/opentelemetry/propagator/jaeger/text_map_propagator.rb +148 -0
- data/lib/opentelemetry/propagator/jaeger/version.rb +1 -1
- metadata +12 -13
- data/lib/opentelemetry/propagator/jaeger/text_map_extractor.rb +0 -107
- data/lib/opentelemetry/propagator/jaeger/text_map_injector.rb +0 -68
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7a654d390032141e29a85ed30947ca5fe8d849107716376205ea3c268c49f2f6
|
4
|
+
data.tar.gz: 158c5925352505f218cd4b5464b238eac2691dd268c9c59e255cabe43638485b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17e1a8f17565ba610f848e63209af14a5c8d3a3e9c17559c90709a0f790a84b588118492bf0a44336ce57bb795af8a0345de8987e20d782e2a1f9d596df13a6c
|
7
|
+
data.tar.gz: 369d618f1efeb8d6855f14c3c66d67f11a0472667c67e2ea5036808651fb99761771f3499ed71fb08eba8a6f6d083bb5c78ec5af7539f2f142dbfa127eec9a63
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,28 @@
|
|
1
1
|
# Release History: opentelemetry-propagator-jaeger
|
2
2
|
|
3
|
+
### v0.19.1 / 2021-08-12
|
4
|
+
|
5
|
+
* (No significant changes)
|
6
|
+
|
7
|
+
### v0.19.0 / 2021-06-23
|
8
|
+
|
9
|
+
* BREAKING CHANGE: Refactor Baggage to remove Noop*
|
10
|
+
|
11
|
+
* ADDED: Add Tracer.non_recording_span to API
|
12
|
+
* FIXED: Refactor Baggage to remove Noop*
|
13
|
+
|
14
|
+
### v0.18.0 / 2021-05-21
|
15
|
+
|
16
|
+
* ADDED: Updated API depedency for 1.0.0.rc1
|
17
|
+
|
18
|
+
### v0.17.0 / 2021-04-22
|
19
|
+
|
20
|
+
* BREAKING CHANGE: Replace TextMapInjector/TextMapExtractor pairs with a TextMapPropagator.
|
21
|
+
|
22
|
+
[Check the propagator documentation](https://open-telemetry.github.io/opentelemetry-ruby/) for the new usage.
|
23
|
+
|
24
|
+
* FIXED: Refactor propagators to add #fields
|
25
|
+
|
3
26
|
### v0.16.0 / 2021-03-17
|
4
27
|
|
5
28
|
* Initial release.
|
data/README.md
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# opentelemetry-propagator-jaeger
|
2
2
|
|
3
|
-
The `opentelemetry-propagator-jaeger` gem contains
|
4
|
-
[Jaeger native propagation format][jaeger-spec]
|
5
|
-
|
6
|
-
|
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/
|
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
|
-
|
27
|
-
TEXT_MAP_INJECTOR = TextMapInjector.new
|
25
|
+
TEXT_MAP_PROPAGATOR = TextMapPropagator.new
|
28
26
|
|
29
|
-
private_constant :
|
27
|
+
private_constant :TEXT_MAP_PROPAGATOR
|
30
28
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
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
|
@@ -0,0 +1,148 @@
|
|
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
|
+
# OpenTelemetry is an open source observability framework, providing a
|
10
|
+
# general-purpose API, SDK, and related tools required for the instrumentation
|
11
|
+
# of cloud-native software, frameworks, and libraries.
|
12
|
+
#
|
13
|
+
# The OpenTelemetry module provides global accessors for telemetry objects.
|
14
|
+
# See the documentation for the `opentelemetry-api` gem for details.
|
15
|
+
module OpenTelemetry
|
16
|
+
# Namespace for OpenTelemetry propagator extension libraries
|
17
|
+
module Propagator
|
18
|
+
# Namespace for OpenTelemetry Jaeger propagation
|
19
|
+
module Jaeger
|
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
|
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
|
28
|
+
ZERO_ID_REGEX = /^0+$/.freeze
|
29
|
+
|
30
|
+
private_constant \
|
31
|
+
:IDENTITY_KEY, :DEFAULT_FLAG_BIT, :SAMPLED_FLAG_BIT, :DEBUG_FLAG_BIT,
|
32
|
+
:FIELDS, :TRACE_SPAN_IDENTITY_REGEX, :ZERO_ID_REGEX
|
33
|
+
|
34
|
+
# Extract trace context from the supplied carrier.
|
35
|
+
# If extraction fails, the original context will be returned
|
36
|
+
#
|
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+.
|
40
|
+
# @param [optional Getter] getter If the optional getter is provided, it
|
41
|
+
# will be used to read the header from the carrier, otherwise the default
|
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)
|
47
|
+
header = getter.get(carrier, IDENTITY_KEY)
|
48
|
+
return context unless (match = header.match(TRACE_SPAN_IDENTITY_REGEX))
|
49
|
+
return context if match['trace_id'] =~ ZERO_ID_REGEX
|
50
|
+
return context if match['span_id'] =~ ZERO_ID_REGEX
|
51
|
+
|
52
|
+
sampling_flags = match['sampling_flags'].to_i
|
53
|
+
span = build_span(match, sampling_flags)
|
54
|
+
context = Jaeger.context_with_debug(context) if sampling_flags & DEBUG_FLAG_BIT != 0
|
55
|
+
context = context_with_extracted_baggage(carrier, context, getter)
|
56
|
+
Trace.context_with_span(span, parent_context: context)
|
57
|
+
end
|
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
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
def build_span(match, sampling_flags)
|
94
|
+
trace_id = to_trace_id(match['trace_id'])
|
95
|
+
span_context = Trace::SpanContext.new(
|
96
|
+
trace_id: trace_id,
|
97
|
+
span_id: to_span_id(match['span_id']),
|
98
|
+
trace_flags: to_trace_flags(sampling_flags),
|
99
|
+
remote: true
|
100
|
+
)
|
101
|
+
OpenTelemetry::Trace.non_recording_span(span_context)
|
102
|
+
end
|
103
|
+
|
104
|
+
def context_with_extracted_baggage(carrier, context, getter)
|
105
|
+
baggage_key_prefix = 'uberctx-'
|
106
|
+
OpenTelemetry::Baggage.build(context: context) do |b|
|
107
|
+
getter.keys(carrier).each do |carrier_key|
|
108
|
+
baggage_key = carrier_key.start_with?(baggage_key_prefix) && carrier_key[baggage_key_prefix.length..-1]
|
109
|
+
next unless baggage_key
|
110
|
+
|
111
|
+
raw_value = getter.get(carrier, carrier_key)
|
112
|
+
value = CGI.unescape(raw_value)
|
113
|
+
b.set_value(baggage_key, value)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
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
|
+
|
130
|
+
def to_trace_flags(sampling_flags)
|
131
|
+
if (sampling_flags & SAMPLED_FLAG_BIT) != 0
|
132
|
+
Trace::TraceFlags::SAMPLED
|
133
|
+
else
|
134
|
+
Trace::TraceFlags::DEFAULT
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def to_span_id(span_id_str)
|
139
|
+
[span_id_str.rjust(16, '0')].pack('H*')
|
140
|
+
end
|
141
|
+
|
142
|
+
def to_trace_id(trace_id_str)
|
143
|
+
[trace_id_str.rjust(32, '0')].pack('H*')
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
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.
|
4
|
+
version: 0.19.1
|
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-
|
11
|
+
date: 2021-08-16 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.
|
19
|
+
version: 1.0.0.rc3
|
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.
|
26
|
+
version: 1.0.0.rc3
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,16 +56,16 @@ dependencies:
|
|
56
56
|
name: opentelemetry-sdk
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0
|
61
|
+
version: '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
|
68
|
+
version: '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-jaeger.rb
|
151
151
|
- lib/opentelemetry/propagator/jaeger.rb
|
152
|
-
- lib/opentelemetry/propagator/jaeger/
|
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.
|
158
|
+
changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-propagator-jaeger/v0.19.1/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.
|
161
|
+
documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-propagator-jaeger/v0.19.1
|
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.
|
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,107 +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
|
-
# OpenTelemetry is an open source observability framework, providing a
|
10
|
-
# general-purpose API, SDK, and related tools required for the instrumentation
|
11
|
-
# of cloud-native software, frameworks, and libraries.
|
12
|
-
#
|
13
|
-
# The OpenTelemetry module provides global accessors for telemetry objects.
|
14
|
-
# See the documentation for the `opentelemetry-api` gem for details.
|
15
|
-
module OpenTelemetry
|
16
|
-
# Namespace for OpenTelemetry propagator extension libraries
|
17
|
-
module Propagator
|
18
|
-
# Namespace for OpenTelemetry Jaeger propagation
|
19
|
-
module Jaeger
|
20
|
-
# Extracts context from carriers
|
21
|
-
class TextMapExtractor
|
22
|
-
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
|
-
ZERO_ID_REGEX = /^0+$/.freeze
|
24
|
-
|
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
|
35
|
-
|
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.
|
39
|
-
#
|
40
|
-
# @param [Carrier] carrier The carrier to get the header from.
|
41
|
-
# @param [Context] context The context to be updated with extracted
|
42
|
-
# context
|
43
|
-
# @param [optional Getter] getter If the optional getter is provided, it
|
44
|
-
# 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
|
50
|
-
header = getter.get(carrier, IDENTITY_KEY)
|
51
|
-
return context unless (match = header.match(TRACE_SPAN_IDENTITY_REGEX))
|
52
|
-
return context if match['trace_id'] =~ ZERO_ID_REGEX
|
53
|
-
return context if match['span_id'] =~ ZERO_ID_REGEX
|
54
|
-
|
55
|
-
sampling_flags = match['sampling_flags'].to_i
|
56
|
-
span = build_span(match, sampling_flags)
|
57
|
-
context = Jaeger.context_with_debug(context) if sampling_flags & DEBUG_FLAG_BIT != 0
|
58
|
-
context = set_baggage(carrier, context, getter)
|
59
|
-
Trace.context_with_span(span, parent_context: context)
|
60
|
-
end
|
61
|
-
|
62
|
-
private
|
63
|
-
|
64
|
-
def build_span(match, sampling_flags)
|
65
|
-
trace_id = to_trace_id(match['trace_id'])
|
66
|
-
span_context = Trace::SpanContext.new(
|
67
|
-
trace_id: trace_id,
|
68
|
-
span_id: to_span_id(match['span_id']),
|
69
|
-
trace_flags: to_trace_flags(sampling_flags),
|
70
|
-
remote: true
|
71
|
-
)
|
72
|
-
Trace::Span.new(span_context: span_context)
|
73
|
-
end
|
74
|
-
|
75
|
-
def set_baggage(carrier, context, getter)
|
76
|
-
baggage_key_prefix = 'uberctx-'
|
77
|
-
OpenTelemetry.baggage.build(context: context) do |b|
|
78
|
-
getter.keys(carrier).each do |carrier_key|
|
79
|
-
baggage_key = carrier_key.start_with?(baggage_key_prefix) && carrier_key[baggage_key_prefix.length..-1]
|
80
|
-
next unless baggage_key
|
81
|
-
|
82
|
-
raw_value = getter.get(carrier, carrier_key)
|
83
|
-
value = CGI.unescape(raw_value)
|
84
|
-
b.set_value(baggage_key, value)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def to_trace_flags(sampling_flags)
|
90
|
-
if (sampling_flags & SAMPLED_FLAG_BIT) != 0
|
91
|
-
Trace::TraceFlags::SAMPLED
|
92
|
-
else
|
93
|
-
Trace::TraceFlags::DEFAULT
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
def to_span_id(span_id_str)
|
98
|
-
[span_id_str.rjust(16, '0')].pack('H*')
|
99
|
-
end
|
100
|
-
|
101
|
-
def to_trace_id(trace_id_str)
|
102
|
-
[trace_id_str.rjust(32, '0')].pack('H*')
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
@@ -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
|