Guest User

Untitled

a guest
Aug 15th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.52 KB | None | 0 0
  1. #!/usr/bin/ruby
  2. # coding: utf-8
  3. require 'rubygems'
  4. require 'active_record'
  5.  
  6. Record = Struct.new(
  7. :time, # %ts.%03tu
  8. :response_time, # %tr
  9. :src_ip, # %>a
  10. :request_status_http_status, # %Ss/%03Hs
  11. :reply_size, # %<st
  12. :request_method, # %rm
  13. :request_url, # %ru
  14. :username, # %un
  15. :squid_status_server_ip, # %Sh/%<A
  16. :mime_type # %mt
  17. )
  18.  
  19. ActiveRecord::Base.establish_connection(
  20. :adapter => "mysql",
  21. :host => "localhost",
  22. :username => "rusqulog",
  23. :password => "rusqulog",
  24. :database => "squidlog"
  25. )
  26.  
  27. def parse str
  28. fields = str.split
  29. if fields.size == Record.members.size then
  30. return Record.new *fields
  31. else
  32. raise ArgumentError, "Неверное число полей в строке лога: #{fields.size}, #{param}"
  33. end
  34. end
  35.  
  36. class LogEntry < ActiveRecord::Base
  37. def initialize record
  38. super
  39. if record.kind_of? Record then
  40. self.time=Time.at record.time.to_f
  41. self.response_time=record.response_time.to_i
  42. self.src_ip=record.src_ip
  43. self.request_status,self.http_status=record.request_status_http_status.split "/"
  44. self.reply_size=record.reply_size.to_i
  45. self.request_method=record.request_method
  46. self.request_url=record.request_url
  47. self.username=record.username
  48. self.squid_status,self.server_ip=record.squid_status_server_ip.split "/"
  49. self.mime_type=record.mime_type
  50. end
  51. end
  52. end
  53.  
  54. STDIN.each do |line|
  55. if l=parse(line) then
  56. entry=LogEntry.new(l).save
  57. end
  58. end
Add Comment
Please, Sign In to add comment