jaeger-client 0.10.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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