Skip to content

Commit

Permalink
Only profile if query param is present. Use ::File so we don't hit Ra…
Browse files Browse the repository at this point in the history
…ck::File. Fix method args.
  • Loading branch information
jeremy committed Dec 9, 2008
1 parent 9e61a4f commit fb97d97
Showing 1 changed file with 12 additions and 10 deletions.
22 changes: 12 additions & 10 deletions lib/rack/profiler.rb
Expand Up @@ -22,33 +22,35 @@ def call(env)
def profile(env)
RubyProf.measure_mode = RubyProf.const_get(env['rack.profiler.measure_mode'].upcase)
result = RubyProf.profile { @app.call(env) }
[200, calltree_headers(env), calltree_body(env)]
[200, calltree_headers(env), calltree_body(env, result)]
end

def profiling?(env)
if RubyProf.running?
false
else
request = Rack::Request.new(env)
mode = request.params.delete('profile')

if MODES.include?(mode)
env['rack.profiler.measure_mode'] = request.params.delete('profile')
env['rack.profiler.min_precent'] = (request.params.delete('min_percent') || 0.01).to_f
true
if mode = request.params.delete('profile')
if MODES.include?(mode)
env['rack.profiler.measure_mode'] = mode
env['rack.profiler.min_precent'] = (request.params.delete('min_percent') || 0.01).to_f
true
else
env['rack.errors'] << "Invalid RubyProf measure_mode: #{mode}. Use one of #{MODES.to_a.join(', ')}"
false
end
else
env['rack.errors'] << "Invalid RubyProf measure_mode: #{mode}. Use one of #{MODES.to_a.join(', ')}"
false
end
end
end

def calltree_headers(env)
{ 'Content-Type' => 'application/octet-stream',
'Content-Disposition' => %(attachment; filename="#{File.basename(env['PATH_INFO'])}.#{env['rack.profiler.measure_mode']}.tree") }
'Content-Disposition' => %(attachment; filename="#{::File.basename(env['PATH_INFO'])}.#{env['rack.profiler.measure_mode']}.tree") }
end

def calltree_body(result, min_percent)
def calltree_body(env, result)
body = StringIO.new
RubyProf::CallTreePrinter.new(result).print(body, :min_percent => env['rack.profiler.min_percent'])
body.rewind
Expand Down

0 comments on commit fb97d97

Please sign in to comment.