the fileparser-problem
This commit is contained in:
parent
492d9f6dff
commit
fb987eb461
3 changed files with 21 additions and 10 deletions
|
@ -42,7 +42,7 @@ class LogAn::Cache
|
||||||
|
|
||||||
def write_cache= type
|
def write_cache= type
|
||||||
@type &= ~ (type ? 0 : 2)
|
@type &= ~ (type ? 0 : 2)
|
||||||
define_singleton_method :[], method( type ? :oset : :dset)
|
define_singleton_method :[]=, method( type ? :oset : :dset)
|
||||||
end
|
end
|
||||||
|
|
||||||
#include Enumerable
|
#include Enumerable
|
||||||
|
@ -56,6 +56,7 @@ end
|
||||||
|
|
||||||
class LogAn::AutoValueConvertHash
|
class LogAn::AutoValueConvertHash
|
||||||
include Enumerable
|
include Enumerable
|
||||||
|
attr_reader :decode, :encode
|
||||||
|
|
||||||
def initialize obj, encode = nil, each = nil, &decode
|
def initialize obj, encode = nil, each = nil, &decode
|
||||||
@object, @encoder = obj, decode.nil? ? encode || Marshal.method( :dump) : nil,
|
@object, @encoder = obj, decode.nil? ? encode || Marshal.method( :dump) : nil,
|
||||||
|
@ -64,16 +65,16 @@ class LogAn::AutoValueConvertHash
|
||||||
end
|
end
|
||||||
|
|
||||||
def [] k
|
def [] k
|
||||||
decode.call @object[k]
|
@decode.call @object[k]
|
||||||
end
|
end
|
||||||
|
|
||||||
def []= k, v
|
def []= k, v
|
||||||
@object[k] = encode.call v
|
@object[k] = @encode.call v
|
||||||
end
|
end
|
||||||
|
|
||||||
def each *paras
|
def each *paras
|
||||||
@each.call *paras do |k, v|
|
@each.call *paras do |k, v|
|
||||||
yield k, decode( v)
|
yield k, @decode.call( v)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,11 +10,11 @@ require 'logan/cache'
|
||||||
module LogAn::Inc
|
module LogAn::Inc
|
||||||
class Main < RobustServer
|
class Main < RobustServer
|
||||||
# Open Config.
|
# Open Config.
|
||||||
def config env, db, type = nil, flags = nil
|
def config env, db, type = nil, flags = nil, &e
|
||||||
$stderr.puts "Open Database \"sids.cnf\" #{db.inspect} (#{type.inspect})"
|
$stderr.puts "Open Database \"sids.cnf\" #{db.inspect} (#{type.inspect})"
|
||||||
type ||= 1+4
|
type ||= 1+4
|
||||||
ret = env[ 'sids.cnf', db, :flags => flags || SBDB::RDONLY]
|
ret = env[ 'sids.cnf', db, :flags => flags || SBDB::RDONLY]
|
||||||
ret = LogAn::AutoValueConvertHash.new ret if type&4 > 0
|
ret = LogAn::AutoValueConvertHash.new ret, &e if type&4 > 0 or e
|
||||||
ret = LogAn::Cache.new ret, type&3 if type&3 > 0
|
ret = LogAn::Cache.new ret, type&3 if type&3 > 0
|
||||||
ret
|
ret
|
||||||
end
|
end
|
||||||
|
@ -31,27 +31,38 @@ module LogAn::Inc
|
||||||
def initialize conf
|
def initialize conf
|
||||||
super
|
super
|
||||||
@conf = {}
|
@conf = {}
|
||||||
|
|
||||||
# Copy config - changes possible
|
# Copy config - changes possible
|
||||||
conf.each {|key, val| @conf[key]= val }
|
conf.each {|key, val| @conf[key]= val }
|
||||||
|
|
||||||
# Default directories
|
# Default directories
|
||||||
%w[logs etc].each {|key| @conf[key.to_sym] = key }
|
%w[logs etc].each {|key| @conf[key.to_sym] = key }
|
||||||
|
|
||||||
# Open Loglines-databases
|
# Open Loglines-databases
|
||||||
@logs = LogAn::Loglines.new @conf[:logs]
|
@logs = LogAn::Loglines.new @conf[:logs]
|
||||||
|
|
||||||
# Open config-databases
|
# Open config-databases
|
||||||
Dir.mkdir @conf[:etc] rescue Errno::EEXIST
|
Dir.mkdir @conf[:etc] rescue Errno::EEXIST
|
||||||
@etc = SBDB::Env.new( @conf[:etc],
|
@etc = SBDB::Env.new( @conf[:etc],
|
||||||
log_config: SBDB::Env::LOG_IN_MEMORY | SBDB::Env::LOG_AUTO_REMOVE,
|
log_config: SBDB::Env::LOG_IN_MEMORY | SBDB::Env::LOG_AUTO_REMOVE,
|
||||||
flags: SBDB::CREATE | SBDB::Env::INIT_TXN | Bdb::DB_INIT_MPOOL)
|
flags: SBDB::CREATE | SBDB::Env::INIT_TXN | Bdb::DB_INIT_MPOOL)
|
||||||
|
|
||||||
# Set inc-config - stored in etc/inc.cnf
|
# Set inc-config - stored in etc/inc.cnf
|
||||||
@conf[:inc] = {}
|
begin
|
||||||
%w[hosts files fileparser].each {|key| @conf[:inc][key.to_sym] = config( @etc, key) }
|
inc = @conf[:inc] = {}
|
||||||
|
%w[hosts files fileparser].each {|key| @conf[:inc][key.to_sym] = config( @etc, key) }
|
||||||
|
inc[:fileparser] = config( @etc, 'fileparser') {|val| Safebox.run "[#{val}]"}
|
||||||
|
end
|
||||||
@store = LogAn::Cache.new LogAn::AutoValueConvertHash.new( @etc[ 'sids.store', 'seeks', SBDB::Recno, SBDB::CREATE | SBDB::AUTO_COMMIT]), 3
|
@store = LogAn::Cache.new LogAn::AutoValueConvertHash.new( @etc[ 'sids.store', 'seeks', SBDB::Recno, SBDB::CREATE | SBDB::AUTO_COMMIT]), 3
|
||||||
|
|
||||||
# Prepare Inc-server - create server
|
# Prepare Inc-server - create server
|
||||||
LogAn::Inc::FileParser::Base.logdb = @logs
|
LogAn::Inc::FileParser::Base.logdb = @logs
|
||||||
LogAn::Inc::FileParser::Base.store = @store
|
LogAn::Inc::FileParser::Base.store = @store
|
||||||
@serv = LogAn::Inc::Server.new :sock => TCPServer.new( *@conf[:server]), :config => @conf[:inc]
|
@serv = LogAn::Inc::Server.new :sock => TCPServer.new( *@conf[:server]), :config => @conf[:inc]
|
||||||
|
|
||||||
# Shutdown on signals
|
# Shutdown on signals
|
||||||
@sigs[:INT] = @sigs[:TERM] = method( :shutdown)
|
@sigs[:INT] = @sigs[:TERM] = method( :shutdown)
|
||||||
|
|
||||||
rescue Object
|
rescue Object
|
||||||
# It's better to close everything, because BDB doesn't like unexpected exits
|
# It's better to close everything, because BDB doesn't like unexpected exits
|
||||||
self.at_exit
|
self.at_exit
|
||||||
|
|
|
@ -97,8 +97,7 @@ class LogAn::Inc::Server < ::Select::Server
|
||||||
|
|
||||||
def event_cmd cmd
|
def event_cmd cmd
|
||||||
sid, line = cmd.unpack 'Na*'
|
sid, line = cmd.unpack 'Na*'
|
||||||
fps = @config[:fileparser]
|
fps = @config[:fileparser][sid]
|
||||||
fp = fps[sid]
|
|
||||||
fp.event_line line, self if fileparser
|
fp.event_line line, self if fileparser
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue