pagerduty 2.1.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +476 -0
- data/README.md +161 -59
- data/lib/pagerduty/events_api_v1.rb +279 -0
- data/lib/pagerduty/events_api_v2.rb +280 -0
- data/lib/pagerduty/http_transport.rb +16 -14
- data/lib/pagerduty/version.rb +4 -2
- data/lib/pagerduty.rb +62 -163
- metadata +24 -48
- data/.gitignore +0 -9
- data/.rubocop.yml +0 -38
- data/.travis.yml +0 -9
- data/Gemfile +0 -4
- data/Rakefile +0 -12
- data/pagerduty.gemspec +0 -32
- data/script/setup.sh +0 -8
- data/spec/pagerduty/http_transport_spec.rb +0 -132
- data/spec/pagerduty_spec.rb +0 -364
- data/spec/spec_helper.rb +0 -14
- data/spec/support/warnings.rb +0 -13
@@ -0,0 +1,280 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "time"
|
4
|
+
|
5
|
+
module Pagerduty
|
6
|
+
# Trigger incidents via the PagerDuty Events API version 2.
|
7
|
+
#
|
8
|
+
# @see https://developer.pagerduty.com/docs/ZG9jOjExMDI5NTgw-events-api-v2-overview
|
9
|
+
# PagerDuty Events API V2 documentation
|
10
|
+
#
|
11
|
+
# @see Pagerduty.build
|
12
|
+
#
|
13
|
+
# @see Pagerduty::EventsApiV2::Incident
|
14
|
+
#
|
15
|
+
class EventsApiV2
|
16
|
+
# Rather than using this directly, use the {Pagerduty.build} method to
|
17
|
+
# construct an instance.
|
18
|
+
#
|
19
|
+
# @option config [String] integration_key Authentication key for connecting
|
20
|
+
# to PagerDuty. A UUID expressed as a 32-digit hexadecimal number.
|
21
|
+
# Integration keys are generated by creating a new service, or creating a
|
22
|
+
# new integration for an existing service in PagerDuty, and can be found
|
23
|
+
# on a service's Integrations tab. This option is required.
|
24
|
+
#
|
25
|
+
# @option config [String] http_proxy.host The DNS name or IP address of the
|
26
|
+
# proxy host. If nil or unprovided an HTTP proxy will not be used.
|
27
|
+
#
|
28
|
+
# @option config [String] http_proxy.port The TCP port to use to access the
|
29
|
+
# proxy.
|
30
|
+
#
|
31
|
+
# @option config [String] http_proxy.username username if authorization is
|
32
|
+
# required to use the proxy.
|
33
|
+
#
|
34
|
+
# @option config [String] http_proxy.password password if authorization is
|
35
|
+
# required to use the proxy.
|
36
|
+
#
|
37
|
+
# @see Pagerduty.build
|
38
|
+
#
|
39
|
+
def initialize(config = {})
|
40
|
+
@config = config
|
41
|
+
end
|
42
|
+
|
43
|
+
# Send PagerDuty a trigger event to report a new or ongoing problem. When
|
44
|
+
# PagerDuty receives a trigger event, it will either open a new incident, or
|
45
|
+
# add a new trigger log entry to an existing incident, depending on the
|
46
|
+
# incident key.
|
47
|
+
#
|
48
|
+
# @example Trigger an incident, providing only required details
|
49
|
+
# incident = pagerduty.trigger(
|
50
|
+
# summary: "summary",
|
51
|
+
# source: "source",
|
52
|
+
# severity: "critical"
|
53
|
+
# )
|
54
|
+
#
|
55
|
+
# @example Trigger an incident providing full context
|
56
|
+
# incident = pagerduty.trigger(
|
57
|
+
# summary: "Example alert on host1.example.com",
|
58
|
+
# source: "monitoringtool:host1.example.com/prod-003",
|
59
|
+
# severity: %w[critical error warning info].sample,
|
60
|
+
# timestamp: Time.now,
|
61
|
+
# component: "postgres",
|
62
|
+
# group: "prod-datapipe",
|
63
|
+
# class: "deploy",
|
64
|
+
# custom_details: {
|
65
|
+
# ping_time: "1500ms",
|
66
|
+
# load_avg: 0.75
|
67
|
+
# },
|
68
|
+
# images: [
|
69
|
+
# {
|
70
|
+
# src: "https://chart.googleapis.com/chart.png",
|
71
|
+
# href: "https://example.com/",
|
72
|
+
# alt: "Example text",
|
73
|
+
# },
|
74
|
+
# ],
|
75
|
+
# links: [
|
76
|
+
# {
|
77
|
+
# href: "https://example.com/",
|
78
|
+
# text: "Link text",
|
79
|
+
# },
|
80
|
+
# ],
|
81
|
+
# client: "Sample Monitoring Service",
|
82
|
+
# client_url: "https://monitoring.example.com"
|
83
|
+
# )
|
84
|
+
#
|
85
|
+
# @option details [String] summary A brief text summary of the event,
|
86
|
+
# used to generate the summaries/titles of any associated alerts.
|
87
|
+
# The maximum permitted length of this property is 1024 characters.
|
88
|
+
#
|
89
|
+
# @option details [String] source The unique location of the affected
|
90
|
+
# system, preferably a hostname or FQDN.
|
91
|
+
#
|
92
|
+
# @option details [String] severity The perceived severity of the status
|
93
|
+
# the event is describing with respect to the affected system. This can
|
94
|
+
# be "critical", "error", "warning" or "info".
|
95
|
+
#
|
96
|
+
# @option details [Time] timestamp The time at which the emitting tool
|
97
|
+
# detected or generated the event.
|
98
|
+
#
|
99
|
+
# @option details [String] component Component of the source machine
|
100
|
+
# that is responsible for the event, for example "mysql" or "eth0".
|
101
|
+
#
|
102
|
+
# @option details [String] group Logical grouping of components of a
|
103
|
+
# service, for example "app-stack".
|
104
|
+
#
|
105
|
+
# @option details [String] class The class/type of the event, for
|
106
|
+
# example "ping failure" or "cpu load".
|
107
|
+
#
|
108
|
+
# @option details [Hash] custom_details Additional details about the
|
109
|
+
# event and affected system
|
110
|
+
#
|
111
|
+
# @option details [Array] images List of images to include.
|
112
|
+
#
|
113
|
+
# @option details [Array] links List of links to include.
|
114
|
+
#
|
115
|
+
# @return [Pagerduty::EventsApiV2::Incident] The triggered incident.
|
116
|
+
#
|
117
|
+
# @raise [PagerdutyException] If PagerDuty responds with a status that is
|
118
|
+
# not "success"
|
119
|
+
#
|
120
|
+
# @raise [ArgumentError] If details hash is nil
|
121
|
+
#
|
122
|
+
def trigger(details)
|
123
|
+
Incident.new(@config).trigger(details)
|
124
|
+
end
|
125
|
+
|
126
|
+
# @param [String] incident_key The unique identifier for the incident.
|
127
|
+
#
|
128
|
+
# @return [Pagerduty::EventsApiV2::Incident] The incident referenced by the
|
129
|
+
# provided key.
|
130
|
+
#
|
131
|
+
# @raise [ArgumentError] If incident_key is nil
|
132
|
+
#
|
133
|
+
def incident(incident_key)
|
134
|
+
raise ArgumentError, "incident_key is nil" if incident_key.nil?
|
135
|
+
|
136
|
+
Incident.new(@config.merge(incident_key: incident_key))
|
137
|
+
end
|
138
|
+
|
139
|
+
class Incident
|
140
|
+
attr_reader :incident_key
|
141
|
+
|
142
|
+
# @option (see Pagerduty::EventsApiV1#initialize)
|
143
|
+
#
|
144
|
+
# @option config [String] incident_key Identifies the incident to which
|
145
|
+
# this trigger event should be applied. If there's no open
|
146
|
+
# (i.e. unresolved) incident with this key, a new one will be created.
|
147
|
+
# If there's already an open incident with a matching key, this event
|
148
|
+
# will be appended to that incident's log. The event key provides an
|
149
|
+
# easy way to "de-dup" problem reports. If this field isn't provided,
|
150
|
+
# PagerDuty will automatically open a new incident with a unique key.
|
151
|
+
# The maximum length is 255 characters.
|
152
|
+
#
|
153
|
+
def initialize(config = {})
|
154
|
+
@integration_key = config.fetch(:integration_key) do
|
155
|
+
raise ArgumentError "integration_key not provided"
|
156
|
+
end
|
157
|
+
@incident_key = config[:incident_key]
|
158
|
+
@transport = Pagerduty::HttpTransport.new(
|
159
|
+
path: "/v2/enqueue",
|
160
|
+
proxy: config[:http_proxy],
|
161
|
+
)
|
162
|
+
end
|
163
|
+
|
164
|
+
# Send PagerDuty a trigger event to report a new or ongoing problem. When
|
165
|
+
# PagerDuty receives a trigger event, it will either open a new incident,
|
166
|
+
# or add a new trigger log entry to an existing incident, depending on
|
167
|
+
# the incident key.
|
168
|
+
#
|
169
|
+
# @example Trigger an incident, providing only required details
|
170
|
+
# incident = pagerduty.trigger(
|
171
|
+
# summary: "summary",
|
172
|
+
# source: "source",
|
173
|
+
# severity: "critical"
|
174
|
+
# )
|
175
|
+
#
|
176
|
+
# @example Trigger an incident providing full context
|
177
|
+
# incident = pagerduty.trigger(
|
178
|
+
# summary: "Example alert on host1.example.com",
|
179
|
+
# source: "monitoringtool:host1.example.com/prod-003",
|
180
|
+
# severity: %w[critical error warning info].sample,
|
181
|
+
# timestamp: Time.now,
|
182
|
+
# component: "postgres",
|
183
|
+
# group: "prod-datapipe",
|
184
|
+
# class: "deploy",
|
185
|
+
# custom_details: {
|
186
|
+
# ping_time: "1500ms",
|
187
|
+
# load_avg: 0.75
|
188
|
+
# },
|
189
|
+
# images: [
|
190
|
+
# {
|
191
|
+
# src: "https://chart.googleapis.com/chart.png",
|
192
|
+
# href: "https://example.com/",
|
193
|
+
# alt: "Example text",
|
194
|
+
# },
|
195
|
+
# ],
|
196
|
+
# links: [
|
197
|
+
# {
|
198
|
+
# href: "https://example.com/",
|
199
|
+
# text: "Link text",
|
200
|
+
# },
|
201
|
+
# ],
|
202
|
+
# client: "Sample Monitoring Service",
|
203
|
+
# client_url: "https://monitoring.example.com"
|
204
|
+
# )
|
205
|
+
#
|
206
|
+
# @param (see Pagerduty::EventsApiV2#trigger)
|
207
|
+
# @option (see Pagerduty::EventsApiV2#trigger)
|
208
|
+
def trigger(details)
|
209
|
+
if details.key?(:dedup_key) || details.key?(:incident_key)
|
210
|
+
raise ArgumentError, "incident_key or dedup_key provided, "\
|
211
|
+
"please use the EventsApiv2::incident method "\
|
212
|
+
"to specify an incident key"
|
213
|
+
end
|
214
|
+
|
215
|
+
response = api_call("trigger", trigger_request(details))
|
216
|
+
@incident_key = response["dedup_key"]
|
217
|
+
self
|
218
|
+
end
|
219
|
+
|
220
|
+
# Acknowledge the referenced incident. While an incident is acknowledged,
|
221
|
+
# it won't generate any additional notifications, even if it receives new
|
222
|
+
# trigger events. Send PagerDuty an acknowledge event when you know
|
223
|
+
# someone is presently working on the problem.
|
224
|
+
#
|
225
|
+
# @return [Pagerduty::EventsApiV2::Incident] self
|
226
|
+
#
|
227
|
+
# @raise [PagerdutyException] If PagerDuty responds with a status that is
|
228
|
+
# not "success"
|
229
|
+
#
|
230
|
+
def acknowledge
|
231
|
+
api_call("acknowledge")
|
232
|
+
self
|
233
|
+
end
|
234
|
+
|
235
|
+
# Resolve the referenced incident. Once an incident is resolved, it won't
|
236
|
+
# generate any additional notifications. New trigger events with the same
|
237
|
+
# incident_key as a resolved incident won't re-open the incident. Instead,
|
238
|
+
# a new incident will be created. Send PagerDuty a resolve event when the
|
239
|
+
# problem that caused the initial trigger event has been fixed.
|
240
|
+
#
|
241
|
+
# @return [Pagerduty::EventsApiV2::Incident] self
|
242
|
+
#
|
243
|
+
# @raise [PagerdutyException] If PagerDuty responds with a status that is
|
244
|
+
# not "success"
|
245
|
+
#
|
246
|
+
def resolve
|
247
|
+
api_call("resolve")
|
248
|
+
self
|
249
|
+
end
|
250
|
+
|
251
|
+
private
|
252
|
+
|
253
|
+
PAYLOAD_ATTR = %i[summary timestamp source severity
|
254
|
+
component group class custom_details].freeze
|
255
|
+
private_constant :PAYLOAD_ATTR
|
256
|
+
|
257
|
+
def trigger_request(details)
|
258
|
+
payload = details.select { |key| PAYLOAD_ATTR.include?(key) }
|
259
|
+
payload[:timestamp] &&= payload[:timestamp].iso8601
|
260
|
+
request = details.merge(payload: payload)
|
261
|
+
request.reject! { |key| PAYLOAD_ATTR.include?(key) }
|
262
|
+
request
|
263
|
+
end
|
264
|
+
|
265
|
+
def api_call(event_action, payload = {})
|
266
|
+
payload = payload.merge(
|
267
|
+
dedup_key: incident_key,
|
268
|
+
routing_key: @integration_key,
|
269
|
+
event_action: event_action,
|
270
|
+
)
|
271
|
+
response = @transport.send_payload(payload)
|
272
|
+
unless response["status"] == "success"
|
273
|
+
raise PagerdutyException.new(self, response, response["message"])
|
274
|
+
end
|
275
|
+
|
276
|
+
response
|
277
|
+
end
|
278
|
+
end
|
279
|
+
end
|
280
|
+
end
|
@@ -1,28 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
require "json"
|
3
4
|
require "net/https"
|
4
5
|
|
5
|
-
|
6
|
-
# @
|
6
|
+
module Pagerduty
|
7
|
+
# @private
|
7
8
|
class HttpTransport
|
8
|
-
HOST = "events.pagerduty.com"
|
9
|
+
HOST = "events.pagerduty.com"
|
9
10
|
PORT = 443
|
10
|
-
|
11
|
+
private_constant :HOST, :PORT
|
11
12
|
|
12
|
-
def initialize(
|
13
|
-
@
|
13
|
+
def initialize(config)
|
14
|
+
@path = config.fetch(:path)
|
15
|
+
@proxy = config[:proxy] || {}
|
14
16
|
end
|
15
17
|
|
16
|
-
def send_payload(payload
|
17
|
-
response = post
|
18
|
+
def send_payload(payload)
|
19
|
+
response = post(payload.to_json)
|
18
20
|
response.error! unless transported?(response)
|
19
21
|
JSON.parse(response.body)
|
20
22
|
end
|
21
23
|
|
22
|
-
|
24
|
+
private
|
23
25
|
|
24
26
|
def post(payload)
|
25
|
-
post = Net::HTTP::Post.new(
|
27
|
+
post = Net::HTTP::Post.new(@path)
|
26
28
|
post.body = payload
|
27
29
|
http.request(post)
|
28
30
|
end
|
@@ -38,10 +40,10 @@ class Pagerduty
|
|
38
40
|
|
39
41
|
def http_proxy
|
40
42
|
Net::HTTP.Proxy(
|
41
|
-
@
|
42
|
-
@
|
43
|
-
@
|
44
|
-
@
|
43
|
+
@proxy[:host],
|
44
|
+
@proxy[:port],
|
45
|
+
@proxy[:username],
|
46
|
+
@proxy[:password],
|
45
47
|
)
|
46
48
|
end
|
47
49
|
|
data/lib/pagerduty/version.rb
CHANGED
data/lib/pagerduty.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "pagerduty/version"
|
2
4
|
require "pagerduty/http_transport"
|
5
|
+
require "pagerduty/events_api_v1"
|
6
|
+
require "pagerduty/events_api_v2"
|
3
7
|
|
4
8
|
class PagerdutyException < StandardError
|
5
9
|
attr_reader :pagerduty_instance, :api_response
|
@@ -11,178 +15,73 @@ class PagerdutyException < StandardError
|
|
11
15
|
end
|
12
16
|
end
|
13
17
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
18
|
+
module Pagerduty
|
19
|
+
# Build an instance that will send API calls to the specified Pagerduty
|
20
|
+
# Events API version.
|
21
|
+
#
|
22
|
+
# @example Build an instance for the Events API version 1
|
23
|
+
# pagerduty = Pagerduty.build(
|
24
|
+
# integration_key: "<integration-key>",
|
25
|
+
# api_version: 1,
|
26
|
+
# )
|
27
|
+
#
|
28
|
+
# @example Build an instance using an HTTP proxy for API requests
|
29
|
+
# pagerduty = Pagerduty.build(
|
30
|
+
# integration_key: "<integration-key>",
|
31
|
+
# api_version: 1,
|
32
|
+
# http_proxy: {
|
33
|
+
# host: "my.http.proxy.local",
|
34
|
+
# port: 3128,
|
35
|
+
# username: "<my-proxy-username>",
|
36
|
+
# password: "<my-proxy-password>",
|
37
|
+
# }
|
38
|
+
# )
|
39
|
+
#
|
40
|
+
# @option config [String] integration_key Authentication key for connecting
|
41
|
+
# to PagerDuty. A UUID expressed as a 32-digit hexadecimal number.
|
42
|
+
# Integration keys are generated by creating a new service, or creating a
|
43
|
+
# new integration for an existing service in PagerDuty, and can be found on
|
44
|
+
# a service's Integrations tab. This option is required.
|
45
|
+
#
|
46
|
+
# @option config [String] api_version The version of the Pagerduty events API.
|
47
|
+
# The gem currently supports version 1 (`1`). This option is required.
|
48
|
+
#
|
49
|
+
# @option config [String] http_proxy.host The DNS name or IP address of the
|
50
|
+
# proxy host. If nil or unprovided an HTTP proxy will not be used.
|
51
|
+
#
|
52
|
+
# @option config [String] http_proxy.port The TCP port to use to access the
|
53
|
+
# proxy.
|
54
|
+
#
|
55
|
+
# @option config [String] http_proxy.username username if authorization is
|
26
56
|
# required to use the proxy.
|
27
57
|
#
|
28
|
-
# @option
|
58
|
+
# @option config [String] http_proxy.password password if authorization is
|
29
59
|
# required to use the proxy.
|
30
60
|
#
|
31
|
-
|
32
|
-
@service_key = service_key
|
33
|
-
@transport = transport_from_options(options)
|
34
|
-
end
|
35
|
-
|
36
|
-
# Send PagerDuty a trigger event to report a new or ongoing problem. When
|
37
|
-
# PagerDuty receives a trigger event, it will either open a new incident, or
|
38
|
-
# add a new trigger log entry to an existing incident, depending on the
|
39
|
-
# provided incident_key.
|
40
|
-
#
|
41
|
-
# @param [String] description A short description of the problem that led to
|
42
|
-
# this trigger. This field (or a truncated version) will be used when
|
43
|
-
# generating phone calls, SMS messages and alert emails. It will also appear
|
44
|
-
# on the incidents tables in the PagerDuty UI. The maximum length is 1024
|
45
|
-
# characters.
|
46
|
-
#
|
47
|
-
# @option options [String] :incident_key Identifies the incident to which
|
48
|
-
# this trigger event should be applied. If there's no open (i.e. unresolved)
|
49
|
-
# incident with this key, a new one will be created. If there's already an
|
50
|
-
# open incident with a matching key, this event will be appended to that
|
51
|
-
# incident's log. The event key provides an easy way to "de-dup" problem
|
52
|
-
# reports. If this field isn't provided, PagerDuty will automatically open a
|
53
|
-
# new incident with a unique key.
|
54
|
-
#
|
55
|
-
# @option options [String] :client The name of the monitoring client that is
|
56
|
-
# triggering this event.
|
57
|
-
#
|
58
|
-
# @option options [String] :client_url The URL of the monitoring client that
|
59
|
-
# is triggering this event.
|
60
|
-
#
|
61
|
-
# @option options [Hash] :details An arbitrary hash containing any data you'd
|
62
|
-
# like included in the incident log.
|
63
|
-
#
|
64
|
-
# @return [PagerdutyIncident] The triggered incident.
|
61
|
+
# @return [Pagerduty::EventsApiV1] the built instance.
|
65
62
|
#
|
66
|
-
# @raise [
|
67
|
-
#
|
63
|
+
# @raise [ArgumentError] If integration_key or api_version options are not
|
64
|
+
# provided. Or if the provided api_version is unsupported.
|
68
65
|
#
|
69
|
-
def
|
70
|
-
|
71
|
-
|
72
|
-
PagerdutyIncident.new(
|
73
|
-
service_key,
|
74
|
-
resp["incident_key"],
|
75
|
-
transport: @transport,
|
76
|
-
)
|
77
|
-
end
|
78
|
-
|
79
|
-
# @param [String] incident_key The unique identifier for the incident.
|
80
|
-
#
|
81
|
-
# @return [PagerdutyIncident] The incident referenced by the key.
|
82
|
-
#
|
83
|
-
# @raise [ArgumentError] If incident_key is nil
|
84
|
-
#
|
85
|
-
def get_incident(incident_key)
|
86
|
-
raise ArgumentError, "incident_key is nil" if incident_key.nil?
|
87
|
-
PagerdutyIncident.new(
|
88
|
-
service_key,
|
89
|
-
incident_key,
|
90
|
-
transport: @transport,
|
91
|
-
)
|
92
|
-
end
|
93
|
-
|
94
|
-
protected
|
95
|
-
|
96
|
-
def api_call(event_type, args)
|
97
|
-
args = args.merge(
|
98
|
-
service_key: service_key,
|
99
|
-
event_type: event_type,
|
100
|
-
)
|
101
|
-
@transport.send_payload(args)
|
102
|
-
end
|
103
|
-
|
104
|
-
def ensure_success(response)
|
105
|
-
unless response["status"] == "success"
|
106
|
-
raise PagerdutyException.new(self, response, response["message"])
|
66
|
+
def self.build(config)
|
67
|
+
unless config.key?(:integration_key)
|
68
|
+
raise ArgumentError, "integration_key not provided"
|
107
69
|
end
|
108
|
-
|
109
|
-
|
110
|
-
private
|
70
|
+
raise ArgumentError, "incident_key provided" if config.key?(:incident_key)
|
111
71
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
end
|
117
|
-
|
118
|
-
class PagerdutyIncident < Pagerduty
|
119
|
-
attr_reader :incident_key
|
120
|
-
|
121
|
-
# @param [String] service_key The GUID of one of your "Generic API" services.
|
122
|
-
# This is the "service key" listed on a Generic API's service detail page.
|
123
|
-
#
|
124
|
-
# @param [String] incident_key The unique identifier for the incident.
|
125
|
-
#
|
126
|
-
def initialize(service_key, incident_key, options = {})
|
127
|
-
super service_key, options
|
128
|
-
@incident_key = incident_key
|
129
|
-
end
|
130
|
-
|
131
|
-
# @param (see Pagerduty#trigger)
|
132
|
-
# @option (see Pagerduty#trigger)
|
133
|
-
def trigger(description, options = {})
|
134
|
-
super(description, { incident_key: incident_key }.merge(options))
|
135
|
-
end
|
136
|
-
|
137
|
-
# Acknowledge the referenced incident. While an incident is acknowledged, it
|
138
|
-
# won't generate any additional notifications, even if it receives new
|
139
|
-
# trigger events. Send PagerDuty an acknowledge event when you know someone
|
140
|
-
# is presently working on the problem.
|
141
|
-
#
|
142
|
-
# @param [String] description Text that will appear in the incident's log
|
143
|
-
# associated with this event.
|
144
|
-
#
|
145
|
-
# @param [Hash] details An arbitrary hash containing any data you'd like
|
146
|
-
# included in the incident log.
|
147
|
-
#
|
148
|
-
# @return [PagerdutyIncident] self
|
149
|
-
#
|
150
|
-
# @raise [PagerdutyException] If PagerDuty responds with a status that is not
|
151
|
-
# "success"
|
152
|
-
#
|
153
|
-
def acknowledge(description = nil, details = nil)
|
154
|
-
modify_incident("acknowledge", description, details)
|
155
|
-
end
|
156
|
-
|
157
|
-
# Resolve the referenced incident. Once an incident is resolved, it won't
|
158
|
-
# generate any additional notifications. New trigger events with the same
|
159
|
-
# incident_key as a resolved incident won't re-open the incident. Instead, a
|
160
|
-
# new incident will be created. Send PagerDuty a resolve event when the
|
161
|
-
# problem that caused the initial trigger event has been fixed.
|
162
|
-
#
|
163
|
-
# @param [String] description Text that will appear in the incident's log
|
164
|
-
# associated with this event.
|
165
|
-
#
|
166
|
-
# @param [Hash] details An arbitrary hash containing any data you'd like
|
167
|
-
# included in the incident log.
|
168
|
-
#
|
169
|
-
# @return [PagerdutyIncident] self
|
170
|
-
#
|
171
|
-
# @raise [PagerdutyException] If PagerDuty responds with a status that is not
|
172
|
-
# "success"
|
173
|
-
#
|
174
|
-
def resolve(description = nil, details = nil)
|
175
|
-
modify_incident("resolve", description, details)
|
72
|
+
version = config.fetch(:api_version) do
|
73
|
+
raise ArgumentError, "api_version not provided"
|
74
|
+
end
|
75
|
+
events_api_class(version).new(config)
|
176
76
|
end
|
177
77
|
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
ensure_success(resp)
|
186
|
-
self
|
78
|
+
def self.events_api_class(version)
|
79
|
+
class_name = "Pagerduty::EventsApiV#{version}"
|
80
|
+
if const_defined?(class_name)
|
81
|
+
const_get(class_name)
|
82
|
+
else
|
83
|
+
raise ArgumentError, "api_version #{version.inspect} not supported"
|
84
|
+
end
|
187
85
|
end
|
86
|
+
private_class_method :events_api_class
|
188
87
|
end
|