Skip to content

Commit

Permalink
Updated for Rails 3.2 support with custom PID starts to the log file
Browse files Browse the repository at this point in the history
  • Loading branch information
andyjeffries committed Apr 4, 2012
1 parent b5a3d0d commit 543859c
Showing 1 changed file with 28 additions and 31 deletions.
59 changes: 28 additions & 31 deletions rails_log_analyser
Expand Up @@ -13,45 +13,42 @@ module Rails
attr_accessor :messages
attr_accessor :time
attr_accessor :time_spent

def initialize(process_id, action, time)
self.process_id = process_id
self.action = action
self.time = time
self.messages = []
end

def <<(message)
self.messages << message
end
end

class List
attr_accessor :transactions

def initialize
@current_transactions = {}
@transactions = []
end

def start_transaction(process_id, action, time, message)
complete_transaction(process_id)
@current_transactions[process_id] = Rails::LogAnalyser::Entry.new(process_id, action, time)
continue_transaction(process_id, message, message)
end

def continue_transaction(process_id, message, line)
if !process_id
process_id = @last_process_id
else
@last_process_id = process_id
end
if message =~ /Completed in (\d+)ms/ && @current_transactions[process_id]
if message =~ /Completed (\d+) .*? in (\d+)ms/ && @current_transactions[process_id]
@current_transactions[process_id].time_spent = $1.to_i
message =~ /.*?\|\s+(\d+)/
@current_transactions[process_id].status = $1
elsif message =~ /Rendering .* \((\d+)\)/
@current_transactions[process_id].status = $1
@current_transactions[process_id].status = $2
elsif message.nil?
@current_transactions[process_id] << line if @current_transactions[process_id]
else
Expand All @@ -63,45 +60,45 @@ module Rails
@transactions << @current_transactions[process_id] if @current_transactions[process_id]
@current_transactions[process_id] = nil
end

def complete_all_transactions
@current_transactions.keys.each do |process_id|
complete_transaction(process_id)
end
end

def read(filename)
lines = `wc -l #{filename}`.to_i
pbar = ProgressBar.new("Analysing", lines)

next_line_is_process_marker = false
action = ""
time = ""

File.open(filename, 'r').each do |line|
pbar.inc
process_id = nil
message = nil
if line =~ /\[(\d+)\] (.*)/
url = ""
if line =~ /^(\d+) (.*)/
process_id = $1
message = $2
end

if next_line_is_process_marker
start_transaction(process_id, action, time, message)
next_line_is_process_marker = false
elsif line =~ /Processing ([^ ]+).*\(.*at ([0-9 :-]+)\)/
action = $1
time = $2
next_line_is_process_marker = true

if line =~ /Started ([^ ]+) "(.*?)" for .*? at (.*)/
method = $1
url = $2
action = "#{method} #{url}"
time = $3
start_transaction(process_id, action, time, message) unless url[/^\/assets/]
else
continue_transaction(process_id, message, line)
continue_transaction(process_id, message, line) unless url[/^\/assets/]
end
end
complete_all_transactions
pbar.finish
end

end
end
end
Expand All @@ -114,18 +111,18 @@ log.read(filename)

# List transactions
# -l
#
#
# Show transaction
# -s

if ARGV[1] == '-l'
log.transactions.each_with_index do |tran, index|
puts "%4d : %-40s %14s (%dms %d)" % [index, tran.action, tran.time, tran.time_spent, tran.status]
puts "%4d : %-60s %14s (%sms %s)" % [index, tran.action, tran.time, tran.time_spent, tran.status]
end
elsif ARGV[1] == '-ls'
log.transactions.sort {|a,b| a.time.gsub('ms', '').to_i <=> b.time.gsub('ms', '').to_i}.each do |tran, index|
puts "%4d : %-40s %14s (%dms)" % [index, tran.action, tran.time, tran.time_spent]
end
puts "%4d : %-60s %14s (%dms)" % [index, tran.action, tran.time, tran.time_spent]
end
elsif ARGV[1] == '-s'
ids = ARGV[2..10000].map {|x| x.to_i}
ids.each do |transaction_id|
Expand All @@ -138,7 +135,7 @@ elsif ARGV[1] == '-s'
end


#
#
# top_10 = list.top_size(100)
# puts "Top 10 URLs by size".upcase
# puts
Expand All @@ -147,4 +144,4 @@ end
# top_10.each do |url,size|
# puts "%-40s %19s" % [url, size.to_s]
# end
#
#

0 comments on commit 543859c

Please sign in to comment.