49 lines
1.1 KiB
Ruby
49 lines
1.1 KiB
Ruby
|
|
require 'logan/loglines'
|
|
require 'time'
|
|
|
|
class LogAn::Analyse
|
|
attr_reader :lines
|
|
|
|
def close
|
|
@lines.close
|
|
end
|
|
|
|
def initialize lines
|
|
@lines = String === lines ? LogAn::Loglines.new( lines) : lines
|
|
end
|
|
|
|
def extremum val
|
|
val = case val
|
|
when String then Time.parse val
|
|
when Integer then Time.at val
|
|
when Time then val
|
|
else raise ArgumentError, "Unknwon type: #{val}", caller[ 1..-1]
|
|
end
|
|
end
|
|
|
|
def timerange min, max = nil
|
|
exend = false
|
|
min, max, exend = min.min, min.max, min.exclude_end? if Range === min
|
|
Range.new extremum( min), extremum( max), exend
|
|
end
|
|
|
|
def dbs min, max = nil, &exe
|
|
return Enumerator.new( self, :dbs, min, max) unless exe
|
|
range = timerange min, max
|
|
@lines.rdb.each &exe
|
|
end
|
|
|
|
def search min, max = nil, &exe
|
|
dbs = @lines.dbs
|
|
range = timerange min, max
|
|
@lines.rdb.each do |time, db|
|
|
dbs[ UUIDTools::UUID.parse_raw( db)].each &exe if range === Time.at( *time.unpack( 'N'))
|
|
end
|
|
end
|
|
alias [] search
|
|
|
|
def each min, max = nil, &exe
|
|
exe ? search( min, max, &exe) : Enumerator.new( self, :search, min, max)
|
|
end
|
|
end
|