Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/ruby
- # coding: utf-8
- require 'rubygems'
- require 'active_record'
- Record = Struct.new(
- :time, # %ts.%03tu
- :response_time, # %tr
- :src_ip, # %>a
- :request_status_http_status, # %Ss/%03Hs
- :reply_size, # %<st
- :request_method, # %rm
- :request_url, # %ru
- :username, # %un
- :squid_status_server_ip, # %Sh/%<A
- :mime_type # %mt
- )
- ActiveRecord::Base.establish_connection(
- :adapter => "mysql",
- :host => "localhost",
- :username => "rusqulog",
- :password => "rusqulog",
- :database => "squidlog"
- )
- def parse str
- fields = str.split
- if fields.size == Record.members.size then
- return Record.new *fields
- else
- raise ArgumentError, "Неверное число полей в строке лога: #{fields.size}, #{param}"
- end
- end
- class LogEntry < ActiveRecord::Base
- def initialize record
- super
- if record.kind_of? Record then
- self.time=Time.at record.time.to_f
- self.response_time=record.response_time.to_i
- self.src_ip=record.src_ip
- self.request_status,self.http_status=record.request_status_http_status.split "/"
- self.reply_size=record.reply_size.to_i
- self.request_method=record.request_method
- self.request_url=record.request_url
- self.username=record.username
- self.squid_status,self.server_ip=record.squid_status_server_ip.split "/"
- self.mime_type=record.mime_type
- end
- end
- end
- STDIN.each do |line|
- if l=parse(line) then
- entry=LogEntry.new(l).save
- end
- end
Add Comment
Please, Sign In to add comment