Skip to content

Instantly share code, notes, and snippets.

@fguillen
Created October 26, 2011 12:05
Show Gist options
  • Save fguillen/1316156 to your computer and use it in GitHub Desktop.
Save fguillen/1316156 to your computer and use it in GitHub Desktop.
Rails log processor, show the milliseconds and the request
# use:
# ruby log_processor.rb log/production.log
#
# result:
# [ 168] /folders/xxx1.vitreous.co/fill_it
# [1816] /folders/xxx2.vitreous.co/auth
# [1230] /folders/xxx2.vitreous.co/auth_confirm?uid=1488231&oauth_token=myusjr3gg59ntdi
# [ 763] /folders/xxx2.vitreous.co/create_scaffold_form
# [ -] /folders/xxx2.vitreous.co/create_scaffold
# [ -] /folders/xxx2.vitreous.co/create_scaffold
# [ 173] /folders/xxx2.vitreous.co/fill_it
# [3017] /folders/xxx3.vitreous.co/auth
# [1406] /folders/xxx3.vitreous.co/auth_confirm?uid=1488231&oauth_token=f03894z0vcf6agk
# [ 849] /folders/xxx3.vitreous.co/create_scaffold_form
# [ -] /folders/xxx3.vitreous.co/create_scaffold
# [ 257] /folders/xxx3.vitreous.co/fill_it
# [1155] /folders/xxx3.vitreous.co/create_scaffold_form
# [ 864] /folders/xxx3.vitreous.co/create_scaffold_form
# [ 868] /folders/xxx3.vitreous.co/create_scaffold_form
# [ 934] /folders/xxx3.vitreous.co/create_scaffold_form
# [ 823] /folders/xxx3.vitreous.co/create_scaffold_form
# [ 801] /folders/xxx3.vitreous.co/create_scaffold_form
# [ 821] /folders/xxx3.vitreous.co/create_scaffold_form
# [ 895] /folders/xxx3.vitreous.co/create_scaffold_form?locale=en
# [ -] /folders/xxx3.vitreous.co/create_scaffold
# [ 173] /folders/xxx3.vitreous.co/fill_it
# [1793] /folders/xxx8.vitreous.co/auth
# [1252] /folders/xxx8.vitreous.co/auth_confirm?uid=1488231&oauth_token=ob5nt385l2arig5
# [1364] /folders/xxx8.vitreous.co/create_scaffold_form
module LogProcesor
REGEXS = {
:started => /^Started .* "(.*)"/,
:completed => /^Completed .* in (\d+)ms|^(\n)$/
}
def self.parse( file_path )
@looking_for = :started
file = File.new( file_path, 'r' )
tips = []
tip = {}
while( line = file.gets )
if( tip[ @looking_for ] = scan( line ) )
tips << tip.dup if( @looking_for == :completed )
toogle
end
end
puts to_s( tips )
end
def self.to_s( tips )
tips.map do |tip|
"[#{"%04s" % tip[:completed].gsub("\n", "-")}] #{tip[:started]}"
end.join( "\n" )
end
def self.scan( line )
line.scan( REGEXS[@looking_for] ).flatten.compact[0]
end
def self.toogle
@looking_for = (@looking_for == :started ? :completed : :started)
end
end
LogProcesor.parse( ARGV[0] )
# LogProcesor.parse( "#{File.dirname(__FILE__)}/../tmp/staging.log" )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment