nagiosplugin 1.3.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +15 -3
- data/.rbenv-version +1 -0
- data/Gemfile +2 -2
- data/{LICENSE → LICENSE.txt} +3 -1
- data/README.md +91 -21
- data/Rakefile +3 -3
- data/features/nagiosplugin_usage.feature +23 -16
- data/lib/nagiosplugin.rb +0 -1
- data/lib/nagiosplugin/plugin.rb +31 -92
- data/lib/nagiosplugin/version.rb +1 -1
- data/nagiosplugin.gemspec +22 -20
- data/spec/nagiosplugin/plugin_spec.rb +99 -81
- metadata +111 -118
- data/examples/check_file_exists.rb +0 -62
- data/examples/check_perfdata.rb +0 -30
- data/features/steps/dev_steps.rb +0 -17
- data/lib/nagiosplugin/default_options.rb +0 -78
- data/lib/nagiosplugin/perfdata.rb +0 -40
- data/lib/nagiosplugin/status_error.rb +0 -32
- data/spec/nagiosplugin/status_error_spec.rb +0 -33
data/.gitignore
CHANGED
data/.rbenv-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.9.3-p385
|
data/Gemfile
CHANGED
data/{LICENSE → LICENSE.txt}
RENAMED
data/README.md
CHANGED
@@ -1,51 +1,121 @@
|
|
1
1
|
# NagiosPlugin
|
2
2
|
|
3
|
-
The one [Nagios](http://www.nagios.org/) Plugin framework, forged in the
|
3
|
+
The one [Nagios](http://www.nagios.org/) Plugin framework, forged in the
|
4
|
+
fires of Mount Doom.
|
5
|
+
|
6
|
+
[](http://travis-ci.org/bjoernalbers/nagiosplugin)
|
8
|
+
|
9
|
+
**NOTE: The API has changed since version 2.0 (see issue
|
10
|
+
[#2](https://github.com/bjoernalbers/nagiosplugin/issues/2))!!!**
|
4
11
|
|
5
|
-
[](http://travis-ci.org/bjoernalbers/nagiosplugin)
|
6
12
|
|
7
13
|
## Installation
|
8
14
|
|
9
|
-
|
15
|
+
Via bundler: Add this to your Gemfile and run `bundle install`:
|
16
|
+
|
17
|
+
```Ruby
|
18
|
+
gem 'nagiosplugin'
|
19
|
+
```
|
20
|
+
|
21
|
+
Manually via Rubygems: Run `gem install nagiosplugin`.
|
22
|
+
|
10
23
|
|
11
24
|
## Usage
|
12
25
|
|
13
|
-
|
26
|
+
Writing your custom plugin is really simple:
|
27
|
+
|
28
|
+
### Step 1: Describe when something is critical, warning and ok.
|
29
|
+
|
30
|
+
Create your subclass from `NagiosPlugin::Plugin` and define these
|
31
|
+
instance methods to determine the status:
|
32
|
+
|
33
|
+
```Ruby
|
34
|
+
require 'nagiosplugin'
|
35
|
+
|
36
|
+
class MyFancyPlugin < NagiosPlugin::Plugin
|
37
|
+
def critical?
|
38
|
+
# Enter your code here (returns true when critical, else false).
|
39
|
+
end
|
40
|
+
|
41
|
+
def warning?
|
42
|
+
# Enter your code here (returns true when warning, else false).
|
43
|
+
end
|
44
|
+
|
45
|
+
def ok?
|
46
|
+
# Enter your code... you get the idea.
|
47
|
+
end
|
48
|
+
end
|
49
|
+
```
|
14
50
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
(The status methods will exit immediately by raising a corresponding StatusError.)
|
51
|
+
**Please keep in mind that the "worst" status always wins, i.e. if both
|
52
|
+
`critical?` and `warning?` are true then the status would be critical
|
53
|
+
(if none is true, then the status would be unknown of course)!**
|
19
54
|
|
20
|
-
|
21
|
-
|
55
|
+
You may use your `initialize` method to setup check data (NagiosPlugin
|
56
|
+
doesn't use that either), parse CLI options, etc.
|
22
57
|
|
23
|
-
### Step 2
|
58
|
+
### Step 2: Provide some context via status message (optionally).
|
24
59
|
|
25
|
-
|
26
|
-
|
60
|
+
Ask yourself what might be important to know (and fits into a text
|
61
|
+
message) when Nagios just send you an alert in the middle of the night.
|
62
|
+
|
63
|
+
```Ruby
|
64
|
+
def message
|
65
|
+
# Create an info string (this will be printed after the
|
66
|
+
# status on stdout).
|
67
|
+
# Service name, status and message should be longer than 78 chars!!!
|
68
|
+
end
|
69
|
+
```
|
70
|
+
|
71
|
+
### Step 3: Perform the actual check.
|
72
|
+
|
73
|
+
In your binary then call `check!` on your class and you're done:
|
74
|
+
|
75
|
+
```Ruby
|
76
|
+
MyFancyPlugin.new.check!
|
77
|
+
```
|
78
|
+
|
79
|
+
This will output the check result and exits in compliance with the
|
80
|
+
official
|
81
|
+
[Nagios plug-in development
|
27
82
|
guidelines](http://nagiosplug.sourceforge.net/developer-guidelines.html)
|
28
83
|
|
29
|
-
|
84
|
+
If anything funky happens in your code: NagiosPlugin does a "blind
|
85
|
+
rescue mission" and transforms any execptions to an unknown status.
|
86
|
+
|
87
|
+
|
88
|
+
## One more thing...
|
89
|
+
|
90
|
+
The API changed completely compared to v1.3 as well as the default command
|
91
|
+
line options (they are gone).
|
92
|
+
I suggest that you use 3rd party [CLI Option
|
93
|
+
Parsers](https://www.ruby-toolbox.com/categories/CLI_Option_Parsers)
|
94
|
+
because everyone has different preferences on this.
|
95
|
+
|
96
|
+
Please let me know if you find this usefull or if you want to contribute!
|
30
97
|
|
31
|
-
Profit... and maybe also fun.
|
32
98
|
|
33
99
|
## Note on Patches/Pull Requests
|
34
100
|
|
35
|
-
* Fork the project and run `bundle install` to resolve all development
|
36
|
-
|
101
|
+
* Fork the project and run `bundle install` to resolve all development
|
102
|
+
dependencies.
|
103
|
+
* Add specs and/or features for it. This is important so I don't break
|
104
|
+
it in a future version unintentionally.
|
37
105
|
* Make your feature addition or bug fix.
|
38
106
|
* Commit, do not mess with the Rakefile or gemspec.
|
39
|
-
(If you want to have your own version, that is fine but bump version
|
107
|
+
(If you want to have your own version, that is fine but bump version
|
108
|
+
in a commit by itself I can ignore when I pull.)
|
40
109
|
* Send me a pull request. Bonus points for topic branches.
|
41
110
|
|
111
|
+
|
42
112
|
## Acknowledgments
|
43
113
|
|
44
114
|
Thanks to the following contributors for improving NagiosPlugin:
|
45
115
|
|
46
|
-
* [szuecs (Sandor Szücs)](https://github.com/szuecs)
|
47
|
-
|
116
|
+
* [szuecs (Sandor Szücs)](https://github.com/szuecs)
|
117
|
+
|
48
118
|
|
49
119
|
## Copyright
|
50
120
|
|
51
|
-
Copyright (c) 2011-
|
121
|
+
Copyright (c) 2011-2013 Björn Albers. See LICENSE for details.
|
data/Rakefile
CHANGED
@@ -2,13 +2,13 @@ require 'bundler/gem_tasks'
|
|
2
2
|
|
3
3
|
require 'cucumber/rake/task'
|
4
4
|
Cucumber::Rake::Task.new(:features) do |t|
|
5
|
-
|
5
|
+
t.cucumber_opts = '--format pretty'
|
6
6
|
end
|
7
7
|
|
8
8
|
require 'rspec/core/rake_task'
|
9
9
|
RSpec::Core::RakeTask.new do |t|
|
10
|
-
|
11
|
-
|
10
|
+
t.rspec_opts = %w[--color]
|
11
|
+
t.pattern = './spec/**/*_spec.rb'
|
12
12
|
end
|
13
13
|
|
14
14
|
task :default => :spec
|
@@ -5,24 +5,31 @@ Feature: NagiosPlugin Usage
|
|
5
5
|
I want to use the one NagiosPlugin framework
|
6
6
|
|
7
7
|
Scenario Outline: Subclass from NagiosPlugin
|
8
|
-
Given a file named "
|
8
|
+
Given a file named "check_fancy.rb" with:
|
9
9
|
"""
|
10
10
|
require 'nagiosplugin'
|
11
11
|
|
12
|
-
class
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
12
|
+
class FancyPlugin < NagiosPlugin::Plugin
|
13
|
+
def critical?
|
14
|
+
<critical>
|
15
|
+
end
|
16
|
+
|
17
|
+
def warning?
|
18
|
+
<warning>
|
19
|
+
end
|
20
|
+
|
21
|
+
def ok?
|
22
|
+
<ok>
|
23
|
+
end
|
24
|
+
|
25
|
+
def message
|
26
|
+
'answer is 42'
|
20
27
|
end
|
21
28
|
end
|
22
29
|
|
23
|
-
|
30
|
+
FancyPlugin.new.check!
|
24
31
|
"""
|
25
|
-
When I run `ruby
|
32
|
+
When I run `ruby check_fancy.rb`
|
26
33
|
Then the exit status should be <code>
|
27
34
|
And the stdout should contain exactly:
|
28
35
|
"""
|
@@ -31,8 +38,8 @@ Feature: NagiosPlugin Usage
|
|
31
38
|
"""
|
32
39
|
|
33
40
|
Examples:
|
34
|
-
| status | code | stdout
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
41
|
+
| critical | warning | ok | status | code | stdout |
|
42
|
+
| true | true | true | CRITICAL | 2 | FANCY CRITICAL: answer is 42 |
|
43
|
+
| false | true | true | WARNING | 1 | FANCY WARNING: answer is 42 |
|
44
|
+
| false | false | true | OK | 0 | FANCY OK: answer is 42 |
|
45
|
+
| false | false | false | UNKNOWN | 3 | FANCY UNKNOWN: answer is 42 |
|
data/lib/nagiosplugin.rb
CHANGED
data/lib/nagiosplugin/plugin.rb
CHANGED
@@ -1,106 +1,45 @@
|
|
1
|
-
require "optparse"
|
2
|
-
|
3
1
|
module NagiosPlugin
|
4
2
|
class Plugin
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
options[:reverse] = b
|
19
|
-
end
|
20
|
-
|
21
|
-
opts.on('-w', '--warn <n>', 'Warning threshold.') do |s|
|
22
|
-
options[:warn] = s.to_i
|
23
|
-
end
|
24
|
-
|
25
|
-
opts.on('-c', '--crit <n>', 'Critical threshold.') do |s|
|
26
|
-
options[:crit] = s.to_i
|
27
|
-
end
|
28
|
-
|
29
|
-
blk2.call(opts)
|
30
|
-
|
31
|
-
begin
|
32
|
-
opts.parse!
|
33
|
-
rescue => e
|
34
|
-
abort "#{e}\n\n#{opts}"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
options
|
39
|
-
end
|
40
|
-
|
41
|
-
# Create new instance and run it.
|
42
|
-
def run(*args)
|
43
|
-
self.new(*args).run
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
# @macro [status] message
|
49
|
-
# @method $1(message)
|
50
|
-
# Raise $1 StatusError with message
|
51
|
-
# @param [String] message the exeption message
|
52
|
-
def make(status)
|
53
|
-
define_method(status) do |message|
|
54
|
-
raise StatusError.new(status, message)
|
55
|
-
end
|
56
|
-
end
|
3
|
+
NAGIOS_PLUGIN_EXIT_CODES = {
|
4
|
+
:unknown => 3,
|
5
|
+
:critical => 2,
|
6
|
+
:warning => 1,
|
7
|
+
:ok => 0
|
8
|
+
}
|
9
|
+
|
10
|
+
def check!
|
11
|
+
puts nagios_plugin_output
|
12
|
+
exit nagios_plugin_exit_code
|
13
|
+
rescue => e
|
14
|
+
puts "PLUGIN UNKNOWN: #{e.to_s}\n\n#{e.backtrace}"
|
15
|
+
exit NAGIOS_PLUGIN_EXIT_CODES[:unknown]
|
57
16
|
end
|
58
17
|
|
59
|
-
|
60
|
-
make :warning
|
61
|
-
make :critical
|
62
|
-
make :unknown
|
18
|
+
private
|
63
19
|
|
64
|
-
def
|
65
|
-
@
|
66
|
-
|
67
|
-
|
20
|
+
def nagios_plugin_status
|
21
|
+
@nagios_plugin_status ||=
|
22
|
+
case
|
23
|
+
when critical? then :critical
|
24
|
+
when warning? then :warning
|
25
|
+
when ok? then :ok
|
26
|
+
else :unknown
|
27
|
+
end
|
68
28
|
end
|
69
29
|
|
70
|
-
|
71
|
-
|
72
|
-
def check
|
73
|
-
unknown 'please overwrite the `check` method in your class'
|
30
|
+
def nagios_plugin_exit_code
|
31
|
+
NAGIOS_PLUGIN_EXIT_CODES[nagios_plugin_status]
|
74
32
|
end
|
75
33
|
|
76
|
-
|
77
|
-
|
78
|
-
# By default this will be the upcased class name. If you want
|
79
|
-
# to name your service different than the class then overwrite
|
80
|
-
# this method.
|
81
|
-
#
|
82
|
-
# @return [String] the service name
|
83
|
-
def service
|
84
|
-
self.class.name.upcase
|
34
|
+
def nagios_plugin_service
|
35
|
+
self.class.name.split('::').last.gsub(/plugin$/i, '').upcase
|
85
36
|
end
|
86
37
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
# - exit according to the status
|
93
|
-
def run
|
94
|
-
check
|
95
|
-
rescue StatusError => e
|
96
|
-
rescue => e
|
97
|
-
e = StatusError.new(:unknown, ([e.to_s, nil] + e.backtrace).join("\n"))
|
98
|
-
else
|
99
|
-
e = StatusError.new(:unknown, 'no status method was called')
|
100
|
-
ensure
|
101
|
-
puts [service, e.to_s].join(' ')
|
102
|
-
exit e.to_i
|
38
|
+
def nagios_plugin_output
|
39
|
+
output = [nagios_plugin_service] << ' '
|
40
|
+
output << nagios_plugin_status.to_s.upcase
|
41
|
+
output << ': ' + message if respond_to?(:message)
|
42
|
+
output.join
|
103
43
|
end
|
104
|
-
|
105
44
|
end
|
106
45
|
end
|
data/lib/nagiosplugin/version.rb
CHANGED
data/nagiosplugin.gemspec
CHANGED
@@ -1,25 +1,27 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
4
|
require 'nagiosplugin/version'
|
4
5
|
|
5
|
-
Gem::Specification.new do |
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'nagiosplugin'
|
8
|
+
spec.version = NagiosPlugin::VERSION
|
9
|
+
spec.authors = ['Björn Albers']
|
10
|
+
spec.email = ['bjoernalbers@googlemail.com']
|
11
|
+
spec.homepage = 'https://github.com/bjoernalbers/nagiosplugin'
|
12
|
+
spec.summary = "#{spec.name}-#{spec.version}"
|
13
|
+
spec.description = 'The one Nagios Plugin framework, forged in the fires of Mount Doom.'
|
14
|
+
spec.license = 'MIT'
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
16
|
+
spec.files = `git ls-files`.split("\n")
|
17
|
+
spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
spec.require_paths = ['lib']
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
21
|
+
spec.add_development_dependency 'rake'
|
22
|
+
spec.add_development_dependency 'cucumber'
|
23
|
+
spec.add_development_dependency 'aruba'
|
24
|
+
spec.add_development_dependency 'guard-cucumber'
|
25
|
+
spec.add_development_dependency 'rspec'
|
26
|
+
spec.add_development_dependency 'guard-rspec'
|
25
27
|
end
|
@@ -1,119 +1,137 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
@plugin = MyPlugin.new
|
3
|
+
module NagiosPlugin
|
4
|
+
describe Plugin do
|
5
|
+
let(:plugin) { Plugin.new }
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
describe '#check!' do
|
8
|
+
before do
|
9
|
+
plugin.stub(:puts => nil,
|
10
|
+
:exit => nil,
|
11
|
+
:nagios_plugin_exit_code => nil,
|
12
|
+
:nagios_plugin_output => nil)
|
12
13
|
end
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
|
15
|
+
it 'displays the plugin output on stdout' do
|
16
|
+
plugin.should_receive(:nagios_plugin_output).and_return('chunky bacon')
|
17
|
+
plugin.should_receive(:puts).with('chunky bacon')
|
18
|
+
plugin.check!
|
18
19
|
end
|
19
|
-
end
|
20
|
-
end
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
28
|
-
end
|
21
|
+
it 'exits with the status exit code' do
|
22
|
+
plugin.should_receive(:nagios_plugin_exit_code).and_return(42)
|
23
|
+
plugin.should_receive(:exit).with(42)
|
24
|
+
plugin.check!
|
25
|
+
end
|
29
26
|
|
30
|
-
|
31
|
-
|
32
|
-
@plugin.stub(:puts)
|
33
|
-
@plugin.stub(:exit)
|
34
|
-
end
|
27
|
+
context 'when an exception was raised' do
|
28
|
+
let(:exception) { StandardError.new }
|
35
29
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
end
|
30
|
+
before do
|
31
|
+
plugin.stub(:nagios_plugin_output).and_return { raise }
|
32
|
+
end
|
40
33
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
@plugin.run
|
45
|
-
end
|
34
|
+
it 'rescues the exception' do
|
35
|
+
expect { plugin.check! }.to_not raise_error
|
36
|
+
end
|
46
37
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
38
|
+
it 'exits with exit code unknown' do
|
39
|
+
plugin.should_receive(:exit).with(3)
|
40
|
+
plugin.check!
|
41
|
+
end
|
51
42
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
43
|
+
it 'displays the exception and backtrace on stdout' do
|
44
|
+
plugin.stub(:nagios_plugin_output).and_return { raise 'Oops!' }
|
45
|
+
StandardError.any_instance.stub(:backtrace).
|
46
|
+
and_return('Chunky Bacon')
|
47
|
+
plugin.should_receive(:puts).
|
48
|
+
with("PLUGIN UNKNOWN: Oops!\n\nChunky Bacon")
|
49
|
+
plugin.check!
|
57
50
|
end
|
58
51
|
end
|
52
|
+
end
|
59
53
|
|
60
|
-
|
61
|
-
|
62
|
-
|
54
|
+
describe '#nagios_plugin_service' do
|
55
|
+
it 'returns the upcased class name' do
|
56
|
+
class Foo < Plugin; end
|
57
|
+
plugin = Foo.new
|
58
|
+
expect(plugin.send(:nagios_plugin_service)).to eq('FOO')
|
63
59
|
end
|
64
60
|
|
65
|
-
it '
|
66
|
-
|
67
|
-
|
61
|
+
it 'strips "Plugin" from the class name' do
|
62
|
+
class BarPlugin < Plugin; end
|
63
|
+
plugin = BarPlugin.new
|
64
|
+
expect(plugin.send(:nagios_plugin_service)).to eq('BAR')
|
68
65
|
end
|
66
|
+
end
|
69
67
|
|
70
|
-
|
71
|
-
|
72
|
-
|
68
|
+
describe '#nagios_plugin_status' do
|
69
|
+
it 'returns unknown when not critical, warning or ok' do
|
70
|
+
plugin.stub(:critical? => false, :warning? => false, :ok? => false)
|
71
|
+
expect(plugin.send(:nagios_plugin_status)).to eq(:unknown)
|
73
72
|
end
|
74
|
-
end
|
75
73
|
|
76
|
-
|
77
|
-
|
74
|
+
it 'returns critical when critical' do
|
75
|
+
plugin.stub(:critical? => true, :warning? => true, :ok? => true)
|
76
|
+
expect(plugin.send(:nagios_plugin_status)).to eq(:critical)
|
77
|
+
end
|
78
78
|
|
79
|
-
it '
|
80
|
-
|
81
|
-
|
79
|
+
it 'returns warning when warning but not critical' do
|
80
|
+
plugin.stub(:critical? => false, :warning? => true, :ok? => true)
|
81
|
+
expect(plugin.send(:nagios_plugin_status)).to eq(:warning)
|
82
82
|
end
|
83
83
|
|
84
|
-
it '
|
85
|
-
|
86
|
-
|
84
|
+
it 'returns ok when ok but not critical or warning' do
|
85
|
+
plugin.stub(:critical? => false, :warning? => false, :ok? => true)
|
86
|
+
expect(plugin.send(:nagios_plugin_status)).to eq(:ok)
|
87
87
|
end
|
88
|
-
end
|
89
88
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
raise NagiosPlugin::StatusError.new(:ok, 'hello, world.')
|
89
|
+
it 'saves the status' do
|
90
|
+
[:critical?, :warning?, :ok?].each do |check|
|
91
|
+
plugin.should_receive(check).once.and_return(false)
|
94
92
|
end
|
93
|
+
expect(plugin.send(:nagios_plugin_status)).to eq(:unknown)
|
94
|
+
expect(plugin.send(:nagios_plugin_status)).to eq(:unknown)
|
95
95
|
end
|
96
|
+
end
|
96
97
|
|
97
|
-
|
98
|
-
|
99
|
-
|
98
|
+
describe '#nagios_plugin_exit_code' do
|
99
|
+
it 'returns 3 when unknown' do
|
100
|
+
plugin.should_receive(:nagios_plugin_status).and_return(:unknown)
|
101
|
+
expect(plugin.send(:nagios_plugin_exit_code)).to eq(3)
|
100
102
|
end
|
101
103
|
|
102
|
-
it '
|
103
|
-
|
104
|
-
|
104
|
+
it 'returns 2 when critical' do
|
105
|
+
plugin.should_receive(:nagios_plugin_status).and_return(:critical)
|
106
|
+
expect(plugin.send(:nagios_plugin_exit_code)).to eq(2)
|
105
107
|
end
|
106
108
|
|
107
|
-
it '
|
108
|
-
|
109
|
-
|
109
|
+
it 'returns 1 when warning' do
|
110
|
+
plugin.should_receive(:nagios_plugin_status).and_return(:warning)
|
111
|
+
expect(plugin.send(:nagios_plugin_exit_code)).to eq(1)
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'returns 0 when ok' do
|
115
|
+
plugin.should_receive(:nagios_plugin_status).and_return(:ok)
|
116
|
+
expect(plugin.send(:nagios_plugin_exit_code)).to eq(0)
|
110
117
|
end
|
111
118
|
end
|
112
|
-
end
|
113
119
|
|
114
|
-
|
115
|
-
|
116
|
-
|
120
|
+
describe '#nagios_plugin_output' do
|
121
|
+
before do
|
122
|
+
plugin.stub(:nagios_plugin_status)
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'joins the service name and the upcased status' do
|
126
|
+
plugin.should_receive(:nagios_plugin_service).and_return('FRIED')
|
127
|
+
plugin.should_receive(:nagios_plugin_status).and_return(:chicken)
|
128
|
+
expect(plugin.send(:nagios_plugin_output)).to match(/^FRIED CHICKEN$/)
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'includes a custom plugin message if present' do
|
132
|
+
plugin.should_receive(:message).and_return('ALL U CAN EAT!')
|
133
|
+
expect(plugin.send(:nagios_plugin_output)).to match(/: ALL U CAN EAT!$/)
|
134
|
+
end
|
117
135
|
end
|
118
136
|
end
|
119
137
|
end
|
metadata
CHANGED
@@ -1,175 +1,168 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: nagiosplugin
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.0.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 3
|
9
|
-
- 0
|
10
|
-
version: 1.3.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
13
|
-
-
|
7
|
+
authors:
|
8
|
+
- Björn Albers
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
21
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
22
|
-
none: false
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
hash: 3
|
27
|
-
segments:
|
28
|
-
- 0
|
29
|
-
version: "0"
|
30
|
-
prerelease: false
|
31
|
-
type: :development
|
12
|
+
date: 2013-09-19 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
32
15
|
name: rake
|
33
|
-
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
36
17
|
none: false
|
37
|
-
requirements:
|
38
|
-
- -
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
|
41
|
-
segments:
|
42
|
-
- 0
|
43
|
-
version: "0"
|
44
|
-
prerelease: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
45
22
|
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
46
31
|
name: cucumber
|
47
|
-
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
50
33
|
none: false
|
51
|
-
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
|
55
|
-
segments:
|
56
|
-
- 0
|
57
|
-
version: "0"
|
58
|
-
prerelease: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
59
38
|
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
60
47
|
name: aruba
|
61
|
-
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
64
49
|
none: false
|
65
|
-
requirements:
|
66
|
-
- -
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
|
69
|
-
segments:
|
70
|
-
- 0
|
71
|
-
version: "0"
|
72
|
-
prerelease: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
73
54
|
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
74
63
|
name: guard-cucumber
|
75
|
-
|
76
|
-
- !ruby/object:Gem::Dependency
|
77
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
78
65
|
none: false
|
79
|
-
requirements:
|
80
|
-
- -
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
|
83
|
-
segments:
|
84
|
-
- 0
|
85
|
-
version: "0"
|
86
|
-
prerelease: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
87
70
|
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
88
79
|
name: rspec
|
89
|
-
|
90
|
-
- !ruby/object:Gem::Dependency
|
91
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
92
81
|
none: false
|
93
|
-
requirements:
|
94
|
-
- -
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
|
97
|
-
segments:
|
98
|
-
- 0
|
99
|
-
version: "0"
|
100
|
-
prerelease: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
101
86
|
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
102
95
|
name: guard-rspec
|
103
|
-
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
104
110
|
description: The one Nagios Plugin framework, forged in the fires of Mount Doom.
|
105
|
-
email:
|
111
|
+
email:
|
106
112
|
- bjoernalbers@googlemail.com
|
107
113
|
executables: []
|
108
|
-
|
109
114
|
extensions: []
|
110
|
-
|
111
115
|
extra_rdoc_files: []
|
112
|
-
|
113
|
-
files:
|
116
|
+
files:
|
114
117
|
- .gitignore
|
118
|
+
- .rbenv-version
|
115
119
|
- .travis.yml
|
116
120
|
- Gemfile
|
117
121
|
- Guardfile
|
118
|
-
- LICENSE
|
122
|
+
- LICENSE.txt
|
119
123
|
- README.md
|
120
124
|
- Rakefile
|
121
|
-
- examples/check_file_exists.rb
|
122
|
-
- examples/check_perfdata.rb
|
123
125
|
- features/nagiosplugin_usage.feature
|
124
|
-
- features/steps/dev_steps.rb
|
125
126
|
- features/support/env.rb
|
126
127
|
- lib/nagiosplugin.rb
|
127
|
-
- lib/nagiosplugin/default_options.rb
|
128
|
-
- lib/nagiosplugin/perfdata.rb
|
129
128
|
- lib/nagiosplugin/plugin.rb
|
130
|
-
- lib/nagiosplugin/status_error.rb
|
131
129
|
- lib/nagiosplugin/version.rb
|
132
130
|
- nagiosplugin.gemspec
|
133
131
|
- spec/nagiosplugin/plugin_spec.rb
|
134
|
-
- spec/nagiosplugin/status_error_spec.rb
|
135
132
|
- spec/spec_helper.rb
|
136
133
|
homepage: https://github.com/bjoernalbers/nagiosplugin
|
137
|
-
licenses:
|
138
|
-
|
134
|
+
licenses:
|
135
|
+
- MIT
|
139
136
|
post_install_message:
|
140
137
|
rdoc_options: []
|
141
|
-
|
142
|
-
require_paths:
|
138
|
+
require_paths:
|
143
139
|
- lib
|
144
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
145
141
|
none: false
|
146
|
-
requirements:
|
147
|
-
- -
|
148
|
-
- !ruby/object:Gem::Version
|
149
|
-
|
150
|
-
segments:
|
142
|
+
requirements:
|
143
|
+
- - ! '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
segments:
|
151
147
|
- 0
|
152
|
-
|
153
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
|
+
hash: 1579051430854649941
|
149
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
150
|
none: false
|
155
|
-
requirements:
|
156
|
-
- -
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
|
159
|
-
segments:
|
151
|
+
requirements:
|
152
|
+
- - ! '>='
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '0'
|
155
|
+
segments:
|
160
156
|
- 0
|
161
|
-
|
157
|
+
hash: 1579051430854649941
|
162
158
|
requirements: []
|
163
|
-
|
164
159
|
rubyforge_project:
|
165
|
-
rubygems_version: 1.8.
|
160
|
+
rubygems_version: 1.8.23
|
166
161
|
signing_key:
|
167
162
|
specification_version: 3
|
168
|
-
summary: nagiosplugin-
|
169
|
-
test_files:
|
163
|
+
summary: nagiosplugin-2.0.0
|
164
|
+
test_files:
|
170
165
|
- features/nagiosplugin_usage.feature
|
171
|
-
- features/steps/dev_steps.rb
|
172
166
|
- features/support/env.rb
|
173
167
|
- spec/nagiosplugin/plugin_spec.rb
|
174
|
-
- spec/nagiosplugin/status_error_spec.rb
|
175
168
|
- spec/spec_helper.rb
|
@@ -1,62 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
$:.unshift(File.dirname(__FILE__) + "/lib")
|
4
|
-
|
5
|
-
require "nagiosplugin"
|
6
|
-
require "nagiosplugin/default_options"
|
7
|
-
|
8
|
-
class MyPlugin < NagiosPlugin::Plugin
|
9
|
-
include NagiosPlugin::DefaultOptions
|
10
|
-
|
11
|
-
VERSION = 1.0
|
12
|
-
|
13
|
-
class << self
|
14
|
-
def run(*args)
|
15
|
-
self.new(*args).run
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def parse_options(*args)
|
20
|
-
@options = {}
|
21
|
-
OptionParser.new do |opts|
|
22
|
-
opts.banner = "% #{File.basename($0)} --filename <file>"
|
23
|
-
opts.separator ""
|
24
|
-
opts.separator "Specific options:"
|
25
|
-
opts.separator ""
|
26
|
-
|
27
|
-
opts.on('-f', '--filename <name>', 'Filename that should exist.') do |s|
|
28
|
-
@options[:filename] = s
|
29
|
-
end
|
30
|
-
|
31
|
-
yield(opts) if block_given?
|
32
|
-
|
33
|
-
begin
|
34
|
-
opts.parse!(args)
|
35
|
-
@options
|
36
|
-
rescue => e
|
37
|
-
puts "#{e}\n\n#{opts}"
|
38
|
-
exit(3)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def initialize(*args)
|
44
|
-
parse_options(*args, &default_options)
|
45
|
-
@warn = @options[:warn] if @options[:warn]
|
46
|
-
@crit = @options[:crit] if @options[:crit]
|
47
|
-
@reverse = @options[:reverse] if @options[:reverse]
|
48
|
-
@filename = @options[:filename]
|
49
|
-
end
|
50
|
-
|
51
|
-
def check
|
52
|
-
if File.executable?(@filename)
|
53
|
-
ok("#{@filename} is excutable")
|
54
|
-
elsif File.exists?(@filename)
|
55
|
-
warning("#{@filename} is not excutable")
|
56
|
-
else
|
57
|
-
critical("#{@filename} does not exist")
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
MyPlugin.run(*ARGV)
|
data/examples/check_perfdata.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
require "nagiosplugin"
|
2
|
-
require "nagiosplugin/plugin"
|
3
|
-
require "nagiosplugin/perfdata"
|
4
|
-
|
5
|
-
class CheckPerfdata < NagiosPlugin::Plugin
|
6
|
-
include NagiosPlugin::Perfdata
|
7
|
-
|
8
|
-
def check
|
9
|
-
sleep 0.4
|
10
|
-
pd = PerfData.new
|
11
|
-
pd.val = 40
|
12
|
-
pd.warn = 25
|
13
|
-
pd.crit = 50
|
14
|
-
pd.min = 1
|
15
|
-
pd.max = 90
|
16
|
-
pd.uom = "%"
|
17
|
-
|
18
|
-
@perfdata = {
|
19
|
-
:pd => pd,
|
20
|
-
:baz => PerfData.new(1),
|
21
|
-
:foo => PerfData.new(1,2,3),
|
22
|
-
:bar => PerfData.new(4,5,6,7,8),
|
23
|
-
}
|
24
|
-
ok('super perfdata')
|
25
|
-
sleep 0.2
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
CheckPerfdata.run
|
data/features/steps/dev_steps.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
When /^I run a plugin with the following methods:$/ do |methods|
|
2
|
-
steps %Q{
|
3
|
-
Given a file named "check_foo" with:
|
4
|
-
"""
|
5
|
-
require 'nagiosplugin'
|
6
|
-
class Foo < NagiosPlugin::Plugin
|
7
|
-
#{methods}
|
8
|
-
end
|
9
|
-
Foo.new.run
|
10
|
-
"""
|
11
|
-
When I run `ruby check_foo`
|
12
|
-
}
|
13
|
-
end
|
14
|
-
|
15
|
-
Then /^the plugin should print "([^"]*)"$/ do |stdout|
|
16
|
-
steps %Q{Then the stdout should contain "FOO #{stdout}"}
|
17
|
-
end
|
@@ -1,78 +0,0 @@
|
|
1
|
-
require "optparse"
|
2
|
-
|
3
|
-
module NagiosPlugin
|
4
|
-
module DefaultOptions
|
5
|
-
def parse_num(s)
|
6
|
-
if s.include? "."
|
7
|
-
s.to_f
|
8
|
-
else
|
9
|
-
s.to_i
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def parse_start_num(s)
|
14
|
-
if s.include? '~'
|
15
|
-
s.delete!('~')
|
16
|
-
Float::MIN
|
17
|
-
else
|
18
|
-
parse_num(s)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
def parse_reverse(s)
|
22
|
-
if s.include? '@'
|
23
|
-
s.delete!('@')
|
24
|
-
@options[:invert] = true
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def parse_nagios_style(s)
|
29
|
-
parse_reverse(s)
|
30
|
-
|
31
|
-
if not s.include? ':'
|
32
|
-
s = ":" + s
|
33
|
-
end
|
34
|
-
|
35
|
-
start, stop = s.split(':')
|
36
|
-
if start.empty?
|
37
|
-
# :m
|
38
|
-
start = 0
|
39
|
-
stop = parse_num(stop)
|
40
|
-
elsif stop.empty?
|
41
|
-
# n:
|
42
|
-
start = parse_start_num(start)
|
43
|
-
stop = Float::MAX
|
44
|
-
else
|
45
|
-
# n:m
|
46
|
-
start = parse_start_num(start)
|
47
|
-
stop = parse_num(stop)
|
48
|
-
end
|
49
|
-
start..stop
|
50
|
-
end
|
51
|
-
|
52
|
-
def default_options
|
53
|
-
lambda do |opts|
|
54
|
-
opts.separator ""
|
55
|
-
opts.separator "Default options:"
|
56
|
-
opts.separator ""
|
57
|
-
|
58
|
-
opts.on('-h', '--help', 'Display this help.') do
|
59
|
-
puts "#{opts}"
|
60
|
-
exit(3)
|
61
|
-
end
|
62
|
-
|
63
|
-
opts.on('-V', '--version', 'Print version.') do |s|
|
64
|
-
puts "#{File.basename($0)} #{VERSION}"
|
65
|
-
exit(3)
|
66
|
-
end
|
67
|
-
|
68
|
-
opts.on('-w', '--warn <n:m>', 'Warning threshold.') do |s|
|
69
|
-
@options[:warn] = parse_nagios_style(s)
|
70
|
-
end
|
71
|
-
|
72
|
-
opts.on('-c', '--crit <n:m>', 'Critical threshold.') do |s|
|
73
|
-
@options[:crit] = parse_nagios_style(s)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
module NagiosPlugin
|
2
|
-
module Perfdata
|
3
|
-
_perfdata = Struct.new :val, :warn, :crit, :min, :max, :uom
|
4
|
-
PerfData = _perfdata
|
5
|
-
|
6
|
-
def get_perfdata
|
7
|
-
if @perfdata.class == PerfData
|
8
|
-
@perfdata.select {|e| e}.join(';')
|
9
|
-
else
|
10
|
-
@perfdata.map do |k,v|
|
11
|
-
"#{k}=" + v.select {|e| e}.join(';')
|
12
|
-
end.join(' ')
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
# Run check and return result in a nagios-compatible format.
|
17
|
-
#
|
18
|
-
# It will...
|
19
|
-
# - execute your check method
|
20
|
-
# - output the result in a nagios-compatible format (SERVICE STATUS: Message)
|
21
|
-
# - exit according to the status
|
22
|
-
def run
|
23
|
-
t1 = Time.now
|
24
|
-
check
|
25
|
-
rescue StatusError => e
|
26
|
-
rescue => e
|
27
|
-
e = StatusError.new(:unknown, ([e.to_s, nil] + e.backtrace).join("\n"))
|
28
|
-
else
|
29
|
-
e = StatusError.new(:unknown, 'no status method was called')
|
30
|
-
ensure
|
31
|
-
t2 = Time.now
|
32
|
-
msg = [service, e.to_s].join(' ')
|
33
|
-
perfdata = get_perfdata
|
34
|
-
t = t2 - t1
|
35
|
-
puts "#{msg}|time=#{t} #{perfdata}"
|
36
|
-
exit e.to_i
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module NagiosPlugin
|
2
|
-
|
3
|
-
# A custom status error which will be raised through the status methods.
|
4
|
-
class StatusError < StandardError
|
5
|
-
|
6
|
-
# All allowed statuses sorted by their exit code
|
7
|
-
STATUS = [:ok, :warning, :critical, :unknown]
|
8
|
-
|
9
|
-
# @param [Symbol] status the status (must be {NagiosPlugin::Plugin::StatusError::STATUS a valid status})
|
10
|
-
# @param [String] message the message you want to display
|
11
|
-
def initialize(status, message)
|
12
|
-
@status, @message = status.to_sym, message
|
13
|
-
end
|
14
|
-
|
15
|
-
# @return [String] the status and message
|
16
|
-
def to_s
|
17
|
-
"#{status.to_s.upcase}: #{@message}"
|
18
|
-
end
|
19
|
-
|
20
|
-
# @return [Fixnum] the status converted into an exit code
|
21
|
-
def to_i
|
22
|
-
STATUS.find_index(status)
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
# @return [Symbol] the status (:unknown if invalid)
|
28
|
-
def status
|
29
|
-
(STATUS.include?(@status) && @status) || STATUS.last
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe NagiosPlugin::StatusError do
|
4
|
-
def create_status(status, msg = '')
|
5
|
-
NagiosPlugin::StatusError.new(status, msg)
|
6
|
-
end
|
7
|
-
|
8
|
-
%w[ok warning critical unknown].each_with_index do |s,i|
|
9
|
-
context "when #{s}" do
|
10
|
-
before { @status = create_status(s.to_sym) }
|
11
|
-
|
12
|
-
it 'should include status in the exception message' do
|
13
|
-
@status.to_s.should include(s.upcase)
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should convert to #{i}" do
|
17
|
-
@status.to_i.should eql(i)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
context 'when initialized with invalid status' do
|
23
|
-
before { @status = create_status(:invalid) }
|
24
|
-
|
25
|
-
it 'should include unknown status in the exception message' do
|
26
|
-
@status.to_s.should include('UNKNOWN')
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should convert to 3' do
|
30
|
-
@status.to_i.should eql(3)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|