class NineOneOne::PagerDutyService
Constants
- BASE_HOST
- EVENTS_API_V2_ENDPOINT
- HIGH_URGENCY_ERROR
- LOW_URGENCY_ERROR
- THROTTLE_HTTP_STATUS
- THROTTLE_RETRIES
Attributes
api_integration_key[R]
http[R]
Public Class Methods
new(api_integration_key)
click to toggle source
# File lib/nine_one_one/pager_duty_service.rb, line 10 def initialize(api_integration_key) @api_integration_key = api_integration_key @http = Http.new(BASE_HOST) end
Public Instance Methods
resolve_event(dedup_key)
click to toggle source
# File lib/nine_one_one/pager_duty_service.rb, line 20 def resolve_event(dedup_key) make_request(request_body('resolve', dedup_key)) end
trigger_event(description, source: Socket.gethostname, dedup_key: nil, severity: HIGH_URGENCY_ERROR, details_hash: nil)
click to toggle source
# File lib/nine_one_one/pager_duty_service.rb, line 15 def trigger_event(description, source: Socket.gethostname, dedup_key: nil, severity: HIGH_URGENCY_ERROR, details_hash: nil) make_request(request_body('trigger', dedup_key, description, source, severity, details_hash)) end
Private Instance Methods
make_request(request_body)
click to toggle source
# File lib/nine_one_one/pager_duty_service.rb, line 28 def make_request(request_body) headers = {'Content-Type' => 'application/json'} response = nil retry_on(THROTTLE_HTTP_STATUS, THROTTLE_RETRIES) do response = http.post(EVENTS_API_V2_ENDPOINT, request_body, headers) response.code.to_i end # rubocop:disable Style/GuardClause unless response.is_a?(Net::HTTPSuccess) raise IncidentReportingError, "Failed to send an event to PagerDuty: #{response.body} #{request_body}" end # rubocop:enable Style/GuardClause end
request_body(event_action, dedup_key, description = nil, source = nil, severity = nil, details_hash = nil)
click to toggle source
# File lib/nine_one_one/pager_duty_service.rb, line 53 def request_body(event_action, dedup_key, description = nil, source = nil, severity = nil, details_hash = nil) { routing_key: api_integration_key, event_action: event_action, dedup_key: dedup_key, payload: { summary: description, source: source, severity: severity, custom_details: details_hash }.reject { |_, v| v.nil? } }.reject { |_, v| v.nil? || v.empty? }.to_json end
retry_on(value, retries_number)
click to toggle source
# File lib/nine_one_one/pager_duty_service.rb, line 44 def retry_on(value, retries_number) retry_number = 0 while yield == value && retry_number <= retries_number retry_number += 1 sleep 2**retry_number end end