class Pione::Log::ProcessLog

ProcessLog represents process log file.

Attributes

filter_block[R]
records[R]

@return [Array<ProcessRcord>]

records of the log

Public Class Methods

[](name) click to toggle source

Return the named formatter class.

# File lib/pione/log/process-log.rb, line 24
def [](name)
  ProcessLog.instance_variable_get(:@format)[name]
end
group_by(key, records) click to toggle source

Return the record table grouped by the key.

# File lib/pione/log/process-log.rb, line 58
def group_by(key, records)
  records.inject({}) do |table, record|
    table[record.send(key)] ||= []
    table.tap {|x| x[record.send(key)] << record}
  end
end
known?(name) click to toggle source

Return true if the formatter name is known.

# File lib/pione/log/process-log.rb, line 19
def known?(name)
  ProcessLog.instance_variable_get(:@format).has_key?(name)
end
new(records) click to toggle source

@param records [Array<ProcessRecord>]

log records
# File lib/pione/log/process-log.rb, line 74
def initialize(records)
  @records = records.select do |record|
    if block = self.class.filter_block
      block.call(record)
    else
      true
    end
  end
end
read(location) click to toggle source

Read the raw log file and return the process log table grouped by log id.

# File lib/pione/log/process-log.rb, line 29
def read(location)
  # create local cache of raw log for performance
  cache = location
  unless location.scheme == "local"
    cache = Location[Temppath.create]
    cache.create(location.read)
  end

  # read all records
  records = cache.path.each_line.map do |line|
    JSON.parse(line).inject({}) do |data, (key, val)|
      data.tap {data[key.to_sym] = val}
    end.tap {|data| break ProcessRecord.build(data)}
  end

  # group records by log id
  group_by(:log_id, records).inject({}) do |table, (key, _records)|
    table.tap {table[key] = new(_records)}
  end
end
set_filter(&block) click to toggle source

Set record filter.

# File lib/pione/log/process-log.rb, line 51
def set_filter(&block)
  @filter_block = block
end
set_format_name(name) click to toggle source

Set formatter name of this class.

@param name [Symbol]

formatter name

@return [void]

# File lib/pione/log/process-log.rb, line 14
def set_format_name(name)
  ProcessLog.instance_variable_get(:@format)[name] = self
end

Public Instance Methods

format(trace_filters=[]) click to toggle source

Format records.

@return [String]

result string
# File lib/pione/log/process-log.rb, line 96
def format(trace_filters=[])
  raise NotImplementedError
end
group_by(key) click to toggle source

Return the record table grouped by the key.

@return [Hash{String => Array<ProcessRecord>}]

grouping records table
# File lib/pione/log/process-log.rb, line 88
def group_by(key)
  self.class.group_by(key, @records)
end