#!/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'