diff options
author | Patrick J Cherry <patrick@bytemark.co.uk> | 2011-07-20 16:15:03 +0100 |
---|---|---|
committer | Patrick J Cherry <patrick@bytemark.co.uk> | 2011-07-20 16:15:03 +0100 |
commit | 645c47d975e3c34a092acddf4a5f9420010755bc (patch) | |
tree | 6c667f44b01425efe6e7e4e10813bfe0cc082632 /lib/mauve/heartbeat.rb | |
parent | 53f89ba450850990057883a92f89ed994563e4ab (diff) |
* Added heartbeat to remote mauve
* Added URLs to messages
* Added example configuration file
* Added various docs
* XMPP messages now XHTML and TXT
* Handling of MUC reconnection a bit better.
Diffstat (limited to 'lib/mauve/heartbeat.rb')
-rw-r--r-- | lib/mauve/heartbeat.rb | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/lib/mauve/heartbeat.rb b/lib/mauve/heartbeat.rb new file mode 100644 index 0000000..0f51f80 --- /dev/null +++ b/lib/mauve/heartbeat.rb @@ -0,0 +1,64 @@ +require 'mauve/sender' +require 'mauve/proto' +require 'mauve/mauve_thread' +require 'log4r' + +# +# This class is responsible for sending a heartbeat to another mauve instance elsewhere. +# +module Mauve + + class Heartbeat < MauveThread + + include Singleton + + attr_accessor :destination, :summary, :detail + attr_reader :sleep_interval, :raise_at + + def initialize + super + + @destination = nil + @summary = "Mauve alert server down." + @detail = "The Mauve server at #{Server.instance.hostname} has failed to send a heartbeat." + self.raise_at = 600 + end + + def raise_at=(i) + @raise_at = i + @sleep_interval = ((i.to_f)/2.5).round.to_i + end + + def logger + @logger ||= Log4r::Logger.new(self.class.to_s) + end + + def main_loop + # + # Don't send if no destination set. + # + return if @destination.nil? + + update = Mauve::Proto::AlertUpdate.new + update.replace = false + update.alert = [] + update.source = Server.instance.hostname + update.transmission_id = rand(2**63) + + message = Mauve::Proto::Alert.new + message.id = "mauve-heartbeat" + message.summary = self.summary + message.detail = self.detail + message.raise_time = (MauveTime.now.to_f+self.raise_at).to_i + message.clear_time = MauveTime.now.to_i + + update.alert << message + + Mauve::Sender.new(self.destination).send(update) + end + + end + +end + + |