test-tracer 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/test/propagation.rb +5 -0
- data/lib/test/propagation/codec.rb +8 -0
- data/lib/test/propagation/extractor.rb +12 -0
- data/lib/test/propagation/injector.rb +12 -0
- data/lib/test/propagation/rack_codec.rb +35 -0
- data/lib/test/propagation/text_map_codec.rb +27 -0
- data/lib/test/tracer.rb +72 -4
- data/lib/test/type_check.rb +4 -0
- data/test-tracer.gemspec +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee64ccc49b552feba85f706f6bac12e3e533ce01
|
4
|
+
data.tar.gz: 8209e0cfc6486a354fee51bc126e5740fc12d7ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 703cb08e6050c4f3e43391bc6cf8ca3a45dfbd69a71117d2ee6338b3441d29d1cf858965f3757c12889850aac80c6a6b56d2e5c28988109334794346efb7bad4
|
7
|
+
data.tar.gz: 54d59ab71bb8a9619ba627e12ded651cb8d795fe315ed8cff7de52dad127b55812e29989da2c7191070c6da0c1689eb5860748c71f8be9f96f6f27dabd284270
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Test
|
2
|
+
module Propagation
|
3
|
+
module Extractor
|
4
|
+
# Extract a SpanContext from the given carrier.
|
5
|
+
#
|
6
|
+
# @param carrier [Carrier] A carrier object
|
7
|
+
# @return [SpanContext, nil] the extracted SpanContext or nil if none could be found
|
8
|
+
def extract(carrier)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Test
|
2
|
+
module Propagation
|
3
|
+
class RackCodec
|
4
|
+
module Headers
|
5
|
+
TRACE_ID = "X-Trace-Id".freeze
|
6
|
+
SPAN_ID = "X-Span-Id".freeze
|
7
|
+
PARENT_SPAN_ID = "X-Parent-Span-Id".freeze
|
8
|
+
|
9
|
+
module Rack
|
10
|
+
TRACE_ID = "HTTP_X_TRACE_ID".freeze
|
11
|
+
SPAN_ID = "HTTP_X_SPAN_ID".freeze
|
12
|
+
PARENT_SPAN_ID = "HTTP_X_PARENT_SPAN_ID".freeze
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def inject(span_context, carrier)
|
17
|
+
carrier[Headers::TRACE_ID] = span_context.trace_id
|
18
|
+
carrier[Headers::SPAN_ID] = span_context.span_id
|
19
|
+
carrier[Headers::PARENT_SPAN_ID] = span_context.parent_span_id
|
20
|
+
end
|
21
|
+
|
22
|
+
def extract(carrier)
|
23
|
+
trace_id = carrier[Headers::Rack::TRACE_ID]
|
24
|
+
span_id = carrier[Headers::Rack::SPAN_ID]
|
25
|
+
parent_span_id = carrier[Headers::Rack::PARENT_SPAN_ID]
|
26
|
+
|
27
|
+
if trace_id && span_id
|
28
|
+
SpanContext.new(trace_id: trace_id,
|
29
|
+
span_id: span_id,
|
30
|
+
parent_span_id: parent_span_id)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Test
|
2
|
+
module Propagation
|
3
|
+
class TextMapCodec
|
4
|
+
TRACE_ID = "trace_id".freeze
|
5
|
+
SPAN_ID = "span_id".freeze
|
6
|
+
PARENT_SPAN_ID = "parent_span_id".freeze
|
7
|
+
|
8
|
+
def inject(span_context, carrier)
|
9
|
+
carrier[TRACE_ID] = span_context.trace_id
|
10
|
+
carrier[SPAN_ID] = span_context.span_id
|
11
|
+
carrier[PARENT_SPAN_ID] = span_context.parent_span_id
|
12
|
+
end
|
13
|
+
|
14
|
+
def extract(carrier)
|
15
|
+
trace_id = carrier[TRACE_ID]
|
16
|
+
span_id = carrier[SPAN_ID]
|
17
|
+
parent_span_id = carrier[PARENT_SPAN_ID]
|
18
|
+
|
19
|
+
if trace_id && span_id
|
20
|
+
SpanContext.new(trace_id: trace_id,
|
21
|
+
span_id: span_id,
|
22
|
+
parent_span_id: parent_span_id)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/test/tracer.rb
CHANGED
@@ -1,21 +1,56 @@
|
|
1
1
|
require 'opentracing'
|
2
2
|
|
3
3
|
require_relative 'type_check'
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
require 'test/id_provider'
|
5
|
+
require 'test/span_context'
|
6
|
+
require 'test/span'
|
7
|
+
require 'test/propagation'
|
7
8
|
|
8
9
|
module Test
|
9
10
|
class Tracer < OpenTracing::Tracer
|
10
11
|
include TypeCheck
|
11
12
|
|
12
13
|
attr_reader :spans, :finished_spans
|
14
|
+
attr_reader :injectors, :extractors
|
15
|
+
|
16
|
+
attr_accessor :logger
|
17
|
+
|
18
|
+
def initialize(logger: nil)
|
19
|
+
@logger = logger
|
13
20
|
|
14
|
-
def initialize
|
15
21
|
@spans = []
|
16
22
|
@finished_spans = []
|
23
|
+
|
24
|
+
@injectors = {}
|
25
|
+
@extractors = {}
|
26
|
+
|
27
|
+
register_codec(OpenTracing::FORMAT_TEXT_MAP, Propagation::TextMapCodec.new)
|
28
|
+
register_codec(OpenTracing::FORMAT_RACK, Propagation::RackCodec.new)
|
29
|
+
end
|
30
|
+
|
31
|
+
def register_injector(format, injector)
|
32
|
+
NotNull! format
|
33
|
+
Argument! injector.respond_to?(:inject), "Injector must respond to 'inject' method"
|
34
|
+
|
35
|
+
@injectors[format] = injector
|
36
|
+
self
|
37
|
+
end
|
38
|
+
|
39
|
+
def register_extractor(format, extractor)
|
40
|
+
NotNull! format
|
41
|
+
Argument! extractor.respond_to?(:extract), "Extractor must respond to 'extract' method"
|
42
|
+
|
43
|
+
@extractors[format] = extractor
|
44
|
+
self
|
17
45
|
end
|
18
46
|
|
47
|
+
def register_codec(format, codec)
|
48
|
+
register_injector(format, codec)
|
49
|
+
register_extractor(format, codec)
|
50
|
+
self
|
51
|
+
end
|
52
|
+
|
53
|
+
# OT complaiant
|
19
54
|
def start_span(operation_name, child_of: nil, references: nil, start_time: Time.now, tags: nil)
|
20
55
|
Type! child_of, ::Test::Span, ::Test::SpanContext, NilClass
|
21
56
|
|
@@ -31,10 +66,43 @@ module Test
|
|
31
66
|
new_span
|
32
67
|
end
|
33
68
|
|
69
|
+
# OT complaiant
|
70
|
+
def inject(span_context, format, carrier)
|
71
|
+
Type! span_context, ::Test::SpanContext, NilClass
|
72
|
+
NotNull! format
|
73
|
+
NotNull! carrier
|
74
|
+
|
75
|
+
injector = @injectors[format]
|
76
|
+
if injector
|
77
|
+
injector.inject(span_context, carrier)
|
78
|
+
else
|
79
|
+
log(Logger::WARN, "No injector found for '#{format}' format")
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# OT complaiant
|
84
|
+
def extract(format, carrier)
|
85
|
+
NotNull! format
|
86
|
+
NotNull! carrier
|
87
|
+
|
88
|
+
extractor = @extractors[format]
|
89
|
+
if extractor
|
90
|
+
extractor.extract(carrier)
|
91
|
+
else
|
92
|
+
log(Logger::WARN, "No extractor found for '#{format}' format")
|
93
|
+
nil
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
34
97
|
def clear
|
35
98
|
@spans.clear
|
36
99
|
@finished_spans.clear
|
37
100
|
self
|
38
101
|
end
|
102
|
+
|
103
|
+
private
|
104
|
+
def log(severity, message)
|
105
|
+
logger.log(severity, message) if logger
|
106
|
+
end
|
39
107
|
end
|
40
108
|
end
|
data/lib/test/type_check.rb
CHANGED
data/test-tracer.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: test-tracer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- iaintshine
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opentracing
|
@@ -84,6 +84,12 @@ files:
|
|
84
84
|
- bin/console
|
85
85
|
- bin/setup
|
86
86
|
- lib/test/id_provider.rb
|
87
|
+
- lib/test/propagation.rb
|
88
|
+
- lib/test/propagation/codec.rb
|
89
|
+
- lib/test/propagation/extractor.rb
|
90
|
+
- lib/test/propagation/injector.rb
|
91
|
+
- lib/test/propagation/rack_codec.rb
|
92
|
+
- lib/test/propagation/text_map_codec.rb
|
87
93
|
- lib/test/span.rb
|
88
94
|
- lib/test/span_context.rb
|
89
95
|
- lib/test/tracer.rb
|