Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'rubygems'
- require 'activesupport'
- require 'sequel'
- DB = Sequel.connect('sqlite://log.db')
- DB.create_table :loglines do
- primary_key :id
- String :client_ip
- String :client_identd
- String :client_userid
- DateTime :request_started
- String :request_line
- String :response_status
- Integer :response_size
- Integer :request_microsec
- Integer :request_seconds
- DateTime :request_finished
- end
- LOG_REGEX = /^([\d.]+) (\S+) (\S+) \[([\w:\/]+\s[+\\-]\d{4})\] \"(.+?)\" (\d{3}) (\d+) (\d+)/
- class LogLine < Struct.new(
- :client_ip, :client_identd, :client_userid,
- :request_started, :request_line,
- :response_status, :response_size,
- :request_microsec, :request_seconds, :request_finished)
- end
- loglines = DB[:loglines]
- File.open('wlt_pricing.access').each do |line|
- if m = LOG_REGEX.match(line)
- entry = LogLine.new
- entry.client_ip = m[1]
- entry.client_identd = m[2]
- entry.client_userid = m[3]
- entry.request_started = DateTime.strptime(str=m[4].gsub(/-\d{4}$/,''), fmt='%d/%b/%Y:%H:%M:%S')
- entry.request_line = m[5]
- entry.response_status = m[6]
- entry.response_size = m[7]
- entry.request_microsec = m[8].to_i
- entry.request_seconds = entry.request_microsec / 1000
- entry.request_finished = entry.request_started + entry.request_seconds.seconds
- loglines.insert( :client_ip => entry.client_ip, :client_identd => entry.client_identd, :client_userid => entry.client_userid,
- :request_started => entry.request_started, :request_line => entry.request_line, :response_status => entry.response_status,
- :response_size => entry.response_size, :request_microsec => entry.request_microsec, :request_seconds => entry.request_seconds,
- :request_finished => entry.request_finished )
- end
- end
Add Comment
Please, Sign In to add comment