diff options
Diffstat (limited to 'lib/custodian/alerter.rb')
-rw-r--r-- | lib/custodian/alerter.rb | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/lib/custodian/alerter.rb b/lib/custodian/alerter.rb new file mode 100644 index 0000000..751b368 --- /dev/null +++ b/lib/custodian/alerter.rb @@ -0,0 +1,76 @@ + + +require 'mauve/sender' +require 'mauve/proto' + + + +# +# This class encapsulates the raising and clearing of alerts via Mauve. +# +class Alerter + + attr_reader :details + + def initialize( test_details ) + @details = test_details + end + + + # + # Raise the alert. + # + def raise( detail ) + + update = Mauve::Proto::AlertUpdate.new + update.alert = [] + update.source = "custodian" + + # be explicit about raising/clearing + update.replace = false + + alert = Mauve::Proto::Alert.new + + # e.g. ping-example.vm.bytemark.co.uk + # e.g. http-http://example.com/page1 + alert.id = "#{@details['test_type']}-#{@details['target_host']}" + + alert.subject = @details['target_host'] + alert.summary = @details['test_alert'] + alert.detail = "The #{@details['test_type']} test failed against #{@details['target_host']}: #{detail}" + alert.raise_time = Time.now.to_i + update.alert << alert + + Mauve::Sender.new("alert.bytemark.co.uk").send(update) + + end + + # + # Clear the alert. + # + def clear + + update = Mauve::Proto::AlertUpdate.new + update.alert = [] + update.source = "custodian" + + # be explicit about raising/clearing + update.replace = false + + + alert = Mauve::Proto::Alert.new + + # e.g. ping-example.vm.bytemark.co.uk + # e.g. http-http://example.com/page1 + alert.id = "#{@details['test_type']}-#{@details['target_host']}" + + alert.subject = @details['target_host'] + alert.summary = @details['test_alert'] + alert.detail = "The #{@details['test_type']} test succeeded against #{@details['target_host']}" + alert.clear_time = Time.now.to_i + update.alert << alert + + Mauve::Sender.new("alert.bytemark.co.uk").send(update) + end + +end |