syslog2logan/bin/s2l.rb

85 lines
1.7 KiB
Ruby
Raw Normal View History

2010-01-30 14:58:28 +01:00
#!/usr/bin/ruby
2011-03-19 09:59:06 +01:00
require 'logger'
2010-01-30 14:58:28 +01:00
require 'rubygems'
require 'sbdb'
require 'uuidtools'
require 'socket'
require 'select'
require 'robustserver'
2011-05-07 00:54:56 +02:00
require 'active_support'
require 'syslog2logan/rotate'
2010-01-30 14:58:28 +01:00
2011-03-19 09:59:06 +01:00
$logger = Logger.new $stderr
2010-01-30 14:58:28 +01:00
class S2L < Select::Server
attr_accessor :dbs
2010-01-30 14:58:28 +01:00
def init p
super p
@dbs = p[:dbs]
end
def event_new_client a
2011-05-07 00:54:56 +02:00
logger.debug :connection => {:new => a}
2010-01-30 14:58:28 +01:00
{ :clientclass => S2L::Socket, :dbs => @dbs }
end
end
module Kernel
2011-05-07 00:54:56 +02:00
def logger() $logger end
2010-01-30 14:58:28 +01:00
end
class S2L::Socket < Select::Socket
def init opts
@dbs = opts[ :dbs]
super opts
end
def event_line v
2011-05-07 00:54:56 +02:00
logger.debug :line => v
2010-01-30 14:58:28 +01:00
@dbs.emit v
end
alias emit event_line
end
class Main < RobustServer
def initialize conf
super
2011-03-19 09:59:06 +01:00
@logger = $logger
@conf = conf
2011-05-07 00:54:56 +02:00
logger.info :open => S2L
@serv = S2L.new :sock => TCPServer.new( *@conf[:server])
2011-05-07 00:54:56 +02:00
logger.info :create => {:home => @conf[:home]}
Dir.mkdir @conf[:home] rescue Errno::EEXIST
@sigs[:INT] = @sigs[:TERM] = method(:shutdown)
2011-03-19 09:59:06 +01:00
@sigs[:USR1] = method(:state)
end
def state s = nil
2011-05-07 00:54:56 +02:00
logger.debug :server => @serv
end
def shutdown s = nil
2011-05-07 00:54:56 +02:00
logger.info :shutdown => [s, Signal[s]]
@serv.close
exit 0
end
def run
2011-05-07 00:54:56 +02:00
logger.info :open => SBDB::Env
SBDB::Env.new( @conf[:home],
log_config: SBDB::Env::LOG_IN_MEMORY | SBDB::Env::LOG_AUTO_REMOVE,
flags: SBDB::CREATE | SBDB::Env::INIT_TXN | Bdb::DB_INIT_MPOOL) do |dbenv|
2011-05-07 00:54:56 +02:00
logger.info :open => Rotate
@serv.dbs = Rotate.new dbenv[ 'rotates.db', :type => SBDB::Btree, :flags => SBDB::CREATE | Bdb::DB_AUTO_COMMIT]
2011-05-07 00:54:56 +02:00
logger.info :run => @serv
@serv.run
2010-01-30 14:58:28 +01:00
end
end
end
Main.main :home => 'logs', :server => [ '', 1514], :retries => [1,1] # [10, 10]
2011-05-07 00:54:56 +02:00
logger.info :halted