Class: ActionController::RequestProfiler
- Defined in:
- lib/action_controller/request_profiler.rb
Defined Under Namespace
Classes: Sandbox
Instance Attribute Summary collapse
-
#options ⇒ Object
readonly
Returns the value of attribute options.
Class Method Summary collapse
Instance Method Summary collapse
- #benchmark(sandbox) ⇒ Object
- #default_options ⇒ Object
-
#initialize(options = {}) ⇒ RequestProfiler
constructor
A new instance of RequestProfiler.
-
#parse_options(args) ⇒ Object
Parse command-line options.
- #profile(sandbox) ⇒ Object
- #run ⇒ Object
- #warmup(sandbox) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ RequestProfiler
Returns a new instance of RequestProfiler.
49 50 51 |
# File 'lib/action_controller/request_profiler.rb', line 49 def initialize( = {}) @options = .merge() end |
Instance Attribute Details
#options ⇒ Object (readonly)
Returns the value of attribute options.
47 48 49 |
# File 'lib/action_controller/request_profiler.rb', line 47 def @options end |
Class Method Details
.run(args = nil, options = {}) ⇒ Object
54 55 56 57 58 |
# File 'lib/action_controller/request_profiler.rb', line 54 def self.run(args = nil, = {}) profiler = new() profiler.(args) if args profiler.run end |
Instance Method Details
#benchmark(sandbox) ⇒ Object
81 82 83 84 85 86 |
# File 'lib/action_controller/request_profiler.rb', line 81 def benchmark(sandbox) sandbox.request_count = 0 elapsed = sandbox.benchmark([:n]).to_f count = sandbox.request_count.to_i puts '%.2f sec, %d requests, %d req/sec' % [elapsed, count, count / elapsed] end |
#default_options ⇒ Object
92 93 94 |
# File 'lib/action_controller/request_profiler.rb', line 92 def { :n => 100, :open => 'open %s &' } end |
#parse_options(args) ⇒ Object
Parse command-line options
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/action_controller/request_profiler.rb', line 97 def (args) OptionParser.new do |opt| opt. = "USAGE: #{$0} [options] [session script path]" opt.on('-n', '--times [0000]', 'How many requests to process. Defaults to 100.') { |v| [:n] = v.to_i } opt.on('-b', '--benchmark', 'Benchmark instead of profiling') { |v| [:benchmark] = v } opt.on('--open [CMD]', 'Command to open profile results. Defaults to "open %s &"') { |v| [:open] = v } opt.on('-h', '--help', 'Show this help') { puts opt; exit } opt.parse args if args.empty? puts opt exit end [:script] = args.pop end end |
#profile(sandbox) ⇒ Object
72 73 74 75 76 77 78 79 |
# File 'lib/action_controller/request_profiler.rb', line 72 def profile(sandbox) load_ruby_prof results = RubyProf.profile { benchmark(sandbox) } show_profile_results results results end |
#run ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/action_controller/request_profiler.rb', line 60 def run sandbox = Sandbox.new([:script]) puts 'Warming up once' elapsed = warmup(sandbox) puts '%.2f sec, %d requests, %d req/sec' % [elapsed, sandbox.request_count, sandbox.request_count / elapsed] puts "\n#{[:benchmark] ? 'Benchmarking' : 'Profiling'} #{[:n]}x" [:benchmark] ? benchmark(sandbox) : profile(sandbox) end |
#warmup(sandbox) ⇒ Object
88 89 90 |
# File 'lib/action_controller/request_profiler.rb', line 88 def warmup(sandbox) Benchmark.realtime { sandbox.run } end |