class RailsMiniProfiler::Middleware

Public Class Methods

new(app) click to toggle source
# File lib/rails_mini_profiler/middleware.rb, line 5
def initialize(app)
  @app = app
  @config = RailsMiniProfiler.configuration
  Tracing::Subscriptions.setup! { |trace| track_trace(trace) }
end

Public Instance Methods

call(env) click to toggle source
# File lib/rails_mini_profiler/middleware.rb, line 11
def call(env)
  request = RequestWrapper.new(env: env)
  request_context = RequestContext.new(request)
  return @app.call(env) unless Guard.new(request_context).profile?

  request_context.profiled_request = ProfiledRequest.new
  result = with_tracing(request_context) { profile(request_context) }
  return result unless request_context.authorized?

  request_context.response = ResponseWrapper.new(*result)
  complete!(request_context)
  request_context.saved? ? render_response(request_context) : result
end
traces() click to toggle source
# File lib/rails_mini_profiler/middleware.rb, line 25
def traces
  Thread.current[:rails_mini_profiler_traces]
end
traces=(traces) click to toggle source
# File lib/rails_mini_profiler/middleware.rb, line 29
def traces=(traces)
  Thread.current[:rails_mini_profiler_traces] = traces
end
track_trace(event) click to toggle source
# File lib/rails_mini_profiler/middleware.rb, line 33
def track_trace(event)
  return if traces.nil?

  trace = RailsMiniProfiler::Tracing::TraceFactory.create(event)
  traces.append(trace) unless trace.is_a?(RailsMiniProfiler::Tracing::NullTrace)
end

Private Instance Methods

complete!(request_context) click to toggle source
# File lib/rails_mini_profiler/middleware.rb, line 42
def complete!(request_context)
  request_context.complete_profiling!
  request_context.save_results!
  true
rescue ActiveRecord::ActiveRecordError => e
  RailsMiniProfiler.logger.error("Could not save profile: #{e}")
  false
end
profile(request_context) click to toggle source
# File lib/rails_mini_profiler/middleware.rb, line 59
def profile(request_context)
  ActiveSupport::Notifications.instrument('rails_mini_profiler.total_time') do
    request = request_context.request
    FlamegraphGuard.new(request_context).record { @app.call(request.env) }
  end
end
render_response(request_context) click to toggle source
# File lib/rails_mini_profiler/middleware.rb, line 51
def render_response(request_context)
  redirect = Redirect.new(request_context).render
  return redirect if redirect

  modified_response = Badge.new(request_context).render
  [modified_response.status, modified_response.headers, modified_response.response]
end
with_tracing(request_context) { || ... } click to toggle source
# File lib/rails_mini_profiler/middleware.rb, line 66
def with_tracing(request_context)
  self.traces = []
  result = yield
  request_context.traces = traces
  self.traces = nil
  result
end