From f6b134149b469751d318cc1bbd72d29b735d3acb Mon Sep 17 00:00:00 2001 From: Steve Kemp Date: Mon, 26 Nov 2012 10:56:27 +0000 Subject: Added the redis-alerter. --- lib/custodian/alerts.rb | 1 + lib/custodian/alerts/redis-state.rb | 89 +++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 lib/custodian/alerts/redis-state.rb 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 -- cgit v1.2.1