pagerduty_cli 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +53 -0
- data/Rakefile +2 -0
- data/bin/pagerduty-resolve +8 -0
- data/bin/pagerduty-trigger +8 -0
- data/lib/pagerduty_cli.rb +7 -0
- data/lib/pagerduty_cli/common.rb +61 -0
- data/lib/pagerduty_cli/resolve.rb +37 -0
- data/lib/pagerduty_cli/trigger.rb +82 -0
- data/lib/pagerduty_cli/version.rb +4 -0
- data/pagerduty_cli.gemspec +27 -0
- data/spec/pagerduty_cli_spec.rb +174 -0
- data/spec/spec_helper.rb +14 -0
- metadata +106 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0d4f3f309ba8e989ee26ce922e3a4fd79f6836fc
|
4
|
+
data.tar.gz: 6ad7430c264960dd7f97079ef352dc85b0f47405
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: daff2bce60dfda39f8557ccc209ed98ba29c2c8675c7f41aea1e426fd2a0c63bbddcdadf2ee85ff251da9fd71cf4c4b91068dfd2ebad26bc9fa4476d5b9f020b
|
7
|
+
data.tar.gz: 8093c58396762102b66f3a56862f48f7a838dccd40d2c2996cd18a5ffcb3700f9dd2a0d14bce003fa511c796f9cab03585ec714e246b65a8c927ed080afd889a
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Justin Dossey
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# PagerdutyCli
|
2
|
+
|
3
|
+
A Ruby-based CLI to PagerDuty. Supports triggers and resolves.
|
4
|
+
|
5
|
+
Inspired by Pinterest's Python implementation:
|
6
|
+
https://github.com/pinterest/pagerduty-monit
|
7
|
+
|
8
|
+
Requires Ruby >= 1.9.3.
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
Add to your Gemfile:
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
gem 'pagerduty_cli'
|
16
|
+
```
|
17
|
+
|
18
|
+
And then execute:
|
19
|
+
|
20
|
+
$ bundle
|
21
|
+
|
22
|
+
Or install it yourself as:
|
23
|
+
|
24
|
+
$ gem install pagerduty_cli
|
25
|
+
|
26
|
+
## Usage
|
27
|
+
|
28
|
+
Trigger an event with
|
29
|
+
```
|
30
|
+
pagerduty-trigger -e EVENT_NAME
|
31
|
+
```
|
32
|
+
|
33
|
+
See all options with:
|
34
|
+
```
|
35
|
+
pagerduty-trigger -h
|
36
|
+
```
|
37
|
+
|
38
|
+
Resolve an event with
|
39
|
+
```
|
40
|
+
pagerduty-resolve -e EVENT_NAME
|
41
|
+
```
|
42
|
+
See all options with:
|
43
|
+
```
|
44
|
+
pagerduty-resolve -h
|
45
|
+
```
|
46
|
+
|
47
|
+
## Contributing
|
48
|
+
|
49
|
+
1. Fork it ( https://github.com/[my-github-username]/pagerduty_cli/fork )
|
50
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
51
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
52
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
53
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# Module for common functionality to pagerduty CLI classes
|
2
|
+
module PagerdutyCli
|
3
|
+
# Common functionality to pagerduty interaction
|
4
|
+
module Common
|
5
|
+
API_KEY_FILE = '/etc/pagerduty_api.key'
|
6
|
+
def load_data
|
7
|
+
@api_key = File.open(@options[:api_key_file]).read.chomp
|
8
|
+
rescue Errno::ENOENT, Errno::EPERM
|
9
|
+
croak("Could not open PD API key file at #{@options[:api_key_file]}.")
|
10
|
+
end
|
11
|
+
|
12
|
+
def croak(message)
|
13
|
+
$stderr.puts "#{@me} Error: #{message} Exiting."
|
14
|
+
exit 1
|
15
|
+
end
|
16
|
+
|
17
|
+
def warn(message)
|
18
|
+
$stderr.puts "#{@me} Warning: #{message}"
|
19
|
+
end
|
20
|
+
|
21
|
+
def incident_key
|
22
|
+
event_key = "#{@options[:host]}:#{@options[:event]}"
|
23
|
+
Digest::SHA1.hexdigest(event_key)
|
24
|
+
end
|
25
|
+
|
26
|
+
# return the name for our incident state file.
|
27
|
+
def incident_file
|
28
|
+
File.join(@options[:tmpdir], "pagerduty-#{incident_key}")
|
29
|
+
end
|
30
|
+
|
31
|
+
# Disabling the MethodLength cop here because any reduction would reduce
|
32
|
+
# readability.
|
33
|
+
# rubocop:disable MethodLength
|
34
|
+
def parse_common_options(opts)
|
35
|
+
opts.banner = "Usage: #{@me} [options]"
|
36
|
+
@options ||= {}
|
37
|
+
@options.merge!(host: ENV['HOSTNAME'],
|
38
|
+
api_key_file: API_KEY_FILE,
|
39
|
+
tmpdir: '/tmp')
|
40
|
+
opts.on('-H', '--host HOST', 'Report from the hostname given') do |h|
|
41
|
+
@options[:host] = h
|
42
|
+
end
|
43
|
+
opts.on('-k', '--keyfile KEYFILE',
|
44
|
+
'Use the key specified in file KEYFILE') do |kf|
|
45
|
+
@options[:api_key_file] = kf
|
46
|
+
end
|
47
|
+
opts.on('-e', '--event EVENT', 'Report the event given') do |e|
|
48
|
+
@options[:event] = e
|
49
|
+
end
|
50
|
+
opts.on('-t', '--tmpdir PATH',
|
51
|
+
'location for incident files') do |tmp|
|
52
|
+
@options[:tmpdir] = tmp
|
53
|
+
end
|
54
|
+
opts.on_tail('-h', '--help', 'Show this message') do
|
55
|
+
$stderr.puts opts
|
56
|
+
exit
|
57
|
+
end
|
58
|
+
end
|
59
|
+
# rubocop:enable MethodLength
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Class to send resolutions to PagerDuty.
|
2
|
+
module PagerdutyCli
|
3
|
+
# Send a resolve to PagerDuty.
|
4
|
+
class Resolve
|
5
|
+
def initialize(args)
|
6
|
+
@me = 'pagerduty_resolve'
|
7
|
+
parse_opts(args)
|
8
|
+
load_data
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.resolve(args)
|
12
|
+
new(args).send_resolve
|
13
|
+
end
|
14
|
+
|
15
|
+
def send_resolve
|
16
|
+
Pagerduty.new(@api_key).get_incident(incident_key).resolve
|
17
|
+
remove_incident_file
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
include PagerdutyCli::Common
|
23
|
+
|
24
|
+
def parse_opts(args)
|
25
|
+
opt_parser = OptionParser.new do |opts|
|
26
|
+
parse_common_options(opts)
|
27
|
+
end
|
28
|
+
opt_parser.parse! args
|
29
|
+
end
|
30
|
+
|
31
|
+
def remove_incident_file
|
32
|
+
File.delete(incident_file)
|
33
|
+
rescue Errno::ENOENT
|
34
|
+
warn("No incident file found at #{incident_file}")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'pagerduty'
|
5
|
+
require 'digest/sha1'
|
6
|
+
|
7
|
+
require_relative 'common'
|
8
|
+
|
9
|
+
# Send a PagerDuty alert.
|
10
|
+
module PagerdutyCli
|
11
|
+
# Send a trigger to PagerDuty
|
12
|
+
class Trigger
|
13
|
+
def initialize(args)
|
14
|
+
@me = 'pagerduty_trigger'
|
15
|
+
parse_opts(args)
|
16
|
+
load_data
|
17
|
+
return unless @options[:force] || !incident_is_too_fresh?
|
18
|
+
touch_incident_file unless @options[:no_touch]
|
19
|
+
end
|
20
|
+
|
21
|
+
class << self
|
22
|
+
def trigger(args)
|
23
|
+
new(args).send_trigger
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def send_trigger
|
28
|
+
Pagerduty.new(@api_key).trigger(incident_description,
|
29
|
+
incident_key: incident_key,
|
30
|
+
client: @options[:host])
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
include PagerdutyCli::Common
|
36
|
+
|
37
|
+
# Disabling the MethodLength cop here because any reduction would reduce
|
38
|
+
# readability.
|
39
|
+
# rubocop:disable MethodLength
|
40
|
+
def parse_opts(args)
|
41
|
+
# default options
|
42
|
+
@options = {}
|
43
|
+
@options[:interval] = (4 * 60 * 60 + 1)
|
44
|
+
|
45
|
+
opt_parser = OptionParser.new do |opts|
|
46
|
+
parse_common_options(opts)
|
47
|
+
opts.on('-f', '--force',
|
48
|
+
'Force the event to process, even if not fresh') do
|
49
|
+
@options[:force] = true
|
50
|
+
end
|
51
|
+
opts.on('-n', '--no-incident',
|
52
|
+
'Do not record sending this incident') do
|
53
|
+
@options[:no_touch] = true
|
54
|
+
end
|
55
|
+
opts.on('-i', '--touch-interval INTERVAL',
|
56
|
+
'Specify freshness interval in seconds') do |interval|
|
57
|
+
@options[:interval] = interval.to_i
|
58
|
+
end
|
59
|
+
end
|
60
|
+
opt_parser.parse! args
|
61
|
+
end
|
62
|
+
# rubocop:enable MethodLength
|
63
|
+
|
64
|
+
# return true if this incident has been reported in the past 4 hrs 1 min
|
65
|
+
def incident_is_too_fresh?
|
66
|
+
cutoff = Time.now - @options[:interval]
|
67
|
+
File.exist?(incident_file) && File.mtime(incident_file) > cutoff
|
68
|
+
end
|
69
|
+
|
70
|
+
def incident_description
|
71
|
+
"#{@options[:event]} failed on #{@options[:host]}"
|
72
|
+
end
|
73
|
+
|
74
|
+
def touch_incident_file
|
75
|
+
File.open(incident_file, 'a') do |f|
|
76
|
+
f.puts "#{Time.now}: #{incident_description}"
|
77
|
+
end
|
78
|
+
rescue Errno::EPERM
|
79
|
+
croak("Could not write incident file #{incident_file.inspect}")
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'pagerduty_cli/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'pagerduty_cli'
|
8
|
+
spec.version = PagerdutyCli::VERSION
|
9
|
+
spec.authors = ['Justin Dossey']
|
10
|
+
spec.email = ['justin.dossey@newcontext.com']
|
11
|
+
spec.summary = 'ruby CLI for PagerDuty API'
|
12
|
+
spec.description = 'ruby CLI for PagerDuty API. '\
|
13
|
+
'Supports sending triggers and resolves.'
|
14
|
+
spec.homepage = 'https://github.com/justindossey/pagerduty_cli'
|
15
|
+
spec.license = 'MIT'
|
16
|
+
|
17
|
+
spec.bindir = 'bin'
|
18
|
+
spec.files = `git ls-files -z`.split("\x0")
|
19
|
+
spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
|
20
|
+
spec.test_files = spec.files.grep(/^(test|spec|features)\//)
|
21
|
+
spec.require_paths = ['lib']
|
22
|
+
|
23
|
+
spec.add_runtime_dependency 'pagerduty', '~> 2.0.0'
|
24
|
+
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.7'
|
26
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
27
|
+
end
|
@@ -0,0 +1,174 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe PagerdutyCli do
|
5
|
+
it 'defines the PagerdutyCli module' do
|
6
|
+
expect(PagerdutyCli).to be_a(Module)
|
7
|
+
end
|
8
|
+
it 'defines the PagerdutyCli::Common module' do
|
9
|
+
expect(PagerdutyCli::Common).to be_a(Module)
|
10
|
+
end
|
11
|
+
it 'croaks properly' do
|
12
|
+
# stub for testing the cli
|
13
|
+
stub_actor = StubPagerdutyCliActor.new
|
14
|
+
out = 'Stub Actor Error: hi Exiting.'
|
15
|
+
allow($stderr).to receive(:puts).with(out).and_return(out)
|
16
|
+
expect { stub_actor.croak('hi') }.to raise_error(SystemExit)
|
17
|
+
expect($stderr).to have_received(:puts).with(out)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'warns properly' do
|
21
|
+
stub_actor = StubPagerdutyCliActor.new
|
22
|
+
out = 'Stub Actor Warning: hi'
|
23
|
+
allow($stderr).to receive(:puts).with(out).and_return(out)
|
24
|
+
stub_actor.warn('hi')
|
25
|
+
expect($stderr).to have_received(:puts).with(out)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'generates the same key for triggers and resolves' do
|
29
|
+
stub_actor = StubPagerdutyCliActor.new
|
30
|
+
stub_actor.options[:host] = 'foo'
|
31
|
+
stub_actor.options[:event] = 'bar'
|
32
|
+
allow(Digest::SHA1).to receive(:hexdigest).with('foo:bar')
|
33
|
+
stub_actor.incident_key
|
34
|
+
expect(Digest::SHA1).to have_received(:hexdigest).with('foo:bar')
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'generates a valid incident filename' do
|
38
|
+
stub_actor = StubPagerdutyCliActor.new
|
39
|
+
stub_actor.options[:host] = 'foo'
|
40
|
+
stub_actor.options[:event] = 'bar'
|
41
|
+
stub_actor.options[:tmpdir] = '/FAKETEMP'
|
42
|
+
allow(stub_actor).to receive(:incident_key).and_return('x')
|
43
|
+
expect(stub_actor.incident_file).to eq('/FAKETEMP/pagerduty-x')
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'bails when no API key is loaded' do
|
47
|
+
stub_actor = StubPagerdutyCliActor.new
|
48
|
+
stub_actor.options[:api_key_file] = 'nonexistent_file'
|
49
|
+
allow(stub_actor).to receive(:croak)
|
50
|
+
stub_actor.load_data
|
51
|
+
expect(stub_actor).to have_received(:croak)
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'defines the PagerdutyCli::Trigger class' do
|
55
|
+
expect(PagerdutyCli::Trigger).to be_a(Class)
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'processes common PagerdutyCli options' do
|
59
|
+
args = %w(-H foo -k bar -e baz -t /var/tmp)
|
60
|
+
stub_actor = StubPagerdutyCliActor.new
|
61
|
+
stub_optionparser = OptionParser.new
|
62
|
+
stub_actor.parse_common_options(stub_optionparser)
|
63
|
+
stub_optionparser.parse!(args)
|
64
|
+
|
65
|
+
expect(stub_actor.options[:host]).to eq('foo')
|
66
|
+
expect(stub_actor.options[:api_key_file]).to eq('bar')
|
67
|
+
expect(stub_actor.options[:tmpdir]).to eq('/var/tmp')
|
68
|
+
expect(stub_actor.options[:event]).to eq('baz')
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'supports correct defaults' do
|
72
|
+
args = %w(-e foo)
|
73
|
+
stub_actor = StubPagerdutyCliActor.new
|
74
|
+
stub_optionparser = OptionParser.new
|
75
|
+
stub_actor.parse_common_options(stub_optionparser)
|
76
|
+
stub_optionparser.parse!(args)
|
77
|
+
expect(stub_actor.options[:host]).to eq(ENV['HOSTNAME'])
|
78
|
+
expect(stub_actor.options[:api_key_file])
|
79
|
+
.to eq(PagerdutyCli::Common::API_KEY_FILE)
|
80
|
+
expect(stub_actor.options[:tmpdir]).to eq('/tmp')
|
81
|
+
expect(stub_actor.options[:event]).to eq('foo')
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'prints help and exits with -h' do
|
85
|
+
args = %w(-h)
|
86
|
+
stub_actor = StubPagerdutyCliActor.new
|
87
|
+
stub_optionparser = OptionParser.new
|
88
|
+
stub_actor.parse_common_options(stub_optionparser)
|
89
|
+
allow($stderr).to receive(:puts)
|
90
|
+
expect { stub_optionparser.parse!(args) }.to raise_error(SystemExit)
|
91
|
+
expect($stderr).to have_received(:puts)
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'processes trigger options' do
|
95
|
+
args = %w(-f -n -i 600 -e foo)
|
96
|
+
allow_any_instance_of(PagerdutyCli::Trigger).to receive(:load_data)
|
97
|
+
allow_any_instance_of(PagerdutyCli::Trigger)
|
98
|
+
.to receive(:touch_incident_file)
|
99
|
+
allow_any_instance_of(PagerdutyCli::Trigger)
|
100
|
+
.to receive(:incident_is_too_fresh?).and_return(true)
|
101
|
+
PagerdutyCli::Trigger.class_eval('attr_reader :options')
|
102
|
+
trigger = PagerdutyCli::Trigger.new(args)
|
103
|
+
|
104
|
+
expect(trigger.options).to be_a(Hash)
|
105
|
+
expect(trigger.options[:force]).to be_truthy
|
106
|
+
expect(trigger.options[:no_touch]).to be_truthy
|
107
|
+
expect(trigger.options[:interval]).to eq(600)
|
108
|
+
expect(trigger.options[:event]).to eq('foo')
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'places tmp files in the right location' do
|
112
|
+
args = %w(-e foo)
|
113
|
+
allow_any_instance_of(PagerdutyCli::Trigger)
|
114
|
+
.to receive(:incident_is_too_fresh?).and_return(false)
|
115
|
+
allow_any_instance_of(PagerdutyCli::Trigger).to receive(:load_data)
|
116
|
+
trigger = PagerdutyCli::Trigger.new(args)
|
117
|
+
string_buffer = StringIO.new
|
118
|
+
allow(File).to receive(:open).and_return(string_buffer)
|
119
|
+
allow(trigger).to receive(:incident_key).and_return('abc')
|
120
|
+
trigger.send(:touch_incident_file)
|
121
|
+
expect(File).to have_received(:open).with('/tmp/pagerduty-abc', 'a')
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'allows triggers to be sent via class method' do
|
125
|
+
args = %w(-e foo)
|
126
|
+
allow_any_instance_of(PagerdutyCli::Trigger).to receive(:load_data)
|
127
|
+
allow_any_instance_of(PagerdutyCli::Trigger)
|
128
|
+
.to receive(:send_trigger).and_return('bar')
|
129
|
+
|
130
|
+
expect(PagerdutyCli::Trigger.trigger(args)).to eq('bar')
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'defines the PagerdutyCli::Resolve class' do
|
134
|
+
expect(PagerdutyCli::Resolve).to be_a(Class)
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'processes all options to resolve' do
|
138
|
+
args = %w(-H foo -k bar -e baz -t /var/tmp)
|
139
|
+
allow_any_instance_of(PagerdutyCli::Resolve).to receive(:load_data)
|
140
|
+
PagerdutyCli::Resolve.class_eval('attr_reader :options')
|
141
|
+
resolver = PagerdutyCli::Resolve.new(args)
|
142
|
+
expect(resolver.options[:host]).to eq('foo')
|
143
|
+
expect(resolver.options[:api_key_file]).to eq('bar')
|
144
|
+
expect(resolver.options[:event]).to eq('baz')
|
145
|
+
expect(resolver.options[:tmpdir]).to eq('/var/tmp')
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'removes tmp files in the right location' do
|
149
|
+
# stub pagerduty API so we can resolve without getting too deep
|
150
|
+
class FakePagerDuty
|
151
|
+
end
|
152
|
+
my_fake_pagerduty = FakePagerDuty.new
|
153
|
+
allow(my_fake_pagerduty).to receive(:resolve).and_return(true)
|
154
|
+
|
155
|
+
allow_any_instance_of(Pagerduty)
|
156
|
+
.to receive(:get_incident).and_return(my_fake_pagerduty)
|
157
|
+
allow_any_instance_of(PagerdutyCli::Resolve)
|
158
|
+
.to receive(:incident_file).and_return('foo')
|
159
|
+
allow_any_instance_of(PagerdutyCli::Resolve).to receive(:load_data)
|
160
|
+
allow(File).to receive(:delete).with('foo').and_return(true)
|
161
|
+
PagerdutyCli::Resolve.resolve(%w(-e abc))
|
162
|
+
expect(File).to have_received(:delete).with('foo')
|
163
|
+
expect(my_fake_pagerduty).to have_received(:resolve)
|
164
|
+
end
|
165
|
+
|
166
|
+
it 'allows resolves to be sent via class method' do
|
167
|
+
args = %w(-e foo)
|
168
|
+
allow_any_instance_of(PagerdutyCli::Resolve).to receive(:load_data)
|
169
|
+
allow_any_instance_of(PagerdutyCli::Resolve)
|
170
|
+
.to receive(:send_resolve).and_return('bar')
|
171
|
+
expect(PagerdutyCli::Resolve.resolve(args)).to eq('bar')
|
172
|
+
end
|
173
|
+
|
174
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pagerduty_cli
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Justin Dossey
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-12-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: pagerduty
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.7'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.7'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
description: ruby CLI for PagerDuty API. Supports sending triggers and resolves.
|
56
|
+
email:
|
57
|
+
- justin.dossey@newcontext.com
|
58
|
+
executables:
|
59
|
+
- pagerduty-resolve
|
60
|
+
- pagerduty-trigger
|
61
|
+
extensions: []
|
62
|
+
extra_rdoc_files: []
|
63
|
+
files:
|
64
|
+
- ".gitignore"
|
65
|
+
- Gemfile
|
66
|
+
- LICENSE.txt
|
67
|
+
- README.md
|
68
|
+
- Rakefile
|
69
|
+
- bin/pagerduty-resolve
|
70
|
+
- bin/pagerduty-trigger
|
71
|
+
- lib/pagerduty_cli.rb
|
72
|
+
- lib/pagerduty_cli/common.rb
|
73
|
+
- lib/pagerduty_cli/resolve.rb
|
74
|
+
- lib/pagerduty_cli/trigger.rb
|
75
|
+
- lib/pagerduty_cli/version.rb
|
76
|
+
- pagerduty_cli.gemspec
|
77
|
+
- spec/pagerduty_cli_spec.rb
|
78
|
+
- spec/spec_helper.rb
|
79
|
+
homepage: https://github.com/justindossey/pagerduty_cli
|
80
|
+
licenses:
|
81
|
+
- MIT
|
82
|
+
metadata: {}
|
83
|
+
post_install_message:
|
84
|
+
rdoc_options: []
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
requirements: []
|
98
|
+
rubyforge_project:
|
99
|
+
rubygems_version: 2.4.1
|
100
|
+
signing_key:
|
101
|
+
specification_version: 4
|
102
|
+
summary: ruby CLI for PagerDuty API
|
103
|
+
test_files:
|
104
|
+
- spec/pagerduty_cli_spec.rb
|
105
|
+
- spec/spec_helper.rb
|
106
|
+
has_rdoc:
|