jaeger-client 1.1.0 → 1.2.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: 042e36b2c3502fb1fe7f8c0d42bd1e5130a3adc2d1bce002c466fc0374c4d6c6
4
- data.tar.gz: a95a574d111ecdd1625bd760603dba7b766b748608a77ddba6c4ada33a94e4aa
3
+ metadata.gz: c9acf3d6450f30aa6ddf02e5a47bf62fe6d2802445b376c251dc420b4405da36
4
+ data.tar.gz: e2f0af41bae0a213f37fabe7b156d5cdbd2bf594b83ade21f3308d9d495d677c
5
5
  SHA512:
6
- metadata.gz: 6d63a549e13b8ca7779860c6f5dab455894690efe49ad2d6c5beb85ddf0775bbedf5c4030ba8fa6e2062cf5cf627507cc49c46e1faa0ee886edfaff480b578d0
7
- data.tar.gz: af363f9831e2219053d260a9d120cebfc6bec8fa90d5b236351051a48c70203531a62a63783b9cf99417449e9762197462177c57f8f183340db5bd7755582af9
6
+ metadata.gz: '018ba85f2a2474b9869aade057869105070fb8595cea550971574913e8d72023c1ce186e7a56d421eb819ce312c60edec9570dde18441b34c6b24228ecc31cf7'
7
+ data.tar.gz: b173b4ffebafd6f685cdf1c1fdb1ddd2205ab54b664b86e318c8f8dd74c415fecec8cb8150d8fbb79a4c83e3ca2bc8e93a59a757626c5a11106a33b095005c64
@@ -0,0 +1,31 @@
1
+ name: Ruby
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ ruby-version: ['2.7.2', '3.0']
15
+
16
+ services:
17
+ postgres:
18
+ image: docker
19
+ steps:
20
+ - uses: actions/checkout@v2
21
+ with:
22
+ submodules: true
23
+ - name: Set up Ruby
24
+ uses: ruby/setup-ruby@v1
25
+ with:
26
+ ruby-version: ${{ matrix.ruby-version }}
27
+ bundler-cache: true
28
+ - name: Run tests
29
+ run: bundle exec rake
30
+ - name: Run crossdock
31
+ run: make crossdock
data/.rubocop.yml CHANGED
@@ -3,6 +3,9 @@ require: rubocop-rspec
3
3
  AllCops:
4
4
  Exclude:
5
5
  - 'thrift/**/*'
6
+ - 'vendor/bundle/**/*'
7
+ NewCops: enable
8
+ TargetRubyVersion: '2.7'
6
9
 
7
10
  Style/Documentation:
8
11
  Enabled: no
@@ -19,6 +22,9 @@ RSpec/ExampleLength:
19
22
  RSpec/MultipleExpectations:
20
23
  Enabled: no
21
24
 
25
+ RSpec/MultipleMemoizedHelpers:
26
+ Enabled: no
27
+
22
28
  RSpec/MessageSpies:
23
29
  Enabled: no
24
30
 
@@ -46,7 +52,7 @@ Style/FrozenStringLiteralComment:
46
52
  Include:
47
53
  - 'lib/**/*'
48
54
 
49
- Metrics/LineLength:
55
+ Layout/LineLength:
50
56
  Max: 120
51
57
 
52
58
  Style/SingleLineMethods:
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  Jaeger::Client
2
2
  ================
