aboutsummaryrefslogtreecommitdiff
path: root/lib/mauve
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mauve')
-rw-r--r--lib/mauve/notifiers/hipchat.rb165
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
-