test-tracer 1.0.0 → 1.1.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/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
|