Class: MySlog

Inherits:
Object
  • Object
show all
Defined in:
lib/myslog.rb

Instance Method Summary collapse

Instance Method Details

#divide(lines) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/myslog.rb', line 25

def divide(lines)
  records = []

  line = lines.shift

  while line
    record = []

    if line.start_with? "# Time:"
      record << line
      record << lines.shift  # user@host
      record << lines.shift  # query time
    else
      record << line         # user@host
      record << lines.shift  # query time
    end

    sql = []
    while (line = lines.shift) != nil && !line.start_with?("#")
      sql << line.strip
    end
    record << sql.join(" ")

    records << record
  end

  records
end

#parse(lines) ⇒ Object



21
22
23
# File 'lib/myslog.rb', line 21

def parse(lines)
  divide(lines).map {|record| parse_record(record) }
end

#parse_record(lines) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/myslog.rb', line 54

def parse_record(lines)
  response = {}

  line = lines.shift
  if line.start_with? "# Time:"
    date = line[8..-1].strip
    response[:date] = Time.parse(date)

    line = lines.shift
  else
    response[:date] = nil
  end

  elems = line.split(" ")
  response[:user]          = elems[2].strip
  response[:host]          = elems[4].strip
  response[:host_ip]       = elems[5].strip[1...-1]

  line = lines.shift
  elems = line.split(" ")
  response[:query_time]    = elems[2].to_f
  response[:lock_time]     = elems[4].to_f
  response[:rows_sent]     = elems[6].to_i
  response[:rows_examined] = elems[8].to_i

  response[:sql] = lines.map{|line| line.strip}.join("\n")

  response
end