class Flapjack::Gateways::PagerDuty

Public Class Methods

send_pagerduty_event(opts = {}) click to toggle source

FIXME trap JSON errors

# File lib/flapjack/gateways/pager_duty.rb, line 22
def self.send_pagerduty_event(opts = {})
  event = { 'service_key'  => opts[:service_key],
            'incident_key' => opts[:incident_key],
            'event_type'   => opts[:event_type],
            'description'  => opts[:description] }

  uri = URI::HTTPS.build(:host => 'events.pagerduty.com',
                         :port => 443,
                         :path => '/generic/2010-04-15/create_event.json')
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER
  request = Net::HTTP::Post.new(uri.request_uri,
    {'Content-type' =>'application/json'})
  request.body = Flapjack.dump_json(event)
  http_response = http.request(request)
  status   = http_response.code

  response = nil
  begin
    response = Flapjack.load_json(http_response.body)
  rescue JSON::JSONError
    Flapjack.logger.error("failed to parse json from a post to #{uri.request_uri} ... response headers and body follows...")
  end

  Flapjack.logger.debug "send_pagerduty_event got a return code of #{status} - #{response.inspect}"
  unless status.to_i == 200
    raise "Error sending event to PagerDuty: status: #{status.to_s} - #{response.inspect}" +
          " posted data: #{options[:body]}"
  end
  [status, response]
end
test_pagerduty_connection() click to toggle source
# File lib/flapjack/gateways/pager_duty.rb, line 55
def self.test_pagerduty_connection
  code, results = send_pagerduty_event(:service_key => '11111111111111111111111111111111',
                                       :incident_key => 'Flapjack is running a NOOP',
                                       :event_type => 'nop',
                                       :description => 'I love APIs with noops.')
  return true if '200'.eql?(code) && results['status'] =~ /success/i
  Flapjack.logger.error "Error: test_pagerduty_connection: API returned #{code.to_s} #{results.inspect}"
  false
end