jaeger-client 0.7.1 → 1.1.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 +4 -4
- data/.gitmodules +3 -0
- data/.rubocop.yml +3 -0
- data/.travis.yml +11 -2
- data/Makefile +1 -0
- data/README.md +127 -13
- data/crossdock/Dockerfile +29 -0
- data/crossdock/Gemfile +6 -0
- data/crossdock/Gemfile.lock +35 -0
- data/crossdock/docker-compose.yml +68 -0
- data/crossdock/jaeger-docker-compose.yml +48 -0
- data/crossdock/rules.mk +35 -0
- data/crossdock/server +173 -0
- data/jaeger-client.gemspec +4 -2
- data/lib/jaeger/client.rb +42 -18
- data/lib/jaeger/client/version.rb +1 -1
- data/lib/jaeger/encoders/thrift_encoder.rb +142 -0
- data/lib/jaeger/extractors.rb +173 -0
- data/lib/jaeger/http_sender.rb +28 -0
- data/lib/jaeger/injectors.rb +83 -0
- data/lib/jaeger/rate_limiter.rb +61 -0
- data/lib/jaeger/recurring_executor.rb +35 -0
- data/lib/jaeger/reporters.rb +7 -0
- data/lib/jaeger/reporters/composite_reporter.rb +17 -0
- data/lib/jaeger/reporters/in_memory_reporter.rb +30 -0
- data/lib/jaeger/reporters/logging_reporter.rb +22 -0
- data/lib/jaeger/reporters/null_reporter.rb +11 -0
- data/lib/jaeger/{client/async_reporter.rb → reporters/remote_reporter.rb} +21 -20
- data/lib/jaeger/{client/async_reporter → reporters/remote_reporter}/buffer.rb +2 -2
- data/lib/jaeger/samplers.rb +8 -0
- data/lib/jaeger/samplers/const.rb +24 -0
- data/lib/jaeger/samplers/guaranteed_throughput_probabilistic.rb +47 -0
- data/lib/jaeger/samplers/per_operation.rb +79 -0
- data/lib/jaeger/samplers/probabilistic.rb +38 -0
- data/lib/jaeger/samplers/rate_limiting.rb +51 -0
- data/lib/jaeger/samplers/remote_controlled.rb +119 -0
- data/lib/jaeger/samplers/remote_controlled/instructions_fetcher.rb +34 -0
- data/lib/jaeger/scope.rb +38 -0
- data/lib/jaeger/scope_manager.rb +47 -0
- data/lib/jaeger/scope_manager/scope_identifier.rb +13 -0
- data/lib/jaeger/scope_manager/scope_stack.rb +33 -0
- data/lib/jaeger/span.rb +97 -0
- data/lib/jaeger/span/thrift_log_builder.rb +18 -0
- data/lib/jaeger/span_context.rb +57 -0
- data/lib/jaeger/thrift_tag_builder.rb +41 -0
- data/lib/jaeger/trace_id.rb +48 -0
- data/lib/jaeger/tracer.rb +213 -0
- data/lib/jaeger/udp_sender.rb +26 -0
- data/lib/jaeger/udp_sender/transport.rb +40 -0
- metadata +78 -31
- data/lib/jaeger/client/carrier.rb +0 -26
- data/lib/jaeger/client/encoders/thrift_encoder.rb +0 -94
- data/lib/jaeger/client/extractors.rb +0 -88
- data/lib/jaeger/client/http_sender.rb +0 -30
- data/lib/jaeger/client/injectors.rb +0 -54
- data/lib/jaeger/client/samplers.rb +0 -4
- data/lib/jaeger/client/samplers/const.rb +0 -29
- data/lib/jaeger/client/samplers/probabilistic.rb +0 -30
- data/lib/jaeger/client/scope.rb +0 -40
- data/lib/jaeger/client/scope_manager.rb +0 -49
- data/lib/jaeger/client/scope_manager/scope_identifier.rb +0 -15
- data/lib/jaeger/client/scope_manager/scope_stack.rb +0 -35
- data/lib/jaeger/client/span.rb +0 -84
- data/lib/jaeger/client/span/thrift_log_builder.rb +0 -20
- data/lib/jaeger/client/span/thrift_tag_builder.rb +0 -45
- data/lib/jaeger/client/span_context.rb +0 -59
- data/lib/jaeger/client/trace_id.rb +0 -41
- data/lib/jaeger/client/tracer.rb +0 -189
- data/lib/jaeger/client/udp_sender.rb +0 -27
- data/lib/jaeger/client/udp_sender/transport.rb +0 -42
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative './udp_sender/transport'
|
4
|
+
require 'socket'
|
5
|
+
|
6
|
+
module Jaeger
|
7
|
+
class UdpSender
|
8
|
+
def initialize(host:, port:, encoder:, logger:, max_packet_size: 65_000)
|
9
|
+
@encoder = encoder
|
10
|
+
@logger = logger
|
11
|
+
|
12
|
+
transport = Transport.new(host, port)
|
13
|
+
@protocol_class = ::Thrift::CompactProtocol
|
14
|
+
protocol = @protocol_class.new(transport)
|
15
|
+
@client = Jaeger::Thrift::Agent::Client.new(protocol)
|
16
|
+
@max_packet_size = max_packet_size
|
17
|
+
end
|
18
|
+
|
19
|
+
def send_spans(spans)
|
20
|
+
batches = @encoder.encode_limited_size(spans, @protocol_class, @max_packet_size)
|
21
|
+
batches.each { |batch| @client.emitBatch(batch) }
|
22
|
+
rescue StandardError => error
|
23
|
+
@logger.error("Failure while sending a batch of spans: #{error}")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Jaeger
|
4
|
+
class UdpSender
|
5
|
+
class Transport
|
6
|
+
FLAGS = 0
|
7
|
+
|
8
|
+
def initialize(host, port)
|
9
|
+
@socket = UDPSocket.new
|
10
|
+
@host = host
|
11
|
+
@port = port
|
12
|
+
@buffer = ::Thrift::MemoryBufferTransport.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def write(str)
|
16
|
+
@buffer.write(str)
|
17
|
+
end
|
18
|
+
|
19
|
+
def flush
|
20
|
+
data = @buffer.read(@buffer.available)
|
21
|
+
send_bytes(data)
|
22
|
+
end
|
23
|
+
|
24
|
+
def open; end
|
25
|
+
|
26
|
+
def close; end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def send_bytes(bytes)
|
31
|
+
@socket.send(bytes, FLAGS, @host, @port)
|
32
|
+
@socket.flush
|
33
|
+
rescue Errno::ECONNREFUSED
|
34
|
+
warn 'Unable to connect to Jaeger Agent'
|
35
|
+
rescue StandardError => e
|
36
|
+
warn "Unable to send spans: #{e.message}"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jaeger-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SaleMove TechMovers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
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: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +80,34 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 1.24.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: timecop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.9'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.9'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: webmock
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 3.4.2
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 3.4.2
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: opentracing
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -116,40 +144,60 @@ extensions: []
|
|
116
144
|
extra_rdoc_files: []
|
117
145
|
files:
|
118
146
|
- ".gitignore"
|
147
|
+
- ".gitmodules"
|
119
148
|
- ".rspec"
|
120
149
|
- ".rubocop.yml"
|
121
150
|
- ".travis.yml"
|
122
151
|
- Gemfile
|
123
152
|
- LICENSE.txt
|
153
|
+
- Makefile
|
124
154
|
- README.md
|
125
155
|
- Rakefile
|
126
156
|
- bin/console
|
127
157
|
- bin/setup
|
158
|
+
- crossdock/Dockerfile
|
159
|
+
- crossdock/Gemfile
|
160
|
+
- crossdock/Gemfile.lock
|
161
|
+
- crossdock/docker-compose.yml
|
162
|
+
- crossdock/jaeger-docker-compose.yml
|
163
|
+
- crossdock/rules.mk
|
164
|
+
- crossdock/server
|
128
165
|
- jaeger-client.gemspec
|
129
166
|
- lib/jaeger/client.rb
|
130
|
-
- lib/jaeger/client/async_reporter.rb
|
131
|
-
- lib/jaeger/client/async_reporter/buffer.rb
|
132
|
-
- lib/jaeger/client/carrier.rb
|
133
|
-
- lib/jaeger/client/encoders/thrift_encoder.rb
|
134
|
-
- lib/jaeger/client/extractors.rb
|
135
|
-
- lib/jaeger/client/http_sender.rb
|
136
|
-
- lib/jaeger/client/injectors.rb
|
137
|
-
- lib/jaeger/client/samplers.rb
|
138
|
-
- lib/jaeger/client/samplers/const.rb
|
139
|
-
- lib/jaeger/client/samplers/probabilistic.rb
|
140
|
-
- lib/jaeger/client/scope.rb
|
141
|
-
- lib/jaeger/client/scope_manager.rb
|
142
|
-
- lib/jaeger/client/scope_manager/scope_identifier.rb
|
143
|
-
- lib/jaeger/client/scope_manager/scope_stack.rb
|
144
|
-
- lib/jaeger/client/span.rb
|
145
|
-
- lib/jaeger/client/span/thrift_log_builder.rb
|
146
|
-
- lib/jaeger/client/span/thrift_tag_builder.rb
|
147
|
-
- lib/jaeger/client/span_context.rb
|
148
|
-
- lib/jaeger/client/trace_id.rb
|
149
|
-
- lib/jaeger/client/tracer.rb
|
150
|
-
- lib/jaeger/client/udp_sender.rb
|
151
|
-
- lib/jaeger/client/udp_sender/transport.rb
|
152
167
|
- lib/jaeger/client/version.rb
|
168
|
+
- lib/jaeger/encoders/thrift_encoder.rb
|
169
|
+
- lib/jaeger/extractors.rb
|
170
|
+
- lib/jaeger/http_sender.rb
|
171
|
+
- lib/jaeger/injectors.rb
|
172
|
+
- lib/jaeger/rate_limiter.rb
|
173
|
+
- lib/jaeger/recurring_executor.rb
|
174
|
+
- lib/jaeger/reporters.rb
|
175
|
+
- lib/jaeger/reporters/composite_reporter.rb
|
176
|
+
- lib/jaeger/reporters/in_memory_reporter.rb
|
177
|
+
- lib/jaeger/reporters/logging_reporter.rb
|
178
|
+
- lib/jaeger/reporters/null_reporter.rb
|
179
|
+
- lib/jaeger/reporters/remote_reporter.rb
|
180
|
+
- lib/jaeger/reporters/remote_reporter/buffer.rb
|
181
|
+
- lib/jaeger/samplers.rb
|
182
|
+
- lib/jaeger/samplers/const.rb
|
183
|
+
- lib/jaeger/samplers/guaranteed_throughput_probabilistic.rb
|
184
|
+
- lib/jaeger/samplers/per_operation.rb
|
185
|
+
- lib/jaeger/samplers/probabilistic.rb
|
186
|
+
- lib/jaeger/samplers/rate_limiting.rb
|
187
|
+
- lib/jaeger/samplers/remote_controlled.rb
|
188
|
+
- lib/jaeger/samplers/remote_controlled/instructions_fetcher.rb
|
189
|
+
- lib/jaeger/scope.rb
|
190
|
+
- lib/jaeger/scope_manager.rb
|
191
|
+
- lib/jaeger/scope_manager/scope_identifier.rb
|
192
|
+
- lib/jaeger/scope_manager/scope_stack.rb
|
193
|
+
- lib/jaeger/span.rb
|
194
|
+
- lib/jaeger/span/thrift_log_builder.rb
|
195
|
+
- lib/jaeger/span_context.rb
|
196
|
+
- lib/jaeger/thrift_tag_builder.rb
|
197
|
+
- lib/jaeger/trace_id.rb
|
198
|
+
- lib/jaeger/tracer.rb
|
199
|
+
- lib/jaeger/udp_sender.rb
|
200
|
+
- lib/jaeger/udp_sender/transport.rb
|
153
201
|
- script/create_follows_from_trace
|
154
202
|
- script/create_trace
|
155
203
|
- thrift/agent.thrift
|
@@ -167,7 +215,7 @@ files:
|
|
167
215
|
- thrift/gen-rb/jaeger/thrift/zipkin/zipkincore_types.rb
|
168
216
|
- thrift/jaeger.thrift
|
169
217
|
- thrift/zipkincore.thrift
|
170
|
-
homepage:
|
218
|
+
homepage: https://github.com/salemove/jaeger-client-ruby
|
171
219
|
licenses:
|
172
220
|
- MIT
|
173
221
|
metadata: {}
|
@@ -186,8 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
186
234
|
- !ruby/object:Gem::Version
|
187
235
|
version: '0'
|
188
236
|
requirements: []
|
189
|
-
|
190
|
-
rubygems_version: 2.7.7
|
237
|
+
rubygems_version: 3.0.3
|
191
238
|
signing_key:
|
192
239
|
specification_version: 4
|
193
240
|
summary: OpenTracing Tracer implementation for Jaeger in Ruby
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Jaeger
|
4
|
-
module Client
|
5
|
-
# Carriers are used for inject and extract operations. A carrier should be a
|
6
|
-
# Hash or hash-like object. At a minimum, it should implement `[]`, `[]=`, and
|
7
|
-
# `each` shown here.
|
8
|
-
class Carrier
|
9
|
-
# [] retrieves a value by the given key
|
10
|
-
# @param key [String] key to retrieve the value
|
11
|
-
# @return [String] the desired value
|
12
|
-
def [](key); end
|
13
|
-
|
14
|
-
# []= sets the value for the given key
|
15
|
-
# @param key [String] key to set
|
16
|
-
# @param value [String] value to set
|
17
|
-
def []=(key, value); end
|
18
|
-
|
19
|
-
# each iterates over every key-value pair in the carrier
|
20
|
-
# @yield [key, value]
|
21
|
-
# @yieldparam key [String] the key of the tuple
|
22
|
-
# @yieldparam value [String] the value of the tuple
|
23
|
-
def each(&block); end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,94 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Jaeger
|
4
|
-
module Client
|
5
|
-
module Encoders
|
6
|
-
class ThriftEncoder
|
7
|
-
def initialize(service_name:)
|
8
|
-
@service_name = service_name
|
9
|
-
@tags = [
|
10
|
-
Jaeger::Thrift::Tag.new(
|
11
|
-
'key' => 'jaeger.version',
|
12
|
-
'vType' => Jaeger::Thrift::TagType::STRING,
|
13
|
-
'vStr' => 'Ruby-' + Jaeger::Client::VERSION
|
14
|
-
),
|
15
|
-
Jaeger::Thrift::Tag.new(
|
16
|
-
'key' => 'hostname',
|
17
|
-
'vType' => Jaeger::Thrift::TagType::STRING,
|
18
|
-
'vStr' => Socket.gethostname
|
19
|
-
)
|
20
|
-
]
|
21
|
-
ipv4 = Socket.ip_address_list.find { |ai| ai.ipv4? && !ai.ipv4_loopback? }
|
22
|
-
unless ipv4.nil? # rubocop:disable Style/GuardClause
|
23
|
-
@tags << Jaeger::Thrift::Tag.new(
|
24
|
-
'key' => 'ip',
|
25
|
-
'vType' => Jaeger::Thrift::TagType::STRING,
|
26
|
-
'vStr' => ipv4.ip_address
|
27
|
-
)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def encode(spans)
|
32
|
-
Jaeger::Thrift::Batch.new(
|
33
|
-
'process' => Jaeger::Thrift::Process.new(
|
34
|
-
'serviceName' => @service_name,
|
35
|
-
'tags' => @tags
|
36
|
-
),
|
37
|
-
'spans' => spans.map(&method(:encode_span))
|
38
|
-
)
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
def encode_span(span)
|
44
|
-
context = span.context
|
45
|
-
start_ts, duration = build_timestamps(span)
|
46
|
-
|
47
|
-
Jaeger::Thrift::Span.new(
|
48
|
-
'traceIdLow' => TraceId.uint64_id_to_int64(context.trace_id),
|
49
|
-
'traceIdHigh' => 0,
|
50
|
-
'spanId' => TraceId.uint64_id_to_int64(context.span_id),
|
51
|
-
'parentSpanId' => TraceId.uint64_id_to_int64(context.parent_id),
|
52
|
-
'operationName' => span.operation_name,
|
53
|
-
'references' => build_references(span.references || []),
|
54
|
-
'flags' => context.flags,
|
55
|
-
'startTime' => start_ts,
|
56
|
-
'duration' => duration,
|
57
|
-
'tags' => span.tags,
|
58
|
-
'logs' => span.logs
|
59
|
-
)
|
60
|
-
end
|
61
|
-
|
62
|
-
def build_references(references)
|
63
|
-
references.map do |ref|
|
64
|
-
Jaeger::Thrift::SpanRef.new(
|
65
|
-
'refType' => span_ref_type(ref.type),
|
66
|
-
'traceIdLow' => TraceId.uint64_id_to_int64(ref.context.trace_id),
|
67
|
-
'traceIdHigh' => 0,
|
68
|
-
'spanId' => TraceId.uint64_id_to_int64(ref.context.span_id)
|
69
|
-
)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def build_timestamps(span)
|
74
|
-
start_ts = (span.start_time.to_f * 1_000_000).to_i
|
75
|
-
end_ts = (span.end_time.to_f * 1_000_000).to_i
|
76
|
-
duration = end_ts - start_ts
|
77
|
-
[start_ts, duration]
|
78
|
-
end
|
79
|
-
|
80
|
-
def span_ref_type(type)
|
81
|
-
case type
|
82
|
-
when OpenTracing::Reference::CHILD_OF
|
83
|
-
Jaeger::Thrift::SpanRefType::CHILD_OF
|
84
|
-
when OpenTracing::Reference::FOLLOWS_FROM
|
85
|
-
Jaeger::Thrift::SpanRefType::FOLLOWS_FROM
|
86
|
-
else
|
87
|
-
warn "Jaeger::Client with format #{type} is not supported yet"
|
88
|
-
nil
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
@@ -1,88 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Jaeger
|
4
|
-
module Client
|
5
|
-
module Extractors
|
6
|
-
class SerializedJaegerTrace
|
7
|
-
def self.parse(trace)
|
8
|
-
return nil if !trace || trace == ''
|
9
|
-
|
10
|
-
trace_arguments = trace.split(':').map(&TraceId.method(:base16_hex_id_to_uint64))
|
11
|
-
return nil if trace_arguments.size != 4
|
12
|
-
|
13
|
-
trace_id, span_id, parent_id, flags = trace_arguments
|
14
|
-
return nil if trace_id.zero? || span_id.zero?
|
15
|
-
|
16
|
-
SpanContext.new(
|
17
|
-
trace_id: trace_id,
|
18
|
-
parent_id: parent_id,
|
19
|
-
span_id: span_id,
|
20
|
-
flags: flags
|
21
|
-
)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
class JaegerTextMapCodec
|
26
|
-
def self.extract(carrier)
|
27
|
-
SerializedJaegerTrace.parse(carrier['uber-trace-id'])
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
class JaegerRackCodec
|
32
|
-
def self.extract(carrier)
|
33
|
-
SerializedJaegerTrace.parse(carrier['HTTP_UBER_TRACE_ID'])
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
class JaegerBinaryCodec
|
38
|
-
def self.extract(_carrier)
|
39
|
-
warn 'Jaeger::Client with binary format is not supported yet'
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
class B3RackCodec
|
44
|
-
def self.extract(carrier)
|
45
|
-
trace_id = TraceId.base16_hex_id_to_uint64(carrier['HTTP_X_B3_TRACEID'])
|
46
|
-
span_id = TraceId.base16_hex_id_to_uint64(carrier['HTTP_X_B3_SPANID'])
|
47
|
-
parent_id = TraceId.base16_hex_id_to_uint64(carrier['HTTP_X_B3_PARENTSPANID'])
|
48
|
-
flags = parse_flags(carrier['HTTP_X_B3_FLAGS'], carrier['HTTP_X_B3_SAMPLED'])
|
49
|
-
|
50
|
-
return nil if span_id.nil? || trace_id.nil?
|
51
|
-
return nil if span_id.zero? || trace_id.zero?
|
52
|
-
|
53
|
-
SpanContext.new(
|
54
|
-
trace_id: trace_id,
|
55
|
-
parent_id: parent_id,
|
56
|
-
span_id: span_id,
|
57
|
-
flags: flags
|
58
|
-
)
|
59
|
-
end
|
60
|
-
|
61
|
-
# if the flags header is '1' then the sampled header should not be present
|
62
|
-
def self.parse_flags(flags_header, sampled_header)
|
63
|
-
if flags_header == '1'
|
64
|
-
Jaeger::Client::SpanContext::Flags::DEBUG
|
65
|
-
else
|
66
|
-
TraceId.base16_hex_id_to_uint64(sampled_header)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
private_class_method :parse_flags
|
70
|
-
end
|
71
|
-
|
72
|
-
DEFAULT_EXTRACTORS = {
|
73
|
-
OpenTracing::FORMAT_TEXT_MAP => JaegerTextMapCodec,
|
74
|
-
OpenTracing::FORMAT_BINARY => JaegerBinaryCodec,
|
75
|
-
OpenTracing::FORMAT_RACK => JaegerRackCodec
|
76
|
-
}.freeze
|
77
|
-
|
78
|
-
def self.prepare(extractors)
|
79
|
-
DEFAULT_EXTRACTORS.reduce(extractors) do |acc, (format, default)|
|
80
|
-
provided_extractors = Array(extractors[format])
|
81
|
-
provided_extractors += [default] if provided_extractors.empty?
|
82
|
-
|
83
|
-
acc.merge(format => provided_extractors)
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|