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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: '08c73d7179f4a3100079ed3fa36c5c51aaad096a'
4
- data.tar.gz: c7a8df736786cb89a067ed211d5b62f677d08570
3
+ metadata.gz: ee64ccc49b552feba85f706f6bac12e3e533ce01
4
+ data.tar.gz: 8209e0cfc6486a354fee51bc126e5740fc12d7ad
5
5
  SHA512:
6
- metadata.gz: e999c4923ecb4dd3bf58efe5263de0990a4635c695b4246a856548577145f58730f5a42a3c82c4cc389ed5c84fd3d368878084b3972125488d3415b21b0fdbb8
7
- data.tar.gz: 0d6ddb5fa0451ddede77b7bf2430b80ac21c56006557fdf2e497448da1109afab1f0bc2bea67227987b761981b4c5d4bdf1d1a360703a1dfb7b97759be12fa86
6
+ metadata.gz: 703cb08e6050c4f3e43391bc6cf8ca3a45dfbd69a71117d2ee6338b3441d29d1cf858965f3757c12889850aac80c6a6b56d2e5c28988109334794346efb7bad4
7
+ data.tar.gz: 54d59ab71bb8a9619ba627e12ded651cb8d795fe315ed8cff7de52dad127b55812e29989da2c7191070c6da0c1689eb5860748c71f8be9f96f6f27dabd284270
@@ -0,0 +1,5 @@
1
+ require "test/propagation/injector"
2
+ require "test/propagation/extractor"
3
+ require "test/propagation/codec"
4
+ require "test/propagation/rack_codec"
5
+ require "test/propagation/text_map_codec"
@@ -0,0 +1,8 @@
1
+ module Test
2
+ module Propagation
3
+ class Codec
4
+ include Injector
5
+ include Extractor
6
+ end
7
+ end
8
+ end
@@ -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,12 @@
1
+ module Test
2
+ module Propagation
3
+ module Injector
4
+ # Inject a SpanContext into the given carrier
5
+ #
6
+ # @param span_context [SpanContext]
7
+ # @param carrier [Carrier] A carrier object
8
+ def inject(span_context, 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
- require_relative 'id_provider'
5
- require_relative 'span_context'
6
- require_relative 'span'
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
@@ -15,5 +15,9 @@ module Test
15
15
  def NotNull!(value)
16
16
  raise NullError, "Value must not be nil" unless value
17
17
  end
18
+
19
+ def Argument!(expression, message = "Illegal argument")
20
+ raise ArgumentError, message unless expression
21
+ end
18
22
  end
19
23
  end
data/test-tracer.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "test-tracer"
7
- spec.version = "1.0.0"
7
+ spec.version = "1.1.0"
8
8
  spec.authors = ["iaintshine"]
9
9
  spec.email = ["bodziomista@gmail.com"]
10
10
 
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.0.0
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-13 00:00:00.000000000 Z
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