zipkin-tracer 0.4.0 → 0.5.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 +5 -13
- data/lib/zipkin-tracer/config.rb +43 -0
- data/lib/zipkin-tracer/faraday/zipkin-tracer.rb +56 -0
- data/lib/zipkin-tracer/rack/zipkin-tracer.rb +116 -0
- data/lib/zipkin-tracer/version.rb +1 -1
- data/lib/zipkin-tracer.rb +6 -112
- metadata +69 -52
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MmZlNDUwMDI5ZmY5N2E0YjlmNWY0NGFhNDU4MWQ4OWNkYTA5YzE3MA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: cc36cf36304c766a560916c48018e38589f70ddf
|
4
|
+
data.tar.gz: 284ef99f881958de1282d5132a52c46441fdba7f
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
N2MwMWFjNjg4NzM4N2RhNDJjYTAzNDFiNDA1YzgxMjIxODhiYjIxMzk3ZjFm
|
11
|
-
ZDNlYjE4YzgyZjQyZTU2Mzk1ZDM0ZDc5ZTI5ZDUwZjMyMjJiZDA=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MWM4NDY3MGZhMzI4NDhlOGU1YmIxNTNiODdjM2U4M2FiNmM4ZDI1ODA2ODM4
|
14
|
-
MDI1NjExYjM2NzY5M2JlN2E4ZmYxODQ3OGVmZTQ1MWEzZWVmNTM4NWYzNjFh
|
15
|
-
Mjk5ZTVlOGNmZDliYjM3YzIyMWU3MDZhZTljZDQ4OWE3OWE3MjA=
|
6
|
+
metadata.gz: b092180723094e71621a49226c49af1f053d9576c48555c9212081278a3e67692b3d35678f1b5795605d1bc8aa00e9ebe091d810cec6f75a909ccefd4dd96bd9
|
7
|
+
data.tar.gz: 4f466e1962b76d1cf60bedb49648c43c233a6fe3a98db000026d2798371dcac289e558c4f13274caf956b6cbca7198cdd916e256398ed9d6517bc45d128c8746
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module ZipkinTracer
|
2
|
+
|
3
|
+
class Config
|
4
|
+
attr_reader :service_name, :service_port, :scribe_server, :zookeeper, :sample_rate,
|
5
|
+
:scribe_max_buffer, :annotate_plugin, :filter_plugin, :whitelist_plugin
|
6
|
+
|
7
|
+
def initialize(app, config_hash)
|
8
|
+
config = config_hash || app_config(app)
|
9
|
+
@service_name = config[:service_name]
|
10
|
+
@service_port = config[:service_port]
|
11
|
+
@scribe_server = config[:scribe_server]
|
12
|
+
@zookeeper = config[:zookeeper]
|
13
|
+
@sample_rate = config[:sample_rate] || DEFAULTS[:sample_rate]
|
14
|
+
@scribe_max_buffer = config[:scribe_max_buffer] || DEFAULTS[:scribe_max_buffer]
|
15
|
+
@annotate_plugin = config[:annotate_plugin] # call for trace annotation
|
16
|
+
@filter_plugin = config[:filter_plugin] # skip tracing if returns false
|
17
|
+
@whitelist_plugin = config[:whitelist_plugin] # force sampling if returns true
|
18
|
+
end
|
19
|
+
|
20
|
+
def using_scribe?
|
21
|
+
!!(@scribe_server && defined?(::Scribe))
|
22
|
+
end
|
23
|
+
|
24
|
+
def using_kafka?
|
25
|
+
!!(@zookeeper && RUBY_PLATFORM == 'java' && defined?(::Hermann))
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
DEFAULTS = {
|
31
|
+
scribe_max_buffer: 10,
|
32
|
+
sample_rate: 0.1
|
33
|
+
}
|
34
|
+
|
35
|
+
def app_config(app)
|
36
|
+
if app.respond_to?(:config) && app.config.respond_to?(:zipkin_tracer)
|
37
|
+
app.config.zipkin_tracer
|
38
|
+
else
|
39
|
+
{}
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'finagle-thrift'
|
3
|
+
require 'finagle-thrift/trace'
|
4
|
+
require 'uri'
|
5
|
+
|
6
|
+
module ZipkinTracer
|
7
|
+
class FaradayHandler < ::Faraday::Middleware
|
8
|
+
B3_HEADERS = {
|
9
|
+
:trace_id => "X-B3-TraceId",
|
10
|
+
:parent_id => "X-B3-ParentSpanId",
|
11
|
+
:span_id => "X-B3-SpanId",
|
12
|
+
:sampled => "X-B3-Sampled",
|
13
|
+
:flags => "X-B3-Flags"
|
14
|
+
}.freeze
|
15
|
+
|
16
|
+
def initialize(app, service_name=nil)
|
17
|
+
@app = app
|
18
|
+
@service_name = service_name
|
19
|
+
end
|
20
|
+
|
21
|
+
def call(env)
|
22
|
+
# handle either a URI object (passed by Faraday v0.8.x in testing), or something string-izable
|
23
|
+
url = env[:url].respond_to?(:host) ? env[:url] : URI.parse(env[:url].to_s)
|
24
|
+
service_name = @service_name || url.host.split('.').first # default to url-derived service name
|
25
|
+
endpoint = ::Trace::Endpoint.new(host_ip_for(url.host), url.port, service_name)
|
26
|
+
|
27
|
+
::Trace.unwind do
|
28
|
+
trace_id = ::Trace.id
|
29
|
+
::Trace.push(trace_id.next_id)
|
30
|
+
B3_HEADERS.each do |method, header|
|
31
|
+
env[:request_headers][header] = ::Trace.id.send(method).to_s
|
32
|
+
end
|
33
|
+
|
34
|
+
# annotate with method (GET/POST/etc.) and uri path
|
35
|
+
::Trace.set_rpc_name(env[:method].to_s.upcase)
|
36
|
+
::Trace.record(::Trace::BinaryAnnotation.new("http.uri", url.path, "STRING", endpoint))
|
37
|
+
::Trace.record(::Trace::Annotation.new(::Trace::Annotation::CLIENT_SEND, endpoint))
|
38
|
+
result = @app.call(env).on_complete do |renv|
|
39
|
+
# record HTTP status code on response
|
40
|
+
::Trace.record(::Trace::BinaryAnnotation.new("http.status", [renv[:status]].pack('n'), "I16", endpoint))
|
41
|
+
end
|
42
|
+
::Trace.record(::Trace::Annotation.new(::Trace::Annotation::CLIENT_RECV, endpoint))
|
43
|
+
result
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# get host IP for specified hostname, catching exceptions
|
48
|
+
def host_ip_for(hostname)
|
49
|
+
::Trace::Endpoint.host_to_i32(hostname)
|
50
|
+
rescue
|
51
|
+
# default to 0.0.0.0 if lookup fails
|
52
|
+
0x00000000
|
53
|
+
end
|
54
|
+
private :host_ip_for
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
# Copyright 2012 Twitter Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
require 'finagle-thrift'
|
15
|
+
require 'finagle-thrift/trace'
|
16
|
+
require 'scribe'
|
17
|
+
|
18
|
+
require 'zipkin-tracer/config'
|
19
|
+
require 'zipkin-tracer/careless_scribe'
|
20
|
+
|
21
|
+
if RUBY_PLATFORM == 'java'
|
22
|
+
require 'hermann/producer'
|
23
|
+
require 'zipkin-tracer/zipkin_kafka_tracer'
|
24
|
+
end
|
25
|
+
|
26
|
+
module ZipkinTracer extend self
|
27
|
+
|
28
|
+
class RackHandler
|
29
|
+
B3_REQUIRED_HEADERS = %w[HTTP_X_B3_TRACEID HTTP_X_B3_PARENTSPANID HTTP_X_B3_SPANID HTTP_X_B3_SAMPLED]
|
30
|
+
B3_OPT_HEADERS = %w[HTTP_X_B3_FLAGS]
|
31
|
+
|
32
|
+
def initialize(app, config=nil)
|
33
|
+
@app = app
|
34
|
+
@lock = Mutex.new
|
35
|
+
|
36
|
+
config = Config.new(app, config)
|
37
|
+
|
38
|
+
::Trace.tracer = if config.using_scribe?
|
39
|
+
scribe = config.scribe_server ? Scribe.new(config.scribe_server) : Scribe.new()
|
40
|
+
::Trace::ZipkinTracer.new(CarelessScribe.new(scribe), config.scribe_max_buffer)
|
41
|
+
elsif config.using_kafka?
|
42
|
+
kafkaTracer = ::Trace::ZipkinKafkaTracer.new
|
43
|
+
kafkaTracer.connect(config.zookeeper)
|
44
|
+
kafkaTracer
|
45
|
+
end
|
46
|
+
@config = config
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
def call(env)
|
51
|
+
# skip certain requests
|
52
|
+
return @app.call(env) if filtered?(env)
|
53
|
+
|
54
|
+
::Trace.default_endpoint = ::Trace.default_endpoint.with_service_name(@config.service_name).with_port(@config.service_port)
|
55
|
+
::Trace.sample_rate=(@config.sample_rate)
|
56
|
+
whitelisted = force_sample?(env)
|
57
|
+
id = get_or_create_trace_id(env, whitelisted) # note that this depends on the sample rate being set
|
58
|
+
tracing_filter(id, env, whitelisted) { @app.call(env) }
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
def annotate(env, status, response_headers, response_body)
|
63
|
+
@config.annotate_plugin.call(env, status, response_headers, response_body) if @config.annotate_plugin
|
64
|
+
end
|
65
|
+
|
66
|
+
def filtered?(env)
|
67
|
+
@config.filter_plugin && !@config.filter_plugin.call(env)
|
68
|
+
end
|
69
|
+
|
70
|
+
def force_sample?(env)
|
71
|
+
@config.whitelist_plugin && @config.whitelist_plugin.call(env)
|
72
|
+
end
|
73
|
+
|
74
|
+
def tracing_filter(trace_id, env, whitelisted=false)
|
75
|
+
synchronize do
|
76
|
+
::Trace.push(trace_id)
|
77
|
+
::Trace.set_rpc_name(env["REQUEST_METHOD"]) # get/post and all that jazz
|
78
|
+
::Trace.record(::Trace::BinaryAnnotation.new("http.uri", env["PATH_INFO"], "STRING", ::Trace.default_endpoint))
|
79
|
+
::Trace.record(::Trace::Annotation.new(::Trace::Annotation::SERVER_RECV, ::Trace.default_endpoint))
|
80
|
+
::Trace.record(::Trace::Annotation.new('whitelisted', ::Trace.default_endpoint)) if whitelisted
|
81
|
+
end
|
82
|
+
status, headers, body = yield if block_given?
|
83
|
+
ensure
|
84
|
+
synchronize do
|
85
|
+
::Trace.record(::Trace::Annotation.new(::Trace::Annotation::SERVER_SEND, ::Trace.default_endpoint))
|
86
|
+
annotate(env, status, headers, body)
|
87
|
+
::Trace.pop
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
def synchronize(&block)
|
94
|
+
@lock.synchronize do
|
95
|
+
yield
|
96
|
+
end
|
97
|
+
rescue# Nothing wonky that the tracer does should stop us from using the app!!!
|
98
|
+
end
|
99
|
+
|
100
|
+
def get_or_create_trace_id(env, whitelisted, default_flags = ::Trace::Flags::EMPTY)
|
101
|
+
trace_parameters = if B3_REQUIRED_HEADERS.all? { |key| env.has_key?(key) }
|
102
|
+
env.values_at(*B3_REQUIRED_HEADERS)
|
103
|
+
else
|
104
|
+
new_id = Trace.generate_id
|
105
|
+
[new_id, nil, new_id, ("true" if whitelisted || Trace.should_sample?)]
|
106
|
+
end
|
107
|
+
trace_parameters[3] = (trace_parameters[3] == "true")
|
108
|
+
|
109
|
+
trace_parameters += env.values_at(*B3_OPT_HEADERS) # always check flags
|
110
|
+
trace_parameters[4] = (trace_parameters[4] || default_flags).to_i
|
111
|
+
|
112
|
+
Trace::TraceId.new(*trace_parameters)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
data/lib/zipkin-tracer.rb
CHANGED
@@ -1,113 +1,7 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
require 'finagle-thrift'
|
15
|
-
require 'finagle-thrift/trace'
|
16
|
-
require 'scribe'
|
1
|
+
require 'zipkin-tracer/rack/zipkin-tracer'
|
17
2
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
module ZipkinTracer extend self
|
26
|
-
|
27
|
-
class RackHandler
|
28
|
-
B3_REQUIRED_HEADERS = %w[HTTP_X_B3_TRACEID HTTP_X_B3_PARENTSPANID HTTP_X_B3_SPANID HTTP_X_B3_SAMPLED]
|
29
|
-
B3_OPT_HEADERS = %w[HTTP_X_B3_FLAGS]
|
30
|
-
|
31
|
-
def initialize(app, config=nil)
|
32
|
-
@app = app
|
33
|
-
@lock = Mutex.new
|
34
|
-
|
35
|
-
config ||= app.config.zipkin_tracer # if not specified, try on app (e.g. Rails 3+)
|
36
|
-
@service_name = config[:service_name]
|
37
|
-
@service_port = config[:service_port]
|
38
|
-
|
39
|
-
::Trace.tracer = if config[:scribe_server] && defined?(::Scribe)
|
40
|
-
scribe = config[:scribe_server] ? Scribe.new(config[:scribe_server]) : Scribe.new()
|
41
|
-
scribe_max_buffer = config[:scribe_max_buffer] ? config[:scribe_max_buffer] : 10
|
42
|
-
::Trace::ZipkinTracer.new(CarelessScribe.new(scribe), scribe_max_buffer)
|
43
|
-
elsif config[:zookeeper] && RUBY_PLATFORM == 'java' && defined?(::Hermann)
|
44
|
-
kafkaTracer = ::Trace::ZipkinKafkaTracer.new
|
45
|
-
kafkaTracer.connect(config[:zookeeper])
|
46
|
-
kafkaTracer
|
47
|
-
end
|
48
|
-
|
49
|
-
@sample_rate = config[:sample_rate] ? config[:sample_rate] : 0.1
|
50
|
-
@annotate_plugin = config[:annotate_plugin] # call for trace annotation
|
51
|
-
@filter_plugin = config[:filter_plugin] # skip tracing if returns false
|
52
|
-
@whitelist_plugin = config[:whitelist_plugin] # force sampling if returns true
|
53
|
-
end
|
54
|
-
|
55
|
-
def call(env)
|
56
|
-
# skip certain requests
|
57
|
-
return @app.call(env) if filtered?(env)
|
58
|
-
|
59
|
-
::Trace.default_endpoint = ::Trace.default_endpoint.with_service_name(@service_name).with_port(@service_port)
|
60
|
-
::Trace.sample_rate=(@sample_rate)
|
61
|
-
whitelisted = force_sample?(env)
|
62
|
-
id = get_or_create_trace_id(env, whitelisted) # note that this depends on the sample rate being set
|
63
|
-
tracing_filter(id, env, whitelisted) { @app.call(env) }
|
64
|
-
end
|
65
|
-
|
66
|
-
private
|
67
|
-
def annotate(env, status, response_headers, response_body)
|
68
|
-
@annotate_plugin.call(env, status, response_headers, response_body) if @annotate_plugin
|
69
|
-
end
|
70
|
-
|
71
|
-
def filtered?(env)
|
72
|
-
@filter_plugin && !@filter_plugin.call(env)
|
73
|
-
end
|
74
|
-
|
75
|
-
def force_sample?(env)
|
76
|
-
@whitelist_plugin && @whitelist_plugin.call(env)
|
77
|
-
end
|
78
|
-
|
79
|
-
def tracing_filter(trace_id, env, whitelisted=false)
|
80
|
-
@lock.synchronize do
|
81
|
-
::Trace.push(trace_id)
|
82
|
-
::Trace.set_rpc_name(env["REQUEST_METHOD"]) # get/post and all that jazz
|
83
|
-
::Trace.record(::Trace::BinaryAnnotation.new("http.uri", env["PATH_INFO"], "STRING", ::Trace.default_endpoint))
|
84
|
-
::Trace.record(::Trace::Annotation.new(::Trace::Annotation::SERVER_RECV, ::Trace.default_endpoint))
|
85
|
-
::Trace.record(::Trace::Annotation.new('whitelisted', ::Trace.default_endpoint)) if whitelisted
|
86
|
-
end
|
87
|
-
status, headers, body = yield if block_given?
|
88
|
-
ensure
|
89
|
-
@lock.synchronize do
|
90
|
-
::Trace.record(::Trace::Annotation.new(::Trace::Annotation::SERVER_SEND, ::Trace.default_endpoint))
|
91
|
-
annotate(env, status, headers, body)
|
92
|
-
::Trace.pop
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
private
|
97
|
-
def get_or_create_trace_id(env, whitelisted, default_flags = ::Trace::Flags::EMPTY)
|
98
|
-
trace_parameters = if B3_REQUIRED_HEADERS.all? { |key| env.has_key?(key) }
|
99
|
-
env.values_at(*B3_REQUIRED_HEADERS)
|
100
|
-
else
|
101
|
-
new_id = Trace.generate_id
|
102
|
-
[new_id, nil, new_id, ("true" if whitelisted || Trace.should_sample?)]
|
103
|
-
end
|
104
|
-
trace_parameters[3] = (trace_parameters[3] == "true")
|
105
|
-
|
106
|
-
trace_parameters += env.values_at(*B3_OPT_HEADERS) # always check flags
|
107
|
-
trace_parameters[4] = (trace_parameters[4] || default_flags).to_i
|
108
|
-
|
109
|
-
Trace::TraceId.new(*trace_parameters)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
end
|
3
|
+
begin
|
4
|
+
require 'faraday'
|
5
|
+
require 'zipkin-tracer/faraday/zipkin-tracer'
|
6
|
+
rescue LoadError #Faraday is not available, we do not load our code.
|
7
|
+
end
|
metadata
CHANGED
@@ -1,129 +1,143 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zipkin-tracer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Franklin Hu
|
8
8
|
- R Tyler Croy
|
9
9
|
- James Way
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
date: 2015-09-10 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: finagle-thrift
|
17
|
-
|
17
|
+
version_requirements: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: 1.4.1
|
22
|
-
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirement: !ruby/object:Gem::Requirement
|
25
23
|
requirements:
|
26
24
|
- - ~>
|
27
25
|
- !ruby/object:Gem::Version
|
28
26
|
version: 1.4.1
|
27
|
+
prerelease: false
|
28
|
+
type: :runtime
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: scribe
|
31
|
-
|
31
|
+
version_requirements: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
33
|
- - ~>
|
34
34
|
- !ruby/object:Gem::Version
|
35
35
|
version: 0.2.4
|
36
|
-
|
37
|
-
prerelease: false
|
38
|
-
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
requirement: !ruby/object:Gem::Requirement
|
39
37
|
requirements:
|
40
38
|
- - ~>
|
41
39
|
- !ruby/object:Gem::Version
|
42
40
|
version: 0.2.4
|
41
|
+
prerelease: false
|
42
|
+
type: :runtime
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: rack
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ~>
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.6'
|
45
50
|
requirement: !ruby/object:Gem::Requirement
|
46
51
|
requirements:
|
47
|
-
- -
|
52
|
+
- - ~>
|
48
53
|
- !ruby/object:Gem::Version
|
49
|
-
version: '
|
50
|
-
type: :runtime
|
54
|
+
version: '1.6'
|
51
55
|
prerelease: false
|
56
|
+
type: :runtime
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: rspec
|
52
59
|
version_requirements: !ruby/object:Gem::Requirement
|
53
60
|
requirements:
|
54
|
-
- -
|
61
|
+
- - ~>
|
55
62
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
57
|
-
- !ruby/object:Gem::Dependency
|
58
|
-
name: rspec
|
63
|
+
version: '3.3'
|
59
64
|
requirement: !ruby/object:Gem::Requirement
|
60
65
|
requirements:
|
61
66
|
- - ~>
|
62
67
|
- !ruby/object:Gem::Version
|
63
|
-
version: 3.
|
64
|
-
type: :development
|
68
|
+
version: '3.3'
|
65
69
|
prerelease: false
|
70
|
+
type: :development
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: rack-test
|
66
73
|
version_requirements: !ruby/object:Gem::Requirement
|
67
74
|
requirements:
|
68
75
|
- - ~>
|
69
76
|
- !ruby/object:Gem::Version
|
70
|
-
version:
|
71
|
-
- !ruby/object:Gem::Dependency
|
72
|
-
name: rack-test
|
77
|
+
version: '0.6'
|
73
78
|
requirement: !ruby/object:Gem::Requirement
|
74
79
|
requirements:
|
75
|
-
- -
|
80
|
+
- - ~>
|
76
81
|
- !ruby/object:Gem::Version
|
77
|
-
version: '0'
|
78
|
-
type: :development
|
82
|
+
version: '0.6'
|
79
83
|
prerelease: false
|
84
|
+
type: :development
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: rake
|
80
87
|
version_requirements: !ruby/object:Gem::Requirement
|
81
88
|
requirements:
|
82
|
-
- -
|
89
|
+
- - ~>
|
83
90
|
- !ruby/object:Gem::Version
|
84
|
-
version: '0'
|
85
|
-
- !ruby/object:Gem::Dependency
|
86
|
-
name: rake
|
91
|
+
version: '10.0'
|
87
92
|
requirement: !ruby/object:Gem::Requirement
|
88
93
|
requirements:
|
89
|
-
- -
|
94
|
+
- - ~>
|
90
95
|
- !ruby/object:Gem::Version
|
91
|
-
version: '0'
|
92
|
-
type: :development
|
96
|
+
version: '10.0'
|
93
97
|
prerelease: false
|
98
|
+
type: :development
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: pry
|
94
101
|
version_requirements: !ruby/object:Gem::Requirement
|
95
102
|
requirements:
|
96
|
-
- -
|
103
|
+
- - ~>
|
97
104
|
- !ruby/object:Gem::Version
|
98
|
-
version: '0'
|
99
|
-
- !ruby/object:Gem::Dependency
|
100
|
-
name: pry
|
105
|
+
version: '0.10'
|
101
106
|
requirement: !ruby/object:Gem::Requirement
|
102
107
|
requirements:
|
103
|
-
- -
|
108
|
+
- - ~>
|
104
109
|
- !ruby/object:Gem::Version
|
105
|
-
version: '0'
|
106
|
-
type: :development
|
110
|
+
version: '0.10'
|
107
111
|
prerelease: false
|
112
|
+
type: :development
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: faraday
|
108
115
|
version_requirements: !ruby/object:Gem::Requirement
|
109
116
|
requirements:
|
110
|
-
- -
|
117
|
+
- - ~>
|
111
118
|
- !ruby/object:Gem::Version
|
112
|
-
version: '0'
|
113
|
-
- !ruby/object:Gem::Dependency
|
114
|
-
name: hermann
|
119
|
+
version: '0.8'
|
115
120
|
requirement: !ruby/object:Gem::Requirement
|
116
121
|
requirements:
|
117
122
|
- - ~>
|
118
123
|
- !ruby/object:Gem::Version
|
119
|
-
version: '0.
|
120
|
-
type: :development
|
124
|
+
version: '0.8'
|
121
125
|
prerelease: false
|
126
|
+
type: :development
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: hermann
|
122
129
|
version_requirements: !ruby/object:Gem::Requirement
|
123
130
|
requirements:
|
124
131
|
- - ~>
|
125
132
|
- !ruby/object:Gem::Version
|
126
133
|
version: '0.25'
|
134
|
+
requirement: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ~>
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0.25'
|
139
|
+
prerelease: false
|
140
|
+
type: :development
|
127
141
|
description: Adds tracing instrumentation for ruby applications
|
128
142
|
email:
|
129
143
|
- franklin@twitter.com
|
@@ -133,31 +147,34 @@ executables: []
|
|
133
147
|
extensions: []
|
134
148
|
extra_rdoc_files: []
|
135
149
|
files:
|
150
|
+
- lib/zipkin-tracer.rb
|
136
151
|
- lib/zipkin-tracer/careless_scribe.rb
|
152
|
+
- lib/zipkin-tracer/config.rb
|
137
153
|
- lib/zipkin-tracer/version.rb
|
138
154
|
- lib/zipkin-tracer/zipkin_kafka_tracer.rb
|
139
|
-
- lib/zipkin-tracer.rb
|
155
|
+
- lib/zipkin-tracer/faraday/zipkin-tracer.rb
|
156
|
+
- lib/zipkin-tracer/rack/zipkin-tracer.rb
|
140
157
|
homepage: https://github.com/openzipkin/zipkin-tracer
|
141
158
|
licenses: []
|
142
159
|
metadata: {}
|
143
|
-
post_install_message:
|
160
|
+
post_install_message:
|
144
161
|
rdoc_options: []
|
145
162
|
require_paths:
|
146
163
|
- lib
|
147
164
|
required_ruby_version: !ruby/object:Gem::Requirement
|
148
165
|
requirements:
|
149
|
-
- -
|
166
|
+
- - '>='
|
150
167
|
- !ruby/object:Gem::Version
|
151
168
|
version: '0'
|
152
169
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
170
|
requirements:
|
154
|
-
- -
|
171
|
+
- - '>='
|
155
172
|
- !ruby/object:Gem::Version
|
156
173
|
version: 1.3.5
|
157
174
|
requirements: []
|
158
|
-
rubyforge_project:
|
159
|
-
rubygems_version: 2.1.
|
160
|
-
signing_key:
|
175
|
+
rubyforge_project:
|
176
|
+
rubygems_version: 2.1.9
|
177
|
+
signing_key:
|
161
178
|
specification_version: 4
|
162
179
|
summary: Ruby tracing via Zipkin
|
163
180
|
test_files: []
|