nagios_check 0.0.1 → 0.0.2

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.
@@ -0,0 +1,75 @@
1
+ NagiosCheck
2
+ ============
3
+
4
+ Description
5
+ -----------
6
+
7
+ NagiosCheck is a simple and efficient tool for building custom probes for the
8
+ Nagios monitoring system. It alleviates the pain of parsing command line
9
+ options, writing and formatting the check results according to the Nagios
10
+ plugin API.
11
+
12
+ Installation
13
+ ------------
14
+
15
+ ``` bash
16
+ gem install nagios_check
17
+ ```
18
+
19
+ Features
20
+ --------
21
+
22
+ * Provide a simple to use DSL for building your own probes.
23
+ * Parse command line options.
24
+ * Report status data to Nagios (handles exceptions as UNKNOWN status).
25
+ * Provide a Nagios like range description format for the WARNING and CRITICAL states.
26
+ * Provide a simple timeout functionality to be more Nagios friendly.
27
+ * Report performance data to Nagios.
28
+
29
+ Usage and documentation
30
+ -----------------------
31
+
32
+ NagiosCheck is a module. To use it simply include it in a class and declare
33
+ how the check should behave:
34
+
35
+ ``` ruby
36
+ require "nagios_check"
37
+
38
+ class SimpleCheck
39
+ include NagiosCheck
40
+
41
+ on "-H HOST", :required, &store(:host)
42
+ on "-P PORT", &store(:port, default: 8080, transform: :to_i)
43
+
44
+ enable_warning
45
+ enable_critical
46
+ enable_timeout
47
+
48
+ def check
49
+ time = do_some_check(options.host, options.port)
50
+ store_value :duration, time
51
+ end
52
+ end
53
+
54
+ SimpleCheck.new.run
55
+ ```
56
+
57
+ The command can then be used by Nagios:
58
+
59
+ ``` bash
60
+ ruby simple_check.rb -H my_host -P my_port -w 4 -c 8 -t 10
61
+ ```
62
+
63
+ If the value returned by `do_some_check` is between 0 and 4 inclusive the result is OK. If it is greater than 4 and less than 8 inclusive the result is WARNING. If it is greater than 8 the result is CRITICAL. See [Nagios Developer Guidelines][nagios-dev] for more details on how the arguments of `-w` and `-c` are interpreted.
64
+
65
+ If the check method lasts more than 10 seconds, it times out and the returned value is UNKNOWN.
66
+
67
+ License
68
+ -------
69
+ Released under the MIT License. See the [MIT-LICENSE][license] file for further details.
70
+
71
+ [license]: https://github.com/dbroeglin/nagios_check/blob/master/MIT-LICENSE
72
+ [nagios-dev]: http://nagiosplug.sourceforge.net/developer-guidelines.html
73
+
74
+ Copyright 2011 Dominique Broeglin
75
+
@@ -62,12 +62,14 @@ module NagiosCheck
62
62
 
63
63
  module ClassMethods
64
64
  def on(*args, &block)
65
- @ons << [args, args.delete(:required), block]
65
+ @ons << [args, args.delete(:mandatory), block]
66
66
  end
67
67
 
68
68
  def store(name, opts = {})
69
69
  @defaults[name] = opts[:default] if opts.has_key?(:default)
70
+ transform = opts[:transform]
70
71
  Proc::new do |value|
72
+ value = value.send transform if transform
71
73
  self.options.send "#{name}=", value
72
74
  end
73
75
  end
@@ -108,8 +110,10 @@ module NagiosCheck
108
110
  def opt_parse
109
111
  unless @opt_parse
110
112
  opt_parse = OptionParser::new
111
- self.class.instance_variable_get("@ons").each do |args, req, block|
112
- opt_parse.on(*args) {|value| instance_exec(value, &block) }
113
+ self.class.instance_variable_get("@ons").each do |args, mand, block|
114
+ opt_parse.on(*args) do |value|
115
+ instance_exec(value, &block)
116
+ end
113
117
  end
114
118
  @opt_parse = opt_parse
115
119
  end
@@ -121,7 +125,11 @@ module NagiosCheck
121
125
  opt_parse.parse!(argv)
122
126
  end
123
127
 
128
+
124
129
  def check_with_timeout
125
130
  Timeout.timeout(@timeout) { check }
126
131
  end
132
+
133
+ class MissingOption < StandardError
134
+ end
127
135
  end
