diff options
-rwxr-xr-x | bin/custodian-enqueue | 5 | ||||
-rwxr-xr-x | bin/custodian-queue | 6 | ||||
-rw-r--r-- | debian/control | 4 | ||||
-rw-r--r-- | etc/custodian/custodian.cfg | 3 | ||||
-rw-r--r-- | lib/custodian/queue.rb | 88 | ||||
-rw-r--r-- | lib/custodian/worker.rb | 2 | ||||
-rwxr-xr-x | t/test-custodian-queue.rb | 35 |
7 files changed, 15 insertions, 128 deletions
diff --git a/bin/custodian-enqueue b/bin/custodian-enqueue index 1588638..7dd864b 100755 --- a/bin/custodian-enqueue +++ b/bin/custodian-enqueue @@ -60,10 +60,9 @@ if __FILE__ == $PROGRAM_NAME end # - # Connected to the queue - be it redis or beanstalkd + # Connected to the queue. # - settings = Custodian::Settings.instance - queue = Custodian::QueueType.create(settings.queue_type) + queue = Custodian::RedisQueueType.new() unless queue puts "Failed to connect to the #{settings.queue_type} queue" exit 1 diff --git a/bin/custodian-queue b/bin/custodian-queue index fcbf2b3..a78ae25 100755 --- a/bin/custodian-queue +++ b/bin/custodian-queue @@ -62,8 +62,7 @@ if __FILE__ == $PROGRAM_NAME # # Create the queue object. # - settings = Custodian::Settings.instance - queue = Custodian::QueueType.create(settings.queue_type) + queue = Custodian::RedisQueueType.new() # # Alerting on a queue that is too-full? @@ -129,9 +128,6 @@ __END__ # This tool is designed to inspect the global queue, and also allows that # queue to be flushed of all pending-jobs. # -# The queue may be redis-based, or beanstalkd-based, as defined by the -# global configuration-file. -# # AUTHOR # # Steve Kemp <steve@bytemark.co.uk> diff --git a/debian/control b/debian/control index 0113425..e9e3f9b 100644 --- a/debian/control +++ b/debian/control @@ -10,13 +10,13 @@ Homepage: https://projects.bytemark.co.uk/projects/custodian/ Package: custodian Architecture: all Depends: ruby, rubygems, ${misc:Depends}, libldap-ruby | libldap-ruby1.8 -Suggests: beanstalkd, mauvealert-client (>= 3.13.1) +Suggests: mauvealert-client (>= 3.13.1) Description: remote monitoring via distributed agents This package allows you to setup a semi-distributed monitoring solution, using the Bytemark MauveAlert server for notification. . The monitoring consists of a system to enqueue tests in - a beanstalkd server, and an agent that will fetch tests from + a global queue, and an agent that will fetch tests from that same queue and execute them. Package: custodian-bytemark diff --git a/etc/custodian/custodian.cfg b/etc/custodian/custodian.cfg index 8870250..ed19bce 100644 --- a/etc/custodian/custodian.cfg +++ b/etc/custodian/custodian.cfg @@ -6,7 +6,8 @@ ## -# The type of queue to use: "redis" or "beanstalkd". +# The type of queue to use - currently redis is the only supported +# type, although future updates may allow more to be specified. # # queue_type = redis ## diff --git a/lib/custodian/queue.rb b/lib/custodian/queue.rb index d919e07..8c8ea98 100644 --- a/lib/custodian/queue.rb +++ b/lib/custodian/queue.rb @@ -1,12 +1,13 @@ # -# We don't necessarily expect that both libraries will be present, -# so long as one is that'll allow things to work. +# Attempt to load the Redis-library. # -%w( redis beanstalk-client ).each do |library| +# Without this we cannot connect to our queue. +# +%w( redis ).each do |library| begin require library rescue LoadError - ENV['DEBUG'] && puts("Failed to load the library: #{library}") + puts("Failed to load the #{library} library - queue access will fail!") end end @@ -21,21 +22,6 @@ module Custodian class QueueType # - # Class-Factory - # - def self.create(type) - case type - when 'redis' - RedisQueueType.new - when 'beanstalk' - BeanstalkQueueType.new - else - raise "Bad queue-type: #{type}" - end - end - - - # # Retrieve a job from the queue. # def fetch(_timeout) @@ -165,68 +151,4 @@ module Custodian end - - - # - # Use the beanstalkd-queue for its intended purpose - # - class BeanstalkQueueType < QueueType - - # - # Connect to the server on localhost, unless QUEUE_ADDRESS is set. - # - def initialize - host = ENV['QUEUE_ADDRESS'] || '127.0.0.1' - @queue = Beanstalk::Pool.new(["#{host}:11300"]) - end - - - # - # Here we fetch a value from the queue, and delete it at the same time. - # - # The timeout is used to specify the period we wait for a new job. - # - def fetch(timeout) - begin - j = @queue.reserve(timeout) - if j then - b = j.body - j.delete - return b - else - raise 'ERRROR' - end - rescue Beanstalk::TimedOut => _ex - return nil - end - end - - - # - # Add a new job to the queue. - # - def add(job_string) - @queue.put(job_string) - end - - - # - # Get the size of the queue - # - def size? - stats = @queue.stats - (stats['current-jobs-ready'] || 0) - end - - - # - # Flush the queue, discarding all pending jobs. - # - def flush! - while fetch(1) - # nop - end - end - end - end diff --git a/lib/custodian/worker.rb b/lib/custodian/worker.rb index ef162b2..3c71838 100644 --- a/lib/custodian/worker.rb +++ b/lib/custodian/worker.rb @@ -73,7 +73,7 @@ module Custodian @settings = settings # Connect to the queue - @queue = QueueType.create(@settings.queue_type) + @queue = RedisQueueType.new() # Get the alerter-type(s) to instantiate @alerter = @settings.alerter diff --git a/t/test-custodian-queue.rb b/t/test-custodian-queue.rb index bcd615c..d9145c8 100755 --- a/t/test-custodian-queue.rb +++ b/t/test-custodian-queue.rb @@ -31,26 +31,13 @@ class TestCustodianQueue < Test::Unit::TestCase end - - # - # Test that creating an unknown type throws an exception. + # Test we can create and use a Redis queue. # - def test_unknown - - # creation will fail - assert_raise RuntimeError do - t = Custodian::QueueType.create('foo') - end - - end - - - def test_redis q = nil assert_nothing_raised do - q = Custodian::QueueType.create('redis') + q = Custodian::RedisQueueType.new() end # @@ -65,22 +52,4 @@ class TestCustodianQueue < Test::Unit::TestCase end - def test_beanstalkd - q = nil - assert_nothing_raised do - q = Custodian::QueueType.create('redis') - end - - # - # here we're testing we've got a derived class that has - # implemented the methods "size?" & "flush!" - # - assert_nothing_raised do - q.size? - q.flush! - end - - - end - end |