class ZipkinTracer::ZipkinEnv
This class manages the Zipkin related information in the Rack environment. It is only used by the rack middleware.
Constants
- B3_OPT_HEADERS
- B3_REQUIRED_HEADERS
- B3_SINGLE_HEADER
Attributes
env[R]
Public Class Methods
new(env, config)
click to toggle source
# File lib/zipkin-tracer/rack/zipkin_env.rb, line 7 def initialize(env, config) @env = env @config = config end
Public Instance Methods
called_with_zipkin_b3_single_header?()
click to toggle source
# File lib/zipkin-tracer/rack/zipkin_env.rb, line 19 def called_with_zipkin_b3_single_header? @called_with_zipkin_b3_single_header ||= @env.key?(B3_SINGLE_HEADER) end
called_with_zipkin_headers?()
click to toggle source
# File lib/zipkin-tracer/rack/zipkin_env.rb, line 23 def called_with_zipkin_headers? @called_with_zipkin_headers ||= B3_REQUIRED_HEADERS.all? { |key| @env.key?(key) } end
trace_id(default_flags = Trace::Flags::EMPTY)
click to toggle source
# File lib/zipkin-tracer/rack/zipkin_env.rb, line 12 def trace_id(default_flags = Trace::Flags::EMPTY) trace_id, span_id, parent_span_id, sampled, flags, shared = retrieve_or_generate_ids sampled = sampled_header_value(sampled) flags = (flags || default_flags).to_i Trace::TraceId.new(trace_id, parent_span_id, span_id, sampled, flags, shared) end
Private Instance Methods
current_trace_sampled?()
click to toggle source
# File lib/zipkin-tracer/rack/zipkin_env.rb, line 66 def current_trace_sampled? rand < @config.sample_rate end
filtered?()
click to toggle source
# File lib/zipkin-tracer/rack/zipkin_env.rb, line 82 def filtered? @config.filter_plugin && !@config.filter_plugin.call(@env) end
force_sample?()
click to toggle source
# File lib/zipkin-tracer/rack/zipkin_env.rb, line 78 def force_sample? @config.whitelist_plugin && @config.whitelist_plugin.call(@env) end
new_sampled_header_value(sampled)
click to toggle source
# File lib/zipkin-tracer/rack/zipkin_env.rb, line 53 def new_sampled_header_value(sampled) case [@config.sampled_as_boolean, sampled] when [true, true] 'true' when [true, false] 'false' when [false, true] '1' when [false, false] '0' end end
retrieve_or_generate_ids()
click to toggle source
# File lib/zipkin-tracer/rack/zipkin_env.rb, line 33 def retrieve_or_generate_ids if called_with_zipkin_b3_single_header? trace_id, span_id, parent_span_id, sampled, flags = B3SingleHeaderFormat.parse_from_header(@env[B3_SINGLE_HEADER]) shared = true elsif called_with_zipkin_headers? trace_id, span_id, parent_span_id, sampled, flags = @env.values_at(*B3_REQUIRED_HEADERS, *B3_OPT_HEADERS) shared = true end unless trace_id span_id = TraceGenerator.new.generate_id trace_id = TraceGenerator.new.generate_id_from_span_id(span_id) parent_span_id = nil shared = false end [trace_id, span_id, parent_span_id, sampled, flags, shared] end
sampled_header_value(parent_trace_sampled)
click to toggle source
# File lib/zipkin-tracer/rack/zipkin_env.rb, line 70 def sampled_header_value(parent_trace_sampled) if parent_trace_sampled # A service upstream decided this goes in all the way parent_trace_sampled else new_sampled_header_value(force_sample? || current_trace_sampled? && !filtered? && traceable_request?) end end
traceable_request?()
click to toggle source
# File lib/zipkin-tracer/rack/zipkin_env.rb, line 86 def traceable_request? return true unless @config.check_routes Application.routable_request?(@env) end