require 'yajl' module Logical::Naf module LogParser class Runner < Base attr_accessor :invocations_ids def initialize(params) super(params) @invocations_ids = {} end def logs retrieve_logs end private def insert_log_line(elem) "  #{elem['output_time']} #{invocation_link(elem['id'])}: #{elem['message']}
" end def invocation_link(id) "invocation(#{id})" end def sort_jsons # Sort log lines based on timestamp @jsons = jsons.sort { |x, y| Time.parse(x['output_time']) <=> Time.parse(y['output_time']) } end def parse_newest_log "#{newest_log.scan(/\d{4}.*\.\d{3}/).first} #{newest_log.scan(/Process.*/).first.try(:split, '
').try(:first)}" end def retrieve_log_files_from_s3 return [] unless record_id.present? uuids = ::Naf::MachineRunner. joins(:machine_runner_invocations). where("#{Naf.schema_name}.machine_runners.id = ?", record_id). pluck("#{Naf.schema_name}.machine_runner_invocations.uuid") files = [] s3_log_reader.runner_log_files.each do |file| if uuids.include?(file.scan(UUID_REGEX).first) files << file end end files end def get_invocation_id(uuid) if invocations_ids[uuid].blank? @invocations_ids[uuid] = ::Naf::MachineRunnerInvocation.find_by_uuid(uuid).try(:id) end invocations_ids[uuid] end def get_files if log_type == 'old' && read_from_s3 == 'true' get_s3_files do @s3_log_reader = ::Logical::Naf::LogReader.new return retrieve_log_files_from_s3 end else files = Dir["#{::Naf::PREFIX_PATH}/#{::Naf.schema_name}/runners/*/*"] if files.present? # Sort log files based on time return files.sort { |x, y| Time.parse(y.scan(DATE_REGEX)[0][0]) <=> Time.parse(x.scan(DATE_REGEX)[0][0]) } else get_s3_files do @read_from_s3 = 'true' @s3_log_reader = ::Logical::Naf::LogReader.new return retrieve_log_files_from_s3 end end end end end end end