jaeger-client 0.5.0 → 0.6.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 +4 -4
- data/lib/jaeger/client/collector.rb +24 -1
- data/lib/jaeger/client/span.rb +4 -3
- data/lib/jaeger/client/tracer.rb +35 -11
- data/lib/jaeger/client/version.rb +1 -1
- data/script/create_follows_from_trace +52 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c3b896f0a1516378cf00ee5a08bc86b9766842a
|
4
|
+
data.tar.gz: e7f411f2dd0850fd1d4267616c6e6cdda7766847
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f1d3b40879729e56de34b71bab0881d9c3d3afab4f11b523392a21392bfeb992e3a602c3cc7907d5f905eafd4f5130d27e4383602b8cc98e1053c2a49f12e5c
|
7
|
+
data.tar.gz: e757205635c33ff2e40630c07746f0993fd234c00742ac1257ab5a914659394b45d24f3d5896f72ab7b3c2a3840383fdeb8d6790a53eff1b67506e2577175bf5
|
@@ -20,7 +20,7 @@ module Jaeger
|
|
20
20
|
'spanId' => context.span_id,
|
21
21
|
'parentSpanId' => context.parent_id,
|
22
22
|
'operationName' => span.operation_name,
|
23
|
-
'references' => [],
|
23
|
+
'references' => build_references(span.references || []),
|
24
24
|
'flags' => context.flags,
|
25
25
|
'startTime' => start_ts,
|
26
26
|
'duration' => duration,
|
@@ -35,6 +35,17 @@ module Jaeger
|
|
35
35
|
|
36
36
|
private
|
37
37
|
|
38
|
+
def build_references(references)
|
39
|
+
references.map do |ref|
|
40
|
+
Jaeger::Thrift::SpanRef.new(
|
41
|
+
'refType' => span_ref_type(ref.type),
|
42
|
+
'traceIdLow' => ref.context.trace_id,
|
43
|
+
'traceIdHigh' => 0,
|
44
|
+
'spanId' => ref.context.span_id
|
45
|
+
)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
38
49
|
def build_timestamps(span, end_time)
|
39
50
|
start_ts = (span.start_time.to_f * 1_000_000).to_i
|
40
51
|
end_ts = (end_time.to_f * 1_000_000).to_i
|
@@ -42,6 +53,18 @@ module Jaeger
|
|
42
53
|
[start_ts, duration]
|
43
54
|
end
|
44
55
|
|
56
|
+
def span_ref_type(type)
|
57
|
+
case type
|
58
|
+
when OpenTracing::Reference::CHILD_OF
|
59
|
+
Jaeger::Thrift::SpanRefType::CHILD_OF
|
60
|
+
when OpenTracing::Reference::FOLLOWS_FROM
|
61
|
+
Jaeger::Thrift::SpanRefType::FOLLOWS_FROM
|
62
|
+
else
|
63
|
+
warn "Jaeger::Client with format #{type} is not supported yet"
|
64
|
+
nil
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
45
68
|
class Buffer
|
46
69
|
def initialize
|
47
70
|
@buffer = []
|
data/lib/jaeger/client/span.rb
CHANGED
@@ -8,20 +8,21 @@ module Jaeger
|
|
8
8
|
class Span
|
9
9
|
attr_accessor :operation_name
|
10
10
|
|
11
|
-
attr_reader :context, :start_time, :tags, :logs
|
11
|
+
attr_reader :context, :start_time, :references, :tags, :logs
|
12
12
|
|
13
13
|
# Creates a new {Span}
|
14
14
|
#
|
15
15
|
# @param context [SpanContext] the context of the span
|
16
|
-
# @param
|
16
|
+
# @param operation_name [String] the operation name
|
17
17
|
# @param collector [Collector] span collector
|
18
18
|
#
|
19
19
|
# @return [Span] a new Span
|
20
|
-
def initialize(context, operation_name, collector, start_time: Time.now, tags: {})
|
20
|
+
def initialize(context, operation_name, collector, start_time: Time.now, references: [], tags: {})
|
21
21
|
@context = context
|
22
22
|
@operation_name = operation_name
|
23
23
|
@collector = collector
|
24
24
|
@start_time = start_time
|
25
|
+
@references = references
|
25
26
|
@tags = tags.map { |key, value| ThriftTagBuilder.build(key, value) }
|
26
27
|
@logs = []
|
27
28
|
end
|
data/lib/jaeger/client/tracer.rb
CHANGED
@@ -34,7 +34,10 @@ module Jaeger
|
|
34
34
|
# @param operation_name [String] The operation name for the Span
|
35
35
|
# @param child_of [SpanContext, Span] SpanContext that acts as a parent to
|
36
36
|
# the newly-started Span. If a Span instance is provided, its
|
37
|
-
# context is automatically substituted.
|
37
|
+
# context is automatically substituted. See [Reference] for more
|
38
|
+
# information.
|
39
|
+
#
|
40
|
+
# If specified, the `references` parameter must be omitted.
|
38
41
|
# @param references [Array<Reference>] An array of reference
|
39
42
|
# objects that identify one or more parent SpanContexts.
|
40
43
|
# @param start_time [Time] When the Span started, if not now
|
@@ -52,6 +55,7 @@ module Jaeger
|
|
52
55
|
**)
|
53
56
|
context = prepare_span_context(
|
54
57
|
child_of: child_of,
|
58
|
+
references: references,
|
55
59
|
ignore_active_scope: ignore_active_scope
|
56
60
|
)
|
57
61
|
Span.new(
|
@@ -59,6 +63,7 @@ module Jaeger
|
|
59
63
|
operation_name,
|
60
64
|
@collector,
|
61
65
|
start_time: start_time,
|
66
|
+
references: references,
|
62
67
|
tags: tags.merge(
|
63
68
|
:'sampler.type' => @sampler.type,
|
64
69
|
:'sampler.param' => @sampler.param
|
@@ -182,20 +187,39 @@ module Jaeger
|
|
182
187
|
(num & ~mask) - (num & mask)
|
183
188
|
end
|
184
189
|
|
185
|
-
def prepare_span_context(child_of:, ignore_active_scope:)
|
186
|
-
|
187
|
-
|
188
|
-
|
190
|
+
def prepare_span_context(child_of:, references:, ignore_active_scope:)
|
191
|
+
context =
|
192
|
+
context_from_child_of(child_of) ||
|
193
|
+
context_from_references(references) ||
|
194
|
+
context_from_active_scope(ignore_active_scope)
|
195
|
+
|
196
|
+
if context
|
197
|
+
SpanContext.create_from_parent_context(context)
|
198
|
+
else
|
199
|
+
SpanContext.create_parent_context(@sampler)
|
189
200
|
end
|
201
|
+
end
|
190
202
|
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
203
|
+
def context_from_child_of(child_of)
|
204
|
+
return nil unless child_of
|
205
|
+
child_of.respond_to?(:context) ? child_of.context : child_of
|
206
|
+
end
|
207
|
+
|
208
|
+
def context_from_references(references)
|
209
|
+
return nil if !references || references.none?
|
210
|
+
|
211
|
+
# Prefer CHILD_OF reference if present
|
212
|
+
ref = references.detect do |reference|
|
213
|
+
reference.type == OpenTracing::Reference::CHILD_OF
|
196
214
|
end
|
215
|
+
(ref || references[0]).context
|
216
|
+
end
|
217
|
+
|
218
|
+
def context_from_active_scope(ignore_active_scope)
|
219
|
+
return if ignore_active_scope
|
197
220
|
|
198
|
-
|
221
|
+
active_scope = @scope_manager.active
|
222
|
+
active_scope.span.context if active_scope
|
199
223
|
end
|
200
224
|
end
|
201
225
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler'
|
4
|
+
Bundler.setup
|
5
|
+
|
6
|
+
require 'jaeger/client'
|
7
|
+
|
8
|
+
host = ENV['JAEGER_HOST'] || '127.0.0.1'
|
9
|
+
port = ENV['JAEGER_HOST'] || 6831
|
10
|
+
|
11
|
+
tracer1 = Jaeger::Client.build(host: host, port: port.to_i, service_name: 'test-service', flush_interval: 1)
|
12
|
+
tracer2 = Jaeger::Client.build(host: host, port: port.to_i, service_name: 'downstream-service', flush_interval: 1)
|
13
|
+
|
14
|
+
rpc_span = tracer1.start_span(
|
15
|
+
'receive request',
|
16
|
+
tags: { 'span.kind' => 'server' }
|
17
|
+
)
|
18
|
+
sleep 0.1
|
19
|
+
rpc_span.log_kv(event: 'woop di doop', count: 5)
|
20
|
+
sleep 1
|
21
|
+
|
22
|
+
async_request_span = tracer1.start_span(
|
23
|
+
'request async action',
|
24
|
+
references: [
|
25
|
+
OpenTracing::Reference.child_of(rpc_span.context)
|
26
|
+
],
|
27
|
+
tags: { 'span.kind' => 'producer' }
|
28
|
+
)
|
29
|
+
sleep 0.1
|
30
|
+
|
31
|
+
async_request_span.finish
|
32
|
+
rpc_span.finish
|
33
|
+
|
34
|
+
sleep 0.5
|
35
|
+
|
36
|
+
async_span = tracer2.start_span(
|
37
|
+
'async span started after rpc span',
|
38
|
+
references: [
|
39
|
+
OpenTracing::Reference.follows_from(async_request_span.context)
|
40
|
+
],
|
41
|
+
tags: {
|
42
|
+
'span.kind' => 'consumer',
|
43
|
+
'peer.service' => 'downstream-service'
|
44
|
+
}
|
45
|
+
)
|
46
|
+
sleep 0.3 # emulate network delay
|
47
|
+
async_span.finish
|
48
|
+
|
49
|
+
tracer1.stop
|
50
|
+
tracer2.stop
|
51
|
+
|
52
|
+
puts 'Finished'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jaeger-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SaleMove TechMovers
|
@@ -145,6 +145,7 @@ files:
|
|
145
145
|
- lib/jaeger/client/udp_sender.rb
|
146
146
|
- lib/jaeger/client/udp_sender/transport.rb
|
147
147
|
- lib/jaeger/client/version.rb
|
148
|
+
- script/create_follows_from_trace
|
148
149
|
- script/create_trace
|
149
150
|
- thrift/agent.thrift
|
150
151
|
- thrift/gen-rb/jaeger/thrift/agent.rb
|