diff options
author | Steve Kemp <steve@steve.org.uk> | 2012-11-26 10:56:27 +0000 |
---|---|---|
committer | Steve Kemp <steve@steve.org.uk> | 2012-11-26 10:56:27 +0000 |
commit | 3a172585f303fb632a932501960c92629414b3e2 (patch) | |
tree | 515a94bf5c25c2f696c5b99dee959a36789f7c67 | |
parent | 06022289eb29ae3475030d3fd5fd478839bbdc60 (diff) |
Added the redis-alerter.
-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 |