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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 447a7b165ab77c10cd4d758f2e1ba0328251d9fd143966f406dd0a726d8c2ce0
4
- data.tar.gz: 6fce14b5c113ef4ad60e917d5085ecead91f00ce2a6baaf05878026f2ff04bcb
3
+ metadata.gz: 46d05119eb9543907c6e1182a80346da57b634623425a4eeb74e06d637b73799
4
+ data.tar.gz: 171cdd21fd1872db8d1adef226e901dffd595ed7eab76f8c99f902363b638f9d
5
5
  SHA512:
6
- metadata.gz: fc5eac14ee4471ac96daec09e5a5bd84a9e9ef86133480339d91e7490bc13b82fa127d3421036fc22c41c0dc49542cef5a6327c8fbab88f17b7bce3a117ee880
7
- data.tar.gz: b4df5beac2b6ff98ee6153e802edebc352de7b872105c9be332ddf5ad34b4818fce489aa987800f88f211505750146cd083d58709058b6d9d8204c6902a94447
6
+ metadata.gz: 756a18ecf9e931670df3a9058613a5af99a2391eceabfc7c7fdeea5a1371c12757f818fd71e8616d96aa3a544dc0a0cb7728d22b9f4ae7dfb62863f7f37f1c4e
7
+ data.tar.gz: e89a5e9ff633cca38e030b31cd7a9df68bfa7bcbebfbd5f68ad61a663d04ade3c517465e2b8fcc707afe80696d2aad330ac51caf14a32551788b08322cd4ee4b
@@ -0,0 +1,3 @@
1
+ [submodule "idl"]
2
+ path = idl
3
+ url = https://github.com/jaegertracing/jaeger-idl.git
@@ -1,5 +1,14 @@
1
1
  sudo: false
2
+
2
3
  language: ruby
3
4
  rvm:
4
- - 2.4.0
5
- before_install: gem install bundler -v 1.14.4
5
+ - 2.5.0
6
+
7
+ services:
8
+ - docker
9
+
10
+ before_install: gem install bundler -v 1.17.2
11
+
12
+ script:
13
+ - bundle exec rake
14
+ - make crossdock
@@ -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
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'jaeger-client', path: '../'
4
+ gem 'rack'
5
+ gem 'sinatra'
6
+ gem 'webrick', '~> 1.4.2'
@@ -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
+
@@ -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)
@@ -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
- reporter = new(sender)
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
- SerializedJaegerTrace.parse(carrier['HTTP_UBER_TRACE_ID'])
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
- span_context.trace_id.to_s(16),
10
- span_context.span_id.to_s(16),
11
- span_context.parent_id.to_s(16),
12
- span_context.flags.to_s(16)
13
- ].join(':')
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 => JaegerTextMapCodec
58
+ OpenTracing::FORMAT_RACK => JaegerRackCodec
42
59
  }.freeze
43
60
 
44
61
  def self.prepare(extractors)
@@ -23,8 +23,10 @@ module Jaeger
23
23
  @reporter = reporter
24
24
  @start_time = start_time
25
25
  @references = references
26
- @tags = tags.map { |key, value| ThriftTagBuilder.build(key, value) }
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
- nil
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
- trace_id = span_context.trace_id
22
- parent_id = span_context.span_id
23
- flags = span_context.flags
24
- span_id = TraceId.generate
25
- new(span_id: span_id, parent_id: parent_id, trace_id: trace_id, flags: flags)
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jaeger
4
4
  module Client
5
- VERSION = '0.7.1'.freeze
5
+ VERSION = '0.8.0'.freeze
6
6
  end
7
7
  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.7.1
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-16 00:00:00.000000000 Z
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