3
3
  [![Gem Version](https://badge.fury.io/rb/jaeger-client.svg)](https://rubygems.org/gems/jaeger-client)
4
- [![Build Status](https://travis-ci.org/salemove/jaeger-client-ruby.svg)](https://travis-ci.org/salemove/jaeger-client-ruby)
4
+ [![Build Status](https://github.com/salemove/jaeger-client-ruby/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/salemove/jaeger-client-ruby/actions/workflows/ci.yml?query=branch%3Amaster)
5
5
 
6
6
  OpenTracing Tracer implementation for Jaeger in Ruby
7
7
 
@@ -26,6 +26,9 @@ OpenTracing.start_active_span('span name') do
26
26
  # do something else
27
27
  end
28
28
  end
29
+
30
+ # don't kill the program too soon, allow time for the background reporter to send the traces
31
+ sleep 2
29
32
  ```
30
33
 
31
34
  See [opentracing-ruby](https://github.com/opentracing/opentracing-ruby) for more examples.
data/crossdock/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM ruby:2.5-alpine
1
+ FROM ruby:2.7-alpine
2
2
 
3
3
  ENV APP_HOME /app
4
4
 
@@ -12,6 +12,8 @@ ADD Gemfile Gemfile.lock jaeger-client.gemspec $APP_HOME/
12
12
  ADD lib/jaeger/client/version.rb $APP_HOME/lib/jaeger/client/
13
13
  ADD crossdock/Gemfile crossdock/Gemfile.lock $APP_HOME/crossdock/
14
14
 
15
+ RUN gem install bundler -v $(tail -n 1 $APP_HOME/Gemfile.lock | awk '{$1=$1};1')
16
+
15
17
  RUN apk add --no-cache --virtual .app-builddeps build-base \
16
18
  && cd $APP_HOME && bundle install \
17
19
  && cd $APP_HOME/crossdock && bundle install \
@@ -1,26 +1,28 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- jaeger-client (0.7.1)
4
+ jaeger-client (1.1.0)
5
5
  opentracing (~> 0.3)
6
6
  thrift
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- mustermann (1.0.3)
12
- opentracing (0.4.3)
13
- rack (2.0.6)
14
- rack-protection (2.0.4)
11
+ mustermann (1.1.1)
12
+ ruby2_keywords (~> 0.0.1)
13
+ opentracing (0.5.0)
14
+ rack (2.2.3)
15
+ rack-protection (2.1.0)
15
16
  rack
16
- sinatra (2.0.4)
17
+ ruby2_keywords (0.0.4)
18
+ sinatra (2.1.0)
17
19
  mustermann (~> 1.0)
18
- rack (~> 2.0)
19
- rack-protection (= 2.0.4)
20
+ rack (~> 2.2)
21
+ rack-protection (= 2.1.0)
20
22
  tilt (~> 2.0)
21
- thrift (0.11.0.0)
22
- tilt (2.0.9)
23
- webrick (1.4.2)
23
+ thrift (0.14.0)
24
+ tilt (2.0.10)
25
+ webrick (1.4.4)
24
26
 
25
27
  PLATFORMS
26
28
  ruby
@@ -32,4 +34,4 @@ DEPENDENCIES
32
34
  webrick (~> 1.4.2)
33
35
 
34
36
  BUNDLED WITH
35
- 1.16.2
37
+ 2.2.15
@@ -3,46 +3,51 @@ version: '2'
3
3
  services:
4
4
  jaeger-collector:
5
5
  image: jaegertracing/jaeger-collector
6
- command: ["--cassandra.keyspace=jaeger_v1_dc1", "--cassandra.servers=cassandra", "--collector.zipkin.http-port=9411"]
6
+ command: ["--es.num-shards=1", "--es.num-replicas=0", "--es.server-urls=http://elasticsearch:9200", "--collector.zipkin.host-port=:9411"]
7
7
  ports:
8
8
  - "14269"
9
9
  - "14268:14268"
10
- - "14267"
11
10
  - "14250"
12
11
  - "9411:9411"
12
+ environment:
13
+ - SPAN_STORAGE_TYPE=elasticsearch
14
+ - LOG_LEVEL=debug
13
15
  restart: on-failure
14
16
  depends_on:
15
- - cassandra-schema
17
+ - elasticsearch
16
18
 
17
19
  jaeger-query:
18
20
  image: jaegertracing/jaeger-query
19
- command: ["--cassandra.keyspace=jaeger_v1_dc1", "--cassandra.servers=cassandra"]
21
+ command: ["--es.num-shards=1", "--es.num-replicas=0", "--es.server-urls=http://elasticsearch:9200"]
20
22
  ports:
21
23
  - "16686:16686"
22
24
  - "16687"
25
+ environment:
26
+ - SPAN_STORAGE_TYPE=elasticsearch
27
+ - LOG_LEVEL=debug
23
28
  restart: on-failure
24
29
  depends_on:
25
- - cassandra-schema
30
+ - elasticsearch
26
31
 
27
32
  jaeger-agent:
28
33
  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"]
34
+ command: ["--reporter.grpc.host-port=jaeger-collector:14250", "--reporter.grpc.retry.max=1000"]
32
35
  ports:
33
36
  - "5775:5775/udp"
34
37
  - "6831:6831/udp"
35
38
  - "6832:6832/udp"
36
39
  - "5778:5778"
40
+ environment:
41
+ - LOG_LEVEL=debug
37
42
  restart: on-failure
38
43
  depends_on:
39
44
  - jaeger-collector
40
45
 
41
- cassandra:
42
- image: cassandra:3.9
46
+ elasticsearch:
47
+ image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.8.3
48
+ environment:
49
+ - discovery.type=single-node
50
+ ports:
51
+ - "9200:9200/tcp"
43
52
 
44
- cassandra-schema:
45
- image: jaegertracing/jaeger-cassandra-schema
46
- depends_on:
47
- - cassandra
48
53
 
data/crossdock/server CHANGED
@@ -36,9 +36,10 @@ class HttpServer < Sinatra::Application
36
36
  transport = downstream['transport']
37
37
 
38
38
  response[:downstream] =
39
- if transport == 'HTTP'
39
+ case transport
40
+ when 'HTTP'
40
41
  call_downstream_http(downstream, server_span)
41
- elsif transport == 'DUMMY'
42
+ when 'DUMMY'
42
43
  { notImplementedError: 'Dummy has not been implemented' }
43
44
  else
44
45
  { notImplementedError: "Unrecognized transport received: #{transport}" }
@@ -69,9 +70,10 @@ class HttpServer < Sinatra::Application
69
70
  transport = downstream['transport']
70
71
 
71
72
  response[:downstream] =
72
- if transport == 'HTTP'
73
+ case transport
74
+ when 'HTTP'
73
75
  call_downstream_http(downstream, server_span)
74
- elsif transport == 'DUMMY'
76
+ when 'DUMMY'
75
77
  { notImplementedError: 'Dummy has not been implemented' }
76
78
  else
77
79
  { notImplementedError: "Unrecognized transport received: #{transport}" }
@@ -20,13 +20,16 @@ Gem::Specification.new do |spec|
20
20
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
21
  spec.require_paths = ['lib']
22
22
 
23
+ spec.required_ruby_version = ['>= 2.7', '< 3.1']
24
+
23
25
  spec.add_development_dependency 'bundler'
24
- spec.add_development_dependency 'rake', '~> 10.0'
26
+ spec.add_development_dependency 'rake', '~> 13.0'
25
27
  spec.add_development_dependency 'rspec', '~> 3.0'
26
- spec.add_development_dependency 'rubocop', '~> 0.54.0'
27
- spec.add_development_dependency 'rubocop-rspec', '~> 1.24.0'
28
+ spec.add_development_dependency 'rubocop', '~> 1.13'
29
+ spec.add_development_dependency 'rubocop-rake', '~> 0.5.1'
30
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.3'
28
31
  spec.add_development_dependency 'timecop', '~> 0.9'
29
- spec.add_development_dependency 'webmock', '~> 3.4.2'
32
+ spec.add_development_dependency 'webmock', '~> 3.4'
30
33
 
31
34
  spec.add_dependency 'opentracing', '~> 0.3'
32
35
  spec.add_dependency 'thrift'
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jaeger
4
4
  module Client
5
- VERSION = '1.1.0'.freeze
5
+ VERSION = '1.2.0'
6
6
  end
7
7
  end
data/lib/jaeger/client.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- $LOAD_PATH.push(File.dirname(__FILE__) + '/../../thrift/gen-rb')
3
+ $LOAD_PATH.push("#{File.dirname(__FILE__)}/../../thrift/gen-rb")
4
4
 
5
5
  require 'opentracing'
6
6
  require 'jaeger/thrift/agent'
@@ -43,18 +43,18 @@ module Jaeger
43
43
 
44
44
  DEFAULT_FLUSH_INTERVAL = 10
45
45
 
46
- def self.build(host: '127.0.0.1',
46
+ def self.build(service_name:,
47
+ host: '127.0.0.1',
47
48
  port: 6831,
48
- service_name:,
49
49
  flush_interval: DEFAULT_FLUSH_INTERVAL,
50
50
  sampler: Samplers::Const.new(true),
51
- logger: Logger.new(STDOUT),
51
+ logger: Logger.new($stdout),
52
52
  sender: nil,
53
53
  reporter: nil,
54
54
  injectors: {},
55
55
  extractors: {},
56
56
  tags: {})
57
- encoder = Encoders::ThriftEncoder.new(service_name: service_name, tags: tags)
57
+ encoder = Encoders::ThriftEncoder.new(service_name: service_name, tags: tags, logger: logger)
58
58
 
59
59
  if sender
60
60
  warn '[DEPRECATION] Passing `sender` directly to Jaeger::Client.build is deprecated.' \
@@ -3,8 +3,9 @@
3
3
  module Jaeger
4
4
  module Encoders
5
5
  class ThriftEncoder
6
- def initialize(service_name:, tags: {})
6
+ def initialize(service_name:, logger:, tags: {})
7
7
  @service_name = service_name
8
+ @logger = logger
8
9
  @tags = prepare_tags(tags)
9
10
  @process = Jaeger::Thrift::Process.new('serviceName' => @service_name, 'tags' => @tags)
10
11
  end
@@ -16,15 +17,27 @@ module Jaeger
16
17
  def encode_limited_size(spans, protocol_class, max_message_length)
17
18
  batches = []
18
19
  current_batch = []
19
- transport.flush
20
+ current_batch_size = 0
21
+
22
+ max_spans_length = calculate_max_spans_length(protocol_class, max_message_length)
23
+
20
24
  spans.each do |span|
21
25
  encoded_span = encode_span(span)
22
- if aggregated_span_size(encoded_span, protocol_class) > max_message_length && !current_batch.empty?
26
+ span_size = message_size(encoded_span, protocol_class)
27
+
28
+ if span_size > max_spans_length
29
+ @logger.warn("Skip span #{span.operation_name} with size #{span_size}")
30
+ next
31
+ end
32
+
33
+ if (current_batch_size + span_size) > max_spans_length
23
34
  batches << encode_batch(current_batch)
24
35
  current_batch = []
25
- transport.flush
36
+ current_batch_size = 0
26
37
  end
38
+
27
39
  current_batch << encoded_span
40
+ current_batch_size += span_size
28
41
  end
29
42
  batches << encode_batch(current_batch) unless current_batch.empty?
30
43
  batches
@@ -59,8 +72,8 @@ module Jaeger
59
72
  references.map do |ref|
60
73
  Jaeger::Thrift::SpanRef.new(
61
74
  'refType' => span_ref_type(ref.type),
62
- 'traceIdLow' => TraceId.uint64_id_to_int64(ref.context.trace_id),
63
- 'traceIdHigh' => 0,
75
+ 'traceIdLow' => TraceId.uint64_id_to_int64(trace_id_to_low(ref.context.trace_id)),
76
+ 'traceIdHigh' => TraceId.uint64_id_to_int64(trace_id_to_high(ref.context.trace_id)),
64
77
  'spanId' => TraceId.uint64_id_to_int64(ref.context.span_id)
65
78
  )
66
79
  end
@@ -87,7 +100,7 @@ module Jaeger
87
100
 
88
101
  def prepare_tags(tags)
89
102
  with_default_tags = tags.dup
90
- with_default_tags['jaeger.version'] = 'Ruby-' + Jaeger::Client::VERSION
103
+ with_default_tags['jaeger.version'] = "Ruby-#{Jaeger::Client::VERSION}"
91
104
  with_default_tags['hostname'] ||= Socket.gethostname
92
105
 
93
106
  unless with_default_tags['ip']
@@ -128,14 +141,32 @@ module Jaeger
128
141
  def close; end
129
142
  end
130
143
 
131
- def aggregated_span_size(span, protocol_class)
132
- @protocol ||= protocol_class.new(transport)
133
- span.write(@protocol)
144
+ def message_size(message, protocol_class)
145
+ transport = DummyTransport.new
146
+ protocol = protocol_class.new(transport)
147
+ message.write(protocol)
134
148
  transport.size
135
149
  end
136
150
 
137
- def transport
138
- @transport ||= DummyTransport.new
151
+ # Compact protocol have dynamic size of list header
152
+ # https://erikvanoosten.github.io/thrift-missing-specification/#_list_and_set_2
153
+ BATCH_SPANS_SIZE_WINDOW = 4
154
+
155
+ def empty_batch_size_cache
156
+ @empty_batch_size_cache ||= {}
157
+ end
158
+
159
+ def caclulate_empty_batch_size(protocol_class)
160
+ empty_batch_size_cache[protocol_class] ||=
161
+ message_size(encode_batch([]), protocol_class) + BATCH_SPANS_SIZE_WINDOW
162
+ end
163
+
164
+ def calculate_max_spans_length(protocol_class, max_message_length)
165
+ empty_batch_size = caclulate_empty_batch_size(protocol_class)
166
+ max_spans_length = max_message_length - empty_batch_size
167
+ return max_spans_length if max_spans_length.positive?
168
+
169
+ raise "Batch header have size #{empty_batch_size}, but limit #{max_message_length}"
139
170
  end
140
171
  end
141
172
  end
@@ -66,11 +66,11 @@ module Jaeger
66
66
 
67
67
  class B3RackCodec
68
68
  class Keys
69
- TRACE_ID = 'HTTP_X_B3_TRACEID'.freeze
70
- SPAN_ID = 'HTTP_X_B3_SPANID'.freeze
71
- PARENT_SPAN_ID = 'HTTP_X_B3_PARENTSPANID'.freeze
72
- FLAGS = 'HTTP_X_B3_FLAGS'.freeze
73
- SAMPLED = 'HTTP_X_B3_SAMPLED'.freeze
69
+ TRACE_ID = 'HTTP_X_B3_TRACEID'
70
+ SPAN_ID = 'HTTP_X_B3_SPANID'
71
+ PARENT_SPAN_ID = 'HTTP_X_B3_PARENTSPANID'
72
+ FLAGS = 'HTTP_X_B3_FLAGS'
73
+ SAMPLED = 'HTTP_X_B3_SAMPLED'
74
74
  end.freeze
75
75
 
76
76
  def self.extract(carrier)
@@ -80,11 +80,11 @@ module Jaeger
80
80
 
81
81
  class B3TextMapCodec
82
82
  class Keys
83
- TRACE_ID = 'x-b3-traceid'.freeze
84
- SPAN_ID = 'x-b3-spanid'.freeze
85
- PARENT_SPAN_ID = 'x-b3-parentspanid'.freeze
86
- FLAGS = 'x-b3-flags'.freeze
87
- SAMPLED = 'x-b3-sampled'.freeze
83
+ TRACE_ID = 'x-b3-traceid'
84
+ SPAN_ID = 'x-b3-spanid'
85
+ PARENT_SPAN_ID = 'x-b3-parentspanid'
86
+ FLAGS = 'x-b3-flags'
87
+ SAMPLED = 'x-b3-sampled'
88
88
  end.freeze
89
89
 
90
90
  def self.extract(carrier)
@@ -129,10 +129,10 @@ module Jaeger
129
129
 
130
130
  class TraceContextRackCodec
131
131
  # Internal regex used to identify the TraceContext version
132
- VERSION_PATTERN = /^([0-9a-fA-F]{2})-(.+)$/
132
+ VERSION_PATTERN = /^([0-9a-fA-F]{2})-(.+)$/.freeze
133
133
 
134
134
  # Internal regex used to parse fields in version 0
135
- HEADER_V0_PATTERN = /^([0-9a-fA-F]{32})-([0-9a-fA-F]{16})(-([0-9a-fA-F]{2}))?$/
135
+ HEADER_V0_PATTERN = /^([0-9a-fA-F]{32})-([0-9a-fA-F]{16})(-([0-9a-fA-F]{2}))?$/.freeze
136
136
 
137
137
  def self.extract(carrier)
138
138
  header_value = carrier['HTTP_TRACEPARENT']
@@ -4,7 +4,7 @@ require 'logger'
4
4
 
5
5
  module Jaeger
6
6
  class HttpSender
7
- def initialize(url:, headers: {}, encoder:, logger: Logger.new(STDOUT))
7
+ def initialize(url:, encoder:, headers: {}, logger: Logger.new($stdout))
8
8
  @encoder = encoder
9
9
  @logger = logger
10
10
 
@@ -21,8 +21,8 @@ module Jaeger
21
21
  batch = @encoder.encode(spans)
22
22
  @transport.write(@serializer.serialize(batch))
23
23
  @transport.flush
24
- rescue StandardError => error
25
- @logger.error("Failure while sending a batch of spans: #{error}")
24
+ rescue StandardError => e
25
+ @logger.error("Failure while sending a batch of spans: #{e}")
26
26
  end
27
27
  end
28
28
  end
@@ -24,7 +24,7 @@ module Jaeger
24
24
  end
25
25
 
26
26
  def running?
27
- @thread && @thread.alive?
27
+ @thread&.alive?
28
28
  end
29
29
 
30
30
  def stop
@@ -30,16 +30,16 @@ module Jaeger
30
30
  is_updated
31
31
  end
32
32
 
33
- def sample(*args)
34
- is_sampled, probabilistic_tags = @probabilistic_sampler.sample(*args)
33
+ def sample(...)
34
+ is_sampled, probabilistic_tags = @probabilistic_sampler.sample(...)
35
35
  if is_sampled
36
36
  # We still call lower_bound_sampler to update the rate limiter budget
37
- @lower_bound_sampler.sample(*args)
37
+ @lower_bound_sampler.sample(...)
38
38
 
39
39
  return [is_sampled, probabilistic_tags]
40
40
  end
41
41
 
42
- is_sampled, _tags = @lower_bound_sampler.sample(*args)
42
+ is_sampled, _tags = @lower_bound_sampler.sample(...)
43
43
  [is_sampled, @lower_bound_tags]
44
44
  end
45
45
  end
@@ -32,9 +32,7 @@ module Jaeger
32
32
  @default_sampler = Probabilistic.new(rate: @default_sampling_probability)
33
33
  end
34
34
 
35
- is_updated = update_operation_strategies(strategies) || is_updated
36
-
37
- is_updated
35
+ update_operation_strategies(strategies) || is_updated
38
36
  end
39
37
 
40
38
  def sample(opts)
@@ -30,7 +30,9 @@ module Jaeger
30
30
  true
31
31
  end
32
32
 
33
- def sample(trace_id:, **)
33
+ def sample(opts)
34
+ trace_id = opts.fetch(:trace_id)
35
+
34
36
  [@boundary >= trace_id, @tags]
35
37
  end
36
38
  end
@@ -6,7 +6,7 @@ module Jaeger
6
6
  module Samplers
7
7
  class RemoteControlled
8
8
  DEFAULT_REFRESH_INTERVAL = 60
9
- DEFAULT_SAMPLING_HOST = 'localhost'.freeze
9
+ DEFAULT_SAMPLING_HOST = 'localhost'
10
10
  DEFAULT_SAMPLING_PORT = 5778
11
11
 
12
12
  attr_reader :sampler
data/lib/jaeger/scope.rb CHANGED
@@ -23,6 +23,7 @@ module Jaeger
23
23
  # updating the ScopeManager#active in the process.
24
24
  def close
25
25
  raise "Tried to close already closed span: #{inspect}" if @closed
26
+
26
27
  @closed = true
27
28
 
28
29
  @span.finish if @finish_on_close
@@ -27,6 +27,7 @@ module Jaeger
27
27
  # returned instance.
28
28
  def activate(span, finish_on_close: true)
29
29
  return active if active && active.span == span
30
+
30
31
  scope = Scope.new(span, @scope_stack, finish_on_close: finish_on_close)
31
32
  @scope_stack.push(scope)
32
33
  scope
data/lib/jaeger/span.rb CHANGED
@@ -34,7 +34,7 @@ module Jaeger
34
34
  # a String, Numeric, or Boolean it will be encoded with to_s
35
35
  def set_tag(key, value)
36
36
  if key == 'sampling.priority'
37
- if value.to_i > 0
37
+ if value.to_i.positive?
38
38
  return self if @context.debug?
39
39
 
40
40
  @context.flags = @context.flags | SpanContext::Flags::SAMPLED | SpanContext::Flags::DEBUG
@@ -71,9 +71,9 @@ module Jaeger
71
71
  # Add a log entry to this span
72
72
  #
73
73
  # @deprecated Use {#log_kv} instead.
74
- def log(*args)
74
+ def log(...)
75
75
  warn 'Span#log is deprecated. Please use Span#log_kv instead.'
76
- log_kv(*args)
76
+ log_kv(...)
77
77
  end
78
78
 
79
79
  # Add a log entry to this span
@@ -19,10 +19,10 @@ module Jaeger
19
19
  )
20
20
  end
21
21
 
22
- attr_reader :span_id, :parent_id, :trace_id, :baggage, :flags
23
- attr_writer :flags
22
+ attr_accessor :flags
23
+ attr_reader :span_id, :parent_id, :trace_id, :baggage
24
24
 
25
- def initialize(span_id:, parent_id: 0, trace_id:, flags:, baggage: {})
25
+ def initialize(span_id:, trace_id:, flags:, parent_id: 0, baggage: {})
26
26
  @span_id = span_id
27
27
  @parent_id = parent_id
28
28
  @trace_id = trace_id
@@ -11,19 +11,20 @@ module Jaeger
11
11
  VSTR = FIELDS[Jaeger::Thrift::Tag::VSTR].fetch(:name)
12
12
 
13
13
  def self.build(key, value)
14
- if value.is_a?(Integer)
14
+ case value
15
+ when Integer
15
16
  Jaeger::Thrift::Tag.new(
16
17
  KEY => key.to_s,
17
18
  VTYPE => Jaeger::Thrift::TagType::LONG,
18
19
  VLONG => value
19
20
  )
20
- elsif value.is_a?(Float)
21
+ when Float
21
22
  Jaeger::Thrift::Tag.new(
22
23
  KEY => key.to_s,
23
24
  VTYPE => Jaeger::Thrift::TagType::DOUBLE,
24
25
  VDOUBLE => value
25
26
  )
26
- elsif value.is_a?(TrueClass) || value.is_a?(FalseClass)
27
+ when TrueClass, FalseClass
27
28
  Jaeger::Thrift::Tag.new(
28
29
  KEY => key.to_s,
29
30
  VTYPE => Jaeger::Thrift::TagType::BOOL,
@@ -15,14 +15,14 @@ module Jaeger
15
15
  return nil unless id
16
16
 
17
17
  value = id.to_i(16)
18
- value > MAX_64BIT_UNSIGNED_INT || value < 0 ? 0 : value
18
+ value > MAX_64BIT_UNSIGNED_INT || value.negative? ? 0 : value
19
19
  end
20
20
 
21
21
  def self.base16_hex_id_to_uint128(id)
22
22
  return nil unless id
23
23
 
24
24
  value = id.to_i(16)
25
- value > MAX_128BIT_UNSIGNED_INT || value < 0 ? 0 : value
25
+ value > MAX_128BIT_UNSIGNED_INT || value.negative? ? 0 : value
26
26
  end
27
27
 
28
28
  # Thrift defines ID fields as i64, which is signed, therefore we convert
data/lib/jaeger/tracer.rb CHANGED
@@ -19,7 +19,7 @@ module Jaeger
19
19
  # Scope#active is nil.
20
20
  def active_span
21
21
  scope = scope_manager.active
22
- scope.span if scope
22
+ scope&.span
23
23
  end
24
24
 
25
25
  # Starts a new span.
@@ -190,6 +190,7 @@ module Jaeger
190
190
 
191
191
  def context_from_child_of(child_of)
192
192
  return nil unless child_of
193
+
193
194
  child_of.respond_to?(:context) ? child_of.context : child_of
194
195
  end
195
196
 
@@ -207,7 +208,7 @@ module Jaeger
207
208
  return if ignore_active_scope
208
209
 
209
210
  active_scope = @scope_manager.active
210
- active_scope.span.context if active_scope
211
+ active_scope&.span&.context
211
212
  end
212
213
  end
213
214
  end
@@ -5,10 +5,11 @@ module Jaeger
5
5
  class Transport
6
6
  FLAGS = 0
7
7
 
8
- def initialize(host, port)
8
+ def initialize(host, port, logger:)
9
9
  @socket = UDPSocket.new
10
10
  @host = host
11
11
  @port = port
12
+ @logger = logger
12
13
  @buffer = ::Thrift::MemoryBufferTransport.new
13
14
  end
14
15
 
@@ -31,9 +32,9 @@ module Jaeger
31
32
  @socket.send(bytes, FLAGS, @host, @port)
32
33
  @socket.flush
33
34
  rescue Errno::ECONNREFUSED
34
- warn 'Unable to connect to Jaeger Agent'
35
+ @logger.warn 'Unable to connect to Jaeger Agent'
35
36
  rescue StandardError => e
36
- warn "Unable to send spans: #{e.message}"
37
+ @logger.warn "Unable to send spans: #{e.message}"
37
38
  end
38
39
  end
39
40
  end
@@ -9,7 +9,7 @@ module Jaeger
9
9
  @encoder = encoder
10
10
  @logger = logger
11
11
 
12
- transport = Transport.new(host, port)
12
+ transport = Transport.new(host, port, logger: logger)
13
13
  @protocol_class = ::Thrift::CompactProtocol
14
14
  protocol = @protocol_class.new(transport)
15
15
  @client = Jaeger::Thrift::Agent::Client.new(protocol)
@@ -19,8 +19,8 @@ module Jaeger
19
19
  def send_spans(spans)
20
20
  batches = @encoder.encode_limited_size(spans, @protocol_class, @max_packet_size)
21
21
  batches.each { |batch| @client.emitBatch(batch) }
22
- rescue StandardError => error
23
- @logger.error("Failure while sending a batch of spans: #{error}")
22
+ rescue StandardError => e
23
+ @logger.error("Failure while sending a batch of spans: #{e}")
24
24
  end
25
25
  end
26
26
  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: 1.1.0
4
+ version: 1.2.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: 2020-08-21 00:00:00.000000000 Z
11
+ date: 2021-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -58,28 +58,42 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.54.0
61
+ version: '1.13'
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.54.0
68
+ version: '1.13'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.5.1
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.5.1
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rubocop-rspec
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: 1.24.0
89
+ version: '2.3'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: 1.24.0
96
+ version: '2.3'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: timecop
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +114,14 @@ dependencies:
100
114
  requirements:
101
115
  - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: 3.4.2
117
+ version: '3.4'
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
- version: 3.4.2
124
+ version: '3.4'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: opentracing
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -143,11 +157,11 @@ executables: []
143
157
  extensions: []
144
158
  extra_rdoc_files: []
145
159
  files:
160
+ - ".github/workflows/ci.yml"
146
161
  - ".gitignore"
147
162
  - ".gitmodules"
148
163
  - ".rspec"
149
164
  - ".rubocop.yml"
150
- - ".travis.yml"
151
165
  - Gemfile
152
166
  - LICENSE.txt
153
167
  - Makefile
@@ -227,14 +241,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
227
241
  requirements:
228
242
  - - ">="
229
243
  - !ruby/object:Gem::Version
230
- version: '0'
244
+ version: '2.7'
245
+ - - "<"
246
+ - !ruby/object:Gem::Version
247
+ version: '3.1'
231
248
  required_rubygems_version: !ruby/object:Gem::Requirement
232
249
  requirements:
233
250
  - - ">="
234
251
  - !ruby/object:Gem::Version
235
252
  version: '0'
236
253
  requirements: []
237
- rubygems_version: 3.0.3
254
+ rubygems_version: 3.0.9
238
255
  signing_key:
239
256
  specification_version: 4
240
257
  summary: OpenTracing Tracer implementation for Jaeger in Ruby
data/.travis.yml DELETED
@@ -1,14 +0,0 @@
1
- sudo: false
2
-
3
- language: ruby
4
- rvm:
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