opentracing 0.3.0 → 0.3.1
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/.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
|