class Dexter::LogParser

Constants

DETAIL_LINE
LINE_SEPERATOR
REGEX

Public Class Methods

new(logfile, collector) click to toggle source
# File lib/dexter/log_parser.rb, line 9
def initialize(logfile, collector)
  @logfile = logfile
  @collector = collector
end

Public Instance Methods

perform() click to toggle source
# File lib/dexter/log_parser.rb, line 14
def perform
  active_line = nil
  duration = nil

  @logfile.each_line do |line|
    if active_line
      if line.include?(DETAIL_LINE)
        add_parameters(active_line, line.chomp.split(DETAIL_LINE)[1])
      elsif line.include?(LINE_SEPERATOR)
        process_entry(active_line, duration)
        active_line = nil
      else
        active_line << line
      end
    end

    if !active_line && (m = REGEX.match(line.chomp))
      duration = m[1].to_f
      active_line = m[3]
    end
  end
  process_entry(active_line, duration) if active_line
end

Private Instance Methods

add_parameters(active_line, details) click to toggle source
# File lib/dexter/log_parser.rb, line 44
def add_parameters(active_line, details)
  if details.start_with?("parameters: ")
    params = Hash[details[12..-1].split(", ").map { |s| s.split(" = ", 2) }]

    # make sure parsing was successful
    unless params.values.include?(nil)
      params.each do |k, v|
        active_line.sub!(k, v)
      end
    end
  end
end
process_entry(query, duration) click to toggle source
# File lib/dexter/log_parser.rb, line 40
def process_entry(query, duration)
  @collector.add(query, duration)
end