pdrc
pdrc is an API wrapper for Pagerduty's REST API v2, based off amro's great MailChimp client Gibbon.
Important Notes
Please read Pagerduty's Overview documentation.
pdrc returns a PDRC::Response instead of the response body directly. PDRC::Response exposes the parsed response body and headers.
Installation
$ gem install pdrc
Requirements
A Pagerduty account and a v2 API key. Only administrators can generate API keys.
Usage
First, create a one-time use instance of PDRC::Request:
pdrc = PDRC::Request.new(api_key: "your_api_key")Note Only reuse instances of pdrc after terminating a call with a verb, which makes a request. Requests are light weight objects that update an internal path based on your call chain. When you terminate a call chain with a verb, a request instance makes a request and resets the path.
You can set an individual request's timeout and open_timeout like this:
pdrc.timeout = 30
pdrc.open_timeout = 30You can read about timeout and open_timeout in the Net::HTTP doc.
Now you can make requests using the resources defined in Pagerduty's docs. Resource IDs are specified inline and a CRUD (create, retrieve, update, or delete) verb initiates the request.
You can specify headers, params, and body when calling a CRUD method. For example:
pdrc.teams.retrieve(headers: {"SomeHeader": "SomeHeaderValue"}, params: {"query_param": "query_param_value"})Of course, body is only supported on create and update calls. Those map to HTTP POST, PATCH, and PUT verbs respectively.
You can set api_key, timeout, open_timeout, faraday_adapter, proxy, symbolize_keys, logger, and debug globally:
PDRC::Request.api_key = "your_api_key"
PDRC::Request.timeout = 15
PDRC::Request.open_timeout = 15
PDRC::Request.symbolize_keys = true
PDRC::Request.debug = falseFor example, you could set the values above in an initializer file in your Rails app (e.g. your_app/config/initializers/pdrc.rb).
Assuming you've set an api_key on PDRC, you can conveniently make API calls on the class itself:
PDRC::Request.teams.retrieveYou can also set the environment variable PAGERDUTY_API_KEY and PDRC will use it when you create an instance:
pdrc = PDRC::Request.newNote Substitute an underscore if a resource name contains a hyphen.
Pass symbolize_keys: true to use symbols (instead of strings) as hash keys in API responses.
pdrc = PDRC::Request.new(api_key: "your_api_key", symbolize_keys: true)Pagerduty's REST API documentation is a list of available resources.
Debug Logging
Pass debug: true to enable debug logging to STDOUT.
pdrc = PDRC::Request.new(api_key: "your_api_key", debug: true)Custom logger
Ruby Logger.new is used by default, but it can be overrided using:
pdrc = PDRC::Request.new(api_key: "your_api_key", debug: true, logger: MyLogger.new)Logger can be also set by globally:
PDRC::Request.logger = MyLogger.newExamples
Teams
Fetch all teams:
pdrc.teams.retrieveRetrieving a specific team looks like:
pdrc.teams(team_id).retrieveCreate a team:
pdrc.teams.create(body: {team: { type: "team", name: "Engineering", description: "The engineering team"}})You can also delete a team:
pdrc.teams(team_id).deleteSchedules
Get all schedules:
pdrc.schedules.retrieve(params: {"query": "Primary"})By default the Pagerduty API returns 25 results. To set the count to 50 (Note: it cannot exceed 100):
pdrc.schedules.retrieve(params: {"limit": "50"})And to retrieve the next 50 schedules:
pdrc.schedules.retrieve(params: {"limit": "50", "offset": "50"})And to retrieve only the schedules with the title containing "Primary":
pdrc.schedules.retrieve(params: {"limit": "50", "offset": "50", "query": "Primary"})Get a list of overrides for a schedule:
pdrc.schedules(schedule_id).overrides.retrieveOr to list users on-call for a schedule:
pdrc.schedules(schedule_id).users.retrieveTo narrow the range of on-call users down to a specific date range:
pdrc.schedules(schedule_id).users.retrieve(params: {"since": "2018-06-01T00:00:00Z", "until": "2018-09-01T00:00:00Z"})Error handling
PDRC raises an error when the API returns an error.
PDRC::PagerdutyError has the following attributes: title, detail, body, raw_body, status_code. Some or all of these may not be
available depending on the nature of the error. For example:
begin
pdrc.teams(team_id).create(body: body)
rescue PDRC::PagerdutyError => e
puts "Houston, we have a problem: #{e.message} - #{e.raw_body}"
endOther
You can set an optional proxy url like this (or with an environment variable MAILCHIMP_PROXY):
pdrc.proxy = 'http://your_proxy.com:80'You can set a different Faraday adapter during initialization:
pdrc = PDRC::Request.new(api_key: "your_api_key", faraday_adapter: :net_http)Thanks
Thanks to everyone who has contributed to Gibbon's development which has been so integral to PDRC's development.
Copyright
- Copyright (c) 2010-2018 Amro Mousa & Lucas Willett. See LICENSE.txt for details.