class LogReader

Reads logs

Attributes

files_read[R]
logs_added[RW]
logs_read[RW]
options[R]
read_log[R]
warnings[R]

Public Class Methods

new(options: {}) click to toggle source
# File lib/log_parser/log_reader.rb, line 10
def initialize(options: {})
  @read_log = Hash.new { |h, k| h[k] = [] }
  @options = options
  @warnings = []
  @logs_read = 0
  @logs_added = 0
  @files_read = []
  @options[:file_list] = [DEFAULT_LOG] if options[:file_list] == []
end

Public Instance Methods

add_file_name(file) click to toggle source
# File lib/log_parser/log_reader.rb, line 84
def add_file_name(file)
  format(' - File: %<file>s', file: file)
end
add_line_and_file_name(line_number, file) click to toggle source
# File lib/log_parser/log_reader.rb, line 79
def add_line_and_file_name(line_number, file)
  format('%<file>s - line %<line>d', file: add_file_name(file),
                                     line: line_number)
end
add_log(log:, line_number: 1, file:) click to toggle source
# File lib/log_parser/log_reader.rb, line 38
def add_log(log:, line_number: 1, file:)
  @logs_read += 1

  log_valid = valid_log?(log: log)
  add_warning_if(type: :log, line_number: line_number, file: file,
                 add_if: !log_valid)
  return self unless log_valid

  path, ip_address = log.split(' ')
  ip_valid = valid_ip?(ip_address: ip_address)
  path_valid = !options[:path_validation] || valid_path?(path: path)

  add_warning_if(type: options[:ip_validation], line_number: line_number,
                 file: file, add_if: !ip_valid)
  add_warning_if(type: :path, line_number: line_number, file: file,
                 add_if: !path_valid)

  if (ip_valid && path_valid) || !options[:log_remove]
    @logs_added += 1
    read_log[path].push(ip_address)
  end
  self
end
add_warning_if(type:, line_number:, file:, add_if:) click to toggle source
# File lib/log_parser/log_reader.rb, line 62
def add_warning_if(type:, line_number:, file:, add_if:)
  return unless add_if

  warnings.push(type: type,
                message: log_warning_message(
                  name: VALIDATION_NAMES[type],
                  line_number: line_number,
                  file: file
                ))
end
load_log(file:) click to toggle source
# File lib/log_parser/log_reader.rb, line 25
def load_log(file:)
  begin
    File.open(file, 'r').each.with_index do |line, i|
      add_log(log: line, line_number: i + 1, file: file)
    end
    @files_read.push(file)
  rescue
    warnings.push(type: :file,
                  message: format(' - File not found: %<file>s', file: file))
  end
  self
end
load_logs() click to toggle source
# File lib/log_parser/log_reader.rb, line 20
def load_logs
  options[:file_list].each { |file| load_log(file: file) }
  self
end
log_warning_message(name:, line_number:, file:) click to toggle source
# File lib/log_parser/log_reader.rb, line 73
def log_warning_message(name:, line_number:, file:)
  format(' - Invalid %<name>s%<line_file>s',
         name: name,
         line_file: add_line_and_file_name(line_number, file))
end
valid_ip?(ip_address:) click to toggle source
# File lib/log_parser/log_reader.rb, line 88
def valid_ip?(ip_address:)
  IpValidator.new(ip_address: ip_address,
                  validation: options[:ip_validation]).valid?
end
valid_log?(log:) click to toggle source
# File lib/log_parser/log_reader.rb, line 93
def valid_log?(log:)
  log.match(VALID_LOG)
end
valid_path?(path:) click to toggle source
# File lib/log_parser/log_reader.rb, line 97
def valid_path?(path:)
  PathValidator.new(path: path).valid?
end