rubyzipkin 0.3.12 → 0.4.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.
@@ -1,11 +1,11 @@
1
1
  # Tracing HTTP header types
2
2
  module RubyZipkin
3
3
  module ZipkinTraceHeader
4
- TRACE_ID = "X-ZK-TID"
5
- SPAN_ID = "X-ZK-SID"
6
- PARENT_SPAN_ID = "X-ZK-PSID"
7
- TRACE_SAMPLED = "X-ZK-SMP"
8
- TRACE_FLAGS = "X-ZK-FLG"
9
- FORCE_SAMPLE = "X-FORCE-SAMPLE"
4
+ TRACE_ID = "X-B3-TRACEID"
5
+ SPAN_ID = "X-B3-SPANID"
6
+ PARENT_SPAN_ID = "X-B3-PARENTSPANID"
7
+ TRACE_SAMPLED = "X-B3-SAMPLED"
8
+ TRACE_FLAGS = "X-B3-FLAGS"
9
+ FORCE_SAMPLE = "X-B3-FORCE-SAMPLE"
10
10
  end
11
11
  end
@@ -6,11 +6,12 @@ module RubyZipkin
6
6
  class MetadataLogger
7
7
 
8
8
  # log a key value pair into a zipkin trace as a KV span value
9
- def self.log(key, value)
9
+ # since logging can ve quite extensive, we set a cap for the max size in bytes for a trace header
10
+ def self.log(key, value, max_size_bytes = 512)
10
11
  if key.to_s == "action_controller.rescue.request" || key.to_s == "action_controller.rescue.response"
11
- ::Trace.record(::Trace::BinaryAnnotation.new(key, value.as_json.to_s, "STRING", ::Trace.default_endpoint))
12
+ ::Trace.record(::Trace::BinaryAnnotation.new(key, value.as_json.to_s[0..max_size_bytes], "STRING", ::Trace.default_endpoint))
12
13
  else
13
- ::Trace.record(::Trace::BinaryAnnotation.new(key, value.to_s, "STRING", ::Trace.default_endpoint))
14
+ ::Trace.record(::Trace::BinaryAnnotation.new(key, value.to_s[0..max_size_bytes], "STRING", ::Trace.default_endpoint))
14
15
  end
15
16
  end
16
17
 
@@ -22,5 +23,6 @@ module RubyZipkin
22
23
  end
23
24
  end
24
25
  end
26
+
25
27
  end
26
28
  end
@@ -0,0 +1,18 @@
1
+ # There's certain HTTP which just shouldn't be logged and we know about them
2
+ # Reasons are either security, or size
3
+ # Specifically session data, cookies, exception rescues.
4
+ #
5
+ # This was we don't need each client to black list them and having to set this up on their Initial config.
6
+ module RubyZipkin
7
+ module PermanentFilter
8
+ HEADERS =
9
+ [
10
+ "rack.session",
11
+ "rack.session.record",
12
+ "rack.session.options",
13
+ "rack.request.cookie_hash",
14
+ "rack.request.cookie_string",
15
+ "rack.request.form_vars"
16
+ ]
17
+ end
18
+ end
@@ -12,7 +12,7 @@ module RubyZipkin
12
12
  end
13
13
 
14
14
  keyword_blacklist.each do |key|
15
- if uri.to_s.match key
15
+ if uri.to_s.match key or uri.to
16
16
  return true
17
17
  end
18
18
  end
@@ -42,6 +42,13 @@ module RubyZipkin
42
42
  return true
43
43
  end
44
44
  end
