# # The redis-alerter. # # This doesn't raise/clear alerts in the traditional sense, instead # it just saves the results in a "recent tests" set inside Redis. # # module Custodian module Alerter class RedisAlert < 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) begin require 'rubygems' require 'redis' require 'json' @redis = Redis.new(:host => @target) rescue puts 'ERROR Loading redis rubygem!' end @test = obj end # # Store an alert in redis # def raise return unless @redis tmp = {} tmp['time'] = Time.now.to_i tmp['type'] = @test.get_type tmp['target'] = @test.target tmp['result'] = 'RAISE' tmp['reason'] = @test.error tmp['test' ] = @test.to_s tmp['class' ] = @test.class @redis.lpush('recent-tests', tmp.to_json) @redis.ltrim('recent-tests', 0, 100) end # # Clear an alert in redis # def clear return unless @redis tmp = {} tmp['time'] = Time.now.to_i tmp['type'] = @test.get_type tmp['target'] = @test.target tmp['result'] = 'OK' tmp['reason'] = '' tmp['test' ] = @test.to_s tmp['class' ] = @test.class @redis.lpush('recent-tests', tmp.to_json) @redis.ltrim('recent-tests', 0, 100) end register_alert_type 'redis' end end end