jaeger-client 0.10.0 → 1.3.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.
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jaeger
4
+ class ThriftTagBuilder
5
+ FIELDS = Jaeger::Thrift::Tag::FIELDS
6
+ KEY = FIELDS[Jaeger::Thrift::Tag::KEY].fetch(:name)
7
+ VTYPE = FIELDS[Jaeger::Thrift::Tag::VTYPE].fetch(:name)
8
+ VLONG = FIELDS[Jaeger::Thrift::Tag::VLONG].fetch(:name)
9
+ VDOUBLE = FIELDS[Jaeger::Thrift::Tag::VDOUBLE].fetch(:name)
10
+ VBOOL = FIELDS[Jaeger::Thrift::Tag::VBOOL].fetch(:name)
11
+ VSTR = FIELDS[Jaeger::Thrift::Tag::VSTR].fetch(:name)
12
+
13
+ def self.build(key, value)
14
+ case value
15
+ when Integer
16
+ Jaeger::Thrift::Tag.new(
17
+ KEY => key.to_s,
18
+ VTYPE => Jaeger::Thrift::TagType::LONG,
19
+ VLONG => value
20
+ )
21
+ when Float
22
+ Jaeger::Thrift::Tag.new(
23
+ KEY => key.to_s,
24
+ VTYPE => Jaeger::Thrift::TagType::DOUBLE,
25
+ VDOUBLE => value
26
+ )
27
+ when TrueClass, FalseClass
28
+ Jaeger::Thrift::Tag.new(
29
+ KEY => key.to_s,
30
+ VTYPE => Jaeger::Thrift::TagType::BOOL,
31
+ VBOOL => value
32
+ )
33
+ else
34
+ Jaeger::Thrift::Tag.new(
35
+ KEY => key.to_s,
36
+ VTYPE => Jaeger::Thrift::TagType::STRING,
37
+ VSTR => value.to_s
38
+ )
39
+ end
40
+ end
41
+ end
42
+ end
@@ -4,6 +4,7 @@ module Jaeger
4
4
  module TraceId
5
5
  MAX_64BIT_SIGNED_INT = (1 << 63) - 1
6
6
  MAX_64BIT_UNSIGNED_INT = (1 << 64) - 1
7
+ MAX_128BIT_UNSIGNED_INT = (1 << 128) - 1
7
8
  TRACE_ID_UPPER_BOUND = MAX_64BIT_UNSIGNED_INT + 1
8
9
 
9
10
  def self.generate
@@ -12,8 +13,16 @@ module Jaeger
12
13
 
13
14
  def self.base16_hex_id_to_uint64(id)
14
15
  return nil unless id
16
+
17
+ value = id.to_i(16)
18
+ value > MAX_64BIT_UNSIGNED_INT || value.negative? ? 0 : value
19
+ end
20
+
21
+ def self.base16_hex_id_to_uint128(id)
22
+ return nil unless id
23
+
15
24
  value = id.to_i(16)
16
- value > MAX_64BIT_UNSIGNED_INT || value < 0 ? 0 : value
25
+ value > MAX_128BIT_UNSIGNED_INT || value.negative? ? 0 : value
17
26
  end
18
27
 
19
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.
@@ -41,7 +41,13 @@ module Jaeger
41
41
  # @param ignore_active_scope [Boolean] whether to create an implicit
42
42
  # References#CHILD_OF reference to the ScopeManager#active.
43
43
  #
44
- # @return [Span] The newly-started Span
44
+ # @yield [Span] If passed an optional block, start_span will yield the
45
+ # newly-created span to the block. The span will be finished automatically
46
+ # after the block is executed.
47
+ # @return [Span, Object] If passed an optional block, start_span will return
48
+ # the block's return value, otherwise it returns the newly-started Span
49
+ # instance, which has not been automatically registered via the
50
+ # ScopeManager
45
51
  def start_span(operation_name,
46
52
  child_of: nil,
47
53
  references: nil,
@@ -55,7 +61,7 @@ module Jaeger
55
61
  references: references,
56
62
  ignore_active_scope: ignore_active_scope
57
63
  )
