opentracing 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -1
- data/README.md +15 -1
- data/lib/opentracing.rb +3 -2
- data/lib/opentracing/reference.rb +88 -0
- data/lib/opentracing/span.rb +6 -10
- data/lib/opentracing/tracer.rb +14 -6
- data/lib/opentracing/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61ca714ff9464163db6bb5a8a868c2047c107980
|
4
|
+
data.tar.gz: 8c796e19b4a5ce768e24e4479260a55de79c5c95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79a42b7afe696afe3d476e778de5dc71889dea2b24e49206bd2201e7245b470fea039c3ce0510bcabc9dff46f90879fd5eeba237cb50b6a3beddc487848b78e0
|
7
|
+
data.tar.gz: 5ffb674ee8757cff0944129872bf8929f6987430adc2380a6b54e865482a41d93355d342a9bd3fea249f15d7217e657a1b3094a63594978b60b1294b51eb260d
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -75,16 +75,30 @@ span.finish
|
|
75
75
|
|
76
76
|
### Serializing to the wire
|
77
77
|
|
78
|
+
Using `Net::HTTP`:
|
78
79
|
```ruby
|
79
80
|
client = Net::HTTP.new("http://myservice")
|
80
81
|
req = Net::HTTP::Post.new("/")
|
81
82
|
|
82
83
|
span = OpenTracing.start_span("my_span")
|
83
|
-
OpenTracing.inject(span.context, OpenTracing::FORMAT_RACK,
|
84
|
+
OpenTracing.inject(span.context, OpenTracing::FORMAT_RACK, req)
|
84
85
|
res = client.request(req)
|
85
86
|
#...
|
86
87
|
```
|
87
88
|
|
89
|
+
Using Faraday middleware:
|
90
|
+
```ruby
|
91
|
+
class TraceMiddleware < Faraday::Middleware
|
92
|
+
def call(env)
|
93
|
+
span = OpenTracing.start_span("my_span")
|
94
|
+
OpenTracing.inject(span.context, OpenTracing::FORMAT_RACK, env)
|
95
|
+
@app.call(env).on_complete do
|
96
|
+
span.finish
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
```
|
101
|
+
|
88
102
|
### Deserializing from the wire
|
89
103
|
|
90
104
|
The OpenTracing Ruby gem provides a specific Rack header extraction format,
|
data/lib/opentracing.rb
CHANGED
@@ -2,6 +2,7 @@ require "forwardable"
|
|
2
2
|
require "opentracing/version"
|
3
3
|
require "opentracing/span_context"
|
4
4
|
require "opentracing/span"
|
5
|
+
require "opentracing/reference"
|
5
6
|
require "opentracing/tracer"
|
6
7
|
|
7
8
|
module OpenTracing
|
@@ -30,8 +31,8 @@ module OpenTracing
|
|
30
31
|
|
31
32
|
class << self
|
32
33
|
extend Forwardable
|
33
|
-
# Global tracer to be used when OpenTracing.start_span is called
|
34
|
+
# Global tracer to be used when OpenTracing.start_span, inject or extract is called
|
34
35
|
attr_accessor :global_tracer
|
35
|
-
|
36
|
+
def_delegators :global_tracer, :start_span, :inject, :extract
|
36
37
|
end
|
37
38
|
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module OpenTracing
|
2
|
+
class Reference
|
3
|
+
CHILD_OF = 'child_of'.freeze
|
4
|
+
FOLLOWS_FROM = 'follows_from'.freeze
|
5
|
+
|
6
|
+
# @param context [SpanContext, Span] child_of context refers to a
|
7
|
+
# parent Span that caused *and* somehow depends upon the new child Span.
|
8
|
+
# Often (but not always), the parent Span cannot finish until the child
|
9
|
+
# Span does.
|
10
|
+
#
|
11
|
+
# An timing diagram for a child Span that is blocked on the new Span:
|
12
|
+
#
|
13
|
+
# [-Parent Span----------]
|
14
|
+
# [-Child Span----]
|
15
|
+
#
|
16
|
+
# See http://opentracing.io/documentation/pages/spec
|
17
|
+
#
|
18
|
+
# @return [Reference] a ChildOf reference
|
19
|
+
#
|
20
|
+
# @example
|
21
|
+
# root_span = OpenTracing.start_span('root operation')
|
22
|
+
# child_span = OpenTracing.start_span('child operation', references: [
|
23
|
+
# OpenTracing::Reference.child_of(root_span)
|
24
|
+
# ])
|
25
|
+
#
|
26
|
+
def self.child_of(context)
|
27
|
+
if context.is_a?(Span)
|
28
|
+
context = context.context
|
29
|
+
end
|
30
|
+
|
31
|
+
Reference.new(CHILD_OF, context)
|
32
|
+
end
|
33
|
+
|
34
|
+
# @param context [SpanContext, Span] follows_from context refers to a
|
35
|
+
# parent Span that does not depend in any way on the result of the new
|
36
|
+
# child Span. For instance, one might use FollowsFrom Span to describe
|
37
|
+
# pipeline stages separated by queues, or a fire-and-forget cache insert
|
38
|
+
# at the tail end of a web request.
|
39
|
+
#
|
40
|
+
# A FollowsFrom Span is part of the same logical trace as the new Span:
|
41
|
+
# i.e., the new Span is somehow caused by the work of its FollowsFrom
|
42
|
+
# Span.
|
43
|
+
#
|
44
|
+
# All of the following could be valid timing diagrams for children that
|
45
|
+
# "FollowFrom" a parent:
|
46
|
+
#
|
47
|
+
# [-Parent Span--] [-Child Span-]
|
48
|
+
#
|
49
|
+
# [-Parent Span--]
|
50
|
+
# [-Child Span-]
|
51
|
+
#
|
52
|
+
# [-Parent Span-]
|
53
|
+
# [-Child Span-]
|
54
|
+
#
|
55
|
+
# See http://opentracing.io/documentation/pages/spec
|
56
|
+
#
|
57
|
+
# @return [Reference] a FollowsFrom reference
|
58
|
+
#
|
59
|
+
# @example
|
60
|
+
# context = OpenTracing.extract(OpenTracing::FORMAT_RACK, rack_env)
|
61
|
+
# span = OpenTracing.start_span('following operation', references: [
|
62
|
+
# OpenTracing::Reference.follows_from(context)
|
63
|
+
# ])
|
64
|
+
#
|
65
|
+
def self.follows_from(context)
|
66
|
+
if context.is_a?(Span)
|
67
|
+
context = context.context
|
68
|
+
end
|
69
|
+
|
70
|
+
Reference.new(FOLLOWS_FROM, context)
|
71
|
+
end
|
72
|
+
|
73
|
+
def initialize(type, context)
|
74
|
+
@type = type
|
75
|
+
@context = context
|
76
|
+
end
|
77
|
+
|
78
|
+
# Return [String] reference type
|
79
|
+
def type
|
80
|
+
@type
|
81
|
+
end
|
82
|
+
|
83
|
+
# @return [SpanContext] the context of a span this reference is referencing
|
84
|
+
def context
|
85
|
+
@context
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
data/lib/opentracing/span.rb
CHANGED
@@ -1,27 +1,23 @@
|
|
1
1
|
module OpenTracing
|
2
|
-
# Span represents an
|
2
|
+
# Span represents an OpenTracing Span
|
3
3
|
#
|
4
4
|
# See http://www.opentracing.io for more information.
|
5
5
|
class Span
|
6
6
|
NOOP_INSTANCE = Span.new.freeze
|
7
7
|
|
8
8
|
# Set the name of the operation
|
9
|
+
#
|
10
|
+
# @param [String] name
|
9
11
|
def operation_name=(name)
|
10
12
|
end
|
11
13
|
|
12
14
|
# Span Context
|
15
|
+
#
|
16
|
+
# @return [SpanContext]
|
13
17
|
def context
|
14
18
|
SpanContext::NOOP_INSTANCE
|
15
19
|
end
|
16
20
|
|
17
|
-
# Creates a new {Span}
|
18
|
-
#
|
19
|
-
# @param tracer [Tracer] the tracer that created this span
|
20
|
-
# @param context [SpanContext] the context of the span
|
21
|
-
# @return [Span] a new Span
|
22
|
-
def initialize(tracer:, context:)
|
23
|
-
end
|
24
|
-
|
25
21
|
# Set a tag value on this span
|
26
22
|
# @param key [String] the key of the tag
|
27
23
|
# @param value [String, Numeric, Boolean] the value of the tag. If it's not
|
@@ -39,7 +35,7 @@ module OpenTracing
|
|
39
35
|
|
40
36
|
# Get a baggage item
|
41
37
|
# @param key [String] the key of the baggage item
|
42
|
-
# @return
|
38
|
+
# @return [String] value of the baggage item
|
43
39
|
def get_baggage_item(key)
|
44
40
|
nil
|
45
41
|
end
|
data/lib/opentracing/tracer.rb
CHANGED
@@ -1,17 +1,25 @@
|
|
1
1
|
module OpenTracing
|
2
2
|
class Tracer
|
3
|
-
# TODO(bhs): Support FollowsFrom and multiple references
|
4
|
-
|
5
3
|
# Starts a new span.
|
6
4
|
#
|
7
5
|
# @param operation_name [String] The operation name for the Span
|
8
|
-
#
|
6
|
+
#
|
7
|
+
# @param child_of [SpanContext, Span] SpanContext that acts as a parent to
|
9
8
|
# the newly-started Span. If a Span instance is provided, its
|
10
|
-
#
|
9
|
+
# context is automatically substituted. See [Reference] for more
|
10
|
+
# information.
|
11
|
+
#
|
12
|
+
# If specified, the `references` paramater must be omitted.
|
13
|
+
#
|
14
|
+
# @param references [Array<Reference>] An array of reference
|
15
|
+
# objects that identify one or more parent SpanContexts.
|
16
|
+
#
|
11
17
|
# @param start_time [Time] When the Span started, if not now
|
18
|
+
#
|
12
19
|
# @param tags [Hash] Tags to assign to the Span at start time
|
20
|
+
#
|
13
21
|
# @return [Span] The newly-started Span
|
14
|
-
def start_span(operation_name, child_of: nil, start_time: Time.now, tags: nil)
|
22
|
+
def start_span(operation_name, child_of: nil, references: nil, start_time: Time.now, tags: nil)
|
15
23
|
Span::NOOP_INSTANCE
|
16
24
|
end
|
17
25
|
|
@@ -33,7 +41,7 @@ module OpenTracing
|
|
33
41
|
#
|
34
42
|
# @param format [OpenTracing::FORMAT_TEXT_MAP, OpenTracing::FORMAT_BINARY, OpenTracing::FORMAT_RACK]
|
35
43
|
# @param carrier [Carrier] A carrier object of the type dictated by the specified `format`
|
36
|
-
# @return [SpanContext] the extracted SpanContext or nil if none could be found
|
44
|
+
# @return [SpanContext, nil] the extracted SpanContext or nil if none could be found
|
37
45
|
def extract(format, carrier)
|
38
46
|
case format
|
39
47
|
when OpenTracing::FORMAT_TEXT_MAP, OpenTracing::FORMAT_BINARY, OpenTracing::FORMAT_RACK
|
data/lib/opentracing/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opentracing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ngauthier
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-
|
13
|
+
date: 2017-08-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -101,6 +101,7 @@ files:
|
|
101
101
|
- bin/setup
|
102
102
|
- lib/opentracing.rb
|
103
103
|
- lib/opentracing/carrier.rb
|
104
|
+
- lib/opentracing/reference.rb
|
104
105
|
- lib/opentracing/span.rb
|
105
106
|
- lib/opentracing/span_context.rb
|
106
107
|
- lib/opentracing/tracer.rb
|