class Rails::Rack::Tracer

Public Class Methods

disable(middlewares: Rails.configuration.middleware) click to toggle source
# File lib/rails/rack/tracer.rb, line 15
def disable(middlewares: Rails.configuration.middleware)
  middlewares.delete(Rails::Rack::Tracer)
  if @owns_all_middlewares
    middlewares.delete(::Rack::Tracer)
    @owns_all_middlewares = false
  end
rescue
end
instrument(tracer: OpenTracing.global_tracer, middlewares: Rails.configuration.middleware) click to toggle source
# File lib/rails/rack/tracer.rb, line 5
def instrument(tracer: OpenTracing.global_tracer, middlewares: Rails.configuration.middleware)
  return unless defined?(::Rack::Tracer)
  @owns_all_middlewares = false
  unless middlewares.include?(::Rack::Tracer)
    middlewares.use(::Rack::Tracer, tracer: tracer)
    @owns_all_middlewares = true
  end
  middlewares.insert_after(::Rack::Tracer, Rails::Rack::Tracer)
end
new(app) click to toggle source
# File lib/rails/rack/tracer.rb, line 25
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/rails/rack/tracer.rb, line 29
def call(env)
  @app.call(env)
ensure
  enhance_rack_span(env)
end

Private Instance Methods

enhance_rack_span(env) click to toggle source
# File lib/rails/rack/tracer.rb, line 37
def enhance_rack_span(env)
  span = extract_span(env)
  if span && route_found?(env)
    span.operation_name = operation_name(env)
  end
end
extract_span(env) click to toggle source
# File lib/rails/rack/tracer.rb, line 44
def extract_span(env)
  env['rack.span']
end
operation_name(env) click to toggle source
# File lib/rails/rack/tracer.rb, line 52
def operation_name(env)
  path_parameters = env["action_dispatch.request.path_parameters"]
  action_controller = env["action_controller.instance"]
  controller = action_controller ? action_controller.class.to_s : path_parameters[:controller]
  action = path_parameters[:action]
  "#{controller}##{action}"
end
route_found?(env) click to toggle source
# File lib/rails/rack/tracer.rb, line 48
def route_found?(env)
  env["action_dispatch.request.path_parameters"]
end