diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/mauve/notifiers/hipchat.rb | 165 |
1 files changed, 82 insertions, 83 deletions
diff --git a/lib/mauve/notifiers/hipchat.rb b/lib/mauve/notifiers/hipchat.rb index b29f450..33030ea 100644 --- a/lib/mauve/notifiers/hipchat.rb +++ b/lib/mauve/notifiers/hipchat.rb @@ -1,107 +1,106 @@ require 'mauve/notifiers/debug' +require 'net/https' +require 'cgi' +require 'uri' module Mauve module Notifiers - require 'net/https' - require 'json' - require 'cgi' - require 'uri' + module Hipchat + class Default + attr_accessor :token + attr_reader :name - class Hipchat + def initialize(name) + @name = name + end - attr_accessor :token - attr_reader :name + def logger + @logger ||= Log4r::Logger.new self.class.to_s.sub(/::Default$/, '') + end - def initialize(name) - @name = name - end + attr_reader :gateway - def gateway - @gateway - end + def gateway=(uri) + @gateway = URI.parse(uri) + 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) - 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 - colour = case alert.update_type - when 'cleared' - 'green' - when 'acknowledged' - 'yellow' + 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 - 'red' - 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.path = '/v2/room/' + CGI.escape(destination) + '/notification' + opts['message_type'] = 'html' + end - uri.query = "auth_token="+CGI::escape(self.token) + opts = opts.to_json - http = Net::HTTP.new(uri.host, uri.port) + uri.query = 'auth_token=' + CGI.escape(token) - if uri.port == 443 - http.use_ssl = true - http.verify_mode = OpenSSL::SSL::VERIFY_PEER - end + http = Net::HTTP.new(uri.host, uri.port) - 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 + if uri.port == 443 + http.use_ssl = true + http.verify_mode = OpenSSL::SSL::VERIFY_PEER + 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") + response = http.post(uri.request_uri, opts, + 'Content-Type' => 'application/json', + 'Content-Length' => opts.length.to_s) + + if response.is_a?(Net::HTTPSuccess) + # + # Woo -- return true! + # + true + else + logger.warn("Failed with code #{response.code}: #{response.message}") + false + end 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 + 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.exist?(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 end - |