2010-03-25 10:39:30 +01:00
|
|
|
|
2010-03-29 11:50:59 +02:00
|
|
|
module LogAn
|
2010-03-25 10:39:30 +01:00
|
|
|
module Inc
|
|
|
|
class Command < ::Array
|
|
|
|
attr_reader :sid
|
|
|
|
def initialize sid = 0
|
|
|
|
@sid = sid
|
|
|
|
end
|
|
|
|
|
2010-04-01 14:10:40 +02:00
|
|
|
def event_read line, sock
|
2010-03-25 10:39:30 +01:00
|
|
|
cmd, l = line.unpack 'na*'
|
|
|
|
self[cmd].call( l, sock) if self[cmd]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class SID0 < Command
|
2010-03-30 00:32:50 +02:00
|
|
|
class <<self
|
2010-03-30 01:19:45 +02:00
|
|
|
def config=( db) @@config = db end
|
|
|
|
def config() @@config end
|
|
|
|
def store=( db) @@store = db end
|
|
|
|
def store() @@store end
|
2010-03-30 00:32:50 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
def initialize sid = 0
|
|
|
|
super sid
|
2010-03-25 10:39:30 +01:00
|
|
|
self[9] = method :event_hostname
|
|
|
|
self[10] = method :event_filerotated
|
|
|
|
end
|
|
|
|
|
|
|
|
def event_filerotated line, sock
|
2010-03-30 00:32:50 +02:00
|
|
|
sid, inode, seek = line.unpack 'NNN'
|
|
|
|
@@store[ :seeks][ sid] = [inode, seek]
|
2010-03-25 10:39:30 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def event_hostname line, sock
|
2010-03-30 00:32:50 +02:00
|
|
|
@@config[ :hosts].each do |sid, host|
|
2010-03-25 10:39:30 +01:00
|
|
|
next unless line == host
|
2010-03-30 00:32:50 +02:00
|
|
|
file = @@config[ :files][ sid]
|
2010-03-25 10:39:30 +01:00
|
|
|
next unless file
|
|
|
|
# command, SID, (inode, seek), file
|
2010-04-01 14:07:52 +02:00
|
|
|
pc = [1, sid, @@store[ :seeks][ sid], file].flatten.pack 'nNNNa*'
|
2010-03-25 10:39:30 +01:00
|
|
|
sock.write [pc.length, pc].pack( 'Na*')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|