class Pagerduty::EventsApiV2::Incident

Constants

PAYLOAD_ATTR

Attributes

incident_key[R]

Public Class Methods

new(config = {}) click to toggle source

@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() click to toggle source

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() click to toggle source

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
trigger(details) click to toggle source

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

api_call(event_action, payload = {}) click to toggle source
# 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
trigger_request(details) click to toggle source
# 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