Provides a lightweight Ruby interface for calling the PagerDuty Integration API.
Add this line to your application's Gemfile:
gem 'pagerduty'
And then execute:
$ bundle
Or install it yourself as:
$ gem install pagerduty
# Don't forget to require the library
require "pagerduty"
# Instantiate a Pagerduty with your specific service key
pagerduty = Pagerduty.new("<my-service-key>")
# Trigger an incident
incident = pagerduty.trigger("incident description")
# Acknowledge and/or resolve the incident
incident.acknowledge
incident.resolve
# Acknowledge and/or resolve an existing incident
incident = pagerduty.get_incident("<unique-incident-key>")
incident.acknowledge
incident.resolve
There are a whole bunch of properties you can send to PagerDuty when triggering an incident. See the PagerDuty documentation for the specifics.
pagerduty.trigger(
"incident description",
incident_key: "my unique incident identifier",
client: "server in trouble",
client_url: "http://server.in.trouble",
details: { my: "extra details" }
)
One can explicitly define an HTTP proxy like this:
# Instantiate a Pagerduty with your specific service key and proxy details
pagerduty = Pagerduty.new(
"<my-service-key>",
proxy_host: "my.http.proxy.local",
proxy_port: 3128,
proxy_username: "<my-proxy-username>",
proxy_password: "<my-proxy-password>",
)
# Then proceed to trigger your incident
# (sends the request to PagerDuty via the HTTP proxy)
incident = pagerduty.trigger("incident description")
The gem doesn't encapsulate HTTP error responses from PagerDuty. Here's how to go about debugging these unhappy cases:
begin
pagerduty.trigger("incident description")
rescue Net::HTTPServerException => error
error.response.code #=> "400"
error.response.message #=> "Bad Request"
error.response.body #=> "{\"status\":\"invalid event\",\"message\":\"Event object is invalid\",\"errors\":[\"Service key is the wrong length (should be 32 characters)\"]}"
end
The API has changed in three ways that you need to be aware of:
-
Pagerduty
class initialiser no longer accepts anincident_key
. This attribute can now be provided when calling the#trigger
method (see above). -
Pagerduty#trigger
arguments have changed to accept all available options rather than just details.# This no longer works post v2.0.0. If you're # providing details in this form, please migrate. pagerduty.trigger("desc", key: "value") # Post v2.0.0 this is how to send details (migrate to this please). pagerduty.trigger("desc", details: { key: "value" })
-
PagerdutyException
now extends fromStandardError
rather thanException
. This may affect how you rescue the error. i.e.rescue StandardError
will now rescue aPagerdutyException
where it did not before.
- Fork it ( https://github.com/envato/pagerduty/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request