class RailsOpentracer::Middleware
Public Class Methods
new(app)
click to toggle source
# File lib/rails_opentracer/middleware.rb, line 18 def initialize(app) @app = app end
Public Instance Methods
call(env)
click to toggle source
# File lib/rails_opentracer/middleware.rb, line 22 def call(env) span = nil if ZipkinConfig.opentracer_enabled_and_zipkin_url_present? begin extracted_ctx = OpenTracing.extract(OpenTracing::FORMAT_RACK, env) span_name = env['REQUEST_PATH'] span = if extracted_ctx.nil? OpenTracing.start_span(span_name) else OpenTracing.start_span(span_name, child_of: extracted_ctx) end # yuck $active_span = span rescue StandardError => e Rails.logger.error "TRACER_ERROR: #{error_message(e)}" return @app.call(env) end status, headers, response = @app.call(env) begin carrier = {} OpenTracing.inject(span.context, OpenTracing::FORMAT_RACK, carrier) span.finish [status, headers, response] rescue StandardError => e Rails.logger.error "TRACER_ERROR: #{error_message(e)}" [status, headers, response] end else if ZipkinConfig.opentracer_enabled? Rails.logger.error 'TRACER_ERROR: `ZIPKIN_SERVICE_URL` environment variable is not defined' end return @app.call(env) end end
error_message(e)
click to toggle source
# File lib/rails_opentracer/middleware.rb, line 60 def error_message(e) "#{e}\n#{e.backtrace[0, 10].join("\n\t")}" end