diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/custodian/alerts.rb | 1 | ||||
| -rw-r--r-- | lib/custodian/alerts/redis-state.rb | 89 | 
2 files changed, 90 insertions, 0 deletions
| diff --git a/lib/custodian/alerts.rb b/lib/custodian/alerts.rb index 4a3f642..1f90fe2 100644 --- a/lib/custodian/alerts.rb +++ b/lib/custodian/alerts.rb @@ -16,6 +16,7 @@ require 'custodian/alertfactory'  #  require 'custodian/alerts/file'  require 'custodian/alerts/mauve' +require 'custodian/alerts/redis-state'  require 'custodian/alerts/smtp' diff --git a/lib/custodian/alerts/redis-state.rb b/lib/custodian/alerts/redis-state.rb new file mode 100644 index 0000000..0c0b6a0 --- /dev/null +++ b/lib/custodian/alerts/redis-state.rb @@ -0,0 +1,89 @@ + +require 'rubygems' +require 'redis' + + +# +#  The redis-alerter. +# +#  This doesn't raise/clear alerts in the traditional sense, instead it just +# stores results in a redis database where you can poll them from a status-panel, +# or similar. +# +#  There is a global set called "hosts" which has the hostname-test-type lists +# and the individual results can be pulled by simple key-fetches on those. +# +module Custodian + +  module Alerter + +    class AlertRedis < AlertFactory + +      # +      # The test this alerter cares about +      # +      attr_reader :test + +      # +      # The redis-object +      # +      attr_reader :redis + + +      # +      # Constructor - save the test-object away & instantiate +      # the redis connection. +      # +      def initialize( obj ) +        @test = obj +        @redis = Redis.new +      end + + + +      # +      # Store an alert in redis +      # +      def raise + +        # hostname + test-type +        host = @test.target +        test = @test.get_type + +        # store the error +        @redis.set( "#{host}-#{test}", "ERR") +        @redis.set( "#{host}-#{test}-reason", @test.error() ) + +        # make sure this alert is discoverable +        @redis.sadd( "hosts", "#{host}-#{test}" ) +      end + + + +      # +      # Clear an alert in redis +      # +      def clear + +        # hostname + test-type +        host = @test.target +        test = @test.get_type + +        # store the OK +        @redis.set( "#{host}-#{test}", "OK") +        @redis.set( "#{host}-#{test}-reason", "") + +        # make sure this alert is discoverable +        @redis.sadd( "hosts", "#{host}-#{test}" ) +      end + + + +      register_alert_type "redis" + + + + +    end +  end +end | 