58
- Span.new(
64
+ span = Span.new(
59
65
  context,
60
66
  operation_name,
61
67
  @reporter,
@@ -63,6 +69,16 @@ module Jaeger
63
69
  references: references,
64
70
  tags: tags.merge(sampler_tags)
65
71
  )
72
+
73
+ if block_given?
74
+ begin
75
+ yield(span)
76
+ ensure
77
+ span.finish
78
+ end
79
+ else
80
+ span
81
+ end
66
82
  end
67
83
 
68
84
  # Creates a newly started and activated Scope
@@ -87,10 +103,12 @@ module Jaeger
87
103
  # References#CHILD_OF reference to the ScopeManager#active.
88
104
  # @param finish_on_close [Boolean] whether span should automatically be
89
105
  # finished when Scope#close is called
90
- # @yield [Scope] If an optional block is passed to start_active it will
91
- # yield the newly-started Scope. If `finish_on_close` is true then the
106
+ # @yield [Scope] If an optional block is passed to start_active_span it
107
+ # will yield the newly-started Scope. If `finish_on_close` is true then the
92
108
  # Span will be finished automatically after the block is executed.
93
- # @return [Scope] The newly-started and activated Scope
109
+ # @return [Scope, Object] If passed an optional block, start_active_span
110
+ # returns the block's return value, otherwise it returns the newly-started
111
+ # and activated Scope
94
112
  def start_active_span(operation_name,
95
113
  child_of: nil,
96
114
  references: nil,
@@ -115,9 +133,9 @@ module Jaeger
115
133
  ensure
116
134
  scope.close
117
135
  end
136
+ else
137
+ scope
118
138
  end
119
-
120
- scope
121
139
  end
122
140
 
123
141
  # Inject a SpanContext into the given carrier
@@ -157,7 +175,7 @@ module Jaeger
157
175
  [SpanContext.create_from_parent_context(context), {}]
158
176
  else
159
177
  trace_id = TraceId.generate
160
- is_sampled, tags = @sampler.sample?(
178
+ is_sampled, tags = @sampler.sample(
161
179
  trace_id: trace_id,
162
180
  operation_name: operation_name
163
181
  )
@@ -172,6 +190,7 @@ module Jaeger
172
190
 
173
191
  def context_from_child_of(child_of)
174
192
  return nil unless child_of
193
+
175
194
  child_of.respond_to?(:context) ? child_of.context : child_of
176
195
  end
177
196
 
@@ -189,7 +208,7 @@ module Jaeger
189
208
  return if ignore_active_scope
190
209
 
191
210
  active_scope = @scope_manager.active
192
- active_scope.span.context if active_scope
211
+ active_scope&.span&.context
193
212
  end
194
213
  end
195
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
@@ -5,20 +5,22 @@ require 'socket'
5
5
 
6
6
  module Jaeger
7
7
  class UdpSender
8
- def initialize(host:, port:, encoder:, logger:)
8
+ def initialize(host:, port:, encoder:, logger:, max_packet_size: 65_000)
9
9
  @encoder = encoder
10
10
  @logger = logger
11
11
 
12
- transport = Transport.new(host, port)
13
- protocol = ::Thrift::CompactProtocol.new(transport)
12
+ transport = Transport.new(host, port, logger: logger)
13
+ @protocol_class = ::Thrift::CompactProtocol
14
+ protocol = @protocol_class.new(transport)
14
15
  @client = Jaeger::Thrift::Agent::Client.new(protocol)
16
+ @max_packet_size = max_packet_size
15
17
  end
16
18
 
17
19
  def send_spans(spans)
18
- batch = @encoder.encode(spans)
19
- @client.emitBatch(batch)
20
- rescue StandardError => error
21
- @logger.error("Failure while sending a batch of spans: #{error}")
20
+ batches = @encoder.encode_limited_size(spans, @protocol_class, @max_packet_size)
21
+ batches.each { |batch| @client.emitBatch(batch) }
22
+ rescue StandardError => e
23
+ @logger.error("Failure while sending a batch of spans: #{e}")
22
24
  end
23
25
  end
24
26
  end
metadata CHANGED
@@ -1,85 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jaeger-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 1.3.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-25 00:00:00.000000000 Z
11
+ date: 2022-02-01 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: '1.14'
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: '1.14'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
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
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: '3.10'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.0'
54
+ version: '3.10'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rubocop
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.54.0
61
+ version: '1.25'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.25'
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.6'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: 0.54.0
82
+ version: '0.6'
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.8'
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.8'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: timecop
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +108,20 @@ dependencies:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0.9'
111
+ - !ruby/object:Gem::Dependency
112
+ name: webmock
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '3.14'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3.14'
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: opentracing
99
127
  requirement: !ruby/object:Gem::Requirement
@@ -129,11 +157,12 @@ executables: []
129
157
  extensions: []
130
158
  extra_rdoc_files: []
131
159
  files:
160
+ - ".github/workflows/ci.yml"
132
161
  - ".gitignore"
133
162
  - ".gitmodules"
134
163
  - ".rspec"
135
164
  - ".rubocop.yml"
136
- - ".travis.yml"
165
+ - ".rubocop_todo.yml"
137
166
  - Gemfile
138
167
  - LICENSE.txt
139
168
  - Makefile
@@ -156,6 +185,7 @@ files:
156
185
  - lib/jaeger/http_sender.rb
157
186
  - lib/jaeger/injectors.rb
158
187
  - lib/jaeger/rate_limiter.rb
188
+ - lib/jaeger/recurring_executor.rb
159
189
  - lib/jaeger/reporters.rb
160
190
  - lib/jaeger/reporters/composite_reporter.rb
161
191
  - lib/jaeger/reporters/in_memory_reporter.rb
@@ -169,14 +199,16 @@ files:
169
199
  - lib/jaeger/samplers/per_operation.rb
170
200
  - lib/jaeger/samplers/probabilistic.rb
171
201
  - lib/jaeger/samplers/rate_limiting.rb
202
+ - lib/jaeger/samplers/remote_controlled.rb
203
+ - lib/jaeger/samplers/remote_controlled/instructions_fetcher.rb
172
204
  - lib/jaeger/scope.rb
173
205
  - lib/jaeger/scope_manager.rb
174
206
  - lib/jaeger/scope_manager/scope_identifier.rb
175
207
  - lib/jaeger/scope_manager/scope_stack.rb
176
208
  - lib/jaeger/span.rb
177
209
  - lib/jaeger/span/thrift_log_builder.rb
178
- - lib/jaeger/span/thrift_tag_builder.rb
179
210
  - lib/jaeger/span_context.rb
211
+ - lib/jaeger/thrift_tag_builder.rb
180
212
  - lib/jaeger/trace_id.rb
181
213
  - lib/jaeger/tracer.rb
182
214
  - lib/jaeger/udp_sender.rb
@@ -201,7 +233,8 @@ files:
201
233
  homepage: https://github.com/salemove/jaeger-client-ruby
202
234
  licenses:
203
235
  - MIT
204
- metadata: {}
236
+ metadata:
237
+ rubygems_mfa_required: 'true'
205
238
  post_install_message:
206
239
  rdoc_options: []
207
240
  require_paths:
@@ -210,15 +243,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
210
243
  requirements:
211
244
  - - ">="
212
245
  - !ruby/object:Gem::Version
213
- version: '0'
246
+ version: '2.7'
247
+ - - "<"
248
+ - !ruby/object:Gem::Version
249
+ version: '3.2'
214
250
  required_rubygems_version: !ruby/object:Gem::Requirement
215
251
  requirements:
216
252
  - - ">="
217
253
  - !ruby/object:Gem::Version
218
254
  version: '0'
219
255
  requirements: []
220
- rubyforge_project:
221
- rubygems_version: 2.7.7
256
+ rubygems_version: 3.1.4
222
257
  signing_key:
223
258
  specification_version: 4
224
259
  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
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jaeger
4
- class Span
5
- class ThriftTagBuilder
6
- FIELDS = Jaeger::Thrift::Tag::FIELDS
7
- KEY = FIELDS[Jaeger::Thrift::Tag::KEY].fetch(:name)
8
- VTYPE = FIELDS[Jaeger::Thrift::Tag::VTYPE].fetch(:name)
9
- VLONG = FIELDS[Jaeger::Thrift::Tag::VLONG].fetch(:name)
10
- VDOUBLE = FIELDS[Jaeger::Thrift::Tag::VDOUBLE].fetch(:name)
11
- VBOOL = FIELDS[Jaeger::Thrift::Tag::VBOOL].fetch(:name)
12
- VSTR = FIELDS[Jaeger::Thrift::Tag::VSTR].fetch(:name)
13
-
14
- def self.build(key, value)
15
- if value.is_a?(Integer)
16
- Jaeger::Thrift::Tag.new(
17
- KEY => key.to_s,
18
- VTYPE => Jaeger::Thrift::TagType::LONG,
19
- VLONG => value
20
- )
21
- elsif value.is_a?(Float)
22
- Jaeger::Thrift::Tag.new(
23
- KEY => key.to_s,
24
- VTYPE => Jaeger::Thrift::TagType::DOUBLE,
25
- VDOUBLE => value
26
- )
27
- elsif value.is_a?(TrueClass) || value.is_a?(FalseClass)
28
- Jaeger::Thrift::Tag.new(
29
- KEY => key.to_s,
30
- VTYPE => Jaeger::Thrift::TagType::BOOL,
31
- VBOOL => value
32
- )
33
- else
34
- Jaeger::Thrift::Tag.new(
35
- KEY => key.to_s,
36
- VTYPE => Jaeger::Thrift::TagType::STRING,
37
- VSTR => value.to_s
38
- )
39
- end
40
- end
41
- end
42
- end
43
- end