zipkin-tracer 0.21.2 → 0.22.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 +4 -4
- data/lib/zipkin-tracer/config.rb +13 -3
- data/lib/zipkin-tracer/rack/zipkin-tracer.rb +22 -6
- data/lib/zipkin-tracer/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e370dd751832be287e591eb227b01384f939a87
|
4
|
+
data.tar.gz: 1c14cb00ffa226c6f301130e543ac6bd4e4b81a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5403b8f35d8ae2c2b63e84b8b205bd89f54790c2ccada5e60e83c6d5f64cdd3315b28a765149d47269327f9bca1d07229dfb59c248b7959032fc5e6d4bad47c2
|
7
|
+
data.tar.gz: bc38a24c9a4dcc616f662bf9009009abd437e967d519e93b68d9a015a3a1fb08627755d7a396d710726d96b4c185c03d69cb4b6917e58ae6b0a0cfd3a81e6a80
|
data/lib/zipkin-tracer/config.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'logger'
|
2
2
|
require 'zipkin-tracer/application'
|
3
|
+
require 'zipkin-tracer/rack/zipkin-tracer'
|
3
4
|
|
4
5
|
module ZipkinTracer
|
5
6
|
# Configuration of this gem. It reads the configuration and provides default values
|
@@ -7,7 +8,7 @@ module ZipkinTracer
|
|
7
8
|
attr_reader :service_name, :service_port, :json_api_host,
|
8
9
|
:zookeeper, :sample_rate, :logger, :log_tracing,
|
9
10
|
:annotate_plugin, :filter_plugin, :whitelist_plugin,
|
10
|
-
:sampled_as_boolean
|
11
|
+
:sampled_as_boolean, :record_on_server_receive
|
11
12
|
|
12
13
|
def initialize(app, config_hash)
|
13
14
|
config = config_hash || Application.config(app)
|
@@ -30,7 +31,6 @@ module ZipkinTracer
|
|
30
31
|
# A block of code which can be called to force sampling. Forces sampling if returns true
|
31
32
|
@whitelist_plugin = config[:whitelist_plugin]
|
32
33
|
@logger = Application.logger
|
33
|
-
@log_tracing = config[:log_tracing] # Was the logger in fact setup by the client?
|
34
34
|
# Was the logger in fact setup by the client?
|
35
35
|
@log_tracing = config[:log_tracing]
|
36
36
|
# When set to false, it uses 1/0 in the 'X-B3-Sampled' header, else uses true/false
|
@@ -39,6 +39,9 @@ module ZipkinTracer
|
|
39
39
|
if @sampled_as_boolean
|
40
40
|
@logger && @logger.warn("Using a boolean in the Sampled header is deprecated. Consider setting sampled_as_boolean to false")
|
41
41
|
end
|
42
|
+
# Record the given tags on server receive, even if the zipkin headers were present in the incoming request?
|
43
|
+
@record_on_server_receive = parse_tags(config[:record_on_server_receive])
|
44
|
+
|
42
45
|
Trace.sample_rate = @sample_rate
|
43
46
|
end
|
44
47
|
|
@@ -62,10 +65,17 @@ module ZipkinTracer
|
|
62
65
|
sampled_as_boolean: true
|
63
66
|
}
|
64
67
|
|
68
|
+
def parse_tags(tag_names)
|
69
|
+
return {} unless present?(tag_names)
|
70
|
+
names = tag_names.split(",").map(&:strip)
|
71
|
+
(ZipkinTracer::RackHandler::DEFAULT_SERVER_RECV_TAGS.keys & names).each_with_object({}) do |name, tags|
|
72
|
+
tags[name] = ZipkinTracer::RackHandler::DEFAULT_SERVER_RECV_TAGS[name]
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
65
76
|
def present?(str)
|
66
77
|
return false if str.nil?
|
67
78
|
!!(/\A[[:space:]]*\z/ !~ str)
|
68
79
|
end
|
69
|
-
|
70
80
|
end
|
71
81
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'rack'
|
1
2
|
require 'finagle-thrift/trace'
|
2
3
|
require 'finagle-thrift/tracer'
|
3
4
|
require 'zipkin-tracer/config'
|
@@ -8,6 +9,14 @@ module ZipkinTracer
|
|
8
9
|
# This middleware reads Zipkin headers from the request and sets/creates a Trace.id usable by the rest of the app
|
9
10
|
# It will also send the trace to the Zipkin service using one of the methods configured.
|
10
11
|
class RackHandler
|
12
|
+
# the following constants are defined only from rack 1.6
|
13
|
+
PATH_INFO = Rack::PATH_INFO rescue 'PATH_INFO'.freeze
|
14
|
+
REQUEST_METHOD = Rack::REQUEST_METHOD rescue 'REQUEST_METHOD'.freeze
|
15
|
+
|
16
|
+
DEFAULT_SERVER_RECV_TAGS = {
|
17
|
+
Trace::BinaryAnnotation::PATH => PATH_INFO
|
18
|
+
}.freeze
|
19
|
+
|
11
20
|
def initialize(app, config = nil)
|
12
21
|
@app = app
|
13
22
|
@config = Config.new(app, config).freeze
|
@@ -21,7 +30,7 @@ module ZipkinTracer
|
|
21
30
|
if !trace_id.sampled? || !routable_request?(env)
|
22
31
|
@app.call(env)
|
23
32
|
else
|
24
|
-
@tracer.with_new_span(trace_id, env[
|
33
|
+
@tracer.with_new_span(trace_id, env[REQUEST_METHOD].to_s.downcase) do |span|
|
25
34
|
trace!(span, zipkin_env) { @app.call(env) }
|
26
35
|
end
|
27
36
|
end
|
@@ -31,7 +40,7 @@ module ZipkinTracer
|
|
31
40
|
private
|
32
41
|
|
33
42
|
def routable_request?(env)
|
34
|
-
Application.routable_request?(env[
|
43
|
+
Application.routable_request?(env[PATH_INFO], env[REQUEST_METHOD])
|
35
44
|
end
|
36
45
|
|
37
46
|
def annotate_plugin(env, status, response_headers, response_body)
|
@@ -39,8 +48,7 @@ module ZipkinTracer
|
|
39
48
|
end
|
40
49
|
|
41
50
|
def trace!(span, zipkin_env, &block)
|
42
|
-
|
43
|
-
trace_request_information(span, zipkin_env.env) unless zipkin_env.called_with_zipkin_headers?
|
51
|
+
trace_request_information(span, zipkin_env)
|
44
52
|
span.record(Trace::Annotation::SERVER_RECV)
|
45
53
|
span.record('whitelisted') if zipkin_env.force_sample?
|
46
54
|
status, headers, body = yield
|
@@ -49,8 +57,16 @@ module ZipkinTracer
|
|
49
57
|
span.record(Trace::Annotation::SERVER_SEND)
|
50
58
|
end
|
51
59
|
|
52
|
-
def trace_request_information(span,
|
53
|
-
|
60
|
+
def trace_request_information(span, zipkin_env)
|
61
|
+
tags = if !@config.record_on_server_receive.empty?
|
62
|
+
# if the user specified tags to record on server receive, use these no matter what
|
63
|
+
@config.record_on_server_receive
|
64
|
+
elsif !zipkin_env.called_with_zipkin_headers?
|
65
|
+
# if the request comes from a non zipkin-enabled source record the default tags
|
66
|
+
DEFAULT_SERVER_RECV_TAGS
|
67
|
+
end
|
68
|
+
return if tags.nil?
|
69
|
+
tags.each { |annotation_key, env_key| span.record_tag(annotation_key, zipkin_env.env[env_key]) }
|
54
70
|
end
|
55
71
|
end
|
56
72
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zipkin-tracer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.22.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Franklin Hu
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2017-
|
16
|
+
date: 2017-04-26 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: faraday
|
@@ -147,14 +147,14 @@ dependencies:
|
|
147
147
|
requirements:
|
148
148
|
- - "~>"
|
149
149
|
- !ruby/object:Gem::Version
|
150
|
-
version: '
|
150
|
+
version: '3.0'
|
151
151
|
type: :development
|
152
152
|
prerelease: false
|
153
153
|
version_requirements: !ruby/object:Gem::Requirement
|
154
154
|
requirements:
|
155
155
|
- - "~>"
|
156
156
|
- !ruby/object:Gem::Version
|
157
|
-
version: '
|
157
|
+
version: '3.0'
|
158
158
|
description: Adds tracing instrumentation for ruby applications
|
159
159
|
email:
|
160
160
|
- franklin@twitter.com
|