jaeger-client 0.7.1 → 0.8.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/.travis.yml +11 -2
- data/Makefile +1 -0
- 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/lib/jaeger/client/async_reporter.rb +19 -12
- data/lib/jaeger/client/extractors.rb +25 -2
- data/lib/jaeger/client/injectors.rb +24 -7
- data/lib/jaeger/client/span.rb +18 -2
- data/lib/jaeger/client/span_context.rb +16 -9
- data/lib/jaeger/client/version.rb +1 -1
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 46d05119eb9543907c6e1182a80346da57b634623425a4eeb74e06d637b73799
|
4
|
+
data.tar.gz: 171cdd21fd1872db8d1adef226e901dffd595ed7eab76f8c99f902363b638f9d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 756a18ecf9e931670df3a9058613a5af99a2391eceabfc7c7fdeea5a1371c12757f818fd71e8616d96aa3a544dc0a0cb7728d22b9f4ae7dfb62863f7f37f1c4e
|
7
|
+
data.tar.gz: e89a5e9ff633cca38e030b31cd7a9df68bfa7bcbebfbd5f68ad61a663d04ade3c517465e2b8fcc707afe80696d2aad330ac51caf14a32551788b08322cd4ee4b
|
data/.gitmodules
ADDED
data/.travis.yml
CHANGED
data/Makefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
-include crossdock/rules.mk
|
@@ -0,0 +1,29 @@
|
|
1
|
+
FROM ruby:2.5-alpine
|
2
|
+
|
3
|
+
ENV APP_HOME /app
|
4
|
+
|
5
|
+
# git is required by bundler to run jaeger gem with local path
|
6
|
+
RUN apk add --no-cache git
|
7
|
+
|
8
|
+
# Add only files needed for installing gem dependencies. This allows us to
|
9
|
+
# change other files without needing to install gems every time when building
|
10
|
+
# the docker image.
|
11
|
+
ADD Gemfile Gemfile.lock jaeger-client.gemspec $APP_HOME/
|
12
|
+
ADD lib/jaeger/client/version.rb $APP_HOME/lib/jaeger/client/
|
13
|
+
ADD crossdock/Gemfile crossdock/Gemfile.lock $APP_HOME/crossdock/
|
14
|
+
|
15
|
+
RUN apk add --no-cache --virtual .app-builddeps build-base \
|
16
|
+
&& cd $APP_HOME && bundle install \
|
17
|
+
&& cd $APP_HOME/crossdock && bundle install \
|
18
|
+
&& apk del .app-builddeps
|
19
|
+
|
20
|
+
ADD . $APP_HOME
|
21
|
+
|
22
|
+
RUN chown -R nobody:nogroup $APP_HOME
|
23
|
+
USER nobody
|
24
|
+
|
25
|
+
WORKDIR $APP_HOME/crossdock
|
26
|
+
|
27
|
+
CMD ["bundle", "exec", "./server"]
|
28
|
+
|
29
|
+
EXPOSE 8080-8082
|
data/crossdock/Gemfile
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
jaeger-client (0.7.1)
|
5
|
+
opentracing (~> 0.3)
|
6
|
+
thrift
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
mustermann (1.0.3)
|
12
|
+
opentracing (0.4.3)
|
13
|
+
rack (2.0.6)
|
14
|
+
rack-protection (2.0.4)
|
15
|
+
rack
|
16
|
+
sinatra (2.0.4)
|
17
|
+
mustermann (~> 1.0)
|
18
|
+
rack (~> 2.0)
|
19
|
+
rack-protection (= 2.0.4)
|
20
|
+
tilt (~> 2.0)
|
21
|
+
thrift (0.11.0.0)
|
22
|
+
tilt (2.0.9)
|
23
|
+
webrick (1.4.2)
|
24
|
+
|
25
|
+
PLATFORMS
|
26
|
+
ruby
|
27
|
+
|
28
|
+
DEPENDENCIES
|
29
|
+
jaeger-client!
|
30
|
+
rack
|
31
|
+
sinatra
|
32
|
+
webrick (~> 1.4.2)
|
33
|
+
|
34
|
+
BUNDLED WITH
|
35
|
+
1.16.2
|
@@ -0,0 +1,68 @@
|
|
1
|
+
version: '2'
|
2
|
+
|
3
|
+
services:
|
4
|
+
crossdock:
|
5
|
+
image: crossdock/crossdock
|
6
|
+
links:
|
7
|
+
- test_driver
|
8
|
+
- go
|
9
|
+
- python
|
10
|
+
- java
|
11
|
+
- ruby
|
12
|
+
environment:
|
13
|
+
- WAIT_FOR=test_driver,go,python,java,ruby
|
14
|
+
- WAIT_FOR_TIMEOUT=60s
|
15
|
+
|
16
|
+
- CALL_TIMEOUT=60s
|
17
|
+
|
18
|
+
- AXIS_CLIENT=go
|
19
|
+
|
20
|
+
- AXIS_S1NAME=go,python,java,ruby
|
21
|
+
- AXIS_SAMPLED=true,false
|
22
|
+
- AXIS_S2NAME=go,python,java,ruby
|
23
|
+
- AXIS_S2TRANSPORT=http
|
24
|
+
- AXIS_S3NAME=go,python,java,ruby
|
25
|
+
- AXIS_S3TRANSPORT=http
|
26
|
+
|
27
|
+
- BEHAVIOR_TRACE=client,s1name,sampled,s2name,s2transport,s3name,s3transport
|
28
|
+
|
29
|
+
- AXIS_TESTDRIVER=test_driver
|
30
|
+
- AXIS_SERVICES=ruby
|
31
|
+
|
32
|
+
- BEHAVIOR_ENDTOEND=testdriver,services
|
33
|
+
|
34
|
+
- REPORT=compact
|
35
|
+
go:
|
36
|
+
image: jaegertracing/xdock-go
|
37
|
+
ports:
|
38
|
+
- "8080-8082"
|
39
|
+
|
40
|
+
java:
|
41
|
+
image: jaegertracing/xdock-java
|
42
|
+
depends_on:
|
43
|
+
- jaeger-agent
|
44
|
+
ports:
|
45
|
+
- "8080-8082"
|
46
|
+
|
47
|
+
python:
|
48
|
+
image: jaegertracing/xdock-py
|
49
|
+
depends_on:
|
50
|
+
- jaeger-agent
|
51
|
+
ports:
|
52
|
+
- "8080-8082"
|
53
|
+
|
54
|
+
ruby:
|
55
|
+
build:
|
56
|
+
context: ../.
|
57
|
+
dockerfile: crossdock/Dockerfile
|
58
|
+
ports:
|
59
|
+
- "8080-8082"
|
60
|
+
|
61
|
+
test_driver:
|
62
|
+
image: jaegertracing/test-driver
|
63
|
+
depends_on:
|
64
|
+
- jaeger-query
|
65
|
+
- jaeger-collector
|
66
|
+
- jaeger-agent
|
67
|
+
ports:
|
68
|
+
- "8080"
|
@@ -0,0 +1,48 @@
|
|
1
|
+
version: '2'
|
2
|
+
|
3
|
+
services:
|
4
|
+
jaeger-collector:
|
5
|
+
image: jaegertracing/jaeger-collector
|
6
|
+
command: ["--cassandra.keyspace=jaeger_v1_dc1", "--cassandra.servers=cassandra", "--collector.zipkin.http-port=9411"]
|
7
|
+
ports:
|
8
|
+
- "14269"
|
9
|
+
- "14268:14268"
|
10
|
+
- "14267"
|
11
|
+
- "14250"
|
12
|
+
- "9411:9411"
|
13
|
+
restart: on-failure
|
14
|
+
depends_on:
|
15
|
+
- cassandra-schema
|
16
|
+
|
17
|
+
jaeger-query:
|
18
|
+
image: jaegertracing/jaeger-query
|
19
|
+
command: ["--cassandra.keyspace=jaeger_v1_dc1", "--cassandra.servers=cassandra"]
|
20
|
+
ports:
|
21
|
+
- "16686:16686"
|
22
|
+
- "16687"
|
23
|
+
restart: on-failure
|
24
|
+
depends_on:
|
25
|
+
- cassandra-schema
|
26
|
+
|
27
|
+
jaeger-agent:
|
28
|
+
image: jaegertracing/jaeger-agent
|
29
|
+
# FIXME temporarily switching back to tchannel
|
30
|
+
# https://github.com/jaegertracing/jaeger/issues/1229
|
31
|
+
command: ["--reporter.tchannel.host-port=jaeger-collector:14267"]
|
32
|
+
ports:
|
33
|
+
- "5775:5775/udp"
|
34
|
+
- "6831:6831/udp"
|
35
|
+
- "6832:6832/udp"
|
36
|
+
- "5778:5778"
|
37
|
+
restart: on-failure
|
38
|
+
depends_on:
|
39
|
+
- jaeger-collector
|
40
|
+
|
41
|
+
cassandra:
|
42
|
+
image: cassandra:3.9
|
43
|
+
|
44
|
+
cassandra-schema:
|
45
|
+
image: jaegertracing/jaeger-cassandra-schema
|
46
|
+
depends_on:
|
47
|
+
- cassandra
|
48
|
+
|
data/crossdock/rules.mk
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
XDOCK_YAML=crossdock/docker-compose.yml
|
2
|
+
TRACETEST_THRIFT=idl/thrift/crossdock/tracetest.thrift
|
3
|
+
JAEGER_COMPOSE_URL=https://raw.githubusercontent.com/jaegertracing/jaeger/master/crossdock/jaeger-docker-compose.yml
|
4
|
+
XDOCK_JAEGER_YAML=crossdock/jaeger-docker-compose.yml
|
5
|
+
|
6
|
+
.PHONY: clean-compile
|
7
|
+
clean-compile:
|
8
|
+
find . -name '*.pyc' -exec rm {} \;
|
9
|
+
|
10
|
+
.PHONY: docker
|
11
|
+
docker: clean-compile crossdock-download-jaeger
|
12
|
+
docker build -f crossdock/Dockerfile -t jaeger-client-ruby .
|
13
|
+
|
14
|
+
.PHONY: crossdock
|
15
|
+
crossdock: ${TRACETEST_THRIFT} crossdock-download-jaeger
|
16
|
+
docker-compose -f $(XDOCK_YAML) -f $(XDOCK_JAEGER_YAML) kill ruby
|
17
|
+
docker-compose -f $(XDOCK_YAML) -f $(XDOCK_JAEGER_YAML) rm -f ruby
|
18
|
+
docker-compose -f $(XDOCK_YAML) -f $(XDOCK_JAEGER_YAML) build ruby
|
19
|
+
docker-compose -f $(XDOCK_YAML) -f $(XDOCK_JAEGER_YAML) run crossdock
|
20
|
+
|
21
|
+
.PHONY: crossdock-fresh
|
22
|
+
crossdock-fresh: ${TRACETEST_THRIFT} crossdock-download-jaeger
|
23
|
+
docker-compose -f $(XDOCK_YAML) -f $(XDOCK_JAEGER_YAML) kill
|
24
|
+
docker-compose -f $(XDOCK_YAML) -f $(XDOCK_JAEGER_YAML) rm --force
|
25
|
+
docker-compose -f $(XDOCK_YAML) -f $(XDOCK_JAEGER_YAML) pull
|
26
|
+
docker-compose -f $(XDOCK_YAML) -f $(XDOCK_JAEGER_YAML) build
|
27
|
+
docker-compose -f $(XDOCK_YAML) -f $(XDOCK_JAEGER_YAML) run crossdock
|
28
|
+
|
29
|
+
.PHONY: crossdock-logs crossdock-download-jaeger
|
30
|
+
crossdock-logs:
|
31
|
+
docker-compose -f $(XDOCK_YAML) -f $(XDOCK_JAEGER_YAML) logs
|
32
|
+
|
33
|
+
.PHONY: crossdock-download-jaeger
|
34
|
+
crossdock-download-jaeger:
|
35
|
+
curl -o $(XDOCK_JAEGER_YAML) $(JAEGER_COMPOSE_URL)
|
data/crossdock/server
ADDED
@@ -0,0 +1,173 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$stdout.sync = true
|
4
|
+
|
5
|
+
require 'sinatra/base'
|
6
|
+
require 'webrick'
|
7
|
+
require 'jaeger/client'
|
8
|
+
require 'net/http'
|
9
|
+
require 'uri'
|
10
|
+
|
11
|
+
class HealthServer < Sinatra::Application
|
12
|
+
get '/' do
|
13
|
+
status 200
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class HttpServer < Sinatra::Application
|
18
|
+
post '/start_trace' do
|
19
|
+
puts "Got request to start trace: #{trace_request}"
|
20
|
+
|
21
|
+
parent_context = tracer.extract(OpenTracing::FORMAT_RACK, request.env)
|
22
|
+
server_span = tracer.start_span('/start_trace', child_of: parent_context)
|
23
|
+
|
24
|
+
server_span.set_baggage_item('crossdock-baggage-key', trace_request['baggage'])
|
25
|
+
if trace_request.key?('sampled')
|
26
|
+
server_span.set_tag('sampling.priority', trace_request['sampled'] ? 1 : 0)
|
27
|
+
end
|
28
|
+
|
29
|
+
response = {
|
30
|
+
span: observe_span(server_span),
|
31
|
+
notImplementedError: ''
|
32
|
+
}
|
33
|
+
|
34
|
+
if trace_request['downstream']
|
35
|
+
downstream = trace_request['downstream']
|
36
|
+
transport = downstream['transport']
|
37
|
+
|
38
|
+
response[:downstream] =
|
39
|
+
if transport == 'HTTP'
|
40
|
+
call_downstream_http(downstream, server_span)
|
41
|
+
elsif transport == 'DUMMY'
|
42
|
+
{ notImplementedError: 'Dummy has not been implemented' }
|
43
|
+
else
|
44
|
+
{ notImplementedError: "Unrecognized transport received: #{transport}" }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
puts "Response: #{response}"
|
49
|
+
|
50
|
+
server_span.finish
|
51
|
+
body JSON.dump(response)
|
52
|
+
end
|
53
|
+
|
54
|
+
post '/join_trace' do
|
55
|
+
puts 'Got request to join trace' \
|
56
|
+
"\n Params: #{trace_request}" \
|
57
|
+
"\n Headers: #{request_headers(request)}"
|
58
|
+
|
59
|
+
parent_context = tracer.extract(OpenTracing::FORMAT_RACK, request.env)
|
60
|
+
server_span = tracer.start_span('/join_trace', child_of: parent_context)
|
61
|
+
|
62
|
+
response = {
|
63
|
+
span: observe_span(server_span),
|
64
|
+
notImplementedError: ''
|
65
|
+
}
|
66
|
+
|
67
|
+
if trace_request['downstream']
|
68
|
+
downstream = trace_request['downstream']
|
69
|
+
transport = downstream['transport']
|
70
|
+
|
71
|
+
response[:downstream] =
|
72
|
+
if transport == 'HTTP'
|
73
|
+
call_downstream_http(downstream, server_span)
|
74
|
+
elsif transport == 'DUMMY'
|
75
|
+
{ notImplementedError: 'Dummy has not been implemented' }
|
76
|
+
else
|
77
|
+
{ notImplementedError: "Unrecognized transport received: #{transport}" }
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
puts "Response: #{response}"
|
82
|
+
|
83
|
+
server_span.finish
|
84
|
+
body JSON.dump(response)
|
85
|
+
end
|
86
|
+
|
87
|
+
post '/create_traces' do
|
88
|
+
puts "Got request to create traces: #{trace_request}"
|
89
|
+
|
90
|
+
trace_request['count'].times do
|
91
|
+
span = tracer.start_span(trace_request['operation'], tags: trace_request['tags'])
|
92
|
+
span.finish
|
93
|
+
end
|
94
|
+
|
95
|
+
status 200
|
96
|
+
end
|
97
|
+
|
98
|
+
private
|
99
|
+
|
100
|
+
def tracer
|
101
|
+
@tracer ||= Jaeger::Client.build(
|
102
|
+
service_name: 'crossdock-ruby',
|
103
|
+
host: 'jaeger-agent',
|
104
|
+
port: 6831,
|
105
|
+
flush_interval: 1,
|
106
|
+
sampler: Jaeger::Client::Samplers::Const.new(true)
|
107
|
+
)
|
108
|
+
end
|
109
|
+
|
110
|
+
def trace_request
|
111
|
+
@trace_request ||= begin
|
112
|
+
request.body.rewind
|
113
|
+
JSON.parse(request.body.read)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def observe_span(span)
|
118
|
+
if span
|
119
|
+
{
|
120
|
+
traceId: span.context.to_trace_id,
|
121
|
+
sampled: span.context.sampled?,
|
122
|
+
baggage: span.get_baggage_item('crossdock-baggage-key')
|
123
|
+
}
|
124
|
+
else
|
125
|
+
{
|
126
|
+
traceId: 'no span found',
|
127
|
+
sampled: false,
|
128
|
+
baggage: 'no span found'
|
129
|
+
}
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def call_downstream_http(downstream, server_span)
|
134
|
+
downstream_url = "http://#{downstream['host']}:#{downstream['port']}/join_trace"
|
135
|
+
|
136
|
+
client_span = tracer.start_span('client-span', child_of: server_span)
|
137
|
+
|
138
|
+
headers = { 'Content-Type' => 'application/json' }
|
139
|
+
tracer.inject(client_span.context, OpenTracing::FORMAT_RACK, headers)
|
140
|
+
|
141
|
+
response = Net::HTTP.post(
|
142
|
+
URI(downstream_url),
|
143
|
+
JSON.dump(
|
144
|
+
serverRole: downstream['serverRole'],
|
145
|
+
downstream: downstream['downstream']
|
146
|
+
),
|
147
|
+
headers
|
148
|
+
)
|
149
|
+
|
150
|
+
client_span.finish
|
151
|
+
|
152
|
+
if response.is_a?(Net::HTTPSuccess)
|
153
|
+
JSON.parse(response.body)
|
154
|
+
else
|
155
|
+
{ error: response.body }
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
def request_headers(request)
|
160
|
+
request.env.select do |key, _value|
|
161
|
+
key.start_with?('HTTP_')
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
threads = []
|
167
|
+
threads << Thread.new do
|
168
|
+
Rack::Handler::WEBrick.run(HealthServer, Port: 8080, Host: '0.0.0.0')
|
169
|
+
end
|
170
|
+
threads << Thread.new do
|
171
|
+
Rack::Handler::WEBrick.run(HttpServer, Port: 8081, Host: '0.0.0.0')
|
172
|
+
end
|
173
|
+
threads.each(&:join)
|
@@ -8,21 +8,12 @@ module Jaeger
|
|
8
8
|
module Client
|
9
9
|
class AsyncReporter
|
10
10
|
def self.create(sender:, flush_interval:)
|
11
|
-
|
12
|
-
|
13
|
-
# start flush thread
|
14
|
-
Thread.new do
|
15
|
-
loop do
|
16
|
-
reporter.flush
|
17
|
-
sleep(flush_interval)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
reporter
|
11
|
+
new(sender, flush_interval)
|
22
12
|
end
|
23
13
|
|
24
|
-
def initialize(sender)
|
14
|
+
def initialize(sender, flush_interval)
|
25
15
|
@sender = sender
|
16
|
+
@flush_interval = flush_interval
|
26
17
|
@buffer = Buffer.new
|
27
18
|
end
|
28
19
|
|
@@ -34,8 +25,24 @@ module Jaeger
|
|
34
25
|
|
35
26
|
def report(span)
|
36
27
|
return if !span.context.sampled? && !span.context.debug?
|
28
|
+
|
29
|
+
init_reporter_thread
|
37
30
|
@buffer << span
|
38
31
|
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def init_reporter_thread
|
36
|
+
return if @initializer_pid == Process.pid
|
37
|
+
|
38
|
+
@initializer_pid = Process.pid
|
39
|
+
Thread.new do
|
40
|
+
loop do
|
41
|
+
flush
|
42
|
+
sleep(@flush_interval)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
39
46
|
end
|
40
47
|
end
|
41
48
|
end
|
@@ -24,13 +24,36 @@ module Jaeger
|
|
24
24
|
|
25
25
|
class JaegerTextMapCodec
|
26
26
|
def self.extract(carrier)
|
27
|
-
SerializedJaegerTrace.parse(carrier['uber-trace-id'])
|
27
|
+
context = SerializedJaegerTrace.parse(carrier['uber-trace-id'])
|
28
|
+
return nil unless context
|
29
|
+
|
30
|
+
carrier.each do |key, value|
|
31
|
+
baggage_match = key.match(/\Auberctx-([\w-]+)\Z/)
|
32
|
+
if baggage_match
|
33
|
+
context.set_baggage_item(baggage_match[1], value)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context
|
28
38
|
end
|
29
39
|
end
|
30
40
|
|
31
41
|
class JaegerRackCodec
|
32
42
|
def self.extract(carrier)
|
33
|
-
|
43
|
+
serialized_trace = carrier['HTTP_UBER_TRACE_ID']
|
44
|
+
serialized_trace = CGI.unescape(serialized_trace) if serialized_trace
|
45
|
+
context = SerializedJaegerTrace.parse(serialized_trace)
|
46
|
+
return nil unless context
|
47
|
+
|
48
|
+
carrier.each do |key, value|
|
49
|
+
baggage_match = key.match(/\AHTTP_UBERCTX_(\w+)\Z/)
|
50
|
+
if baggage_match
|
51
|
+
key = baggage_match[1].downcase.tr('_', '-')
|
52
|
+
context.set_baggage_item(key, value)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context
|
34
57
|
end
|
35
58
|
end
|
36
59
|
|
@@ -3,14 +3,31 @@
|
|
3
3
|
module Jaeger
|
4
4
|
module Client
|
5
5
|
module Injectors
|
6
|
+
def self.context_as_jaeger_string(span_context)
|
7
|
+
[
|
8
|
+
span_context.trace_id.to_s(16),
|
9
|
+
span_context.span_id.to_s(16),
|
10
|
+
span_context.parent_id.to_s(16),
|
11
|
+
span_context.flags.to_s(16)
|
12
|
+
].join(':')
|
13
|
+
end
|
14
|
+
|
6
15
|
class JaegerTextMapCodec
|
7
16
|
def self.inject(span_context, carrier)
|
8
|
-
carrier['uber-trace-id'] =
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
17
|
+
carrier['uber-trace-id'] = Injectors.context_as_jaeger_string(span_context)
|
18
|
+
span_context.baggage.each do |key, value|
|
19
|
+
carrier["uberctx-#{key}"] = value
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class JaegerRackCodec
|
25
|
+
def self.inject(span_context, carrier)
|
26
|
+
carrier['uber-trace-id'] =
|
27
|
+
CGI.escape(Injectors.context_as_jaeger_string(span_context))
|
28
|
+
span_context.baggage.each do |key, value|
|
29
|
+
carrier["uberctx-#{key}"] = value
|
30
|
+
end
|
14
31
|
end
|
15
32
|
end
|
16
33
|
|
@@ -38,7 +55,7 @@ module Jaeger
|
|
38
55
|
DEFAULT_INJECTORS = {
|
39
56
|
OpenTracing::FORMAT_TEXT_MAP => JaegerTextMapCodec,
|
40
57
|
OpenTracing::FORMAT_BINARY => JaegerBinaryCodec,
|
41
|
-
OpenTracing::FORMAT_RACK =>
|
58
|
+
OpenTracing::FORMAT_RACK => JaegerRackCodec
|
42
59
|
}.freeze
|
43
60
|
|
44
61
|
def self.prepare(extractors)
|
data/lib/jaeger/client/span.rb
CHANGED
@@ -23,8 +23,10 @@ module Jaeger
|
|
23
23
|
@reporter = reporter
|
24
24
|
@start_time = start_time
|
25
25
|
@references = references
|
26
|
-
@tags =
|
26
|
+
@tags = []
|
27
27
|
@logs = []
|
28
|
+
|
29
|
+
tags.each { |key, value| set_tag(key, value) }
|
28
30
|
end
|
29
31
|
|
30
32
|
# Set a tag value on this span
|
@@ -33,8 +35,21 @@ module Jaeger
|
|
33
35
|
# @param value [String, Numeric, Boolean] the value of the tag. If it's not
|
34
36
|
# a String, Numeric, or Boolean it will be encoded with to_s
|
35
37
|
def set_tag(key, value)
|
38
|
+
if key == 'sampling.priority'
|
39
|
+
if value.to_i > 0
|
40
|
+
return self if @context.debug?
|
41
|
+
|
42
|
+
@context.flags = @context.flags | SpanContext::Flags::SAMPLED | SpanContext::Flags::DEBUG
|
43
|
+
else
|
44
|
+
@context.flags = @context.flags & ~SpanContext::Flags::SAMPLED
|
45
|
+
end
|
46
|
+
return self
|
47
|
+
end
|
48
|
+
|
36
49
|
# Using Thrift::Tag to avoid unnecessary memory allocations
|
37
50
|
@tags << ThriftTagBuilder.build(key, value)
|
51
|
+
|
52
|
+
self
|
38
53
|
end
|
39
54
|
|
40
55
|
# Set a baggage item on the span
|
@@ -42,6 +57,7 @@ module Jaeger
|
|
42
57
|
# @param key [String] the key of the baggage item
|
43
58
|
# @param value [String] the value of the baggage item
|
44
59
|
def set_baggage_item(key, value)
|
60
|
+
@context.set_baggage_item(key, value)
|
45
61
|
self
|
46
62
|
end
|
47
63
|
|
@@ -51,7 +67,7 @@ module Jaeger
|
|
51
67
|
#
|
52
68
|
# @return Value of the baggage item
|
53
69
|
def get_baggage_item(key)
|
54
|
-
|
70
|
+
@context.get_baggage_item(key)
|
55
71
|
end
|
56
72
|
|
57
73
|
# Add a log entry to this span
|
@@ -18,14 +18,17 @@ module Jaeger
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.create_from_parent_context(span_context)
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
new(
|
22
|
+
trace_id: span_context.trace_id,
|
23
|
+
parent_id: span_context.span_id,
|
24
|
+
span_id: TraceId.generate,
|
25
|
+
flags: span_context.flags,
|
26
|
+
baggage: span_context.baggage.dup
|
27
|
+
)
|
26
28
|
end
|
27
29
|
|
28
30
|
attr_reader :span_id, :parent_id, :trace_id, :baggage, :flags
|
31
|
+
attr_writer :flags
|
29
32
|
|
30
33
|
def initialize(span_id:, parent_id: 0, trace_id:, flags:, baggage: {})
|
31
34
|
@span_id = span_id
|
@@ -47,13 +50,17 @@ module Jaeger
|
|
47
50
|
@to_trace_id ||= @trace_id.to_s(16)
|
48
51
|
end
|
49
52
|
|
50
|
-
def to_parent_id
|
51
|
-
@to_parent_id ||= @parent_id.zero? ? nil : @parent_id.to_s(16)
|
52
|
-
end
|
53
|
-
|
54
53
|
def to_span_id
|
55
54
|
@to_span_id ||= @span_id.to_s(16)
|
56
55
|
end
|
56
|
+
|
57
|
+
def set_baggage_item(key, value)
|
58
|
+
@baggage[key.to_s] = value.to_s
|
59
|
+
end
|
60
|
+
|
61
|
+
def get_baggage_item(key)
|
62
|
+
@baggage[key.to_s]
|
63
|
+
end
|
57
64
|
end
|
58
65
|
end
|
59
66
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jaeger-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.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: 2018-12-
|
11
|
+
date: 2018-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -116,15 +116,24 @@ extensions: []
|
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
118
|
- ".gitignore"
|
119
|
+
- ".gitmodules"
|
119
120
|
- ".rspec"
|
120
121
|
- ".rubocop.yml"
|
121
122
|
- ".travis.yml"
|
122
123
|
- Gemfile
|
123
124
|
- LICENSE.txt
|
125
|
+
- Makefile
|
124
126
|
- README.md
|
125
127
|
- Rakefile
|
126
128
|
- bin/console
|
127
129
|
- bin/setup
|
130
|
+
- crossdock/Dockerfile
|
131
|
+
- crossdock/Gemfile
|
132
|
+
- crossdock/Gemfile.lock
|
133
|
+
- crossdock/docker-compose.yml
|
134
|
+
- crossdock/jaeger-docker-compose.yml
|
135
|
+
- crossdock/rules.mk
|
136
|
+
- crossdock/server
|
128
137
|
- jaeger-client.gemspec
|
129
138
|
- lib/jaeger/client.rb
|
130
139
|
- lib/jaeger/client/async_reporter.rb
|