45
+
46
+ PermanentFilter::HEADERS.each do |blacklisted|
47
+ if keyword.to_s.match(/.*(#{blacklisted}).*/)
48
+ return true
49
+ end
50
+ end
51
+
45
52
  false
46
53
  end
47
54
  end
@@ -10,7 +10,7 @@ module RubyZipkin
10
10
  return 1
11
11
  end
12
12
  end
13
- return 0.01
13
+ return 0.0001
14
14
  end
15
15
  end
16
16
  end
@@ -1,3 +1,3 @@
1
1
  module RubyZipkin
2
- VERSION = "0.3.12"
2
+ VERSION = "0.4.1"
3
3
  end
data/lib/rubyzipkin.rb CHANGED
@@ -14,7 +14,7 @@ module RubyZipkin extend self
14
14
 
15
15
  class RackHandler
16
16
 
17
- def initialize(app, service_name, scribe_server, scribe_port, uri_filter_list = [], http_header_filter_list = [], uri_sample_filter_list = {}, sampling_rate = 0.01, scribe_max_buffer = 10 )
17
+ def initialize(app, service_name, scribe_server, scribe_port, uri_filter_list = [], http_header_filter_list = [], uri_sample_filter_list = {}, sampling_rate = 0.0001, scribe_max_buffer = 50 )
18
18
  @app = app
19
19
  @lock = Mutex.new
20
20
 
@@ -33,15 +33,15 @@ module RubyZipkin extend self
33
33
  ::Trace.default_endpoint = ::Trace.default_endpoint.with_service_name(@service_name + "_#{normalized_uri(env['PATH_INFO'])}")
34
34
 
35
35
  set_sample_rate(env)
36
-
36
+ trace_id = get_or_create_trace_id(env)
37
37
  env[ZipkinTraceHeader::PARENT_SPAN_ID] = @spanid
38
38
  env[ZipkinTraceHeader::TRACE_ID] = @tid
39
+
39
40
  @status, @headers, @response = @app.call(env)
40
- tracing_filter(get_or_create_trace_id2(env), env, @headers)
41
+
42
+ tracing_filter(trace_id, env, @headers)
41
43
  rescue => e
42
44
  #Tracing errors shouldn't block a request.
43
- puts "Zipkin error: #{e} \n #{e.backtrace}"
44
- raise e
45
45
  end
46
46
  [@status, @headers, @response]
47
47
  end
@@ -99,7 +99,8 @@ module RubyZipkin extend self
99
99
  end
100
100
 
101
101
  def trace_post_data(content)
102
- MetadataLogger.log('HTTP_REQUEST INPUT', content.to_s)
102
+ # Slightly large size cap to the request input to accomodate larger JSON bodies.
103
+ MetadataLogger.log('HTTP_REQUEST INPUT', content.to_s, 2048)
103
104
  end
104
105
 
105
106
  def trace_hash(content)
@@ -113,23 +114,28 @@ module RubyZipkin extend self
113
114
  end
114
115
 
115
116
  def get_or_create_trace_id(env)
117
+
116
118
  if env[ZipkinTraceHeader::TRACE_ID].nil? or env[ZipkinTraceHeader::TRACE_ID].to_s.empty?
117
119
  @tid = Trace.generate_id
118
- @parentspan = nil
119
-
120
120
  env[ZipkinTraceHeader::TRACE_ID] = @tid
121
121
  else
122
122
  @tid = env[ZipkinTraceHeader::TRACE_ID]
123
+ end
123
124
 
124
- if !env[ZipkinTraceHeader::SPAN_ID].nil? and !env[ZipkinTraceHeader::SPAN_ID].to_s.empty?
125
+ if env[ZipkinTraceHeader::SPAN_ID].nil? or env[ZipkinTraceHeader::SPAN_ID].to_s.empty?
126
+ @parentspan = nil
127
+ else
125
128
  @parentspan = env[ZipkinTraceHeader::SPAN_ID]
126
- end
127
129
  end
128
130
 
129
131
  @spanid = Trace.generate_id
132
+
133
+ # Save into headers
134
+ env[ZipkinTraceHeader::TRACE_ID] = @trace_id
130
135
  env[ZipkinTraceHeader::SPAN_ID] = @spanid
136
+ env[ZipkinTraceHeader::PARENT_SPAN_ID] = @parentspan
131
137
 
132
- Trace::TraceId.new @tid, @parentspan, @spanid, true
138
+ Trace::TraceId.new(@tid, @parentspan, @spanid, true)
133
139
  end
134
140
 
135
141
  def get_or_create_trace_id2(env)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubyzipkin
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
4
+ hash: 13
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 12
10
- version: 0.3.12
8
+ - 4
9
+ - 1
10
+ version: 0.4.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ivan Marcin
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2013-11-18 00:00:00 Z
18
+ date: 2013-12-16 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: scribe
@@ -77,6 +77,7 @@ extra_rdoc_files: []
77
77
  files:
78
78
  - lib/rubyzipkin/headers.rb
79
79
  - lib/rubyzipkin/metadata_logger.rb
80
+ - lib/rubyzipkin/permanent_header_filter.rb
80
81
  - lib/rubyzipkin/scriber.rb
81
82
  - lib/rubyzipkin/trace_filter.rb
82
83
  - lib/rubyzipkin/tracesampler.rb