class RailsMiniProfiler::FlamegraphGuard
Public Class Methods
new(request_context, configuration: RailsMiniProfiler.configuration)
click to toggle source
# File lib/rails_mini_profiler/flamegraph_guard.rb, line 5 def initialize(request_context, configuration: RailsMiniProfiler.configuration) @request_context = request_context @request = request_context.request @configuration = configuration end
Public Instance Methods
record(&block)
click to toggle source
# File lib/rails_mini_profiler/flamegraph_guard.rb, line 11 def record(&block) return block.call unless enabled? sample_rate = @configuration.flamegraph_sample_rate if StackProf.running? RailsMiniProfiler.logger.error('Stackprof is already running, cannot record Flamegraph') return block.call end result = nil flamegraph = StackProf.run(mode: :wall, raw: true, aggregate: false, interval: (sample_rate * 1000).to_i) do result = block.call end unless flamegraph RailsMiniProfiler.logger.error('Failed to record Flamegraph, possibly due to concurrent requests') return result end @request_context.flamegraph = flamegraph.to_json result end
Private Instance Methods
config_enabled?()
click to toggle source
# File lib/rails_mini_profiler/flamegraph_guard.rb, line 40 def config_enabled? params = CGI.parse(@request.query_string).transform_values(&:first).with_indifferent_access return params[:rmp_flamegraph] if params[:rmp_flamegraph] RailsMiniProfiler.configuration.flamegraph_enabled end
enabled?()
click to toggle source
# File lib/rails_mini_profiler/flamegraph_guard.rb, line 36 def enabled? defined?(StackProf) && StackProf.respond_to?(:run) && config_enabled? end