@@ -1,3 +1,3 @@
1
1
  module NagiosCheck
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,92 @@
1
+ describe NagiosCheck do
2
+ context "when no options specified" do
3
+ subject do
4
+ Class::new do
5
+ include NagiosCheck
6
+ end.new
7
+ end
8
+
9
+ specify { subject.send :parse_options, [] }
10
+ end
11
+
12
+ context "when warning is specified" do
13
+ subject do
14
+ Class::new do
15
+ include NagiosCheck
16
+ enable_warning
17
+ end.new
18
+ end
19
+
20
+ it("works with no arguments"){ subject.send :parse_options, %w{} }
21
+ specify { subject.send :parse_options, %w{-w 10} }
22
+
23
+ it "fails if -w has no argument" do
24
+ lambda {
25
+ subject.send :parse_options, %w{-w}
26
+ }.should raise_error(OptionParser::MissingArgument)
27
+ end
28
+ it "fails if -c is given" do
29
+ lambda {
30
+ subject.send :parse_options, %w{-c}
31
+ }.should raise_error(OptionParser::InvalidOption)
32
+ end
33
+ end
34
+
35
+ context "when critical is specified" do
36
+ subject do
37
+ Class::new do
38
+ include NagiosCheck
39
+ enable_critical
40
+ end.new
41
+ end
42
+
43
+ it("works with no arguments"){ subject.send :parse_options, %w{} }
44
+ specify { subject.send :parse_options, %w{-c 10} }
45
+
46
+ it "fails if -c has no argument" do
47
+ lambda {
48
+ subject.send :parse_options, %w{-c}
49
+ }.should raise_error(OptionParser::MissingArgument)
50
+ end
51
+
52
+ it "fails if -w is given" do
53
+ lambda {
54
+ subject.send :parse_options, %w{-w}
55
+ }.should raise_error(OptionParser::InvalidOption)
56
+ end
57
+ end
58
+
59
+ context "when a non mandatory option is specified" do
60
+ subject do
61
+ Class::new do
62
+ include NagiosCheck
63
+ on "-a VALUE", &store(:a)
64
+ on "-b VALUE", &store(:b, transform: :to_i)
65
+ end.new
66
+ end
67
+
68
+ it("works with no arguments"){ subject.send :parse_options, %w{} }
69
+
70
+ it "works with '-a 10'" do
71
+ subject.send :parse_options, %w{-a 10}
72
+ subject.options.a.should == "10"
73
+ end
74
+
75
+ it "works with '-b 20' and converts to int" do
76
+ subject.send :parse_options, %w{-b 20}
77
+ subject.options.b.should == 20
78
+ end
79
+
80
+ it "fails if -a has no argument" do
81
+ lambda {
82
+ subject.send :parse_options, %w{-a}
83
+ }.should raise_error(OptionParser::MissingArgument)
84
+ end
85
+
86
+ it "fails if -w is given" do
87
+ lambda {
88
+ subject.send :parse_options, %w{-w}
89
+ }.should raise_error(OptionParser::InvalidOption)
90
+ end
91
+ end
92
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nagios_check
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-22 00:00:00.000000000Z
12
+ date: 2011-11-30 00:00:00.000000000Z
13
13
  dependencies: []
14
14
  description: An easy to use DSL for building custom probes for the Nagios monitoring
15
15
  system
@@ -22,13 +22,14 @@ files:
22
22
  - .gitignore
23
23
  - Gemfile
24
24
  - MIT-LICENSE
25
- - README.rdoc
25
+ - README.md
26
26
  - Rakefile
27
27
  - lib/nagios_check.rb
28
28
  - lib/nagios_check/range.rb
29
29
  - lib/nagios_check/version.rb
30
30
  - nagios_check.gemspec
31
31
  - spec/finish_spec.rb
32
+ - spec/options_spec.rb
32
33
  - spec/range_spec.rb
33
34
  - spec/spec_helper.rb
34
35
  homepage: https://github.com/dbroeglin/nagios_check
@@ -57,5 +58,6 @@ specification_version: 3
57
58
  summary: Ruby Nagios Check Integration
58
59
  test_files:
59
60
  - spec/finish_spec.rb
61
+ - spec/options_spec.rb
60
62
  - spec/range_spec.rb
61
63
  - spec/spec_helper.rb
@@ -1,22 +0,0 @@
1
- = Nagios Check
2
-
3
- License:: MIT license (see MIT-LICENSE file)
4
- Copyright:: 2011 Dominique Broeglin
5
-
6
-
7
- == DESCRIPTION
8
-
9
- An easy to use DSL for building custom probes for the Nagios monitoring system.
10
-
11
- == FEATURES
12
-
13
- * Provide a simple to use DSL for building your own probes.
14
- * Decode command line options.
15
- * Report status data to Nagios.
16
- * Report performance data to Nagios.
17
-
18
-
19
- == RESOURCES
20
-
21
- * {Website}[https://github.com/dbroeglin/nagios_check]
22
- * {Source Code}[https://github.com/dbroeglin/nagios_check]