Class: Oink::Reports::MemoryUsageReport
- Defined in:
- lib/oink/reports/memory_usage_report.rb
Constant Summary
Constants inherited from Base
Base::FORMATS, Base::FORMAT_ALIASES, Base::HODEL_LOG_FORMAT_REGEX
Instance Method Summary collapse
Methods inherited from Base
Constructor Details
This class inherits a constructor from Oink::Reports::Base
Instance Method Details
#print(output) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/oink/reports/memory_usage_report.rb', line 9 def print(output) output.puts "---- MEMORY THRESHOLD ----" output.puts "THRESHOLD: #{@threshold/1024} MB\n" output.puts "\n-- REQUESTS --\n" if @format == :verbose @inputs.each do |input| input.each_line do |line| line = line.strip # Skip this line since we're only interested in the Hodel 3000 compliant lines next unless line =~ HODEL_LOG_FORMAT_REGEX if line =~ /rails\[(\d+)\]/ pid = $1 @pids[pid] ||= { :buffer => [], :last_memory_reading => -1, :current_memory_reading => -1, :action => "", :request_finished => true } @pids[pid][:buffer] << line end if line =~ /Oink Action: (([\w\/]+)#(\w+))/ unless @pids[pid][:request_finished] @pids[pid][:last_memory_reading] = -1 end @pids[pid][:action] = $1 @pids[pid][:request_finished] = false elsif line =~ /Memory usage: (\d+) / memory_reading = $1.to_i @pids[pid][:current_memory_reading] = memory_reading elsif line =~ /Oink Log Entry Complete/ @pids[pid][:request_finished] = true unless @pids[pid][:current_memory_reading] == -1 || @pids[pid][:last_memory_reading] == -1 memory_diff = @pids[pid][:current_memory_reading] - @pids[pid][:last_memory_reading] if memory_diff > @threshold @bad_actions[@pids[pid][:action]] ||= 0 @bad_actions[@pids[pid][:action]] = @bad_actions[@pids[pid][:action]] + 1 date = HODEL_LOG_FORMAT_REGEX.match(line).captures[0] @bad_requests.push(MemoryOinkedRequest.new(@pids[pid][:action], date, @pids[pid][:buffer], memory_diff)) if @format == :verbose @pids[pid][:buffer].each { |b| output.puts b } output.puts "---------------------------------------------------------------------" end @bad_actions_averaged[@pids[pid][:action]] ||= [] @bad_actions_averaged[@pids[pid][:action]] << memory_diff end end @pids[pid][:buffer] = [] @pids[pid][:last_memory_reading] = @pids[pid][:current_memory_reading] @pids[pid][:current_memory_reading] = -1 end # end elsif end # end each_line end # end each input print_summary(output) end |