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 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