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
Added over 1 year ago by Segal-avatar_normal zdzolton