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