module Libis::Ingester::Base::Log2Csv

Constants

CSV_HEADER

Public Instance Methods

log2csv(log_file, csv_file = nil, options = {}) click to toggle source
# File lib/libis/ingester/tasks/base/log_to_csv.rb, line 11
def log2csv(log_file, csv_file = nil, options = {})
  log_in = IO === log_file ? log_file : File.open(log_file, 'r')
  csv_out = csv_file ? File.open(csv_file, 'w') : StringIO.new
  log2csv_io(log_in, csv_out, options)
  log_in.close
  return csv_out if StringIO === csv_out
  csv_out.close
end
log2csv_io(log_in, csv_out = nil, options = {}) click to toggle source

@param [IO] log_in @param [IO] csv_out @param [Hash] options

# File lib/libis/ingester/tasks/base/log_to_csv.rb, line 23
def log2csv_io(log_in, csv_out = nil, options = {})
  csv_out ||= StringIO.new
  line_regex = /^(.), \[([\d-]+)T([\d:.]+) #([\d.]+)\]\s+(\S+)\s+-- (.*?) - (.*?) : (.*)/
  buffer = CSV_HEADER
  log_in.each_line do |line|
    if line =~ line_regex
      write_buffer_to_csv(buffer, csv_out, options)
      buffer = [$1, $2, $3, $4, $5, $6, $7, $8]
    elsif options[:trace]
      buffer[7] += "\n#{line}"
    end
  end
ensure
  write_buffer_to_csv(buffer, csv_out, options)
  csv_out.rewind
  csv_out
end

Protected Instance Methods

write_buffer_to_csv(buffer, csv_out, options) click to toggle source
# File lib/libis/ingester/tasks/base/log_to_csv.rb, line 43
def write_buffer_to_csv(buffer, csv_out, options)
  return if buffer.empty? || buffer.all? {|x| x.strip.empty?}
  return if buffer != CSV_HEADER && options[:filter] && !options[:filter].upcase.include?(buffer[0])
  csv_out.puts(
      CSV.generate_line(
          (options[:skip_date] ?
               [buffer[4], buffer[5], buffer[6], buffer[7]] :
               [buffer[4], buffer[1], buffer[2], buffer[5], buffer[6], buffer[7]]
          ),
          col_sep: ';', quote_char: '"'
      )
  )
end