class Pagerduty::EventsApiV2::Incident
Constants
- PAYLOAD_ATTR
Attributes
Public Class Methods
@option (see Pagerduty::EventsApiV1#initialize)
@option config [String] incident_key
Identifies the incident to which
this trigger event should be applied. If there's no open (i.e. unresolved) incident with this key, a new one will be created. If there's already an open incident with a matching key, this event will be appended to that incident's log. The event key provides an easy way to "de-dup" problem reports. If this field isn't provided, PagerDuty will automatically open a new incident with a unique key. The maximum length is 255 characters.
# File lib/pagerduty/events_api_v2.rb, line 153 def initialize(config = {}) @integration_key = config.fetch(:integration_key) do raise ArgumentError "integration_key not provided" end @incident_key = config[:incident_key] @transport = Pagerduty::HttpTransport.new( path: "/v2/enqueue", proxy: config[:http_proxy], ) end
Public Instance Methods
Acknowledge the referenced incident. While an incident is acknowledged, it won't generate any additional notifications, even if it receives new trigger events. Send PagerDuty an acknowledge event when you know someone is presently working on the problem.
@return [Pagerduty::EventsApiV2::Incident] self
@raise [PagerdutyException] If PagerDuty responds with a status that is
not "success"
# File lib/pagerduty/events_api_v2.rb, line 230 def acknowledge api_call("acknowledge") self end
Resolve the referenced incident. Once an incident is resolved, it won't generate any additional notifications. New trigger events with the same incident_key
as a resolved incident won't re-open the incident. Instead, a new incident will be created. Send PagerDuty a resolve event when the problem that caused the initial trigger event has been fixed.
@return [Pagerduty::EventsApiV2::Incident] self
@raise [PagerdutyException] If PagerDuty responds with a status that is
not "success"
# File lib/pagerduty/events_api_v2.rb, line 246 def resolve api_call("resolve") self end
Send PagerDuty a trigger event to report a new or ongoing problem. When PagerDuty receives a trigger event, it will either open a new incident, or add a new trigger log entry to an existing incident, depending on the incident key.
@example Trigger an incident, providing only required details
incident = pagerduty.trigger( summary: "summary", source: "source", severity: "critical" )
@example Trigger an incident providing full context
incident = pagerduty.trigger( summary: "Example alert on host1.example.com", source: "monitoringtool:host1.example.com/prod-003", severity: %w[critical error warning info].sample, timestamp: Time.now, component: "postgres", group: "prod-datapipe", class: "deploy", custom_details: { ping_time: "1500ms", load_avg: 0.75 }, images: [ { src: "https://chart.googleapis.com/chart.png", href: "https://example.com/", alt: "Example text", }, ], links: [ { href: "https://example.com/", text: "Link text", }, ], client: "Sample Monitoring Service", client_url: "https://monitoring.example.com" )
@param (see Pagerduty::EventsApiV2#trigger
) @option (see Pagerduty::EventsApiV2#trigger
)
# File lib/pagerduty/events_api_v2.rb, line 208 def trigger(details) if details.key?(:dedup_key) || details.key?(:incident_key) raise ArgumentError, "incident_key or dedup_key provided, "\ "please use the EventsApiv2::incident method "\ "to specify an incident key" end response = api_call("trigger", trigger_request(details)) @incident_key = response["dedup_key"] self end
Private Instance Methods
# File lib/pagerduty/events_api_v2.rb, line 265 def api_call(event_action, payload = {}) payload = payload.merge( dedup_key: incident_key, routing_key: @integration_key, event_action: event_action, ) response = @transport.send_payload(payload) unless response["status"] == "success" raise PagerdutyException.new(self, response, response["message"]) end response end
# File lib/pagerduty/events_api_v2.rb, line 257 def trigger_request(details) payload = details.select { |key| PAYLOAD_ATTR.include?(key) } payload[:timestamp] &&= payload[:timestamp].iso8601 request = details.merge(payload: payload) request.reject! { |key| PAYLOAD_ATTR.include?(key) } request end