nagiosplugin 2.2.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +49 -72
- data/features/nagiosplugin_usage.feature +13 -13
- data/lib/nagios/plugin.rb +42 -0
- data/lib/nagiosplugin.rb +1 -2
- data/nagiosplugin.gemspec +4 -6
- data/spec/nagios/plugin_spec.rb +171 -0
- metadata +7 -37
- data/Guardfile +0 -15
- data/lib/nagiosplugin/plugin.rb +0 -49
- data/lib/nagiosplugin/version.rb +0 -3
- data/spec/nagiosplugin/plugin_spec.rb +0 -163
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af2884fed9433c21dca8ac46fbb9839fdb21828c
|
4
|
+
data.tar.gz: 19ec4db414644ca3b8182ba0219e4354bc42178d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc862fd67b4e48ed1379654eaadf1af2056e692001d4e6fdb5170fcb96cfcbce83a5303cdd32456e267ab3ccd06317d0ddd0af8fccd8416e654c8cb616dae2f3
|
7
|
+
data.tar.gz: fbff8aba3031f4e38ed2ef6efac1a1499710b2713e239f8bb4443f3e28748e15a0607f7d2b27e3ab85ed4eb5b6cecf4fe8359b562a806c858aac45c19171f304
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,18 +1,18 @@
|
|
1
|
-
#
|
1
|
+
# Nagios::Plugin
|
2
2
|
|
3
|
-
|
3
|
+
A Nagios Plugin framework that fits on a folded napkin.
|
4
4
|
|
5
5
|
[![Gem Version](https://badge.fury.io/rb/nagiosplugin.svg)](http://badge.fury.io/rb/nagiosplugin)
|
6
6
|
[![Build Status](https://secure.travis-ci.org/bjoernalbers/nagiosplugin.png)](http://travis-ci.org/bjoernalbers/nagiosplugin)
|
7
7
|
|
8
|
+
|
8
9
|
## Introduction
|
9
10
|
|
10
|
-
|
11
|
-
[
|
12
|
-
|
13
|
-
[
|
14
|
-
|
15
|
-
common behaviour...
|
11
|
+
*Nagios::Plugin* helps you write [Nagios](http://www.nagios.org/) Plugins with Ruby:
|
12
|
+
It ensures that your plugin returns a [compliant](http://nagiosplug.sourceforge.net/developer-guidelines.html) exit code and status output.
|
13
|
+
|
14
|
+
Besides, it is [easy to understand](https://github.com/bjoernalbers/nagiosplugin/blob/master/lib/nagiosplugin/plugin.rb) and comes with automated tests.
|
15
|
+
|
16
16
|
|
17
17
|
## Installation
|
18
18
|
|
@@ -25,94 +25,71 @@ gem 'nagiosplugin'
|
|
25
25
|
Manually via Rubygems: Run `gem install nagiosplugin`.
|
26
26
|
|
27
27
|
|
28
|
-
##
|
29
|
-
|
30
|
-
Writing your custom plugin is really simple:
|
28
|
+
## Quick Start
|
31
29
|
|
32
|
-
|
33
|
-
|
34
|
-
Create your subclass from `NagiosPlugin::Plugin` and define these
|
35
|
-
instance methods to determine the status:
|
30
|
+
Here, a full working (but totally useless) example plugin named `check_fancy`:
|
36
31
|
|
37
32
|
```Ruby
|
33
|
+
#!/usr/bin/env ruby
|
34
|
+
|
38
35
|
require 'nagiosplugin'
|
39
36
|
|
40
|
-
|
37
|
+
# Create your custom plugin as subclass from Nagios::Plugin
|
38
|
+
class Fancy < Nagios::Plugin
|
39
|
+
# Required method: Is the status critical?
|
41
40
|
def critical?
|
42
|
-
|
41
|
+
@number < 3
|
43
42
|
end
|
44
43
|
|
44
|
+
# Required method: Is the status warning?
|
45
45
|
def warning?
|
46
|
-
|
46
|
+
@number < 5
|
47
47
|
end
|
48
48
|
|
49
|
+
# Required method: Is the... I see, you got it.
|
49
50
|
def ok?
|
50
|
-
|
51
|
+
@number > 6
|
51
52
|
end
|
52
|
-
end
|
53
|
-
```
|
54
|
-
|
55
|
-
**Please keep in mind that the "worst" status always wins, i.e. if both
|
56
|
-
`critical?` and `warning?` are true then the status would be critical
|
57
|
-
(if none is true, then the status would be unknown of course)!**
|
58
|
-
|
59
|
-
You may use your `initialize` method to setup check data (NagiosPlugin
|
60
|
-
doesn't use that either), parse CLI options, etc.
|
61
53
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
54
|
+
# Optional method that is executed once before determining the status.
|
55
|
+
def chec
|
56
|
+
@number = rand(10)
|
57
|
+
end
|
66
58
|
|
67
|
-
|
68
|
-
def message
|
69
|
-
|
70
|
-
|
71
|
-
# Service name, status and message should be longer than 78 chars!!!
|
59
|
+
# Optional method: The returned stuff will be appended to plugin output.
|
60
|
+
def message
|
61
|
+
"#{@number} was picked"
|
62
|
+
end
|
72
63
|
end
|
73
|
-
```
|
74
|
-
|
75
|
-
### Step 3: Perform the actual check.
|
76
64
|
|
77
|
-
|
78
|
-
|
79
|
-
```Ruby
|
80
|
-
MyFancyPlugin.check(options)
|
65
|
+
# Call the build-in class method to display the status and exit properly:
|
66
|
+
Fancy.run!
|
81
67
|
```
|
82
68
|
|
83
|
-
|
84
|
-
parser](https://www.ruby-toolbox.com/categories/CLI_Option_Parsers), will be
|
85
|
-
forwarded to you initializer method.)
|
86
|
-
|
87
|
-
This will output the check result and exits in compliance with the
|
88
|
-
official
|
89
|
-
[Nagios plug-in development
|
90
|
-
guidelines](http://nagiosplug.sourceforge.net/developer-guidelines.html)
|
91
|
-
|
92
|
-
If anything funky happens in your code: NagiosPlugin does a "blind
|
93
|
-
rescue mission" and transforms any execptions to an unknown status.
|
94
|
-
|
95
|
-
|
96
|
-
## Note on Patches/Pull Requests
|
97
|
-
|
98
|
-
* Fork the project and run `bundle install` to resolve all development
|
99
|
-
dependencies.
|
100
|
-
* Add specs and/or features for it. This is important so I don't break
|
101
|
-
it in a future version unintentionally.
|
102
|
-
* Make your feature addition or bug fix.
|
103
|
-
* Commit, do not mess with the Rakefile or gemspec.
|
104
|
-
(If you want to have your own version, that is fine but bump version
|
105
|
-
in a commit by itself I can ignore when I pull.)
|
106
|
-
* Send me a pull request. Bonus points for topic branches.
|
69
|
+
When you run it you'd something like this:
|
107
70
|
|
71
|
+
```
|
72
|
+
$ check_fancy; echo $?
|
73
|
+
FANCY CRITICAL: 2 was picked
|
74
|
+
2
|
75
|
+
$ check_fancy; echo $?
|
76
|
+
FANCY UNKNOWN: 6 was picked
|
77
|
+
3
|
78
|
+
$ check_fancy; echo $?
|
79
|
+
FANCY OK: 7 was picked
|
80
|
+
0
|
81
|
+
```
|
108
82
|
|
109
|
-
## Acknowledgments
|
110
83
|
|
111
|
-
|
84
|
+
## Thinks to remember
|
112
85
|
|
113
|
-
|
86
|
+
- the "worst" status always wins, for example if both `critical?` and
|
87
|
+
`warning?` return true then the status would be critical
|
88
|
+
- `Nagios::Plugin.run!` does a "blind rescue mission" and transforms any
|
89
|
+
execptions to an unknown status.
|
90
|
+
- drink more water!
|
114
91
|
|
115
92
|
|
116
93
|
## Copyright
|
117
94
|
|
118
|
-
Copyright (c) 2011-
|
95
|
+
Copyright (c) 2011-2014 Björn Albers
|
@@ -1,15 +1,15 @@
|
|
1
1
|
Feature: NagiosPlugin Usage
|
2
2
|
|
3
|
-
In order to write
|
3
|
+
In order to write Nagios Plugins with Ruby
|
4
4
|
As a busy (developer|sysadmin|devop|hacker|superhero|rockstar)
|
5
|
-
I want to use the one
|
5
|
+
I want to use the one Nagios Plugin framework.
|
6
6
|
|
7
7
|
Scenario Outline: Subclass from NagiosPlugin
|
8
|
-
Given a file named "
|
8
|
+
Given a file named "check_chunky_bacon.rb" with:
|
9
9
|
"""
|
10
10
|
require 'nagiosplugin'
|
11
11
|
|
12
|
-
class
|
12
|
+
class ChunkyBacon < Nagios::Plugin
|
13
13
|
def critical?
|
14
14
|
<critical>
|
15
15
|
end
|
@@ -23,14 +23,14 @@ Feature: NagiosPlugin Usage
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def message
|
26
|
-
|
26
|
+
42
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
|
30
|
+
ChunkyBacon.run!
|
31
31
|
"""
|
32
|
-
When I run `ruby
|
33
|
-
Then the exit status should be <
|
32
|
+
When I run `ruby check_chunky_bacon.rb`
|
33
|
+
Then the exit status should be <es>
|
34
34
|
And the stdout should contain exactly:
|
35
35
|
"""
|
36
36
|
<stdout>
|
@@ -38,8 +38,8 @@ Feature: NagiosPlugin Usage
|
|
38
38
|
"""
|
39
39
|
|
40
40
|
Examples:
|
41
|
-
| critical | warning | ok | status |
|
42
|
-
| true | true | true | CRITICAL | 2
|
43
|
-
| false | true | true | WARNING | 1
|
44
|
-
| false | false | true | OK | 0
|
45
|
-
| false | false | false | UNKNOWN | 3
|
41
|
+
| critical | warning | ok | status | es | stdout |
|
42
|
+
| true | true | true | CRITICAL | 2 | CHUNKYBACON CRITICAL: 42 |
|
43
|
+
| false | true | true | WARNING | 1 | CHUNKYBACON WARNING: 42 |
|
44
|
+
| false | false | true | OK | 0 | CHUNKYBACON OK: 42 |
|
45
|
+
| false | false | false | UNKNOWN | 3 | CHUNKYBACON UNKNOWN: 42 |
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Nagios
|
2
|
+
class Plugin
|
3
|
+
VERSION = '3.0.0'
|
4
|
+
|
5
|
+
EXIT_CODE =
|
6
|
+
{ unknown: 3,
|
7
|
+
critical: 2,
|
8
|
+
warning: 1,
|
9
|
+
ok: 0 }
|
10
|
+
|
11
|
+
def self.run!(*args)
|
12
|
+
plugin = new(*args)
|
13
|
+
plugin.check if plugin.respond_to?(:check)
|
14
|
+
puts plugin.output
|
15
|
+
exit EXIT_CODE[plugin.status]
|
16
|
+
rescue => e
|
17
|
+
puts "PLUGIN UNKNOWN: #{e.message}\n\n" << e.backtrace.join("\n")
|
18
|
+
exit EXIT_CODE[:unknown]
|
19
|
+
end
|
20
|
+
|
21
|
+
def output
|
22
|
+
s = "#{name.upcase} #{status.upcase}"
|
23
|
+
s << ": #{message}" if ( respond_to?(:message) && !message.to_s.empty? )
|
24
|
+
s
|
25
|
+
end
|
26
|
+
|
27
|
+
def status
|
28
|
+
return :critical if critical?
|
29
|
+
return :warning if warning?
|
30
|
+
return :ok if ok?
|
31
|
+
:unknown
|
32
|
+
end
|
33
|
+
|
34
|
+
def name
|
35
|
+
self.class.name.split('::').last.upcase
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_s
|
39
|
+
output
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/nagiosplugin.rb
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
require '
|
2
|
-
require 'nagiosplugin/plugin'
|
1
|
+
require 'nagios/plugin'
|
data/nagiosplugin.gemspec
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'nagiosplugin
|
4
|
+
require 'nagiosplugin'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'nagiosplugin'
|
8
|
-
spec.version =
|
8
|
+
spec.version = Nagios::Plugin::VERSION
|
9
9
|
spec.authors = ['Björn Albers']
|
10
10
|
spec.email = ['bjoernalbers@gmail.com']
|
11
11
|
spec.homepage = 'https://github.com/bjoernalbers/nagiosplugin'
|
12
12
|
spec.summary = "#{spec.name}-#{spec.version}"
|
13
|
-
spec.description = '
|
13
|
+
spec.description = 'A Nagios Plugin framework that fits on a folded napkin.'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
|
-
spec.files = `git ls-files`.split("\n") - %w(.gitignore .
|
16
|
+
spec.files = `git ls-files`.split("\n") - %w(.gitignore .travis.yml)
|
17
17
|
spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
18
|
spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
spec.require_paths = ['lib']
|
@@ -21,7 +21,5 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency 'rake'
|
22
22
|
spec.add_development_dependency 'cucumber'
|
23
23
|
spec.add_development_dependency 'aruba'
|
24
|
-
spec.add_development_dependency 'guard-cucumber'
|
25
24
|
spec.add_development_dependency 'rspec', '~> 3.1'
|
26
|
-
spec.add_development_dependency 'guard-rspec'
|
27
25
|
end
|
@@ -0,0 +1,171 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Nagios
|
4
|
+
describe Plugin do
|
5
|
+
let(:plugin) { Plugin.new }
|
6
|
+
|
7
|
+
describe '.run!' do
|
8
|
+
before do
|
9
|
+
allow(plugin).to receive_messages(
|
10
|
+
output: '',
|
11
|
+
check: nil)
|
12
|
+
allow(Plugin).to receive_messages(
|
13
|
+
puts: nil,
|
14
|
+
exit: nil,
|
15
|
+
new: plugin)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'displays the plugin output on stdout' do
|
19
|
+
allow(plugin).to receive(:output).and_return('chunky bacon')
|
20
|
+
Plugin.run!
|
21
|
+
expect(Plugin).to have_received(:puts).with('chunky bacon')
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'exits with exit code 3 when plugin status unknown' do
|
25
|
+
allow(plugin).to receive(:status).and_return(:unknown)
|
26
|
+
Plugin.run!
|
27
|
+
expect(Plugin).to have_received(:exit).with(3)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'exits with exit code 2 when plugin status critical' do
|
31
|
+
allow(plugin).to receive(:status).and_return(:critical)
|
32
|
+
Plugin.run!
|
33
|
+
expect(Plugin).to have_received(:exit).with(2)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'exits with exit code 1 when plugin status warning' do
|
37
|
+
allow(plugin).to receive(:status).and_return(:warning)
|
38
|
+
Plugin.run!
|
39
|
+
expect(Plugin).to have_received(:exit).with(1)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'exits with exit code 0 when plugin status ok' do
|
43
|
+
allow(plugin).to receive(:status).and_return(:ok)
|
44
|
+
Plugin.run!
|
45
|
+
expect(Plugin).to have_received(:exit).with(0)
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'forwards any arguments to the plugin initializer' do
|
49
|
+
Plugin.run!(42, fancy: true)
|
50
|
+
expect(Plugin).to have_received(:new).with(42, fancy: true)
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'calls the plugin check callback first' do
|
54
|
+
Plugin.run!
|
55
|
+
expect(plugin).to have_received(:check).ordered
|
56
|
+
expect(plugin).to have_received(:output).ordered
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'when an exception was raised' do
|
60
|
+
let(:exception) { StandardError.new('Oops!') }
|
61
|
+
|
62
|
+
before do
|
63
|
+
allow(Plugin).to receive(:new).and_raise(exception)
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'rescues the exception' do
|
67
|
+
expect { Plugin.run! }.to_not raise_error
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'exits with status 3' do
|
71
|
+
Plugin.run!
|
72
|
+
expect(Plugin).to have_received(:exit).with(3)
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'displays the exception and backtrace on stdout' do
|
76
|
+
allow(StandardError).to receive(:new).and_return(exception)
|
77
|
+
allow(exception).to receive(:backtrace).and_return(%w(Chunky Bacon))
|
78
|
+
Plugin.run!
|
79
|
+
expect(Plugin).to have_received(:puts).
|
80
|
+
with("PLUGIN UNKNOWN: Oops!\n\nChunky\nBacon")
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe '#name' do
|
86
|
+
it 'returns the upcased class name' do
|
87
|
+
class Foo < Plugin; end
|
88
|
+
plugin = Foo.new
|
89
|
+
expect(plugin.name).to eq('FOO')
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'strips "Nagios" prefix from the class name' do
|
93
|
+
class Nagios::Bar < Plugin; end
|
94
|
+
plugin = Nagios::Bar.new
|
95
|
+
expect(plugin.name).to eq('BAR')
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe '#status' do
|
100
|
+
it 'returns :unknown when status not critical, not warning and not ok' do
|
101
|
+
allow(plugin).to receive_messages(
|
102
|
+
critical?: false,
|
103
|
+
warning?: false,
|
104
|
+
ok?: false)
|
105
|
+
expect(plugin.status).to eq(:unknown)
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'returns :critical when status critical' do
|
109
|
+
allow(plugin).to receive_messages(
|
110
|
+
critical?: true,
|
111
|
+
warning?: true,
|
112
|
+
ok?: true)
|
113
|
+
expect(plugin.status).to eq(:critical)
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'returns :warning when status not critical but warning' do
|
117
|
+
allow(plugin).to receive_messages(
|
118
|
+
critical?: false,
|
119
|
+
warning?: true,
|
120
|
+
ok?: true)
|
121
|
+
expect(plugin.status).to eq(:warning)
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'returns :ok when when status not critical, not warning but ok' do
|
125
|
+
allow(plugin).to receive_messages(
|
126
|
+
critical?: false,
|
127
|
+
warning?: false,
|
128
|
+
ok?: true)
|
129
|
+
expect(plugin.status).to eq(:ok)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe '#output' do
|
134
|
+
before do
|
135
|
+
allow(plugin).to receive_messages(
|
136
|
+
name: 'chunkybacon',
|
137
|
+
status: 'tasty')
|
138
|
+
end
|
139
|
+
|
140
|
+
context 'without a message' do
|
141
|
+
before do
|
142
|
+
allow(plugin).to receive(:message).and_return(nil)
|
143
|
+
end
|
144
|
+
|
145
|
+
it 'returns the name and status' do
|
146
|
+
expect(plugin.output).to eq('CHUNKYBACON TASTY')
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
context 'with an empty message' do
|
151
|
+
before do
|
152
|
+
allow(plugin).to receive(:message).and_return('')
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'returns the name and status' do
|
156
|
+
expect(plugin.output).to eq('CHUNKYBACON TASTY')
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
context 'with a message' do
|
161
|
+
before do
|
162
|
+
allow(plugin).to receive(:message).and_return(42)
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'returns the name, status and message' do
|
166
|
+
expect(plugin.output).to eq('CHUNKYBACON TASTY: 42')
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nagiosplugin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Björn Albers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -52,20 +52,6 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: guard-cucumber
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: rspec
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,21 +66,7 @@ dependencies:
|
|
80
66
|
- - "~>"
|
81
67
|
- !ruby/object:Gem::Version
|
82
68
|
version: '3.1'
|
83
|
-
|
84
|
-
name: guard-rspec
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
description: The one Nagios Plugin framework, forged in the fires of Mount Doom.
|
69
|
+
description: A Nagios Plugin framework that fits on a folded napkin.
|
98
70
|
email:
|
99
71
|
- bjoernalbers@gmail.com
|
100
72
|
executables: []
|
@@ -102,17 +74,15 @@ extensions: []
|
|
102
74
|
extra_rdoc_files: []
|
103
75
|
files:
|
104
76
|
- Gemfile
|
105
|
-
- Guardfile
|
106
77
|
- LICENSE.txt
|
107
78
|
- README.md
|
108
79
|
- Rakefile
|
109
80
|
- features/nagiosplugin_usage.feature
|
110
81
|
- features/support/env.rb
|
82
|
+
- lib/nagios/plugin.rb
|
111
83
|
- lib/nagiosplugin.rb
|
112
|
-
- lib/nagiosplugin/plugin.rb
|
113
|
-
- lib/nagiosplugin/version.rb
|
114
84
|
- nagiosplugin.gemspec
|
115
|
-
- spec/
|
85
|
+
- spec/nagios/plugin_spec.rb
|
116
86
|
- spec/spec_helper.rb
|
117
87
|
homepage: https://github.com/bjoernalbers/nagiosplugin
|
118
88
|
licenses:
|
@@ -137,9 +107,9 @@ rubyforge_project:
|
|
137
107
|
rubygems_version: 2.2.2
|
138
108
|
signing_key:
|
139
109
|
specification_version: 4
|
140
|
-
summary: nagiosplugin-
|
110
|
+
summary: nagiosplugin-3.0.0
|
141
111
|
test_files:
|
142
112
|
- features/nagiosplugin_usage.feature
|
143
113
|
- features/support/env.rb
|
144
|
-
- spec/
|
114
|
+
- spec/nagios/plugin_spec.rb
|
145
115
|
- spec/spec_helper.rb
|
data/Guardfile
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
# A sample Guardfile
|
2
|
-
# More info at https://github.com/guard/guard#readme
|
3
|
-
|
4
|
-
guard 'rspec', :cli => '--color' do
|
5
|
-
watch(%r{^spec/.+_spec\.rb$})
|
6
|
-
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
7
|
-
watch('spec/spec_helper.rb') { "spec" }
|
8
|
-
end
|
9
|
-
|
10
|
-
guard 'cucumber' do
|
11
|
-
watch(%r{^lib/.+$}) { 'features' }
|
12
|
-
watch(%r{^features/.+\.feature$})
|
13
|
-
watch(%r{^features/support/.+$}) { 'features' }
|
14
|
-
watch(%r{^features/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
|
15
|
-
end
|
data/lib/nagiosplugin/plugin.rb
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
module NagiosPlugin
|
2
|
-
class Plugin
|
3
|
-
NAGIOS_PLUGIN_EXIT_CODES = {
|
4
|
-
:unknown => 3,
|
5
|
-
:critical => 2,
|
6
|
-
:warning => 1,
|
7
|
-
:ok => 0
|
8
|
-
}
|
9
|
-
|
10
|
-
class << self
|
11
|
-
def check(*args)
|
12
|
-
plugin = new(*args)
|
13
|
-
puts plugin.nagios_plugin_output
|
14
|
-
exit plugin.nagios_plugin_exit_code
|
15
|
-
rescue => e
|
16
|
-
pretty_error = ([e.to_s, nil] + e.backtrace).join("\n")
|
17
|
-
puts "PLUGIN UNKNOWN: #{pretty_error}"
|
18
|
-
exit NAGIOS_PLUGIN_EXIT_CODES[:unknown]
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def nagios_plugin_exit_code
|
23
|
-
NAGIOS_PLUGIN_EXIT_CODES[nagios_plugin_status]
|
24
|
-
end
|
25
|
-
|
26
|
-
def nagios_plugin_output
|
27
|
-
output = [nagios_plugin_service] << ' '
|
28
|
-
output << nagios_plugin_status.to_s.upcase
|
29
|
-
output << ': ' + message if ( respond_to?(:message) && !message.empty? )
|
30
|
-
output.join
|
31
|
-
end
|
32
|
-
|
33
|
-
private
|
34
|
-
|
35
|
-
def nagios_plugin_status
|
36
|
-
@nagios_plugin_status ||=
|
37
|
-
case
|
38
|
-
when critical? then :critical
|
39
|
-
when warning? then :warning
|
40
|
-
when ok? then :ok
|
41
|
-
else :unknown
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def nagios_plugin_service
|
46
|
-
self.class.name.split('::').last.gsub(/plugin$/i, '').upcase
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
data/lib/nagiosplugin/version.rb
DELETED
@@ -1,163 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module NagiosPlugin
|
4
|
-
describe Plugin do
|
5
|
-
let(:plugin) { Plugin.new }
|
6
|
-
|
7
|
-
describe '.check' do
|
8
|
-
before do
|
9
|
-
allow(plugin).to receive_messages(
|
10
|
-
nagios_plugin_exit_code: nil,
|
11
|
-
nagios_plugin_output: nil)
|
12
|
-
allow(Plugin).to receive_messages(
|
13
|
-
puts: nil,
|
14
|
-
exit: nil,
|
15
|
-
new: plugin)
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'displays the plugin output on stdout' do
|
19
|
-
allow(plugin).to receive(:nagios_plugin_output).
|
20
|
-
and_return('chunky bacon')
|
21
|
-
Plugin.check
|
22
|
-
expect(Plugin).to have_received(:puts).with('chunky bacon')
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'exits with the status exit code' do
|
26
|
-
allow(plugin).to receive(:nagios_plugin_exit_code).and_return(42)
|
27
|
-
Plugin.check
|
28
|
-
expect(Plugin).to have_received(:exit).with(42)
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'passed all arguments to the initializer' do
|
32
|
-
Plugin.check(42, fancy: true)
|
33
|
-
expect(Plugin).to have_received(:new).with(42, fancy: true)
|
34
|
-
end
|
35
|
-
|
36
|
-
context 'when an exception was raised' do
|
37
|
-
let(:exception) { StandardError.new('Oops!') }
|
38
|
-
|
39
|
-
before do
|
40
|
-
allow(Plugin).to receive(:new).and_raise(exception)
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'rescues the exception' do
|
44
|
-
expect { Plugin.check }.to_not raise_error
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'exits with exit code unknown' do
|
48
|
-
Plugin.check
|
49
|
-
expect(Plugin).to have_received(:exit).with(3)
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'displays the exception and backtrace on stdout' do
|
53
|
-
allow(StandardError).to receive(:new).and_return(exception)
|
54
|
-
allow(exception).to receive(:backtrace).and_return(%w(Chunky Bacon))
|
55
|
-
Plugin.check
|
56
|
-
expect(Plugin).to have_received(:puts).
|
57
|
-
with("PLUGIN UNKNOWN: Oops!\n\nChunky\nBacon")
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe '#nagios_plugin_service' do
|
63
|
-
it 'returns the upcased class name' do
|
64
|
-
class Foo < Plugin; end
|
65
|
-
plugin = Foo.new
|
66
|
-
expect(plugin.send(:nagios_plugin_service)).to eq('FOO')
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'strips "Plugin" from the class name' do
|
70
|
-
class BarPlugin < Plugin; end
|
71
|
-
plugin = BarPlugin.new
|
72
|
-
expect(plugin.send(:nagios_plugin_service)).to eq('BAR')
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
describe '#nagios_plugin_status' do
|
77
|
-
it 'returns unknown when not critical, warning or ok' do
|
78
|
-
allow(plugin).to receive_messages(
|
79
|
-
critical?: false,
|
80
|
-
warning?: false,
|
81
|
-
ok?: false)
|
82
|
-
expect(plugin.send(:nagios_plugin_status)).to eq(:unknown)
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'returns critical when critical' do
|
86
|
-
allow(plugin).to receive_messages(
|
87
|
-
critical?: true,
|
88
|
-
warning?: true,
|
89
|
-
ok?: true)
|
90
|
-
expect(plugin.send(:nagios_plugin_status)).to eq(:critical)
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'returns warning when warning but not critical' do
|
94
|
-
allow(plugin).to receive_messages(
|
95
|
-
critical?: false,
|
96
|
-
warning?: true,
|
97
|
-
ok?: true)
|
98
|
-
expect(plugin.send(:nagios_plugin_status)).to eq(:warning)
|
99
|
-
end
|
100
|
-
|
101
|
-
it 'returns ok when ok but not critical or warning' do
|
102
|
-
allow(plugin).to receive_messages(
|
103
|
-
critical?: false,
|
104
|
-
warning?: false,
|
105
|
-
ok?: true)
|
106
|
-
expect(plugin.send(:nagios_plugin_status)).to eq(:ok)
|
107
|
-
end
|
108
|
-
|
109
|
-
it 'caches the status' do
|
110
|
-
[:critical?, :warning?, :ok?].each do |check|
|
111
|
-
allow(plugin).to receive(check).once.and_return(false)
|
112
|
-
end
|
113
|
-
expect(plugin.send(:nagios_plugin_status)).to eq(:unknown)
|
114
|
-
expect(plugin.send(:nagios_plugin_status)).to eq(:unknown)
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
describe '#nagios_plugin_exit_code' do
|
119
|
-
it 'returns 3 when unknown' do
|
120
|
-
allow(plugin).to receive(:nagios_plugin_status).and_return(:unknown)
|
121
|
-
expect(plugin.send(:nagios_plugin_exit_code)).to eq(3)
|
122
|
-
end
|
123
|
-
|
124
|
-
it 'returns 2 when critical' do
|
125
|
-
allow(plugin).to receive(:nagios_plugin_status).and_return(:critical)
|
126
|
-
expect(plugin.send(:nagios_plugin_exit_code)).to eq(2)
|
127
|
-
end
|
128
|
-
|
129
|
-
it 'returns 1 when warning' do
|
130
|
-
allow(plugin).to receive(:nagios_plugin_status).and_return(:warning)
|
131
|
-
expect(plugin.send(:nagios_plugin_exit_code)).to eq(1)
|
132
|
-
end
|
133
|
-
|
134
|
-
it 'returns 0 when ok' do
|
135
|
-
allow(plugin).to receive(:nagios_plugin_status).and_return(:ok)
|
136
|
-
expect(plugin.send(:nagios_plugin_exit_code)).to eq(0)
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
describe '#nagios_plugin_output' do
|
141
|
-
before do
|
142
|
-
allow(plugin).to receive(:nagios_plugin_status)
|
143
|
-
end
|
144
|
-
|
145
|
-
it 'joins the service name and the upcased status' do
|
146
|
-
allow(plugin).to receive(:nagios_plugin_service).and_return('FRIED')
|
147
|
-
allow(plugin).to receive(:nagios_plugin_status).and_return(:chicken)
|
148
|
-
expect(plugin.send(:nagios_plugin_output)).to match(/^FRIED CHICKEN$/)
|
149
|
-
end
|
150
|
-
|
151
|
-
it 'includes a custom plugin message if present' do
|
152
|
-
allow(plugin).to receive(:message).and_return('ALL U CAN EAT!')
|
153
|
-
expect(plugin.send(:nagios_plugin_output)).to match(/: ALL U CAN EAT!$/)
|
154
|
-
end
|
155
|
-
|
156
|
-
it 'does not append message if message is empty' do
|
157
|
-
allow(plugin).to receive(:message).and_return('')
|
158
|
-
expect(plugin.send(:nagios_plugin_output)).not_to match(/:/)
|
159
|
-
end
|
160
|
-
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|