From 313be57c1d2ce2a73981ba3bd1dc1503069c13cc Mon Sep 17 00:00:00 2001 From: Denis Knauf Date: Mon, 29 Mar 2010 01:12:22 +0200 Subject: [PATCH] config-inc: @config[db,sid] => @config[db][sid]. Only opened dbs supported. --- lib/logan/inc/main.rb | 48 +++++++++++++++++++++++++++++------------ lib/logan/inc/server.rb | 2 +- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/lib/logan/inc/main.rb b/lib/logan/inc/main.rb index 0d9cd0d..f031512 100644 --- a/lib/logan/inc/main.rb +++ b/lib/logan/inc/main.rb @@ -5,41 +5,61 @@ require 'robustserver' module LogAn::Inc class Main < RobustServer - def config db, type = nil + # Open Config. + def config env, db, type = nil type ||= 1+4 - ret = @etc[ 'inc.cnf', db, SBDB::RDONLY] + ret = env[ 'inc.cnf', db, SBDB::RDONLY] ret = AutoValueConvertHash.new ret if type&4 > 0 ret = Cache.new ret, type&3 if type&3 > 0 ret end + # Prepare Server. + # + # * conf: + # logs + # : Where to store log-databases? default: ./logs + # etc + # : Where to find config-databases? default: ./etc + # server + # : Server-Configuration. default { port: 1087 } def initialize conf super - @conf = conf - @logs = LogAn::Loglines.new 'logs' - etc = @conf[:etc] || 'etc' - Dir.mkdir etc rescue Errno::EEXIST - @etc = SBDB::Env.new( etc, + @conf = {} + # Copy config - changes possible + conf.each &@conf.method(:[]=) + # Default directories + %w[logs etc].each {|key| @conf[key.to_sym] = key } + # Open Loglines-databases + @logs = LogAn::Loglines.new @conf[:logs] + # Open config-databases + Dir.mkdir @conf[:etc] rescue Errno::EEXIST + @etc = SBDB::Env.new( @conf[:etc], log_config: SBDB::Env::LOG_IN_MEMORY | SBDB::Env::LOG_AUTO_REMOVE, flags: SBDB::CREATE | SBDB::Env::INIT_TXN | Bdb::DB_INIT_MPOOL) - @hosts = config 'hosts' - @files = config 'files' - @fileparser = config 'fileparser' - @serv = LogAn::Inc.new :sock => TCPServer.new( *@conf[:server]) - @sigs[:INT] = @sigs[:TERM] = method(:shutdown) + # Set inc-config - stored in etc/inc.cnf + @conf[:inc] = {} + %w[hosts files fileparser].each {|key| @conf[:inc][key.to_sym] = config( @etc, key) } + # Prepare Inc-server - create server + @serv = LogAn::Inc.new :sock => TCPServer.new( *@conf[:server]), :config => @conf[:inc] + # Shutdown on signals + @sigs[:INT] = @sigs[:TERM] = method( :shutdown) end + # Will be called at exit. Will close all opened BDB::Env def at_exit @logs and @logs.close @etc and @etc.close end - def shutdown s = nil - $stderr.puts [:signal, s, Signal[s]].inspect if s + # Shutdown Server cleanly. + def shutdown signal = nil + $stderr.puts [:signal, signal, Signal[signal]].inspect if signal @serv.close exit 0 end + # Runs server. Don't use it! Use #main. def run @serv.run end diff --git a/lib/logan/inc/server.rb b/lib/logan/inc/server.rb index c5f17d0..884a99a 100644 --- a/lib/logan/inc/server.rb +++ b/lib/logan/inc/server.rb @@ -95,7 +95,7 @@ module Logan def event_cmd cmd sid, line = cmd.unpack 'Na*' begin - @config[ :fileparser, sid].event_line line, self + @config[ :fileparser][sid].event_line line, self rescue Didi::Config::NoSIDFound, Didi::Config::SIDLoadingError $stderr.puts( {:sid => sid, :exception => $!, :backtrace => $!.backtrace}.inspect) end