nagiosplugin 1.3.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Build
|
7
|
+
Status](https://secure.travis-ci.org/bjoernalbers/nagiosplugin.png)](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
|
-
[![Build Status](https://secure.travis-ci.org/bjoernalbers/nagiosplugin.png)](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
|