aboutsummaryrefslogtreecommitdiff
path: root/lib/mauve/notifiers/hipchat.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mauve/notifiers/hipchat.rb')
-rw-r--r--lib/mauve/notifiers/hipchat.rb107
1 files changed, 107 insertions, 0 deletions
diff --git a/lib/mauve/notifiers/hipchat.rb b/lib/mauve/notifiers/hipchat.rb
new file mode 100644
index 0000000..7537bc5
--- /dev/null
+++ b/lib/mauve/notifiers/hipchat.rb
@@ -0,0 +1,107 @@
+require 'mauve/notifiers/debug'
+
+module Mauve
+ module Notifiers
+ require 'net/https'
+ require 'json'
+ require 'cgi'
+ require 'uri'
+
+ class Hipchat
+
+ attr_accessor :token
+ attr_reader :name
+
+ def initialize(name)
+ @name = name
+ end
+
+ def gateway
+ @gateway
+ end
+
+ def gateway=(uri)
+ @gateway = URI.parse(uri)
+ end
+
+ def send_alert(destination, alert, all_alerts, conditions = {})
+ msg = prepare_message(destination, alert, all_alerts, conditions)
+
+ colour = case alert.level
+ when :urgent
+ "red"
+ when :normal
+ "yellow"
+ else
+ "green"
+ end
+
+ opts = {
+ "color" => colour,
+ "message" => msg,
+ "notify" => true,
+ }
+
+
+ uri = @gateway.dup
+
+ #
+ # If the destination is an email, it is a user
+ #
+ if destination =~ /@/
+ uri.path = "/v2/user/"+ CGI::escape(destination) +"/message"
+ opts["message_type"] = "text"
+ else
+ uri.path = "/v2/room/"+CGI::escape(destination)+"/notification"
+ opts["message_type"] = "html"
+ end
+
+ uri.query = "auth_token="+CGI::escape(self.token)
+
+ http = Net::HTTP.new(uri.host, uri.port)
+
+ if uri.port == 443
+ http.use_ssl = true
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
+ end
+
+ response, data = http.post(uri.request_uri, opts, {
+ 'Content-Type' => 'application/json',
+ 'Content-Length' => opts.length.to_s
+ })
+
+ if response.kind_of?(Net::HTTPSuccess)
+ #
+ # Woo -- return true!
+ #
+ true
+ else
+ false
+ end
+
+ end
+
+ protected
+
+ def prepare_message(destination, alert, all_alerts, conditions={})
+ was_suppressed = conditions[:was_suppressed] || false
+ will_suppress = conditions[:will_suppress] || false
+
+ if destination =~ /@/
+ template_file = File.join(File.dirname(__FILE__),"templates","hipchat.txt.erb")
+ else
+ template_file = File.join(File.dirname(__FILE__),"templates","hipchat.html.erb")
+ end
+
+ txt = if File.exists?(template_file)
+ ERB.new(File.read(template_file)).result(binding).chomp
+ else
+ logger.error("Could not find #{template_file} template")
+ alert.to_s
+ end
+ end
+
+ end
+ end
+end
+