LogAn/lib/logan/inc/fileparser.rb

63 lines
1.3 KiB
Ruby
Raw Normal View History

2010-03-29 11:50:59 +02:00
module LogAn
module Inc
module FileParser
module Base
2010-03-29 15:53:51 +02:00
class <<self
def logdb=( var) @@logdb = var end
def logdb() @@logdb end
def store=( var) @@store = var end
def store() @@store end
end
2010-04-01 14:32:30 +02:00
def emit line
2010-04-01 14:35:24 +02:00
@@logdb.emit line, @sid
end
def seeks read
2010-03-30 00:32:50 +02:00
inode, seek = @@store[ :seeks][@sid]
@@store[ :seeks][@sid] = [inode, read + seek]
end
end
class Line
2010-04-01 14:12:56 +02:00
include Base
attr_reader :sid, :delimiter, :buffer, :linebuffer
def initialize sid, delimiter = nil
@sid, @delimiter = sid, delimiter || "\n"
@delimiter = Regexp.new "^.*?#{@delimiter}"
@buffer, @linebuffer = Select::Buffer.new( ''), Select::Buffer.new( '')
end
def event_read str, sock
@buffer += str
@buffer.each! @delimiter do |line|
emit line
seeks line.length
end
end
end
class Multiline < Line
def initialize sid, delimiter = nil, multiline = nil
super sid, delimiter
@multiline = multiline || /^\d\d-\d\d-\d\d:/
end
def event_read str, sock
@buffer += str
@buffer.each! @delimiter do |line|
if line =~ @multiline
emit @linebuffer.to_s
seeks @linebuffer.length
@linebuffer.replace line
else @linebuffer += line
end
end
end
end
end
end
end