├── .npmignore ├── .gitignore ├── index.js ├── Cakefile ├── package.json ├── src └── PagerDuty.coffee ├── test └── test-PagerDuty.coffee └── Readme.md /.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | lib 3 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./lib/PagerDuty'); 2 | -------------------------------------------------------------------------------- /Cakefile: -------------------------------------------------------------------------------- 1 | {exec} = require 'child_process' 2 | task 'build', 'Build project from src/*.coffee to lib/*.js', -> 3 | exec 'coffee --compile --output lib/ src/', (err, stdout, stderr) -> 4 | throw err if err 5 | console.log stdout + stderr -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "Karl Skomski ", 3 | "name": "pagerduty", 4 | "description": "A node.js client for PagerDuty", 5 | "version": "0.0.3", 6 | "repository": { 7 | "type": "git", 8 | "url": "git://github.com/skomski/node-pagerduty.git" 9 | }, 10 | "main": "./index", 11 | "scripts" : { 12 | "test" : "coffee test/test-PagerDuty.coffee" 13 | }, 14 | "engines": { 15 | "node": "*" 16 | }, 17 | "dependencies": { 18 | "request": "~2.9.3" 19 | }, 20 | "devDependencies": { 21 | "coffee-script": "~1.2.0" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/PagerDuty.coffee: -------------------------------------------------------------------------------- 1 | request = require 'request' 2 | 3 | class PagerDuty 4 | module.exports = PagerDuty 5 | 6 | constructor: ({@serviceKey}) -> 7 | throw new Error 'PagerDuty.constructor: Need serviceKey!' unless @serviceKey? 8 | 9 | create: ({description, incidentKey, details, callback}) -> 10 | throw new Error 'PagerDuty.create: Need description!' unless description? 11 | 12 | @_request arguments[0] extends eventType: 'trigger' 13 | 14 | acknowledge: ({incidentKey, details, description, callback}) -> 15 | throw new Error 'PagerDuty.acknowledge: Need incidentKey!' unless incidentKey? 16 | 17 | @_request arguments[0] extends eventType: 'acknowledge' 18 | 19 | resolve: ({incidentKey, details, description, callback}) -> 20 | throw new Error 'PagerDuty.resolve: Need incidentKey!' unless incidentKey? 21 | 22 | @_request arguments[0] extends eventType: 'resolve' 23 | 24 | _request: ({description, incidentKey, eventType, details, callback}) -> 25 | throw new Error 'PagerDuty._request: Need eventType!' unless eventType? 26 | 27 | incidentKey ||= null 28 | details ||= {} 29 | callback ||= -> 30 | 31 | json = 32 | service_key: @serviceKey 33 | event_type: eventType 34 | description: description 35 | details: details 36 | 37 | json.incident_key = incidentKey if incidentKey? 38 | 39 | request 40 | method: 'POST' 41 | uri: 'https://events.pagerduty.com/generic/2010-04-15/create_event.json' 42 | json: json 43 | , (err, response, body) -> 44 | if err or response.statusCode != 200 45 | callback err || new Error(body.errors[0]) 46 | else 47 | callback null, body 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /test/test-PagerDuty.coffee: -------------------------------------------------------------------------------- 1 | PagerDuty = require '../src/PagerDuty.coffee' 2 | assert = require 'assert' 3 | 4 | serviceKey = '12345678901234567890123456789012' # specify key 5 | 6 | throw new Error 'Specify serviceKey!' unless serviceKey? 7 | 8 | pager = new PagerDuty 9 | serviceKey: serviceKey 10 | 11 | # create incident 12 | pager.create 13 | description: 'testError' 14 | details: {foo: 'bar'} 15 | callback: (err, response) -> 16 | throw err if err 17 | assert.equal response.status, 'success' 18 | console.log 'create' 19 | 20 | # acknowledge incident 21 | pager.acknowledge 22 | incidentKey: response.incident_key , 23 | description: 'Got the test error!' 24 | details: {foo: 'bar'} 25 | callback: (err, response) -> 26 | throw err if err 27 | assert.equal response.status, 'success' 28 | console.log 'acknowledge' 29 | 30 | # resolve incident 31 | pager.resolve 32 | incidentKey: response.incident_key, 33 | description: 'Resolved the test error!' 34 | details: { foo: 'bar'} 35 | callback: (err, response) -> 36 | throw err if err 37 | assert.equal response.status, 'success' 38 | console.log 'resolve' 39 | 40 | assert.throws () -> 41 | new PagerDuty() 42 | , /serviceKey/ 43 | console.log 'constructor without serviceKey' 44 | 45 | assert.throws () -> 46 | pager.create() 47 | , /description/ 48 | console.log 'create without description' 49 | 50 | assert.throws () -> 51 | pager.acknowledge() 52 | , /incident/ 53 | console.log 'acknowledge without incidentKey' 54 | 55 | assert.throws () -> 56 | pager.resolve() 57 | , /incident/ 58 | console.log 'resolve without incidentKey' -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # pagerduty 2 | 3 | A node.js client for PagerDuty. 4 | 5 | ## Install 6 | 7 | ``` 8 | npm install pagerduty 9 | ``` 10 | 11 | ## Methods 12 | 13 | ### constructor(options) 14 | * Required: 15 | * `serviceKey` - The GUID of one of your “Generic API” services. This is the “service key” listed on a Generic API’s service detail page. 16 | 17 | ### create(options) 18 | * Required: 19 | * `description` - A short description of the problem that led to this trigger. 20 | * Optional: 21 | * `details` - An arbitrary JSON object containing any data you’d like included in the incident log. 22 | * `incidentKey` - Identifies the incident to which this trigger event should be applied. 23 | * `callback` - A Callback with two arguments `(err, response)` 24 | 25 | ### acknowledge(options) 26 | * Required: 27 | * `incidentKey` - Identifies the incident to which this trigger event should be applied. 28 | * Optional: 29 | * `details` - An arbitrary JSON object containing any data you’d like included in the incident log. 30 | * `description` - Text that will appear in the incident’s log associated with this event. 31 | * `callback` - A Callback with two arguments `(err, response)` 32 | 33 | ### resolve(options) 34 | * Required: 35 | * `incidentKey` - Identifies the incident to which this trigger event should be applied. 36 | * Optional: 37 | * `details` - An arbitrary JSON object containing any data you’d like included in the incident log. 38 | * `description` - Text that will appear in the incident’s log associated with this event. 39 | * `callback` - A Callback with two arguments `(err, response)` 40 | 41 | ### Example response 42 | 43 | ```json 44 | { 45 | status: 'success', 46 | incident_key: '87fb80301f99012f961a1231381bc5dc', 47 | message: 'Event processed' 48 | } 49 | ``` 50 | 51 | ## Usage 52 | 53 | ```javascript 54 | var pager, PagerDuty; 55 | 56 | PagerDuty = require('pagerduty'); 57 | 58 | pager = new PagerDuty({ 59 | serviceKey: '12345678901234567890123456789012' // required 60 | }); 61 | 62 | pager.create({ 63 | description: 'testError', // required 64 | details: { 65 | foo: 'bar' 66 | }, 67 | callback: function(err, response) { 68 | if (err) throw err; 69 | 70 | pager.acknowledge({ 71 | incidentKey: response.incident_key, // required 72 | description: 'Got the test error!', 73 | details: { 74 | foo: 'bar' 75 | }, 76 | callback: function(err, response) { 77 | if (err) throw err; 78 | 79 | pager.resolve({ 80 | incidentKey: response.incident_key, // required 81 | description: 'Resolved the test error!', 82 | details: { 83 | foo: 'bar' 84 | }, 85 | callback: function(err, response) { 86 | if (err) throw err; 87 | } 88 | }); 89 | } 90 | }); 91 | } 92 | }); 93 | ``` 94 | 95 | ## License 96 | 97 | Licensed under the MIT license. 98 | --------------------------------------------------------------------------------