pagerduty 1.4.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +2 -2
- data/README.md +70 -20
- data/Rakefile +0 -10
- data/lib/pagerduty.rb +119 -30
- data/lib/pagerduty/http_transport.rb +26 -26
- data/lib/pagerduty/version.rb +1 -1
- data/pagerduty.gemspec +9 -4
- data/spec/pagerduty_spec.rb +149 -43
- metadata +10 -6
- data/.document +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a22fab98bfd9b7ab4f99f8dd824b1ac10a6f7675
|
4
|
+
data.tar.gz: 5eb0a9c4074cd4aed73987137a3a53f81389c65f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 001b8bb1ed10ae2e54f315233bf55f30c7173141c584dfccbb04236e84a5a65b6157c7e088bd525bdb71b42e94481154214e019762c935ad8a2d004a536b99da
|
7
|
+
data.tar.gz: a4f2bfb76c69a3bfe86aa32d45ee7cb285e1920ccc249f270af018ff4971fa8cf246901230302cc72ae9e8fc2aefcc3b492a8c64abf65ce331dfebadf9b9111b
|
data/LICENSE.txt
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2010 Envato &
|
1
|
+
Copyright (c) 2010 Envato, Charlie Somerville & Orien Madgwick
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
a copy of this software and associated documentation files (the
|
@@ -17,4 +17,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
17
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
18
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
19
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
@@ -1,37 +1,87 @@
|
|
1
|
-
pagerduty
|
2
|
-
=========
|
1
|
+
# pagerduty
|
3
2
|
|
4
3
|
[![Gem Version](https://badge.fury.io/rb/pagerduty.svg)](http://badge.fury.io/rb/pagerduty)
|
5
4
|
[![Build Status](https://travis-ci.org/envato/pagerduty.svg?branch=master)](https://travis-ci.org/envato/pagerduty)
|
6
5
|
|
7
|
-
Provides a
|
6
|
+
Provides a lightweight Ruby interface for calling the [PagerDuty
|
7
|
+
Integration API](http://developer.pagerduty.com/documentation/integration/events).
|
8
8
|
|
9
|
-
Installation
|
10
|
-
------------
|
9
|
+
## Installation
|
11
10
|
|
12
|
-
|
11
|
+
Add this line to your application's Gemfile:
|
13
12
|
|
14
|
-
|
13
|
+
```ruby
|
14
|
+
gem 'pagerduty'
|
15
|
+
```
|
15
16
|
|
16
|
-
|
17
|
-
-----
|
17
|
+
And then execute:
|
18
18
|
|
19
|
-
|
19
|
+
$ bundle
|
20
20
|
|
21
|
-
|
21
|
+
Or install it yourself as:
|
22
22
|
|
23
|
-
|
24
|
-
p = Pagerduty.new "your_pagerduty_service_key"
|
25
|
-
incident = p.trigger "Everything went down!"
|
23
|
+
$ gem install pagerduty
|
26
24
|
|
27
|
-
|
25
|
+
## Usage
|
28
26
|
|
29
|
-
|
27
|
+
```ruby
|
28
|
+
# Don't forget to require the library
|
29
|
+
require "pagerduty"
|
30
30
|
|
31
|
-
|
31
|
+
# Instantiate a Pagerduty with your specific service key
|
32
|
+
pagerduty = Pagerduty.new("<my-service-key>")
|
32
33
|
|
33
|
-
|
34
|
-
|
34
|
+
# Trigger an incident
|
35
|
+
incident = pagerduty.trigger("incident description")
|
35
36
|
|
36
|
-
|
37
|
+
# Acknowledge and/or resolve the incident
|
38
|
+
incident.acknowledge
|
39
|
+
incident.resolve
|
40
|
+
```
|
37
41
|
|
42
|
+
There are a whole bunch of properties you can send to PagerDuty when triggering
|
43
|
+
an incident. See the [PagerDuty
|
44
|
+
documentation](http://developer.pagerduty.com/documentation/integration/events/trigger)
|
45
|
+
for the specifics.
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
pagerduty.trigger(
|
49
|
+
"incident description",
|
50
|
+
:incident_key => "my unique incident identifier",
|
51
|
+
:client => "server in trouble",
|
52
|
+
:client_url => "http://server.in.trouble",
|
53
|
+
:details => { :my => "extra details" },
|
54
|
+
)
|
55
|
+
```
|
56
|
+
|
57
|
+
### Upgrading to Version 2.0.0
|
58
|
+
|
59
|
+
The API has changed in three ways that you need to be aware of:
|
60
|
+
|
61
|
+
1. `Pagerduty` class initialiser no longer accepts an `incident_key`. This
|
62
|
+
attribute can now be provided when calling the `#trigger` method (see above).
|
63
|
+
|
64
|
+
2. `Pagerduty#trigger` arguments have changed to accept all available options
|
65
|
+
rather than just details.
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
# This no longer works post v2.0.0. If you're
|
69
|
+
# providing details in this form, please migrate.
|
70
|
+
pagerduty.trigger("desc", :key => "value")
|
71
|
+
|
72
|
+
# Post v2.0.0 this is how to send details (migrate to this please).
|
73
|
+
pagerduty.trigger("desc", :details => { :key => "value" })
|
74
|
+
```
|
75
|
+
|
76
|
+
3. `PagerdutyException` now extends from `StandardError` rather than
|
77
|
+
`Exception`. This may affect how you rescue the error. i.e. `rescue
|
78
|
+
StandardError` will now rescue a `PagerdutyException` where it did not
|
79
|
+
before.
|
80
|
+
|
81
|
+
## Contributing
|
82
|
+
|
83
|
+
1. Fork it ( https://github.com/[my-github-username]/pagerduty/fork )
|
84
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
85
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
86
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
87
|
+
5. Create a new Pull Request
|
data/Rakefile
CHANGED
@@ -1,18 +1,8 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require "rspec/core/rake_task"
|
3
|
-
require "rdoc/task"
|
4
3
|
|
5
4
|
task :default => :spec
|
6
5
|
|
7
6
|
RSpec::Core::RakeTask.new(:spec) do |t|
|
8
7
|
t.verbose = false
|
9
8
|
end
|
10
|
-
|
11
|
-
RDoc::Task.new do |rdoc|
|
12
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
13
|
-
|
14
|
-
rdoc.rdoc_dir = 'rdoc'
|
15
|
-
rdoc.title = "pagerduty #{version}"
|
16
|
-
rdoc.rdoc_files.include('README*')
|
17
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
18
|
-
end
|
data/lib/pagerduty.rb
CHANGED
@@ -1,73 +1,162 @@
|
|
1
1
|
require 'pagerduty/version'
|
2
2
|
require 'pagerduty/http_transport'
|
3
3
|
|
4
|
-
class PagerdutyException <
|
4
|
+
class PagerdutyException < StandardError
|
5
5
|
attr_reader :pagerduty_instance, :api_response
|
6
6
|
|
7
|
-
def initialize(instance,
|
7
|
+
def initialize(instance, response, message)
|
8
|
+
super(message)
|
8
9
|
@pagerduty_instance = instance
|
9
|
-
@api_response =
|
10
|
+
@api_response = response
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
13
14
|
class Pagerduty
|
14
15
|
|
15
|
-
attr_reader :service_key
|
16
|
+
attr_reader :service_key
|
16
17
|
|
17
|
-
|
18
|
+
# @param [String] service_key The GUID of one of your "Generic API" services.
|
19
|
+
# This is the "service key" listed on a Generic API's service detail page.
|
20
|
+
#
|
21
|
+
def initialize(service_key)
|
18
22
|
@service_key = service_key
|
19
|
-
@incident_key = incident_key
|
20
23
|
end
|
21
24
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
# Send PagerDuty a trigger event to report a new or ongoing problem. When
|
26
|
+
# PagerDuty receives a trigger event, it will either open a new incident, or
|
27
|
+
# add a new trigger log entry to an existing incident, depending on the
|
28
|
+
# provided incident_key.
|
29
|
+
#
|
30
|
+
# @param [String] description A short description of the problem that led to
|
31
|
+
# this trigger. This field (or a truncated version) will be used when
|
32
|
+
# generating phone calls, SMS messages and alert emails. It will also appear
|
33
|
+
# on the incidents tables in the PagerDuty UI. The maximum length is 1024
|
34
|
+
# characters.
|
35
|
+
#
|
36
|
+
# @option options [String] :incident_key Identifies the incident to which
|
37
|
+
# this trigger event should be applied. If there's no open (i.e. unresolved)
|
38
|
+
# incident with this key, a new one will be created. If there's already an
|
39
|
+
# open incident with a matching key, this event will be appended to that
|
40
|
+
# incident's log. The event key provides an easy way to "de-dup" problem
|
41
|
+
# reports. If this field isn't provided, PagerDuty will automatically open a
|
42
|
+
# new incident with a unique key.
|
43
|
+
#
|
44
|
+
# @option options [String] :client The name of the monitoring client that is
|
45
|
+
# triggering this event.
|
46
|
+
#
|
47
|
+
# @option options [String] :client_url The URL of the monitoring client that
|
48
|
+
# is triggering this event.
|
49
|
+
#
|
50
|
+
# @option options [Hash] :details An arbitrary hash containing any data you'd
|
51
|
+
# like included in the incident log.
|
52
|
+
#
|
53
|
+
# @return [PagerdutyIncident] The triggered incident.
|
54
|
+
#
|
55
|
+
# @raise [PagerdutyException] If PagerDuty responds with a status that is not
|
56
|
+
# "success"
|
57
|
+
#
|
58
|
+
def trigger(description, options = {})
|
59
|
+
resp = api_call("trigger", options.merge(:description => description))
|
60
|
+
ensure_success(resp)
|
61
|
+
PagerdutyIncident.new service_key, resp["incident_key"]
|
27
62
|
end
|
28
63
|
|
64
|
+
# @return [PagerdutyIncident] The incident referenced by the key.
|
65
|
+
#
|
29
66
|
def get_incident(incident_key)
|
30
|
-
PagerdutyIncident.new
|
67
|
+
PagerdutyIncident.new service_key, incident_key
|
31
68
|
end
|
32
69
|
|
33
70
|
protected
|
34
71
|
|
35
|
-
def api_call(event_type,
|
36
|
-
|
72
|
+
def api_call(event_type, args)
|
73
|
+
args = args.merge(
|
74
|
+
:service_key => service_key,
|
37
75
|
:event_type => event_type,
|
38
|
-
|
39
|
-
|
40
|
-
:details => details
|
41
|
-
}
|
42
|
-
params[:incident_key] = @incident_key if @incident_key
|
43
|
-
Pagerduty.transport.send(params)
|
76
|
+
)
|
77
|
+
Pagerduty.transport.send(args)
|
44
78
|
end
|
45
79
|
|
46
|
-
|
47
|
-
|
48
|
-
|
80
|
+
def ensure_success(response)
|
81
|
+
unless response["status"] == "success"
|
82
|
+
raise PagerdutyException.new(self, response, response["message"])
|
49
83
|
end
|
50
84
|
end
|
85
|
+
|
86
|
+
# @api private
|
87
|
+
def self.transport
|
88
|
+
Pagerduty::HttpTransport
|
89
|
+
end
|
51
90
|
end
|
52
91
|
|
53
92
|
class PagerdutyIncident < Pagerduty
|
93
|
+
attr_reader :incident_key
|
54
94
|
|
95
|
+
# @param [String] service_key The GUID of one of your "Generic API" services.
|
96
|
+
# This is the "service key" listed on a Generic API's service detail page.
|
97
|
+
#
|
98
|
+
# @param [String] incident_key The unique identifier for the incident.
|
99
|
+
#
|
55
100
|
def initialize(service_key, incident_key)
|
56
101
|
super service_key
|
57
102
|
@incident_key = incident_key
|
58
103
|
end
|
59
104
|
|
60
|
-
|
61
|
-
|
62
|
-
|
105
|
+
# @param (see Pagerduty#trigger)
|
106
|
+
# @option (see Pagerduty#trigger)
|
107
|
+
def trigger(description, options = {})
|
108
|
+
super(description, { :incident_key => incident_key }.merge(options))
|
109
|
+
end
|
63
110
|
|
64
|
-
|
111
|
+
# Acknowledge the referenced incident. While an incident is acknowledged, it
|
112
|
+
# won't generate any additional notifications, even if it receives new
|
113
|
+
# trigger events. Send PagerDuty an acknowledge event when you know someone
|
114
|
+
# is presently working on the problem.
|
115
|
+
#
|
116
|
+
# @param [String] description Text that will appear in the incident's log
|
117
|
+
# associated with this event.
|
118
|
+
#
|
119
|
+
# @param [Hash] details An arbitrary hash containing any data you'd like
|
120
|
+
# included in the incident log.
|
121
|
+
#
|
122
|
+
# @return [PagerdutyIncident] self
|
123
|
+
#
|
124
|
+
# @raise [PagerdutyException] If PagerDuty responds with a status that is not
|
125
|
+
# "success"
|
126
|
+
#
|
127
|
+
def acknowledge(description = nil, details = nil)
|
128
|
+
modify_incident("acknowledge", description, details)
|
129
|
+
end
|
130
|
+
|
131
|
+
# Resolve the referenced incident. Once an incident is resolved, it won't
|
132
|
+
# generate any additional notifications. New trigger events with the same
|
133
|
+
# incident_key as a resolved incident won't re-open the incident. Instead, a
|
134
|
+
# new incident will be created. Send PagerDuty a resolve event when the
|
135
|
+
# problem that caused the initial trigger event has been fixed.
|
136
|
+
#
|
137
|
+
# @param [String] description Text that will appear in the incident's log
|
138
|
+
# associated with this event.
|
139
|
+
#
|
140
|
+
# @param [Hash] details An arbitrary hash containing any data you'd like
|
141
|
+
# included in the incident log.
|
142
|
+
#
|
143
|
+
# @return [PagerdutyIncident] self
|
144
|
+
#
|
145
|
+
# @raise [PagerdutyException] If PagerDuty responds with a status that is not
|
146
|
+
# "success"
|
147
|
+
#
|
148
|
+
def resolve(description = nil, details = nil)
|
149
|
+
modify_incident("resolve", description, details)
|
65
150
|
end
|
66
151
|
|
67
|
-
|
68
|
-
resp = api_call("resolve", description, details)
|
69
|
-
raise PagerdutyException.new(self, resp) unless resp["status"] == "success"
|
152
|
+
private
|
70
153
|
|
154
|
+
def modify_incident(event_type, description, details)
|
155
|
+
options = { :incident_key => incident_key }
|
156
|
+
options[:description] = description if description
|
157
|
+
options[:details] = details if details
|
158
|
+
resp = api_call(event_type, options)
|
159
|
+
ensure_success(resp)
|
71
160
|
self
|
72
161
|
end
|
73
162
|
|
@@ -3,38 +3,38 @@ require 'json'
|
|
3
3
|
require 'net/http'
|
4
4
|
require 'net/https'
|
5
5
|
|
6
|
+
# @api private
|
6
7
|
module Pagerduty::HttpTransport
|
7
|
-
|
8
|
+
extend self
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
HOST = "events.pagerduty.com"
|
11
|
+
PORT = 443
|
12
|
+
PATH = "/generic/2010-04-15/create_event.json"
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
def send(payload = {})
|
15
|
+
response = post payload.to_json
|
16
|
+
response.error! unless transported?(response)
|
17
|
+
JSON.parse(response.body)
|
18
|
+
end
|
18
19
|
|
19
|
-
|
20
|
+
private
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
def post(payload)
|
23
|
+
post = Net::HTTP::Post.new(PATH)
|
24
|
+
post.body = payload
|
25
|
+
http.request(post)
|
26
|
+
end
|
26
27
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
28
|
+
def http
|
29
|
+
http = Net::HTTP.new(HOST, PORT)
|
30
|
+
http.use_ssl = true
|
31
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
32
|
+
http.open_timeout = 60
|
33
|
+
http.read_timeout = 60
|
34
|
+
http
|
35
|
+
end
|
35
36
|
|
36
|
-
|
37
|
-
|
38
|
-
end
|
37
|
+
def transported?(response)
|
38
|
+
response.kind_of? Net::HTTPSuccess or response.kind_of? Net::HTTPRedirection
|
39
39
|
end
|
40
40
|
end
|
data/lib/pagerduty/version.rb
CHANGED
data/pagerduty.gemspec
CHANGED
@@ -6,13 +6,18 @@ require 'pagerduty/version'
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
7
|
gem.name = "pagerduty"
|
8
8
|
gem.version = Pagerduty::VERSION
|
9
|
-
gem.authors = ["Charlie Somerville"]
|
10
|
-
gem.email = ["charlie@charliesomerville.com"]
|
11
|
-
gem.description = %q{Provides a
|
12
|
-
gem.summary = %q{Pagerduty API client library}
|
9
|
+
gem.authors = ["Charlie Somerville", "Orien Madgwick"]
|
10
|
+
gem.email = ["charlie@charliesomerville.com", "_@orien.io"]
|
11
|
+
gem.description = %q{Provides a lightweight interface for calling the PagerDuty Integration API}
|
12
|
+
gem.summary = %q{Pagerduty Integration API client library}
|
13
13
|
gem.homepage = "http://github.com/envato/pagerduty"
|
14
14
|
gem.license = "MIT"
|
15
15
|
|
16
|
+
gem.post_install_message = <<-MSG
|
17
|
+
If upgrading to pagerduty 2.0.0 please note the API changes:
|
18
|
+
https://github.com/envato/pagerduty#upgrading-to-version-200
|
19
|
+
MSG
|
20
|
+
|
16
21
|
gem.files = `git ls-files`.split($/)
|
17
22
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
18
23
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
data/spec/pagerduty_spec.rb
CHANGED
@@ -9,20 +9,43 @@ describe Pagerduty do
|
|
9
9
|
Given { Pagerduty.stub(:transport => transport) }
|
10
10
|
|
11
11
|
describe "#trigger" do
|
12
|
-
Given(:description) { "a-test-description" }
|
13
|
-
Given(:details) { { key: "value" } }
|
14
12
|
|
15
13
|
describe "provides the correct request" do
|
16
14
|
Given { transport.stub(:send => standard_response) }
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
15
|
+
|
16
|
+
context "no options" do
|
17
|
+
When(:incident) { pagerduty.trigger("a-test-description") }
|
18
|
+
Then {
|
19
|
+
expect(transport).to have_received(:send).with(
|
20
|
+
service_key: "a-test-service-key",
|
21
|
+
event_type: "trigger",
|
22
|
+
description: "a-test-description",
|
23
|
+
)
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
context "all options" do
|
28
|
+
When(:incident) {
|
29
|
+
pagerduty.trigger(
|
30
|
+
"a-test-description",
|
31
|
+
incident_key: "a-test-incident-key",
|
32
|
+
client: "a-test-client",
|
33
|
+
client_url: "a-test-client-url",
|
34
|
+
details: { key: "value" },
|
35
|
+
)
|
36
|
+
}
|
37
|
+
Then {
|
38
|
+
expect(transport).to have_received(:send).with(
|
39
|
+
service_key: "a-test-service-key",
|
40
|
+
event_type: "trigger",
|
41
|
+
description: "a-test-description",
|
42
|
+
incident_key: "a-test-incident-key",
|
43
|
+
client: "a-test-client",
|
44
|
+
client_url: "a-test-client-url",
|
45
|
+
details: { key: "value" },
|
46
|
+
)
|
47
|
+
}
|
48
|
+
end
|
26
49
|
end
|
27
50
|
|
28
51
|
describe "handles all responses" do
|
@@ -35,7 +58,7 @@ describe Pagerduty do
|
|
35
58
|
"message" => "Event processed",
|
36
59
|
})
|
37
60
|
}
|
38
|
-
When(:incident) { pagerduty.trigger(description
|
61
|
+
When(:incident) { pagerduty.trigger("description") }
|
39
62
|
Then { expect(incident).to be_a PagerdutyIncident }
|
40
63
|
Then { incident.service_key == service_key }
|
41
64
|
Then { incident.incident_key == "My Incident Key" }
|
@@ -48,13 +71,13 @@ describe Pagerduty do
|
|
48
71
|
"message" => "Event not processed",
|
49
72
|
})
|
50
73
|
}
|
51
|
-
When(:incident) { pagerduty.trigger(description
|
74
|
+
When(:incident) { pagerduty.trigger("description") }
|
52
75
|
Then { expect(incident).to have_raised PagerdutyException }
|
53
76
|
end
|
54
77
|
|
55
78
|
context "PagerDuty responds with HTTP bad request" do
|
56
79
|
Given { transport.stub(:send).and_raise(Net::HTTPServerException.new(nil, nil)) }
|
57
|
-
When(:incident) { pagerduty.trigger(description
|
80
|
+
When(:incident) { pagerduty.trigger("description") }
|
58
81
|
Then { expect(incident).to have_raised Net::HTTPServerException }
|
59
82
|
end
|
60
83
|
end
|
@@ -71,23 +94,47 @@ describe Pagerduty do
|
|
71
94
|
describe PagerdutyIncident do
|
72
95
|
Given(:incident) { PagerdutyIncident.new(service_key, incident_key) }
|
73
96
|
Given(:incident_key) { "a-test-incident-key" }
|
74
|
-
Given(:description) { "a-test-description" }
|
75
|
-
Given(:details) { { key: "value" } }
|
76
97
|
|
77
98
|
describe "#acknowledge" do
|
78
99
|
|
79
100
|
describe "provides the correct request" do
|
80
101
|
Given { transport.stub(:send => standard_response) }
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
102
|
+
|
103
|
+
context "no args" do
|
104
|
+
When(:acknowledge) { incident.acknowledge }
|
105
|
+
Then {
|
106
|
+
expect(transport).to have_received(:send).with(
|
107
|
+
event_type: "acknowledge",
|
108
|
+
service_key: "a-test-service-key",
|
109
|
+
incident_key: "a-test-incident-key",
|
110
|
+
)
|
111
|
+
}
|
112
|
+
end
|
113
|
+
|
114
|
+
context "a description" do
|
115
|
+
When(:acknowledge) { incident.acknowledge("test-description") }
|
116
|
+
Then {
|
117
|
+
expect(transport).to have_received(:send).with(
|
118
|
+
event_type: "acknowledge",
|
119
|
+
service_key: "a-test-service-key",
|
120
|
+
incident_key: "a-test-incident-key",
|
121
|
+
description: "test-description",
|
122
|
+
)
|
123
|
+
}
|
124
|
+
end
|
125
|
+
|
126
|
+
context "a description and details" do
|
127
|
+
When(:acknowledge) { incident.acknowledge("test-description", { my: "detail" }) }
|
128
|
+
Then {
|
129
|
+
expect(transport).to have_received(:send).with(
|
130
|
+
event_type: "acknowledge",
|
131
|
+
service_key: "a-test-service-key",
|
132
|
+
incident_key: "a-test-incident-key",
|
133
|
+
description: "test-description",
|
134
|
+
details: { my: "detail" },
|
135
|
+
)
|
136
|
+
}
|
137
|
+
end
|
91
138
|
end
|
92
139
|
|
93
140
|
describe "handles all responses" do
|
@@ -100,7 +147,7 @@ describe Pagerduty do
|
|
100
147
|
"message" => "Event acknowledged",
|
101
148
|
})
|
102
149
|
}
|
103
|
-
When(:acknowledge) { incident.acknowledge
|
150
|
+
When(:acknowledge) { incident.acknowledge }
|
104
151
|
Then { expect(acknowledge).to be incident}
|
105
152
|
end
|
106
153
|
|
@@ -112,13 +159,13 @@ describe Pagerduty do
|
|
112
159
|
"message" => "Event not acknowledged",
|
113
160
|
})
|
114
161
|
}
|
115
|
-
When(:acknowledge) { incident.acknowledge
|
162
|
+
When(:acknowledge) { incident.acknowledge }
|
116
163
|
Then { expect(acknowledge).to have_failed PagerdutyException }
|
117
164
|
end
|
118
165
|
|
119
166
|
context "PagerDuty responds with HTTP bad request" do
|
120
167
|
Given { transport.stub(:send).and_raise(Net::HTTPServerException.new(nil, nil)) }
|
121
|
-
When(:acknowledge) { incident.acknowledge
|
168
|
+
When(:acknowledge) { incident.acknowledge }
|
122
169
|
Then { expect(acknowledge).to have_failed Net::HTTPServerException }
|
123
170
|
end
|
124
171
|
end
|
@@ -128,16 +175,42 @@ describe Pagerduty do
|
|
128
175
|
|
129
176
|
describe "provides the correct request" do
|
130
177
|
Given { transport.stub(:send => standard_response) }
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
178
|
+
|
179
|
+
context "no args" do
|
180
|
+
When(:resolve) { incident.resolve }
|
181
|
+
Then {
|
182
|
+
expect(transport).to have_received(:send).with(
|
183
|
+
event_type: "resolve",
|
184
|
+
service_key: "a-test-service-key",
|
185
|
+
incident_key: "a-test-incident-key",
|
186
|
+
)
|
187
|
+
}
|
188
|
+
end
|
189
|
+
|
190
|
+
context "a description" do
|
191
|
+
When(:resolve) { incident.resolve("test-description") }
|
192
|
+
Then {
|
193
|
+
expect(transport).to have_received(:send).with(
|
194
|
+
event_type: "resolve",
|
195
|
+
service_key: "a-test-service-key",
|
196
|
+
incident_key: "a-test-incident-key",
|
197
|
+
description: "test-description",
|
198
|
+
)
|
199
|
+
}
|
200
|
+
end
|
201
|
+
|
202
|
+
context "a description and details" do
|
203
|
+
When(:resolve) { incident.resolve("test-description", { my: "detail" }) }
|
204
|
+
Then {
|
205
|
+
expect(transport).to have_received(:send).with(
|
206
|
+
event_type: "resolve",
|
207
|
+
service_key: "a-test-service-key",
|
208
|
+
incident_key: "a-test-incident-key",
|
209
|
+
description: "test-description",
|
210
|
+
details: { my: "detail" },
|
211
|
+
)
|
212
|
+
}
|
213
|
+
end
|
141
214
|
end
|
142
215
|
|
143
216
|
describe "handles all responses" do
|
@@ -150,7 +223,7 @@ describe Pagerduty do
|
|
150
223
|
"message" => "Event resolved",
|
151
224
|
})
|
152
225
|
}
|
153
|
-
When(:resolve) { incident.resolve
|
226
|
+
When(:resolve) { incident.resolve }
|
154
227
|
Then { expect(resolve).to be incident}
|
155
228
|
end
|
156
229
|
|
@@ -161,17 +234,48 @@ describe Pagerduty do
|
|
161
234
|
"message" => "Event not resolved",
|
162
235
|
})
|
163
236
|
}
|
164
|
-
When(:resolve) { incident.resolve
|
237
|
+
When(:resolve) { incident.resolve }
|
165
238
|
Then { expect(resolve).to have_failed PagerdutyException }
|
166
239
|
end
|
167
240
|
|
168
241
|
context "PagerDuty responds with HTTP bad request" do
|
169
242
|
Given { transport.stub(:send).and_raise(Net::HTTPServerException.new(nil, nil)) }
|
170
|
-
When(:resolve) { incident.resolve
|
243
|
+
When(:resolve) { incident.resolve }
|
171
244
|
Then { expect(resolve).to have_failed Net::HTTPServerException }
|
172
245
|
end
|
173
246
|
end
|
174
247
|
end
|
248
|
+
|
249
|
+
describe "#trigger" do
|
250
|
+
describe "provides the correct request" do
|
251
|
+
Given { transport.stub(:send => standard_response) }
|
252
|
+
|
253
|
+
context "no options" do
|
254
|
+
Given(:incident_key) { "instance incident_key" }
|
255
|
+
When(:trigger) { incident.trigger("description") }
|
256
|
+
Then {
|
257
|
+
expect(transport).to have_received(:send).with(
|
258
|
+
incident_key: "instance incident_key",
|
259
|
+
service_key: "a-test-service-key",
|
260
|
+
event_type: "trigger",
|
261
|
+
description: "description",
|
262
|
+
)
|
263
|
+
}
|
264
|
+
end
|
265
|
+
|
266
|
+
context "with incident_key option" do
|
267
|
+
When(:trigger) { incident.trigger("description", incident_key: "method param incident_key") }
|
268
|
+
Then {
|
269
|
+
expect(transport).to have_received(:send).with(
|
270
|
+
incident_key: "method param incident_key",
|
271
|
+
service_key: "a-test-service-key",
|
272
|
+
event_type: "trigger",
|
273
|
+
description: "description",
|
274
|
+
)
|
275
|
+
}
|
276
|
+
end
|
277
|
+
end
|
278
|
+
end
|
175
279
|
end
|
176
280
|
|
177
281
|
def standard_response
|
@@ -181,10 +285,12 @@ describe Pagerduty do
|
|
181
285
|
describe PagerdutyException do
|
182
286
|
Given(:pagerduty_instance) { double }
|
183
287
|
Given(:api_response) { double }
|
288
|
+
Given(:message) { "a test error message" }
|
184
289
|
|
185
|
-
When(:pagerduty_exception) { PagerdutyException.new(pagerduty_instance, api_response) }
|
290
|
+
When(:pagerduty_exception) { PagerdutyException.new(pagerduty_instance, api_response, message) }
|
186
291
|
|
187
292
|
Then { pagerduty_exception.pagerduty_instance == pagerduty_instance }
|
188
293
|
Then { pagerduty_exception.api_response == api_response }
|
294
|
+
Then { pagerduty_exception.message == message }
|
189
295
|
end
|
190
296
|
end
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pagerduty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Charlie Somerville
|
8
|
+
- Orien Madgwick
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
12
|
+
date: 2014-05-26 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: json
|
@@ -66,14 +67,15 @@ dependencies:
|
|
66
67
|
- - ">="
|
67
68
|
- !ruby/object:Gem::Version
|
68
69
|
version: '0'
|
69
|
-
description: Provides a
|
70
|
+
description: Provides a lightweight interface for calling the PagerDuty Integration
|
71
|
+
API
|
70
72
|
email:
|
71
73
|
- charlie@charliesomerville.com
|
74
|
+
- _@orien.io
|
72
75
|
executables: []
|
73
76
|
extensions: []
|
74
77
|
extra_rdoc_files: []
|
75
78
|
files:
|
76
|
-
- ".document"
|
77
79
|
- ".gitignore"
|
78
80
|
- ".travis.yml"
|
79
81
|
- Gemfile
|
@@ -92,7 +94,9 @@ homepage: http://github.com/envato/pagerduty
|
|
92
94
|
licenses:
|
93
95
|
- MIT
|
94
96
|
metadata: {}
|
95
|
-
post_install_message:
|
97
|
+
post_install_message: |
|
98
|
+
If upgrading to pagerduty 2.0.0 please note the API changes:
|
99
|
+
https://github.com/envato/pagerduty#upgrading-to-version-200
|
96
100
|
rdoc_options: []
|
97
101
|
require_paths:
|
98
102
|
- lib
|
@@ -111,7 +115,7 @@ rubyforge_project:
|
|
111
115
|
rubygems_version: 2.2.2
|
112
116
|
signing_key:
|
113
117
|
specification_version: 4
|
114
|
-
summary: Pagerduty API client library
|
118
|
+
summary: Pagerduty Integration API client library
|
115
119
|
test_files:
|
116
120
|
- spec/pagerduty/http_transport_spec.rb
|
117
121
|
- spec/pagerduty_spec.rb
|