pagerduty 2.0.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +27 -0
- data/.travis.yml +5 -2
- data/Gemfile +1 -1
- data/README.md +33 -8
- data/Rakefile +5 -1
- data/lib/pagerduty.rb +43 -18
- data/lib/pagerduty/http_transport.rb +45 -33
- data/lib/pagerduty/version.rb +1 -1
- data/pagerduty.gemspec +9 -8
- data/spec/pagerduty/http_transport_spec.rb +72 -29
- data/spec/pagerduty_spec.rb +102 -33
- data/spec/spec_helper.rb +8 -3
- data/spec/support/warnings.rb +12 -0
- metadata +16 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0164943fae7683d08ea5fad001e6ebea17af7524
|
4
|
+
data.tar.gz: 1d58093c6b70649b7877ed41425641d4330e065b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ef62a628733a0cc02994789eb80ac7fbb7685c038c21595f82c897dafef17a53b5287af0ef52ad702104dd655aefd7a3517cab10f159fa401552e85c1eb610d
|
7
|
+
data.tar.gz: da5ae3770b892d4ce644d05b2c5a830b38007d19fcee3931dfc4f23454755afb3b1dde71b163a9c225b6ea606a9d33026d5c629a0e90b6ec70fbaed6ff1b320f
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
AllCops:
|
2
|
+
Exclude:
|
3
|
+
- .bundle/**/*
|
4
|
+
- bin/**/*
|
5
|
+
- vendor/**/*
|
6
|
+
|
7
|
+
Style/AccessModifierIndentation:
|
8
|
+
EnforcedStyle: outdent
|
9
|
+
|
10
|
+
Style/BlockDelimiters:
|
11
|
+
Exclude:
|
12
|
+
- spec/**/*
|
13
|
+
|
14
|
+
Style/Documentation:
|
15
|
+
Enabled: false
|
16
|
+
|
17
|
+
Style/GuardClause:
|
18
|
+
Enabled: false
|
19
|
+
|
20
|
+
Style/SpecialGlobalVars:
|
21
|
+
Enabled: false
|
22
|
+
|
23
|
+
Style/StringLiterals:
|
24
|
+
EnforcedStyle: double_quotes
|
25
|
+
|
26
|
+
Style/TrailingComma:
|
27
|
+
EnforcedStyleForMultiline: comma
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -39,6 +39,11 @@ incident = pagerduty.trigger("incident description")
|
|
39
39
|
# Acknowledge and/or resolve the incident
|
40
40
|
incident.acknowledge
|
41
41
|
incident.resolve
|
42
|
+
|
43
|
+
# Acknowledge and/or resolve an existing incident
|
44
|
+
incident = pagerduty.get_incident("<unique-incident-key>")
|
45
|
+
incident.acknowledge
|
46
|
+
incident.resolve
|
42
47
|
```
|
43
48
|
|
44
49
|
There are a whole bunch of properties you can send to PagerDuty when triggering
|
@@ -49,16 +54,36 @@ for the specifics.
|
|
49
54
|
```ruby
|
50
55
|
pagerduty.trigger(
|
51
56
|
"incident description",
|
52
|
-
:
|
53
|
-
:
|
54
|
-
:
|
55
|
-
:
|
57
|
+
incident_key: "my unique incident identifier",
|
58
|
+
client: "server in trouble",
|
59
|
+
client_url: "http://server.in.trouble",
|
60
|
+
details: { my: "extra details" }
|
56
61
|
)
|
57
62
|
```
|
58
63
|
|
64
|
+
### HTTP Proxy Support
|
65
|
+
|
66
|
+
One can explicitly define an HTTP proxy like this:
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
# Instantiate a Pagerduty with your specific service key and proxy details
|
70
|
+
pagerduty = Pagerduty.new(
|
71
|
+
"<my-service-key>",
|
72
|
+
proxy_host: "my.http.proxy.local",
|
73
|
+
proxy_port: 3128,
|
74
|
+
proxy_username: "<my-proxy-username>",
|
75
|
+
proxy_password: "<my-proxy-password>",
|
76
|
+
)
|
77
|
+
|
78
|
+
# Then proceed to trigger your incident
|
79
|
+
# (sends the request to PagerDuty via the HTTP proxy)
|
80
|
+
incident = pagerduty.trigger("incident description")
|
81
|
+
```
|
82
|
+
|
59
83
|
### Debugging Error Responses
|
60
84
|
|
61
|
-
The gem doesn't encapsulate HTTP error responses from PagerDuty. Here's how to
|
85
|
+
The gem doesn't encapsulate HTTP error responses from PagerDuty. Here's how to
|
86
|
+
go about debugging these unhappy cases:
|
62
87
|
|
63
88
|
```ruby
|
64
89
|
begin
|
@@ -83,10 +108,10 @@ rather than just details.
|
|
83
108
|
```ruby
|
84
109
|
# This no longer works post v2.0.0. If you're
|
85
110
|
# providing details in this form, please migrate.
|
86
|
-
pagerduty.trigger("desc", :
|
111
|
+
pagerduty.trigger("desc", key: "value")
|
87
112
|
|
88
113
|
# Post v2.0.0 this is how to send details (migrate to this please).
|
89
|
-
pagerduty.trigger("desc", :
|
114
|
+
pagerduty.trigger("desc", details: { key: "value" })
|
90
115
|
```
|
91
116
|
|
92
117
|
3. `PagerdutyException` now extends from `StandardError` rather than
|
@@ -96,7 +121,7 @@ before.
|
|
96
121
|
|
97
122
|
## Contributing
|
98
123
|
|
99
|
-
1. Fork it ( https://github.com/
|
124
|
+
1. Fork it ( https://github.com/envato/pagerduty/fork )
|
100
125
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
101
126
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
102
127
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/Rakefile
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require "rspec/core/rake_task"
|
3
|
+
require "rubocop/rake_task"
|
3
4
|
|
4
|
-
task :
|
5
|
+
task default: [:spec, :rubocop]
|
5
6
|
|
6
7
|
RSpec::Core::RakeTask.new(:spec) do |t|
|
7
8
|
t.verbose = false
|
9
|
+
t.ruby_opts = "-w"
|
8
10
|
end
|
11
|
+
|
12
|
+
RuboCop::RakeTask.new(:rubocop)
|
data/lib/pagerduty.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "pagerduty/version"
|
2
|
+
require "pagerduty/http_transport"
|
3
3
|
|
4
4
|
class PagerdutyException < StandardError
|
5
5
|
attr_reader :pagerduty_instance, :api_response
|
@@ -12,14 +12,25 @@ class PagerdutyException < StandardError
|
|
12
12
|
end
|
13
13
|
|
14
14
|
class Pagerduty
|
15
|
-
|
16
15
|
attr_reader :service_key
|
17
16
|
|
18
17
|
# @param [String] service_key The GUID of one of your "Generic API" services.
|
19
18
|
# This is the "service key" listed on a Generic API's service detail page.
|
20
19
|
#
|
21
|
-
|
20
|
+
# @option options [String] :proxy_host The DNS name or IP address of the
|
21
|
+
# proxy host. If nil or unprovided a proxy will not be used.
|
22
|
+
#
|
23
|
+
# @option options [String] :proxy_port The port to use to access the proxy.
|
24
|
+
#
|
25
|
+
# @option options [String] :proxy_username username if authorization is
|
26
|
+
# required to use the proxy.
|
27
|
+
#
|
28
|
+
# @option options [String] :proxy_password password if authorization is
|
29
|
+
# required to use the proxy.
|
30
|
+
#
|
31
|
+
def initialize(service_key, options = {})
|
22
32
|
@service_key = service_key
|
33
|
+
@transport = transport_from_options(options)
|
23
34
|
end
|
24
35
|
|
25
36
|
# Send PagerDuty a trigger event to report a new or ongoing problem. When
|
@@ -56,36 +67,51 @@ class Pagerduty
|
|
56
67
|
# "success"
|
57
68
|
#
|
58
69
|
def trigger(description, options = {})
|
59
|
-
resp = api_call("trigger", options.merge(:
|
70
|
+
resp = api_call("trigger", options.merge(description: description))
|
60
71
|
ensure_success(resp)
|
61
|
-
PagerdutyIncident.new
|
72
|
+
PagerdutyIncident.new(
|
73
|
+
service_key,
|
74
|
+
resp["incident_key"],
|
75
|
+
transport: @transport,
|
76
|
+
)
|
62
77
|
end
|
63
78
|
|
79
|
+
# @param [String] incident_key The unique identifier for the incident.
|
80
|
+
#
|
64
81
|
# @return [PagerdutyIncident] The incident referenced by the key.
|
65
82
|
#
|
83
|
+
# @raise [ArgumentError] If incident_key is nil
|
84
|
+
#
|
66
85
|
def get_incident(incident_key)
|
67
|
-
|
86
|
+
fail ArgumentError, "incident_key is nil" if incident_key.nil?
|
87
|
+
PagerdutyIncident.new(
|
88
|
+
service_key,
|
89
|
+
incident_key,
|
90
|
+
transport: @transport,
|
91
|
+
)
|
68
92
|
end
|
69
93
|
|
70
94
|
protected
|
71
95
|
|
72
96
|
def api_call(event_type, args)
|
73
97
|
args = args.merge(
|
74
|
-
:
|
75
|
-
:
|
98
|
+
service_key: service_key,
|
99
|
+
event_type: event_type,
|
76
100
|
)
|
77
|
-
|
101
|
+
@transport.send_payload(args)
|
78
102
|
end
|
79
103
|
|
80
104
|
def ensure_success(response)
|
81
105
|
unless response["status"] == "success"
|
82
|
-
|
106
|
+
fail PagerdutyException.new(self, response, response["message"])
|
83
107
|
end
|
84
108
|
end
|
85
109
|
|
110
|
+
private
|
111
|
+
|
86
112
|
# @api private
|
87
|
-
def
|
88
|
-
Pagerduty::HttpTransport
|
113
|
+
def transport_from_options(options = {})
|
114
|
+
options[:transport] || Pagerduty::HttpTransport.new(options)
|
89
115
|
end
|
90
116
|
end
|
91
117
|
|
@@ -97,15 +123,15 @@ class PagerdutyIncident < Pagerduty
|
|
97
123
|
#
|
98
124
|
# @param [String] incident_key The unique identifier for the incident.
|
99
125
|
#
|
100
|
-
def initialize(service_key, incident_key)
|
101
|
-
super service_key
|
126
|
+
def initialize(service_key, incident_key, options = {})
|
127
|
+
super service_key, options
|
102
128
|
@incident_key = incident_key
|
103
129
|
end
|
104
130
|
|
105
131
|
# @param (see Pagerduty#trigger)
|
106
132
|
# @option (see Pagerduty#trigger)
|
107
133
|
def trigger(description, options = {})
|
108
|
-
super(description, { :
|
134
|
+
super(description, { incident_key: incident_key }.merge(options))
|
109
135
|
end
|
110
136
|
|
111
137
|
# Acknowledge the referenced incident. While an incident is acknowledged, it
|
@@ -152,12 +178,11 @@ class PagerdutyIncident < Pagerduty
|
|
152
178
|
private
|
153
179
|
|
154
180
|
def modify_incident(event_type, description, details)
|
155
|
-
options = { :
|
181
|
+
options = { incident_key: incident_key }
|
156
182
|
options[:description] = description if description
|
157
183
|
options[:details] = details if details
|
158
184
|
resp = api_call(event_type, options)
|
159
185
|
ensure_success(resp)
|
160
186
|
self
|
161
187
|
end
|
162
|
-
|
163
188
|
end
|
@@ -1,40 +1,52 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require 'net/https'
|
5
|
-
|
6
|
-
# @api private
|
7
|
-
module Pagerduty::HttpTransport
|
8
|
-
extend self
|
9
|
-
|
10
|
-
HOST = "events.pagerduty.com"
|
11
|
-
PORT = 443
|
12
|
-
PATH = "/generic/2010-04-15/create_event.json"
|
13
|
-
|
14
|
-
def send_payload(payload = {})
|
15
|
-
response = post payload.to_json
|
16
|
-
response.error! unless transported?(response)
|
17
|
-
JSON.parse(response.body)
|
18
|
-
end
|
2
|
+
require "json"
|
3
|
+
require "net/https"
|
19
4
|
|
20
|
-
|
5
|
+
class Pagerduty
|
6
|
+
# @api private
|
7
|
+
class HttpTransport
|
8
|
+
HOST = "events.pagerduty.com"
|
9
|
+
PORT = 443
|
10
|
+
PATH = "/generic/2010-04-15/create_event.json"
|
21
11
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
http.request(post)
|
26
|
-
end
|
12
|
+
def initialize(options = {})
|
13
|
+
@options = options
|
14
|
+
end
|
27
15
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
16
|
+
def send_payload(payload = {})
|
17
|
+
response = post payload.to_json
|
18
|
+
response.error! unless transported?(response)
|
19
|
+
JSON.parse(response.body)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def post(payload)
|
25
|
+
post = Net::HTTP::Post.new(PATH)
|
26
|
+
post.body = payload
|
27
|
+
http.request(post)
|
28
|
+
end
|
29
|
+
|
30
|
+
def http
|
31
|
+
http = http_proxy.new(HOST, PORT)
|
32
|
+
http.use_ssl = true
|
33
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
34
|
+
http.open_timeout = 60
|
35
|
+
http.read_timeout = 60
|
36
|
+
http
|
37
|
+
end
|
38
|
+
|
39
|
+
def http_proxy
|
40
|
+
Net::HTTP.Proxy(
|
41
|
+
@options[:proxy_host],
|
42
|
+
@options[:proxy_port],
|
43
|
+
@options[:proxy_username],
|
44
|
+
@options[:proxy_password],
|
45
|
+
)
|
46
|
+
end
|
36
47
|
|
37
|
-
|
38
|
-
|
48
|
+
def transported?(response)
|
49
|
+
response.is_a?(Net::HTTPSuccess) || response.is_a?(Net::HTTPRedirection)
|
50
|
+
end
|
39
51
|
end
|
40
52
|
end
|
data/lib/pagerduty/version.rb
CHANGED
data/pagerduty.gemspec
CHANGED
@@ -1,15 +1,16 @@
|
|
1
|
-
#
|
2
|
-
lib = File.expand_path(
|
1
|
+
# encoding: utf-8
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
4
|
+
require "pagerduty/version"
|
5
5
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
7
|
gem.name = "pagerduty"
|
8
8
|
gem.version = Pagerduty::VERSION
|
9
9
|
gem.authors = ["Charlie Somerville", "Orien Madgwick"]
|
10
10
|
gem.email = ["charlie@charliesomerville.com", "_@orien.io"]
|
11
|
-
gem.description =
|
12
|
-
|
11
|
+
gem.description =
|
12
|
+
"Provides a lightweight interface for calling the PagerDuty Integration API"
|
13
|
+
gem.summary = "Pagerduty Integration API client library"
|
13
14
|
gem.homepage = "http://github.com/envato/pagerduty"
|
14
15
|
gem.license = "MIT"
|
15
16
|
|
@@ -19,13 +20,13 @@ https://github.com/envato/pagerduty#upgrading-to-version-200
|
|
19
20
|
MSG
|
20
21
|
|
21
22
|
gem.files = `git ls-files`.split($/)
|
22
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
23
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
23
24
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
24
25
|
gem.require_paths = ["lib"]
|
25
26
|
|
26
27
|
gem.add_runtime_dependency "json", ">= 1.7.7"
|
27
|
-
gem.add_development_dependency "bundler"
|
28
|
+
gem.add_development_dependency "bundler"
|
28
29
|
gem.add_development_dependency "rake"
|
29
|
-
gem.add_development_dependency "rspec"
|
30
30
|
gem.add_development_dependency "rspec-given"
|
31
|
+
gem.add_development_dependency "rubocop", "0.34.2"
|
31
32
|
end
|
@@ -2,53 +2,70 @@
|
|
2
2
|
require "spec_helper"
|
3
3
|
|
4
4
|
describe Pagerduty::HttpTransport do
|
5
|
-
Given(:http_transport) { Pagerduty::HttpTransport }
|
5
|
+
Given(:http_transport) { Pagerduty::HttpTransport.new(options) }
|
6
6
|
|
7
|
-
Given(:
|
7
|
+
Given(:options) { {} }
|
8
|
+
Given(:http) { spy }
|
9
|
+
Given(:http_proxy) { spy(new: http) }
|
8
10
|
Given { allow(http).to receive(:request).and_return(standard_response) }
|
9
|
-
Given { allow(Net::HTTP).to receive(:
|
10
|
-
Given(:post) {
|
11
|
+
Given { allow(Net::HTTP).to receive(:Proxy).and_return(http_proxy) }
|
12
|
+
Given(:post) { spy }
|
11
13
|
Given { allow(Net::HTTP::Post).to receive(:new).and_return(post) }
|
12
14
|
|
13
15
|
describe "::send_payload" do
|
14
|
-
Given(:payload) {
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
Given(:payload) {
|
17
|
+
{
|
18
|
+
event_type: "trigger",
|
19
|
+
service_key: "test-srvc-key",
|
20
|
+
description: "test-desc",
|
21
|
+
details: { key: "value" },
|
22
|
+
}
|
23
|
+
}
|
20
24
|
|
21
25
|
When(:response) { http_transport.send_payload(payload) }
|
22
26
|
|
23
27
|
describe "provides the correct request" do
|
24
28
|
Then {
|
25
29
|
expect(post).to have_received(:body=).with(
|
26
|
-
'{"event_type":"trigger",
|
30
|
+
'{"event_type":"trigger",'\
|
31
|
+
'"service_key":"test-srvc-key",'\
|
32
|
+
'"description":"test-desc",'\
|
33
|
+
'"details":{"key":"value"}}',
|
27
34
|
)
|
28
35
|
}
|
29
36
|
end
|
30
37
|
|
31
38
|
describe "handles all responses" do
|
32
|
-
|
33
39
|
context "PagerDuty successfully creates the incident" do
|
34
|
-
Given {
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
40
|
+
Given {
|
41
|
+
allow(http)
|
42
|
+
.to receive(:request)
|
43
|
+
.and_return(response_with_body(<<-JSON))
|
44
|
+
{
|
45
|
+
"status": "success",
|
46
|
+
"incident_key": "My Incident Key",
|
47
|
+
"message": "Event processed"
|
48
|
+
}
|
49
|
+
JSON
|
50
|
+
}
|
51
|
+
|
41
52
|
Then { expect(response).to include("status" => "success") }
|
42
|
-
Then {
|
53
|
+
Then {
|
54
|
+
expect(response).to include("incident_key" => "My Incident Key")
|
55
|
+
}
|
43
56
|
end
|
44
57
|
|
45
58
|
context "PagerDuty fails to create the incident" do
|
46
|
-
Given {
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
59
|
+
Given {
|
60
|
+
allow(http)
|
61
|
+
.to receive(:request)
|
62
|
+
.and_return(response_with_body(<<-JSON))
|
63
|
+
{
|
64
|
+
"status": "failure",
|
65
|
+
"message": "Event not processed"
|
66
|
+
}
|
67
|
+
JSON
|
68
|
+
}
|
52
69
|
Then { expect(response).to include("status" => "failure") }
|
53
70
|
Then { expect(response).to_not include("incident_key") }
|
54
71
|
end
|
@@ -61,9 +78,34 @@ describe Pagerduty::HttpTransport do
|
|
61
78
|
|
62
79
|
describe "HTTPS use" do
|
63
80
|
Then { expect(http).to have_received(:use_ssl=).with(true) }
|
64
|
-
Then { expect(http).to have_received(:verify_mode=).with(OpenSSL::SSL::VERIFY_PEER) }
|
65
81
|
Then { expect(http).to_not have_received(:ca_path=) }
|
66
82
|
Then { expect(http).to_not have_received(:verify_depth=) }
|
83
|
+
Then {
|
84
|
+
expect(http)
|
85
|
+
.to have_received(:verify_mode=)
|
86
|
+
.with(OpenSSL::SSL::VERIFY_PEER)
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "proxy use" do
|
91
|
+
Given(:options) {
|
92
|
+
{
|
93
|
+
proxy_host: "test-proxy-host",
|
94
|
+
proxy_port: "test-proxy-port",
|
95
|
+
proxy_username: "test-proxy-username",
|
96
|
+
proxy_password: "test-proxy-password",
|
97
|
+
}
|
98
|
+
}
|
99
|
+
Then {
|
100
|
+
expect(Net::HTTP)
|
101
|
+
.to have_received(:Proxy)
|
102
|
+
.with(
|
103
|
+
"test-proxy-host",
|
104
|
+
"test-proxy-port",
|
105
|
+
"test-proxy-username",
|
106
|
+
"test-proxy-password",
|
107
|
+
)
|
108
|
+
}
|
67
109
|
end
|
68
110
|
|
69
111
|
describe "timeouts" do
|
@@ -73,7 +115,9 @@ describe Pagerduty::HttpTransport do
|
|
73
115
|
end
|
74
116
|
|
75
117
|
def standard_response
|
76
|
-
response_with_body
|
118
|
+
response_with_body(
|
119
|
+
'{ "status": "success", "incident_key": "My Incident Key" }',
|
120
|
+
)
|
77
121
|
end
|
78
122
|
|
79
123
|
def response_with_body(body)
|
@@ -85,5 +129,4 @@ describe Pagerduty::HttpTransport do
|
|
85
129
|
def bad_request
|
86
130
|
Net::HTTPBadRequest.new 1.1, "400", "Bad Request"
|
87
131
|
end
|
88
|
-
|
89
132
|
end
|
data/spec/pagerduty_spec.rb
CHANGED
@@ -2,16 +2,19 @@
|
|
2
2
|
require "spec_helper"
|
3
3
|
|
4
4
|
describe Pagerduty do
|
5
|
-
Given(:pagerduty) { Pagerduty.new(service_key) }
|
6
|
-
Given(:service_key) { "a-test-service-key" }
|
5
|
+
Given(:pagerduty) { Pagerduty.new(service_key, options) }
|
7
6
|
|
8
|
-
Given(:
|
9
|
-
Given {
|
7
|
+
Given(:service_key) { "a-test-service-key" }
|
8
|
+
Given(:options) { { transport: transport } }
|
9
|
+
Given(:transport) { spy }
|
10
10
|
|
11
11
|
describe "#trigger" do
|
12
|
-
|
13
12
|
describe "provides the correct request" do
|
14
|
-
Given {
|
13
|
+
Given {
|
14
|
+
allow(transport)
|
15
|
+
.to receive(:send_payload)
|
16
|
+
.and_return(standard_response)
|
17
|
+
}
|
15
18
|
|
16
19
|
context "no options" do
|
17
20
|
When(:incident) { pagerduty.trigger("a-test-description") }
|
@@ -46,12 +49,37 @@ describe Pagerduty do
|
|
46
49
|
)
|
47
50
|
}
|
48
51
|
end
|
52
|
+
|
53
|
+
context "with proxy" do
|
54
|
+
Given(:options) {
|
55
|
+
{
|
56
|
+
proxy_host: "test-proxy-host",
|
57
|
+
proxy_port: "test-proxy-port",
|
58
|
+
proxy_username: "test-proxy-username",
|
59
|
+
proxy_password: "test-proxy-password",
|
60
|
+
}
|
61
|
+
}
|
62
|
+
Given {
|
63
|
+
allow(Pagerduty::HttpTransport)
|
64
|
+
.to receive(:new)
|
65
|
+
.and_return(transport)
|
66
|
+
}
|
67
|
+
When(:incident) { pagerduty.trigger("a-test-description") }
|
68
|
+
Then {
|
69
|
+
expect(Pagerduty::HttpTransport).to have_received(:new).with(
|
70
|
+
proxy_host: "test-proxy-host",
|
71
|
+
proxy_port: "test-proxy-port",
|
72
|
+
proxy_username: "test-proxy-username",
|
73
|
+
proxy_password: "test-proxy-password",
|
74
|
+
)
|
75
|
+
}
|
76
|
+
end
|
49
77
|
end
|
50
78
|
|
51
79
|
describe "handles all responses" do
|
52
|
-
|
53
80
|
context "PagerDuty successfully creates the incident" do
|
54
|
-
Given {
|
81
|
+
Given {
|
82
|
+
allow(transport).to receive(:send_payload).and_return(
|
55
83
|
"status" => "success",
|
56
84
|
"incident_key" => "My Incident Key",
|
57
85
|
"message" => "Event processed",
|
@@ -61,13 +89,14 @@ describe Pagerduty do
|
|
61
89
|
Then { expect(incident).to be_a PagerdutyIncident }
|
62
90
|
Then { incident.service_key == service_key }
|
63
91
|
Then { incident.incident_key == "My Incident Key" }
|
92
|
+
Then { incident.instance_variable_get("@transport") == transport }
|
64
93
|
end
|
65
94
|
|
66
95
|
context "PagerDuty fails to create the incident" do
|
67
96
|
Given {
|
68
97
|
allow(transport).to receive(:send_payload).and_return(
|
69
98
|
"status" => "failure",
|
70
|
-
"message" => "Event not processed"
|
99
|
+
"message" => "Event not processed",
|
71
100
|
)
|
72
101
|
}
|
73
102
|
When(:incident) { pagerduty.trigger("description") }
|
@@ -75,7 +104,11 @@ describe Pagerduty do
|
|
75
104
|
end
|
76
105
|
|
77
106
|
context "PagerDuty responds with HTTP bad request" do
|
78
|
-
Given {
|
107
|
+
Given {
|
108
|
+
allow(transport)
|
109
|
+
.to receive(:send_payload)
|
110
|
+
.and_raise(Net::HTTPServerException.new(nil, nil))
|
111
|
+
}
|
79
112
|
When(:incident) { pagerduty.trigger("description") }
|
80
113
|
Then { expect(incident).to have_raised Net::HTTPServerException }
|
81
114
|
end
|
@@ -83,21 +116,35 @@ describe Pagerduty do
|
|
83
116
|
end
|
84
117
|
|
85
118
|
describe "#get_incident" do
|
86
|
-
Given(:incident_key) { "a-test-incident-key" }
|
87
119
|
When(:incident) { pagerduty.get_incident(incident_key) }
|
88
|
-
|
89
|
-
|
90
|
-
|
120
|
+
|
121
|
+
context "a valid incident_key" do
|
122
|
+
Given(:incident_key) { "a-test-incident-key" }
|
123
|
+
Then { expect(incident).to be_a PagerdutyIncident }
|
124
|
+
Then { incident.service_key == service_key }
|
125
|
+
Then { incident.incident_key == incident_key }
|
126
|
+
Then { incident.instance_variable_get("@transport") == transport }
|
127
|
+
end
|
128
|
+
|
129
|
+
context "a nil incident_key" do
|
130
|
+
Given(:incident_key) { nil }
|
131
|
+
Then { expect(incident).to have_failed ArgumentError }
|
132
|
+
end
|
91
133
|
end
|
92
134
|
|
93
135
|
describe PagerdutyIncident do
|
94
|
-
Given(:incident) {
|
136
|
+
Given(:incident) {
|
137
|
+
PagerdutyIncident.new(service_key, incident_key, options)
|
138
|
+
}
|
95
139
|
Given(:incident_key) { "a-test-incident-key" }
|
96
140
|
|
97
141
|
describe "#acknowledge" do
|
98
|
-
|
99
142
|
describe "provides the correct request" do
|
100
|
-
Given {
|
143
|
+
Given {
|
144
|
+
allow(transport)
|
145
|
+
.to receive(:send_payload)
|
146
|
+
.and_return(standard_response)
|
147
|
+
}
|
101
148
|
|
102
149
|
context "no args" do
|
103
150
|
When(:acknowledge) { incident.acknowledge }
|
@@ -123,7 +170,9 @@ describe Pagerduty do
|
|
123
170
|
end
|
124
171
|
|
125
172
|
context "a description and details" do
|
126
|
-
When(:acknowledge) {
|
173
|
+
When(:acknowledge) {
|
174
|
+
incident.acknowledge("test-description", my: "detail")
|
175
|
+
}
|
127
176
|
Then {
|
128
177
|
expect(transport).to have_received(:send_payload).with(
|
129
178
|
event_type: "acknowledge",
|
@@ -137,17 +186,16 @@ describe Pagerduty do
|
|
137
186
|
end
|
138
187
|
|
139
188
|
describe "handles all responses" do
|
140
|
-
|
141
189
|
context "PagerDuty successfully acknowledges the incident" do
|
142
190
|
Given {
|
143
191
|
allow(transport).to receive(:send_payload).and_return(
|
144
192
|
"status" => "success",
|
145
193
|
"incident_key" => "a-test-incident-key",
|
146
|
-
"message" => "Event acknowledged"
|
194
|
+
"message" => "Event acknowledged",
|
147
195
|
)
|
148
196
|
}
|
149
197
|
When(:acknowledge) { incident.acknowledge }
|
150
|
-
Then { expect(acknowledge).to be incident}
|
198
|
+
Then { expect(acknowledge).to be incident }
|
151
199
|
end
|
152
200
|
|
153
201
|
context "PagerDuty fails to acknowledge the incident" do
|
@@ -163,7 +211,11 @@ describe Pagerduty do
|
|
163
211
|
end
|
164
212
|
|
165
213
|
context "PagerDuty responds with HTTP bad request" do
|
166
|
-
Given {
|
214
|
+
Given {
|
215
|
+
allow(transport)
|
216
|
+
.to receive(:send_payload)
|
217
|
+
.and_raise(Net::HTTPServerException.new(nil, nil))
|
218
|
+
}
|
167
219
|
When(:acknowledge) { incident.acknowledge }
|
168
220
|
Then { expect(acknowledge).to have_failed Net::HTTPServerException }
|
169
221
|
end
|
@@ -171,9 +223,12 @@ describe Pagerduty do
|
|
171
223
|
end
|
172
224
|
|
173
225
|
describe "#resolve" do
|
174
|
-
|
175
226
|
describe "provides the correct request" do
|
176
|
-
Given {
|
227
|
+
Given {
|
228
|
+
allow(transport)
|
229
|
+
.to receive(:send_payload)
|
230
|
+
.and_return(standard_response)
|
231
|
+
}
|
177
232
|
|
178
233
|
context "no args" do
|
179
234
|
When(:resolve) { incident.resolve }
|
@@ -199,7 +254,7 @@ describe Pagerduty do
|
|
199
254
|
end
|
200
255
|
|
201
256
|
context "a description and details" do
|
202
|
-
When(:resolve) { incident.resolve("test-description",
|
257
|
+
When(:resolve) { incident.resolve("test-description", my: "detail") }
|
203
258
|
Then {
|
204
259
|
expect(transport).to have_received(:send_payload).with(
|
205
260
|
event_type: "resolve",
|
@@ -213,24 +268,23 @@ describe Pagerduty do
|
|
213
268
|
end
|
214
269
|
|
215
270
|
describe "handles all responses" do
|
216
|
-
|
217
271
|
context "PagerDuty successfully resolves the incident" do
|
218
272
|
Given {
|
219
273
|
allow(transport).to receive(:send_payload).and_return(
|
220
274
|
"status" => "success",
|
221
275
|
"incident_key" => "a-test-incident-key",
|
222
|
-
"message" => "Event resolved"
|
276
|
+
"message" => "Event resolved",
|
223
277
|
)
|
224
278
|
}
|
225
279
|
When(:resolve) { incident.resolve }
|
226
|
-
Then { expect(resolve).to be incident}
|
280
|
+
Then { expect(resolve).to be incident }
|
227
281
|
end
|
228
282
|
|
229
283
|
context "PagerDuty fails to create the incident" do
|
230
284
|
Given {
|
231
285
|
allow(transport).to receive(:send_payload).and_return(
|
232
286
|
"status" => "failure",
|
233
|
-
"message" => "Event not resolved"
|
287
|
+
"message" => "Event not resolved",
|
234
288
|
)
|
235
289
|
}
|
236
290
|
When(:resolve) { incident.resolve }
|
@@ -238,7 +292,11 @@ describe Pagerduty do
|
|
238
292
|
end
|
239
293
|
|
240
294
|
context "PagerDuty responds with HTTP bad request" do
|
241
|
-
Given {
|
295
|
+
Given {
|
296
|
+
allow(transport)
|
297
|
+
.to receive(:send_payload)
|
298
|
+
.and_raise(Net::HTTPServerException.new(nil, nil))
|
299
|
+
}
|
242
300
|
When(:resolve) { incident.resolve }
|
243
301
|
Then { expect(resolve).to have_failed Net::HTTPServerException }
|
244
302
|
end
|
@@ -247,7 +305,11 @@ describe Pagerduty do
|
|
247
305
|
|
248
306
|
describe "#trigger" do
|
249
307
|
describe "provides the correct request" do
|
250
|
-
Given {
|
308
|
+
Given {
|
309
|
+
allow(transport)
|
310
|
+
.to receive(:send_payload)
|
311
|
+
.and_return(standard_response)
|
312
|
+
}
|
251
313
|
|
252
314
|
context "no options" do
|
253
315
|
Given(:incident_key) { "instance incident_key" }
|
@@ -263,7 +325,12 @@ describe Pagerduty do
|
|
263
325
|
end
|
264
326
|
|
265
327
|
context "with incident_key option" do
|
266
|
-
When(:trigger) {
|
328
|
+
When(:trigger) {
|
329
|
+
incident.trigger(
|
330
|
+
"description",
|
331
|
+
incident_key: "method param incident_key",
|
332
|
+
)
|
333
|
+
}
|
267
334
|
Then {
|
268
335
|
expect(transport).to have_received(:send_payload).with(
|
269
336
|
incident_key: "method param incident_key",
|
@@ -286,7 +353,9 @@ describe Pagerduty do
|
|
286
353
|
Given(:api_response) { double }
|
287
354
|
Given(:message) { "a test error message" }
|
288
355
|
|
289
|
-
When(:pagerduty_exception) {
|
356
|
+
When(:pagerduty_exception) {
|
357
|
+
PagerdutyException.new(pagerduty_instance, api_response, message)
|
358
|
+
}
|
290
359
|
|
291
360
|
Then { pagerduty_exception.pagerduty_instance == pagerduty_instance }
|
292
361
|
Then { pagerduty_exception.api_response == api_response }
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require "pagerduty"
|
3
|
-
require "rspec/given"
|
4
|
-
|
5
2
|
Dir[File.expand_path("../support/**/*.rb", __FILE__)].each { |f| require f }
|
6
3
|
|
4
|
+
Warnings.silenced do
|
5
|
+
require "rspec/given"
|
6
|
+
require "json"
|
7
|
+
require "net/https"
|
8
|
+
end
|
9
|
+
|
10
|
+
require "pagerduty"
|
11
|
+
|
7
12
|
RSpec.configure do |config|
|
8
13
|
config.color = true
|
9
14
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pagerduty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Charlie Somerville
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-01-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -29,16 +29,16 @@ dependencies:
|
|
29
29
|
name: bundler
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - "
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
34
|
+
version: '0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - "
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
41
|
+
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: rake
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
|
-
name: rspec
|
57
|
+
name: rspec-given
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
60
|
- - ">="
|
@@ -68,19 +68,19 @@ dependencies:
|
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
71
|
+
name: rubocop
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - '='
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
76
|
+
version: 0.34.2
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- -
|
81
|
+
- - '='
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version:
|
83
|
+
version: 0.34.2
|
84
84
|
description: Provides a lightweight interface for calling the PagerDuty Integration
|
85
85
|
API
|
86
86
|
email:
|
@@ -91,6 +91,7 @@ extensions: []
|
|
91
91
|
extra_rdoc_files: []
|
92
92
|
files:
|
93
93
|
- ".gitignore"
|
94
|
+
- ".rubocop.yml"
|
94
95
|
- ".travis.yml"
|
95
96
|
- Gemfile
|
96
97
|
- LICENSE.txt
|
@@ -104,6 +105,7 @@ files:
|
|
104
105
|
- spec/pagerduty/http_transport_spec.rb
|
105
106
|
- spec/pagerduty_spec.rb
|
106
107
|
- spec/spec_helper.rb
|
108
|
+
- spec/support/warnings.rb
|
107
109
|
homepage: http://github.com/envato/pagerduty
|
108
110
|
licenses:
|
109
111
|
- MIT
|
@@ -126,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
126
128
|
version: '0'
|
127
129
|
requirements: []
|
128
130
|
rubyforge_project:
|
129
|
-
rubygems_version: 2.
|
131
|
+
rubygems_version: 2.5.1
|
130
132
|
signing_key:
|
131
133
|
specification_version: 4
|
132
134
|
summary: Pagerduty Integration API client library
|
@@ -134,3 +136,4 @@ test_files:
|
|
134
136
|
- spec/pagerduty/http_transport_spec.rb
|
135
137
|
- spec/pagerduty_spec.rb
|
136
138
|
- spec/spec_helper.rb
|
139
|
+
- spec/support/warnings.rb
|