From 27f2157bf88c1de9452686da12ad3d3568dcd040 Mon Sep 17 00:00:00 2001 From: Denis Knauf Date: Wed, 17 Mar 2010 13:27:28 +0100 Subject: [PATCH 1/7] more readme --- README.md | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index b0c6832..dd56266 100644 --- a/README.md +++ b/README.md @@ -1,58 +1,59 @@ Dependencies ============ -incomplete yet. - System ------ * ruby >= 1.9 (tested: 1.9.1, untested: 1.8 (maybe compatible)) -* libdb >= 4 (tested: 4.7) -* C-Compiler +* libdb >= 4.7 (tested: 4.7/4.8) +* C-Compiler (tested: gcc 4.4.1) ### Debian/Ubuntu: # aptitude ruby1.9.1 ruby1.9.1-dev libdb4.7-dev rubygems1.9.1 -If you've installed ruby1.8 (yet), you should run ruby1.9.1 instead ruby and +If you've installed ruby1.8 (yet), you should run ruby1.9.1 instead ruby and gem1.9.1 instead gem. Change shebash in s2l.rb to #!/usr/bin/ruby1.9.1 +or + + #!/usr/bin/env ruby1.9.1 Ruby Gems --------- -* BDB >= 0.2.2 (patch needed - gem included) -* UUIDTools +You should install *dk-bdb* manualy: -Install: (in syslog2logan-dir) - - # gem install bdb-0.2.2.gem uuidtools + # gem install dk-bdb -- --with-db-dir=/usr --with-db-include=/usr/include +Every other dependencies will be installed automaticaly, +if you install syslog2logan via gem. Install ======= - # gem build syslog2logan.gemspec - # gem install syslog2logan-*.gem - + # gem install syslog2logan Usage ===== +First you should know, the database environments are in *this* directory, +where you call *s2l.rb*. You must use this directory for logan itself too! +Don't use this directory for anything else. + Start ----- -Simple: +Simple on Ubuntu: - # ./s2l.rb + # /var/lib/gems/1.9*/gems/syslog2logan-*/bin/s2l.rb -Or deamonized: - - # sh -c 'nohup ./s2l.rb /dev/null 2>&1 &' & +Deamonized: + # sh -c 'nohup PATHTO/s2l.rb /dev/null 2>&1 &' & Use it ------ @@ -67,7 +68,7 @@ You need these lines: source s_server { unix-stream( "/dev/log" max-connections(100)); - # internal(); # Statistics about dests. You've any other dest than the server? + # internal(); # Statistics about dests. It's unimportant for LogAn. file( "/proc/kmsg"); }; @@ -80,9 +81,6 @@ You need these lines: destination( d_server); }; -You should use your default source. - - ### rsyslog -I don't know. Please tell me, if you can. +I don't know. Please tell me, how to use. From 507951114ea803df1d722d4cba62ac0f463e5736 Mon Sep 17 00:00:00 2001 From: Denis Knauf Date: Sat, 20 Mar 2010 23:28:09 +0100 Subject: [PATCH 2/7] little changes: metafiles --- AUTHOR => AUTHORS | 0 Rakefile | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) rename AUTHOR => AUTHORS (100%) diff --git a/AUTHOR b/AUTHORS similarity index 100% rename from AUTHOR rename to AUTHORS diff --git a/Rakefile b/Rakefile index 5c1b488..8a519d1 100644 --- a/Rakefile +++ b/Rakefile @@ -10,8 +10,8 @@ begin gem.email = "Denis.Knauf@gmail.com" gem.homepage = "http://github.com/DenisKnauf/syslog2logan" gem.authors = ["Denis Knauf"] - gem.files = ["README.md", "VERSION", "bin/**/*", "lib/**/*.rb", "test/**/*.rb"] - gem.require_paths = ["bin"] + gem.files = %w[AUTHORS README.md VERSION bin/**/* lib/**/*.rb test/**/*.rb] + gem.require_paths = %w[bin] gem.add_dependency 'sbdb' gem.add_dependency 'robustserver' gem.add_dependency 'select' From 896f641856863794e8b3e9579c3ddc25979d75ef Mon Sep 17 00:00:00 2001 From: Denis Knauf Date: Sat, 19 Mar 2011 09:59:06 +0100 Subject: [PATCH 3/7] s2l: use logger --- bin/s2l.rb | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/bin/s2l.rb b/bin/s2l.rb index 5c07008..c85ecdc 100755 --- a/bin/s2l.rb +++ b/bin/s2l.rb @@ -1,5 +1,6 @@ #!/usr/bin/ruby +require 'logger' require 'rubygems' require 'sbdb' require 'uuidtools' @@ -7,6 +8,8 @@ require 'socket' require 'select' require 'robustserver' +$logger = Logger.new $stderr + class S2L < Select::Server attr_accessor :dbs @@ -16,22 +19,17 @@ class S2L < Select::Server end def event_new_client a + debug :connection => {:new => a} { :clientclass => S2L::Socket, :dbs => @dbs } end end module Kernel - def debug( *p) logger :debug, *p end - def info( *p) logger :info, *p end - def warn( *p) logger :warn, *p end - def error( *p) logger :error, *p end - def fatal( *p) logger :fatal, *p end - - def logger l, *p - p = p.first if p.length == 1 - $stderr.puts [Time.now, l, p].inspect - end - private :logger + def debug( *p) $logger.debug *p end + def info( *p) $logger.info *p end + def warn( *p) $logger.warn *p end + def error( *p) $logger.error *p end + def fatal( *p) $logger.fatal *p end end class S2L::Socket < Select::Socket @@ -41,6 +39,7 @@ class S2L::Socket < Select::Socket end def event_line v + debug :line => v @dbs.emit v end alias emit event_line @@ -111,16 +110,22 @@ end class Main < RobustServer def initialize conf super + @logger = $logger @conf = conf info :open => S2L @serv = S2L.new :sock => TCPServer.new( *@conf[:server]) info :create => {:home => @conf[:home]} Dir.mkdir @conf[:home] rescue Errno::EEXIST @sigs[:INT] = @sigs[:TERM] = method(:shutdown) + @sigs[:USR1] = method(:state) + end + + def state s = nil + debug :server => @serv end def shutdown s = nil - $stderr.puts [:signal, s, Signal[s]].inspect + info :shutdown => [s, Signal[s]] @serv.close exit 0 end From 1efdf76ffcc326812c02391560b86da2f1dbdfe0 Mon Sep 17 00:00:00 2001 From: Denis Knauf Date: Sat, 7 May 2011 00:54:56 +0200 Subject: [PATCH 4/7] s2l -> s2l | rotate | bdb --- bin/s2l.rb | 90 ++++---------------------- lib/syslog2logan/rotate.rb | 2 + lib/syslog2logan/rotate/base.rb | 58 +++++++++++++++++ lib/syslog2logan/rotate/bdb.rb | 108 ++++++++++++++++++++++++++++++++ 4 files changed, 181 insertions(+), 77 deletions(-) create mode 100644 lib/syslog2logan/rotate.rb create mode 100755 lib/syslog2logan/rotate/base.rb create mode 100755 lib/syslog2logan/rotate/bdb.rb diff --git a/bin/s2l.rb b/bin/s2l.rb index c85ecdc..fa2cf28 100755 --- a/bin/s2l.rb +++ b/bin/s2l.rb @@ -7,6 +7,8 @@ require 'uuidtools' require 'socket' require 'select' require 'robustserver' +require 'active_support' +require 'syslog2logan/rotate' $logger = Logger.new $stderr @@ -19,17 +21,13 @@ class S2L < Select::Server end def event_new_client a - debug :connection => {:new => a} + logger.debug :connection => {:new => a} { :clientclass => S2L::Socket, :dbs => @dbs } end end module Kernel - def debug( *p) $logger.debug *p end - def info( *p) $logger.info *p end - def warn( *p) $logger.warn *p end - def error( *p) $logger.error *p end - def fatal( *p) $logger.fatal *p end + def logger() $logger end end class S2L::Socket < Select::Socket @@ -39,105 +37,43 @@ class S2L::Socket < Select::Socket end def event_line v - debug :line => v + logger.debug :line => v @dbs.emit v end alias emit event_line end -class Rotate - def initialize db, &e - @rdb, @env, @dbs = db, db.home, {} - self.hash = e || lambda {|k| - [k.timestamp.to_i/60/60/24].pack 'N' - } - end - - def hash= e - self.hash &e - end - - def hash &e - @hash_func = e if e - @hash_func - end - - def hashing k - @hash_func.call k - end - - def db_name id - h = hashing id - n = @rdb[ h] - if n - n = UUIDTools::UUID.parse_raw n - else - n = UUIDTools::UUID.timestamp_create - @rdb[ h] = n.raw - info :create => n.to_s - end - n - end - - def db n - @env[ n.to_s, :type => SBDB::Btree, :flags => SBDB::CREATE | SBDB::AUTO_COMMIT] - end - - def queue n - @env[ "newids.queue", :type => SBDB::Queue, :flags => SBDB::CREATE | SBDB::AUTO_COMMIT, :re_len => 16] - end - - def sync - @dbs.each{|n,db|db.sync} - @rdb.sync - end - - def close - @dbs.each{|n,db|db.close 0} - @rdb.close 0 - end - - def put v - id = UUIDTools::UUID.timestamp_create - s = [0x10, v].pack 'Na*' - n = db_name id - db( n)[ id.raw] = s - queue( n).push id.raw - end - alias emit put -end - class Main < RobustServer def initialize conf super @logger = $logger @conf = conf - info :open => S2L + logger.info :open => S2L @serv = S2L.new :sock => TCPServer.new( *@conf[:server]) - info :create => {:home => @conf[:home]} + logger.info :create => {:home => @conf[:home]} Dir.mkdir @conf[:home] rescue Errno::EEXIST @sigs[:INT] = @sigs[:TERM] = method(:shutdown) @sigs[:USR1] = method(:state) end def state s = nil - debug :server => @serv + logger.debug :server => @serv end def shutdown s = nil - info :shutdown => [s, Signal[s]] + logger.info :shutdown => [s, Signal[s]] @serv.close exit 0 end def run - info :open => SBDB::Env + 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| - info :open => Rotate + logger.info :open => Rotate @serv.dbs = Rotate.new dbenv[ 'rotates.db', :type => SBDB::Btree, :flags => SBDB::CREATE | Bdb::DB_AUTO_COMMIT] - info :run => @serv + logger.info :run => @serv @serv.run end end @@ -145,4 +81,4 @@ end Main.main :home => 'logs', :server => [ '', 1514], :retries => [1,1] # [10, 10] -info :halted +logger.info :halted diff --git a/lib/syslog2logan/rotate.rb b/lib/syslog2logan/rotate.rb new file mode 100644 index 0000000..133027b --- /dev/null +++ b/lib/syslog2logan/rotate.rb @@ -0,0 +1,2 @@ + +require 'syslog2logan/rotate/base.rb' diff --git a/lib/syslog2logan/rotate/base.rb b/lib/syslog2logan/rotate/base.rb new file mode 100755 index 0000000..30b85cc --- /dev/null +++ b/lib/syslog2logan/rotate/base.rb @@ -0,0 +1,58 @@ +#!/usr/bin/ruby + +require 'logger' +require 'uuidtools' +require 'active_support' + +class Rotate + # open_db_func: must returns a db-object with #[] and #[]=. + # #sync and #close are optional, for Rotate#sync, Rotate#close. + def initialize hash_func = nil, &open_db_func + @dbs = Hash.new {|h,k| h[k] = open_db_func.call(k) } + hash_func ||= lambda {|k| [k.timestamp.to_i/1.day].pack 'N' } + define_method :hashing, &hash_func + @rotate = @dbs['rotate'] + @queue = @dbs['queue'] + end + + def db_name id + h = hashing id + n = @rdb[ h] + if n + n = UUIDTools::UUID.parse_raw n + else + n = UUIDTools::UUID.timestamp_create + @rdb[ h] = n.raw + logger.info :create => n.to_s + end + n + end + + # Synchronize data to disc. + # Only avaible if db-backend provides #sync. + def sync + @dbs.each {|n, db| db.sync } + @rotate.sync + @queue.sync + end + + # Close databases. + # Only avaible if db-backend provides #close. + def close + @dbs.each {|n, db| db.close } + @rotate.close + @queue.close + end + + # Put new logline to databases. + # This will be written in a database with an UUID as name. + # If this db don't exist, it will be created via open_db_func (#initialize). + def put v + id = UUIDTools::UUID.timestamp_create + s = [0x10, v].pack 'Na*' + n = db_name id + @dbs[n][ id.raw] = s + @queue.push id.raw + end + alias emit put +end diff --git a/lib/syslog2logan/rotate/bdb.rb b/lib/syslog2logan/rotate/bdb.rb new file mode 100755 index 0000000..9ccd9b1 --- /dev/null +++ b/lib/syslog2logan/rotate/bdb.rb @@ -0,0 +1,108 @@ +#!/usr/bin/ruby + +require 'logger' +require 'rubygems' +require 'sbdb' +require 'uuidtools' +require 'socket' +require 'select' +require 'robustserver' +require 'active_support' + +class Rotate::BDB + def initialize db, &e + @rdb, @env, @dbs = db, db.home, {} + self.hash = e || lambda {|k| + [k.timestamp.to_i/1.hour].pack 'N' + } + end + + def hash= e + self.hash &e + end + + def hash &e + @hash_func = e if e + @hash_func + end + + def hashing k + @hash_func.call k + end + + def db_name id + h = hashing id + n = @rdb[ h] + if n + n = UUIDTools::UUID.parse_raw n + else + n = UUIDTools::UUID.timestamp_create + @rdb[ h] = n.raw + logger.info :create => n.to_s + end + n + end + + def db n + @env[ n.to_s, :type => SBDB::Btree, :flags => SBDB::CREATE | SBDB::AUTO_COMMIT] + end + + def queue n + @env[ "newids.queue", :type => SBDB::Queue, :flags => SBDB::CREATE | SBDB::AUTO_COMMIT, :re_len => 16] + end + + def sync + @dbs.each {|n, db| db.sync } + @rdb.sync + end + + def close + @dbs.each {|n, db| db.close 0 } + @rdb.close 0 + end + + def put v + id = UUIDTools::UUID.timestamp_create + s = [0x10, v].pack 'Na*' + n = db_name id + db( n)[ id.raw] = s + queue( n).push id.raw + end + alias emit put +end + +class Main < RobustServer + def initialize conf + super + @logger = $logger + @conf = conf + logger.info :open => S2L + @serv = S2L.new :sock => TCPServer.new( *@conf[:server]) + logger.info :create => {:home => @conf[:home]} + Dir.mkdir @conf[:home] rescue Errno::EEXIST + @sigs[:INT] = @sigs[:TERM] = method(:shutdown) + @sigs[:USR1] = method(:state) + end + + def state s = nil + logger.debug :server => @serv + end + + def shutdown s = nil + logger.info :shutdown => [s, Signal[s]] + @serv.close + exit 0 + end + + def run + 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| + logger.info :open => Rotate + @serv.dbs = Rotate.new dbenv[ 'rotates.db', :type => SBDB::Btree, :flags => SBDB::CREATE | Bdb::DB_AUTO_COMMIT] + logger.info :run => @serv + @serv.run + end + end +end From 3bdd2e6ceb02ae7ce1f9f9ef3cb92a1568157af2 Mon Sep 17 00:00:00 2001 From: Denis Knauf Date: Wed, 8 Jun 2011 22:51:40 +0200 Subject: [PATCH 5/7] file-queue --- VERSION | 2 +- bin/s2l.rb | 50 +++++-------------- lib/file_queue.rb | 48 ++++++++++++++++++ lib/in_tch.rb | 83 ++++++++++++++++++++++++++++++++ lib/syslog2logan/backend/base.rb | 16 ++++++ lib/syslog2logan/backend/tch.rb | 31 ++++++++++++ lib/syslog2logan/rotate/base.rb | 8 +-- lib/syslog2logan/rotate/bdb.rb | 0 lib/syslog2logan/server.rb | 29 +++++++++++ 9 files changed, 224 insertions(+), 43 deletions(-) create mode 100644 lib/file_queue.rb create mode 100644 lib/in_tch.rb create mode 100644 lib/syslog2logan/backend/base.rb create mode 100644 lib/syslog2logan/backend/tch.rb mode change 100755 => 100644 lib/syslog2logan/rotate/base.rb mode change 100755 => 100644 lib/syslog2logan/rotate/bdb.rb create mode 100644 lib/syslog2logan/server.rb diff --git a/VERSION b/VERSION index 334bcc4..092cda7 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.2.1 +0.0.3.0 diff --git a/bin/s2l.rb b/bin/s2l.rb index fa2cf28..e5fc371 100755 --- a/bin/s2l.rb +++ b/bin/s2l.rb @@ -1,48 +1,24 @@ #!/usr/bin/ruby +$:.push File.join( File.dirname( $0), '..', 'lib') require 'logger' +require 'json' require 'rubygems' -require 'sbdb' require 'uuidtools' require 'socket' require 'select' require 'robustserver' require 'active_support' require 'syslog2logan/rotate' +require 'syslog2logan/server' $logger = Logger.new $stderr - -class S2L < Select::Server - attr_accessor :dbs - - def init p - super p - @dbs = p[:dbs] - end - - def event_new_client a - logger.debug :connection => {:new => a} - { :clientclass => S2L::Socket, :dbs => @dbs } - end -end +$logger.formatter = proc { |severity, datetime, progname, msg| [severity, datetime, progname, msg.inspect].to_json+"\n" } module Kernel def logger() $logger end end -class S2L::Socket < Select::Socket - def init opts - @dbs = opts[ :dbs] - super opts - end - - def event_line v - logger.debug :line => v - @dbs.emit v - end - alias emit event_line -end - class Main < RobustServer def initialize conf super @@ -50,14 +26,12 @@ class Main < RobustServer @conf = conf logger.info :open => S2L @serv = S2L.new :sock => TCPServer.new( *@conf[:server]) - logger.info :create => {:home => @conf[:home]} - Dir.mkdir @conf[:home] rescue Errno::EEXIST @sigs[:INT] = @sigs[:TERM] = method(:shutdown) @sigs[:USR1] = method(:state) end def state s = nil - logger.debug :server => @serv + logger.debug :server => @serv.class end def shutdown s = nil @@ -67,18 +41,18 @@ class Main < RobustServer end def run - 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| + logger.info :open => @conf[:backend] + @conf[:backend][0].new( @conf[:backend][1]) do |backend| logger.info :open => Rotate - @serv.dbs = Rotate.new dbenv[ 'rotates.db', :type => SBDB::Btree, :flags => SBDB::CREATE | Bdb::DB_AUTO_COMMIT] - logger.info :run => @serv + @serv.dbs = Rotate.new &backend.to_proc + logger.info :run => @serv.class @serv.run + logger.info :close => @conf[:backend] end end end -Main.main :home => 'logs', :server => [ '', 1514], :retries => [1,1] # [10, 10] +require 'syslog2logan/backend/tch' +Main.main :backend => [ Backend::TCH, {:dir => 'logs'}], :server => [ '', 1514], :retries => [1,1] # [10, 10] logger.info :halted diff --git a/lib/file_queue.rb b/lib/file_queue.rb new file mode 100644 index 0000000..53a4f7a --- /dev/null +++ b/lib/file_queue.rb @@ -0,0 +1,48 @@ +class File + def exclusive_lock + flock File::LOCK_EX + end + + def shared_lock + flock File::LOCK_SH + end + + def unblock + flock File::LOCK_UN + end +end + +class FileQueue + attr_reader :file, :size + alias to_io file + + def initialize file, size = 16 + @file = case file + when File then file + else File.open file, 'a+' + end + @size, @pack = size, "A#{size}" + end + + def push *a + f = @file + f.seek 0, IO::SEEK_END + f.exclusive_lock + f.write a.pack( @pack*a.length) + f.unblock + end + + def pop + f = @file + f.rewind + f.exclusive_lock + s = f.read( @size).unpack( 'L')[0] + f.rewind + f.write [s.succ].pack( 'L') + f.sync + f.shared_lock + f.pos = s + f.read( @size).unpack( 'L')[0] + f.unblock + end +end diff --git a/lib/in_tch.rb b/lib/in_tch.rb new file mode 100644 index 0000000..b5e21c9 --- /dev/null +++ b/lib/in_tch.rb @@ -0,0 +1,83 @@ +#!/usr/bin/ruby + +require 'logger' +require 'rubygems' +require 'uuidtools' +require 'socket' +require 'select' +require 'robustserver' +require 'active_support' +require 'syslog2logan/rotate' + +$logger = Logger.new $stderr + +class S2L < Select::Server + attr_accessor :dbs + + def init p + super p + @dbs = p[:dbs] + end + + def event_new_client a + logger.debug :connection => {:new => a} + { :clientclass => S2L::Socket, :dbs => @dbs } + end +end + +module Kernel + def logger() $logger end +end + +class S2L::Socket < Select::Socket + def init opts + @dbs = opts[ :dbs] + super opts + end + + def event_line v + logger.debug :line => v + @dbs.emit v + end + alias emit event_line +end + +class Main < RobustServer + def initialize conf + super + @logger = $logger + @conf = conf + logger.info :open => S2L + @serv = S2L.new :sock => TCPServer.new( *@conf[:server]) + logger.info :create => {:home => @conf[:home]} + Dir.mkdir @conf[:home] rescue Errno::EEXIST + @sigs[:INT] = @sigs[:TERM] = method(:shutdown) + @sigs[:USR1] = method(:state) + end + + def state s = nil + logger.debug :server => @serv + end + + def shutdown s = nil + logger.info :shutdown => [s, Signal[s]] + @serv.close + exit 0 + end + + def run + 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| + logger.info :open => Rotate + @serv.dbs = Rotate.new dbenv[ 'rotates.db', :type => SBDB::Btree, :flags => SBDB::CREATE | Bdb::DB_AUTO_COMMIT] + logger.info :run => @serv + @serv.run + end + end +end + +Main.main :home => 'logs', :server => [ '', 1514], :retries => [1,1] # [10, 10] + +logger.info :halted diff --git a/lib/syslog2logan/backend/base.rb b/lib/syslog2logan/backend/base.rb new file mode 100644 index 0000000..bf98610 --- /dev/null +++ b/lib/syslog2logan/backend/base.rb @@ -0,0 +1,16 @@ +module Backend +end + +class Backend::Base + def initialize opts = {} + if block_given? + yield self + else + self + end + end + + def to_proc + method :open + end +end diff --git a/lib/syslog2logan/backend/tch.rb b/lib/syslog2logan/backend/tch.rb new file mode 100644 index 0000000..fbf1a9e --- /dev/null +++ b/lib/syslog2logan/backend/tch.rb @@ -0,0 +1,31 @@ +require 'rufus/tokyo' +require 'syslog2logan/backend/base' + +class Backend::TCH < Backend::Base + attr_reader :dir + def initialize opts = {}, &e + @dir = opts[:dir] + Dir.mkdir @dir rescue Errno::EEXIST + @dbs = [] + if block_given? + begin + super opts, &e + ensure + close + end + else + super opts + end + end + + def close + @dbs.each &:close + end + + def open name + logger.info :open => name, :backend => self.class + db = Rufus::Tokyo::Cabinet.new File.join( @dir, name)+".tch" + @dbs.push db + db + end +end diff --git a/lib/syslog2logan/rotate/base.rb b/lib/syslog2logan/rotate/base.rb old mode 100755 new mode 100644 index 30b85cc..703abfa --- a/lib/syslog2logan/rotate/base.rb +++ b/lib/syslog2logan/rotate/base.rb @@ -2,7 +2,7 @@ require 'logger' require 'uuidtools' -require 'active_support' +require 'active_support/core_ext' class Rotate # open_db_func: must returns a db-object with #[] and #[]=. @@ -10,19 +10,19 @@ class Rotate def initialize hash_func = nil, &open_db_func @dbs = Hash.new {|h,k| h[k] = open_db_func.call(k) } hash_func ||= lambda {|k| [k.timestamp.to_i/1.day].pack 'N' } - define_method :hashing, &hash_func + define_singleton_method :hashing, &hash_func @rotate = @dbs['rotate'] @queue = @dbs['queue'] end def db_name id h = hashing id - n = @rdb[ h] + n = @rotate[ h] if n n = UUIDTools::UUID.parse_raw n else n = UUIDTools::UUID.timestamp_create - @rdb[ h] = n.raw + @rotate[ h] = n.raw logger.info :create => n.to_s end n diff --git a/lib/syslog2logan/rotate/bdb.rb b/lib/syslog2logan/rotate/bdb.rb old mode 100755 new mode 100644 diff --git a/lib/syslog2logan/server.rb b/lib/syslog2logan/server.rb new file mode 100644 index 0000000..166d863 --- /dev/null +++ b/lib/syslog2logan/server.rb @@ -0,0 +1,29 @@ +require 'socket' +require 'select' + +class S2L < Select::Server + attr_accessor :dbs + + def init p + super p + @dbs = p[:dbs] + end + + def event_new_client a + logger.debug :connection => {:new => a} + { :clientclass => S2L::Socket, :dbs => @dbs } + end +end + +class S2L::Socket < Select::Socket + def init opts + @dbs = opts[ :dbs] + super opts + end + + def event_line v + logger.debug :line => v + @dbs.emit v + end + alias emit event_line +end From 1063201b6479cfd4f217faf777862c1878e02844 Mon Sep 17 00:00:00 2001 From: Denis Knauf Date: Wed, 8 Jun 2011 22:59:25 +0200 Subject: [PATCH 6/7] README: tc --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index dd56266..1d0c8c0 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,12 @@ System ------ * ruby >= 1.9 (tested: 1.9.1, untested: 1.8 (maybe compatible)) -* libdb >= 4.7 (tested: 4.7/4.8) -* C-Compiler (tested: gcc 4.4.1) +* tokyocabinet +* rufus-tokyo ### Debian/Ubuntu: - # aptitude ruby1.9.1 ruby1.9.1-dev libdb4.7-dev rubygems1.9.1 + # aptitude ruby1.9.1 ruby1.9.1-dev rubygems1.9.1 libtokyocabinet-dev libtokyotyrant-dev If you've installed ruby1.8 (yet), you should run ruby1.9.1 instead ruby and gem1.9.1 instead gem. @@ -27,7 +27,7 @@ Ruby Gems You should install *dk-bdb* manualy: - # gem install dk-bdb -- --with-db-dir=/usr --with-db-include=/usr/include + # gem install rufus-tokyo Every other dependencies will be installed automaticaly, if you install syslog2logan via gem. From c919500ae3f5bb2e4f413298ac5bfddd78035b8e Mon Sep 17 00:00:00 2001 From: Denis Knauf Date: Wed, 8 Jun 2011 23:03:42 +0200 Subject: [PATCH 7/7] README: gems removed (automaticaly installed) --- README.md | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/README.md b/README.md index 1d0c8c0..b74060a 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,6 @@ System * ruby >= 1.9 (tested: 1.9.1, untested: 1.8 (maybe compatible)) * tokyocabinet -* rufus-tokyo ### Debian/Ubuntu: @@ -22,16 +21,6 @@ or #!/usr/bin/env ruby1.9.1 -Ruby Gems ---------- - -You should install *dk-bdb* manualy: - - # gem install rufus-tokyo - -Every other dependencies will be installed automaticaly, -if you install syslog2logan via gem. - Install =======