zipkin-tracer 0.18.6 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 640394dff893e81ed21749a900121b2ba2e4e561
4
- data.tar.gz: b8c43ed22fedb058687ffe896568bc5b449c60f0
3
+ metadata.gz: fada20597d32e18a27712d3031e895f28212c637
4
+ data.tar.gz: b57584551882c44615be24783c3ea30fb9e8604b
5
5
  SHA512:
6
- metadata.gz: ee7ac9cf049925e4df24488c43878638455bb83d620a0b800f6bcf8b304149b769c726b1fcad33a317b1aed1ac1ef73a701f158ced48b6845f4b6b6f8ad124c9
7
- data.tar.gz: 7df178c307215876cae40df7d8ade1e67676bf1c58c68a105f6bb2542a1048e6de71d584eeae5f9a40b420250ee3f77ccfeccc718f9630628cf20c626ecee7f6
6
+ metadata.gz: 906d2105340d18be042320a3a7d1168e1efb417dd1dc1099fb62a16954c7791aef587e4823df19a688bafc3e4405056e996761a49b40f4bc11a284799bf370b7
7
+ data.tar.gz: 321783d91739fb623f511d0bb0cff16341f0095282e76ffac91389c5d5b00219fb801775a9908ea0da760dd354fab053a12a687be83e3cb58453eac137b3660d
@@ -6,20 +6,39 @@ module ZipkinTracer
6
6
  class Config
7
7
  attr_reader :service_name, :service_port, :json_api_host,
8
8
  :zookeeper, :sample_rate, :logger, :log_tracing,
9
- :annotate_plugin, :filter_plugin, :whitelist_plugin
9
+ :annotate_plugin, :filter_plugin, :whitelist_plugin,
10
+ :sampled_as_boolean
10
11
 
11
12
  def initialize(app, config_hash)
12
13
  config = config_hash || Application.config(app)
14
+ # The name of the current service
13
15
  @service_name = config[:service_name]
16
+ # The port where the current service is running
14
17
  @service_port = config[:service_port] || DEFAULTS[:service_port]
18
+ # The address of the Zipkin server which we will send traces to
15
19
  @json_api_host = config[:json_api_host]
20
+ # Zookeeper information
16
21
  @zookeeper = config[:zookeeper]
22
+ # Percentage of traces which by default this service traces (as float, 1.0 means 100%)
17
23
  @sample_rate = config[:sample_rate] || DEFAULTS[:sample_rate]
24
+ # A block of code which can be called to do extra annotations of traces
18
25
  @annotate_plugin = config[:annotate_plugin] # call for trace annotation
19
26
  @filter_plugin = config[:filter_plugin] # skip tracing if returns false
20
27
  @whitelist_plugin = config[:whitelist_plugin] # force sampling if returns true
28
+ # A block of code which can be called to skip traces. Skip tracing if returns false
29
+ @filter_plugin = config[:filter_plugin]
30
+ # A block of code which can be called to force sampling. Forces sampling if returns true
31
+ @whitelist_plugin = config[:whitelist_plugin]
21
32
  @logger = Application.logger
22
33
  @log_tracing = config[:log_tracing] # Was the logger in fact setup by the client?
34
+ # Was the logger in fact setup by the client?
35
+ @log_tracing = config[:log_tracing]
36
+ # When set to false, it uses 1/0 in the 'X-B3-Sampled' header, else uses true/false
37
+ @sampled_as_boolean = config[:sampled_as_boolean] || DEFAULTS[:sampled_as_boolean]
38
+ # The current default is true for compatibility but services are encouraged to move on.
39
+ if @sampled_as_boolean
40
+ @logger && @logger.warn("Using a boolean in the Sampled header is deprecated. Consider setting sampled_as_boolean to false")
41
+ end
23
42
  end
24
43
 
25
44
  def adapter
@@ -38,7 +57,8 @@ module ZipkinTracer
38
57
 
39
58
  DEFAULTS = {
40
59
  sample_rate: 0.1,
41
- service_port: 80
60
+ service_port: 80,
61
+ sampled_as_boolean: true
42
62
  }
43
63
 
44
64
  def present?(str)
@@ -83,9 +83,9 @@ module ZipkinTracer
83
83
  @env.values_at(*B3_REQUIRED_HEADERS)
84
84
  else
85
85
  new_id = Trace.generate_id
86
- [new_id, nil, new_id]
86
+ [new_id, nil, new_id, nil]
87
87
  end
88
- trace_parameters[3] = should_trace?(trace_parameters[3])
88
+ trace_parameters[3] = sampled_header_value(trace_parameters[3])
89
89
  trace_parameters += @env.values_at(*B3_OPT_HEADERS) # always check flags
90
90
  trace_parameters[4] = (trace_parameters[4] || default_flags).to_i
91
91
 
@@ -102,15 +102,28 @@ module ZipkinTracer
102
102
 
103
103
  private
104
104
 
105
+ def new_sampled_header_value(sampled)
106
+ case [@config.sampled_as_boolean, sampled]
107
+ when [true, true]
108
+ 'true'
109
+ when [true, false]
110
+ 'false'
111
+ when [false, true]
112
+ '1'
113
+ when [false, false]
114
+ '0'
115
+ end
116
+ end
117
+
105
118
  def current_trace_sampled?
106
119
  rand < @config.sample_rate
107
120
  end
108
121
 
109
- def should_trace?(parent_trace_sampled)
122
+ def sampled_header_value(parent_trace_sampled)
110
123
  if parent_trace_sampled # A service upstream decided this goes in all the way
111
- parent_trace_sampled == 'true'
124
+ parent_trace_sampled
112
125
  else
113
- force_sample? || current_trace_sampled? && !filtered?
126
+ new_sampled_header_value(force_sample? || current_trace_sampled? && !filtered?)
114
127
  end
115
128
  end
116
129
 
@@ -15,6 +15,37 @@ module Trace
15
15
  self.pop
16
16
  end
17
17
 
18
+ # A TraceId contains all the information of a given trace id
19
+ # This class is defined in finagle-thrift. We are overwriting it here
20
+ class TraceId
21
+ attr_reader :trace_id, :parent_id, :span_id, :sampled, :flags
22
+
23
+ def initialize(trace_id, parent_id, span_id, sampled, flags)
24
+ @trace_id = SpanId.from_value(trace_id)
25
+ @parent_id = parent_id.nil? ? nil : SpanId.from_value(parent_id)
26
+ @span_id = SpanId.from_value(span_id)
27
+ @sampled = sampled
28
+ @flags = flags
29
+ end
30
+
31
+ def next_id
32
+ TraceId.new(@trace_id, @span_id, Trace.generate_id, @sampled, @flags)
33
+ end
34
+
35
+ # the debug flag is used to ensure the trace passes ALL samplers
36
+ def debug?
37
+ @flags & Flags::DEBUG == Flags::DEBUG
38
+ end
39
+
40
+ def sampled?
41
+ debug? || ['1', 'true'].include?(@sampled)
42
+ end
43
+
44
+ def to_s
45
+ "TraceId(trace_id = #{@trace_id.to_s}, parent_id = #{@parent_id.to_s}, span_id = #{@span_id.to_s}, sampled = #{@sampled.to_s}, flags = #{@flags.to_s})"
46
+ end
47
+ end
48
+
18
49
  # A span may contain many annotations
19
50
  # This class is defined in finagle-thrift. We are adding extra methods here
20
51
  class Span
@@ -12,5 +12,5 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  module ZipkinTracer
15
- VERSION = '0.18.6'.freeze
15
+ VERSION = '0.19.0'.freeze
16
16
  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.18.6
4
+ version: 0.19.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: 2016-11-21 00:00:00.000000000 Z
16
+ date: 2016-11-26 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: faraday
@@ -35,14 +35,14 @@ dependencies:
35
35
  requirements:
36
36
  - - "~>"
37
37
  - !ruby/object:Gem::Version
38
- version: 1.4.1
38
+ version: 1.4.2
39
39
  type: :runtime
40
40
  prerelease: false
41
41
  version_requirements: !ruby/object:Gem::Requirement
42
42
  requirements:
43
43
  - - "~>"
44
44
  - !ruby/object:Gem::Version
45
- version: 1.4.1
45
+ version: 1.4.2
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: rack
48
48
  requirement: !ruby/object:Gem::Requirement