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