This is a simple JavaScript wrapper to the PagerDuty API
Include jQuery and pdjs.js
PDJS = new PDJSobj({
token: "****************VDzA",
})
PDJS.api({
res: 'services',
data: {
limit: 20,
},
success: function (data) {
console.log(data)
},
})
Making an API request
- Create a PDJSobj, with a token/api key
- Call an api request:
- the res parameter is the URL path of the resource you want
- the data parameter is optional
- Everything is asynchronous so you'll need:
- a function to use on success
- also optional is an error function
The res parameter may have an ID in it, here's the call to get the notes for incident PNCII2E
PDJS.api({
res: 'incidents/PNCII2E/notes',
success: function (data) {
alert(JSON.stringify(data))
},
})
POST and PUT requests are supported as well (although I can't give you any live examples, since the API key from webdemo is read-only, so go ahead and generate an API key from your own account)
For instance, here I'm adding a contact method for a user: test@example.com, and then adding a notification rule to alert that email address after 900 minutes:
add_contact_method = function(user_id) {
PDJS.api({
res: 'users/'+user_id+'/contact_methods',
type: 'POST',
data: {
contact_method: {
type:'email',
address:'test4@example.com',
label: 'Added from PDJS',
}
},
success: function (data) {
console.log('New contact method ID: ' + data.contact_method.id)
add_notification_rule(user_id, data.contact_method.id, 900)
}
})
}
add_notification_rule = function(user_id, contact_method, start_delay_in_minutes) {
PDJS.api({
res: 'users/'+user_id+'/notification_rules',
type: 'POST',
data: {
notification_rule: {
contact_method_id: contact_method,
start_delay_in_minutes: start_delay_in_minutes,
}
},
success: function (data) {
console.log(data)
console.log('New notification rule ID: ' + data.notification_rule.id)
}
})
}
add_contact_method('PRJRF7T')
Triggering an incident (V2)
With Events API V2, alerts can be grouped with the same dedup_key.
PDJS.trigger({
routing_key: '',
event_action: 'trigger',
data: {
summary: 'Server on Fire',
source: 'pdjs',
severity: 'info'
}
})
Triggering an incident (V2)
The integration API has its own function as well
PDJS.trigger({
service_key: '5eb2b9dae1b2480abf59f58c78ba06e7',
description: 'Server on Fire',
incident_key: (new Date()).toString(),
details: {
cause: 'PEBKAC'
}
})
Again, you can specify a success function that will get a JavaScript object representing the incident:
{
status: 'success',
message: 'Event processed',
incident_key: '8a803874eda340a09928f2631a39378d'
}
The api_all helper
There's also a helper method that will handle limits and offsets for lists longer than 100 elements:
PDJS.api_all({
res: 'incidents',
data: {
since: '2013-08-01T09:53:17-07:00',
until: '2013-08-14T09:53:17-07:00',
status: 'resolved',
fields: 'incident_number,status,created_on,service'
},
final_success: function(data) {
console.log(data.total + ' objects!');
console.log(data);
},
incremental_success: function(data) {
console.log('Got data');
}
})
It works the same, except you'll need to specify one or more of:
- a function to run on final_success at the end
- a function to run on each incremental_success
That's kind of nifty.
Examples
There's an examples directory:
To compile the base script:
This is written in CoffeeScript, so you're going to have to compile it to get JavaScript
coffee --output js/ --compile --watch --join pdjs.js coffee/ &
More info
Are you using this? Let us know! @pagerduty or add it to our addons repo: https://github.com/PagerDuty/addons/
You might notice that PDJS sends along some extra parameters, nothing scary, we use those to track QoS across our language-specific libraries.
Possibly also of interest is node-pagerduty to trigger PagerDuty incidents from node.js.