Skip to content

Instantly share code, notes, and snippets.

@danielevans
Created August 28, 2013 18:16
Show Gist options
  • Save danielevans/6369355 to your computer and use it in GitHub Desktop.
Save danielevans/6369355 to your computer and use it in GitHub Desktop.
Scan many rails log files for a particular query parameter for a particular action
require 'uri'
require 'csv'
i = 1
files = Dir.glob("app0*/*.log*")
data = files.map do |filename|
puts "Reading #{filename} #{i}/#{files.count}"
i = i + 1
File.readlines(filename).select do |line|
line.match /GET \"\/api\/image_search/
end
end.flatten.reduce({}) do |memo, line|
query = URI.decode(line.match(/GET \"\/api\/image_search.*[?&]query=([^?&\"]*)[&?\"]/)[1])
memo[query] = (memo[query] || 0) + 1
memo
end
puts "Data generated #{data.count} keys"
csv = CSV.generate("", :headers => [:query, :count]) do |csv|
data.each do |query, count|
csv << [query, count]
end
end
puts "CSV generated, writing file"
File.open("result.csv", "wb") do |f|
f.write(csv)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment