zipkin 1.4.0 → 1.5.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
  SHA1:
3
- metadata.gz: 57c74dfca283ccf9531225d1765bd897a53dd527
4
- data.tar.gz: e3ac03480369442405e7ffdbb7988e9fa7e32f16
3
+ metadata.gz: '08c97e0494e2aada96486d717d1cd8b645da89c2'
4
+ data.tar.gz: dc7681e5f0a7c4efe293f22ad496f9c352675137
5
5
  SHA512:
6
- metadata.gz: 981f0408f902b0a88f856eeefea27bee2032ab4712a63e499c2ebc001e286b351dd3d4209e2eb6ad176eeb880f4dac4d0e48010fbe135425a59bbc9e53d59644
7
- data.tar.gz: 69e2ec0aa4e2c385c9e8944c8154714b2aa1f6744fef02a2b36ca5a391a8f55508a310680bad702c73bb86ed7633e192b877c9cd4ba84b68055917e248a9cb68
6
+ metadata.gz: 3f80229eec38c0f34c83276264b90073195b80e74f5389569ff5458957e9f90e85a02856684a169a116239cb5c804a9eef69161b32851ac38222545090a26306
7
+ data.tar.gz: b2ee56339a6e2eb7aa615becf7fd163fd86d66e165fb065a3f50e9cc89fd217a3be3628f7484491f90c866b8460b4f4eea0c487575de29693da928895307d059
data/lib/zipkin/span.rb CHANGED
@@ -4,7 +4,7 @@ module Zipkin
4
4
  class Span
5
5
  attr_accessor :operation_name
6
6
 
7
- attr_reader :context, :start_time, :tags, :logs
7
+ attr_reader :context, :start_time, :tags, :logs, :references
8
8
 
9
9
  # Creates a new {Span}
10
10
  #
@@ -13,13 +13,21 @@ module Zipkin
13
13
  # @param collector [Collector] the span collector
14
14
  #
15
15
  # @return [Span] a new Span
16
- def initialize(context, operation_name, collector, start_time: Time.now, tags: {})
16
+ def initialize(
17
+ context,
18
+ operation_name,
19
+ collector,
20
+ start_time: Time.now,
21
+ tags: {},
22
+ references: nil
23
+ )
17
24
  @context = context
18
25
  @operation_name = operation_name
19
26
  @collector = collector
20
27
  @start_time = start_time
21
28
  @tags = tags
22
29
  @logs = []
30
+ @references = references
23
31
  end
24
32
 
25
33
  # Set a tag value on this span
data/lib/zipkin/tracer.rb CHANGED
@@ -60,7 +60,12 @@ module Zipkin
60
60
  # @param operation_name [String] The operation name for the Span
61
61
  # @param child_of [SpanContext, Span] SpanContext that acts as a parent to
62
62
  # the newly-started Span. If a Span instance is provided, its
63
- # context is automatically substituted.
63
+ # context is automatically substituted. See [Reference] for more
64
+ # information.
65
+ #
66
+ # If specified, the `references` parameter must be omitted.
67
+ # @param references [Array<Reference>] An array of reference
68
+ # objects that identify one or more parent SpanContexts.<Paste>
64
69
  # @param start_time [Time] When the Span started, if not now
65
70
  # @param tags [Hash] Tags to assign to the Span at start time
66
71
  # @param ignore_active_scope [Boolean] whether to create an implicit
@@ -71,10 +76,12 @@ module Zipkin
71
76
  child_of: nil,
72
77
  start_time: Time.now,
73
78
  tags: {},
79
+ references: nil,
74
80
  ignore_active_scope: false,
75
81
  **)
76
82
  context = prepare_span_context(
77
83
  child_of: child_of,
84
+ references: references,
78
85
  ignore_active_scope: ignore_active_scope
79
86
  )
80
87
  Span.new(
@@ -82,6 +89,7 @@ module Zipkin
82
89
  operation_name,
83
90
  @collector,
84
91
  start_time: start_time,
92
+ references: references,
85
93
  tags: tags
86
94
  )
87
95
  end
@@ -203,20 +211,39 @@ module Zipkin
203
211
  )
204
212
  end
205
213
 
206
- def prepare_span_context(child_of:, ignore_active_scope:)
207
- if child_of
208
- parent_context = child_of.respond_to?(:context) ? child_of.context : child_of
209
- return SpanContext.create_from_parent_context(parent_context)
214
+ def prepare_span_context(child_of:, references:, ignore_active_scope:)
215
+ context =
216
+ context_from_child_of(child_of) ||
217
+ context_from_references(references) ||
218
+ context_from_active_scope(ignore_active_scope)
219
+
220
+ if context
221
+ SpanContext.create_from_parent_context(context)
222
+ else
223
+ SpanContext.create_parent_context
210
224
  end
225
+ end
211
226
 
212
- unless ignore_active_scope
213
- active_scope = @scope_manager.active
214
- if active_scope
215
- return SpanContext.create_from_parent_context(active_scope.span.context)
216
- end
227
+ def context_from_child_of(child_of)
228
+ return nil unless child_of
229
+ child_of.respond_to?(:context) ? child_of.context : child_of
230
+ end
231
+
232
+ def context_from_references(references)
233
+ return nil if !references || references.none?
234
+
235
+ # Prefer CHILD_OF reference if present
236
+ ref = references.detect do |reference|
237
+ reference.type == OpenTracing::Reference::CHILD_OF
217
238
  end
239
+ (ref || references[0]).context
240
+ end
241
+
242
+ def context_from_active_scope(ignore_active_scope)
243
+ return if ignore_active_scope
218
244
 
219
- SpanContext.create_parent_context
245
+ active_scope = @scope_manager.active
246
+ active_scope.span.context if active_scope
220
247
  end
221
248
  end
222
249
  end
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler'
4
+ Bundler.setup
5
+
6
+ require 'zipkin/tracer'
7
+
8
+ url = ENV['ZIPKIN_URL'] || 'http://localhost:9411'
9
+
10
+ tracer1 = Zipkin::Tracer.build(url: url, service_name: 'test-service')
11
+ tracer2 = Zipkin::Tracer.build(url: url, service_name: 'downstream-service')
12
+
13
+ rpc_span = tracer1.start_span(
14
+ 'receive request',
15
+ tags: { 'span.kind' => 'server' }
16
+ )
17
+ sleep 0.1
18
+ rpc_span.log_kv(event: 'woop di doop', count: 5)
19
+ sleep 1
20
+
21
+ async_request_span = tracer1.start_span(
22
+ 'request async action',
23
+ references: [
24
+ OpenTracing::Reference.child_of(rpc_span.context)
25
+ ],
26
+ tags: { 'span.kind' => 'producer' }
27
+ )
28
+ sleep 0.1
29
+
30
+ async_request_span.finish
31
+ rpc_span.finish
32
+
33
+ sleep 0.5
34
+
35
+ async_span = tracer2.start_span(
36
+ 'async span started after rpc span',
37
+ references: [
38
+ OpenTracing::Reference.follows_from(async_request_span.context)
39
+ ],
40
+ tags: {
41
+ 'span.kind' => 'consumer',
42
+ 'peer.service' => 'downstream-service'
43
+ }
44
+ )
45
+ sleep 0.3 # emulate network delay
46
+ async_span.finish
47
+
48
+ tracer1.stop
49
+ tracer2.stop
50
+
51
+ puts 'Finished'
data/zipkin.gemspec CHANGED
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = 'zipkin'
6
- spec.version = '1.4.0'
6
+ spec.version = '1.5.0'
7
7
  spec.authors = ['SaleMove TechMovers']
8
8
  spec.email = ['techmovers@salemove.com']
9
9
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zipkin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - SaleMove TechMovers
@@ -140,6 +140,7 @@ files:
140
140
  - lib/zipkin/span_context.rb
141
141
  - lib/zipkin/trace_id.rb
142
142
  - lib/zipkin/tracer.rb
143
+ - script/create_follows_from_trace
143
144
  - script/create_trace
144
145
  - zipkin.gemspec
145
146
  homepage: ''