Load CouchDB logs
Language: Ruby
#!/usr/bin/env ruby -rubygems
require 'couchrest'
require 'time'
abort "usage: #{$0} DB_URL INPUT_FILE_PATH" unless ARGV.length == 2
DB_URL = ARGV[0]
INPUT_FILE_PATH = ARGV[1]
BULK_SAVE_LIMIT = 5000
LOG_LINE_REGEXP = /^\[([^\]]+)\] \[([^\]]+)\] \[([^\]]+)\] ([\d.]+) - - '(\S+)' (\S+) (\d+)\s*$/
def parse_line line
match = LOG_LINE_REGEXP.match(line)
return {
:time => Time.parse(match[1]).utc.iso8601,
:type => match[2],
:erlang_pid => match[3],
:ip_address => match[4],
:verb => match[5],
:url => match[6],
:response_code => match[7].to_i
} unless match.nil?
end
db = CouchRest.database! DB_URL
db.bulk_save_cache_limit = BULK_SAVE_LIMIT
open(INPUT_FILE_PATH).each_line do |line|
doc = parse_line line
unless doc.nil?
db.save_doc doc, true
putc '.'
end
end
db.bulk_save
puts 'done'
Reveal More
