Class: RubyZipkin::RackHandler
- Inherits:
-
Object
- Object
- RubyZipkin::RackHandler
- Defined in:
- lib/rubyzipkin.rb
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#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, redis_config = 'config/redis.yml') ⇒ RackHandler
constructor
A new instance of RackHandler.
- #redis_from_config(file_name) ⇒ Object
Constructor Details
#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, redis_config = 'config/redis.yml') ⇒ RackHandler
Returns a new instance of RackHandler.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/rubyzipkin.rb', line 18 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, redis_config = 'config/redis.yml') @app = app @lock = Mutex.new @service_name = service_name @scribe_port = scribe_port @sample_rate = sampling_rate @uri_filter_list = uri_filter_list @http_header_filter_list = http_header_filter_list @uri_sample_filter_list = uri_sample_filter_list @scribe = Scribe.new("#{scribe_server}:#{scribe_port}") @redis_config = redis_config @sampled_ids = [] $redis_check_time = Time.now ::Trace.tracer = ::Trace::ZipkinTracer.new(Scriber.new(@scribe), scribe_max_buffer) begin @redis = redis_from_config(redis_config) if File.exists?(@redis_config) rescue => e $stderr.puts "No Redis instance" end end |
Instance Method Details
#call(env) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/rubyzipkin.rb', line 50 def call(env) begin ::Trace.default_endpoint = ::Trace.default_endpoint.with_service_name(@service_name + "/#{top_level_path(env['PATH_INFO'])}") set_sample_rate(env) trace_id = get_or_create_trace_id(env) env[ZipkinTraceHeader::PARENT_SPAN_ID] = @spanid env[ZipkinTraceHeader::TRACE_ID] = @tid rescue => e $stderr.puts "ZIPKIN [ERR] #{e}" end begin @status, @headers, @response = @app.call(env) redis_sampling tracing_filter(trace_id, env, @headers) rescue => e # we want to do the call even if zipkin fails $stderr.puts "ZIPKIN [ERR] #{e} \n\n\n #{e.backtrace}" end [@status, @headers, @response] end |
#redis_from_config(file_name) ⇒ Object
41 42 43 44 45 46 47 48 |
# File 'lib/rubyzipkin.rb', line 41 def redis_from_config(file_name) config = YAML.load_file(file_name)['production'] if config && (host = config['host']) && (port = config['port']) instance = Redis.new(:host => host, :port => port, :logger => Rails.logger, :thread_safe => true) instance.select(config['db']) if config['db'] instance end end |