summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Kemp <steve@steve.org.uk>2012-11-26 10:56:27 +0000
committerSteve Kemp <steve@steve.org.uk>2012-11-26 10:56:27 +0000
commit3a172585f303fb632a932501960c92629414b3e2 (patch)
tree515a94bf5c25c2f696c5b99dee959a36789f7c67
parent06022289eb29ae3475030d3fd5fd478839bbdc60 (diff)
Added the redis-alerter.
-rw-r--r--lib/custodian/alerts.rb1
-rw-r--r--lib/custodian/alerts/redis-state.rb89
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