nagi 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/NEWS CHANGED
@@ -1,3 +1,6 @@
1
+ 0.2.1: 2012-05-31
2
+ - Added force parameter for DSL status methods
3
+
1
4
  0.2.0: 2012-05-31
2
5
  - Added support for collecting multiple statuses during check
3
6
 
data/README.md CHANGED
@@ -121,6 +121,10 @@ is given. It can be set to either `:severe`, in which case the most severe
121
121
  status will be returned at the end, or `:all` which will use the most severe
122
122
  status code but also combine all status messages into one.
123
123
 
124
+ However, one can still force a status to return from the check, and ignore
125
+ the collected statues, by setting the second parameter (`force`) to `true`
126
+ for the status methods.
127
+
124
128
  This example checks used space on all disk drives, and returns critical if
125
129
  any of the drives are above a threshold:
126
130
 
@@ -136,7 +140,12 @@ Nagi do
136
140
  collect :all
137
141
 
138
142
  check do |args|
139
- execute('df').lines.each do |line|
143
+ begin
144
+ output = execute('df')
145
+ rescue StandardError => e
146
+ critical "df failed: #{e.message}", true
147
+ end
148
+ output.lines.each do |line|
140
149
  if line =~ /^.*?(\d+)%\s*(.*)$/
141
150
  if $1.to_i > args[:percentage].to_i
142
151
  critical "#{$2} #{$1}% used"
@@ -193,14 +202,16 @@ parsed command-line arguments as a hash. It should use one of the methods `ok`,
193
202
  or the block raises an unhandled exception, an Unknown status will be returned.
194
203
 
195
204
  The `collect` setting (see above) can be used to collect statuses and continue
196
- the check, rather than returning the first status encountered.
205
+ the check, rather than returning the first status encountered. However, if
206
+ `true` is passed as the second parameter of the status method, it will
207
+ return the status regardless of the `collect` setting.
197
208
 
198
209
  * `check` *block*: the code block the the check. Parsed command-line arguments
199
210
  are passed as a hash.
200
- * `ok` *message*: returns an OK status.
201
- * `warning` *message*: returns a Warning status.
202
- * `critical` *message*: returns a Critical status.
203
- * `unknown` *message*: returns an Unknown status.
211
+ * `ok` *message*, *force=false*: returns an OK status.
212
+ * `warning` *message*, *force=false*: returns a Warning status.
213
+ * `critical` *message*, *force=false*: returns a Critical status.
214
+ * `unknown` *message*, *force=false*: returns an Unknown status.
204
215
  * `execute` *command*: executes a shell command, and returns any output (both
205
216
  stdout and stderr). If the command exits with a non-zero status, it will
206
217
  throw an exception. The shell is set to use the `pipefail` option, so non-zero
data/lib/nagi/dsl.rb CHANGED
@@ -39,9 +39,9 @@ module Nagi
39
39
  @collect = type
40
40
  end
41
41
 
42
- def critical(message)
42
+ def critical(message, force=false)
43
43
  status = Nagi::Status::Critical.new(message)
44
- throw :status, status unless @collect
44
+ throw :status, status if force or not @collect
45
45
  @collected.push(status)
46
46
  return status
47
47
  end
@@ -54,9 +54,9 @@ module Nagi
54
54
  @plugin.name = name
55
55
  end
56
56
 
57
- def ok(message)
57
+ def ok(message, force=false)
58
58
  status = Nagi::Status::OK.new(message)
59
- throw :status, status unless @collect
59
+ throw :status, status if force or not @collect
60
60
  @collected.push(status)
61
61
  return status
62
62
  end
@@ -69,9 +69,9 @@ module Nagi
69
69
  @plugin.optionparser.switch(name, *args)
70
70
  end
71
71
 
72
- def unknown(message)
72
+ def unknown(message, force=false)
73
73
  status = Nagi::Status::Unknown.new(message)
74
- throw :status, status unless @collect
74
+ throw :status, status if force or not @collect
75
75
  @collected.push(status)
76
76
  return status
77
77
  end
@@ -80,9 +80,9 @@ module Nagi
80
80
  @plugin.version = version
81
81
  end
82
82
 
83
- def warning(message)
83
+ def warning(message, force=false)
84
84
  status = Nagi::Status::Warning.new(message)
85
- throw :status, status unless @collect
85
+ throw :status, status if force or not @collect
86
86
  @collected.push(status)
87
87
  return status
88
88
  end
data/lib/nagi/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Nagi
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.1'
3
3
  end
@@ -96,6 +96,7 @@ describe Nagi::DSL do
96
96
  it 'throws :status with critical status' do
97
97
  catch(:status) do
98
98
  @dsl.critical('message')
99
+ nil
99
100
  end.class.should eq Nagi::Status::Critical
100
101
  end
101
102
 
@@ -103,6 +104,14 @@ describe Nagi::DSL do
103
104
  @dsl.collect(:all)
104
105
  @dsl.critical('message').class.should eq Nagi::Status::Critical
105
106
  end
107
+
108
+ it 'throws :status when collection is enabled if forced' do
109
+ @dsl.collect(:all)
110
+ catch(:status) do
111
+ @dsl.critical('message', true)
112
+ nil
113
+ end.class.should eq Nagi::Status::Critical
114
+ end
106
115
  end
107
116
 
108
117
  describe '.execute' do
@@ -122,6 +131,7 @@ describe Nagi::DSL do
122
131
  it 'throws :status with ok status' do
123
132
  catch(:status) do
124
133
  @dsl.ok('message')
134
+ nil
125
135
  end.class.should eq Nagi::Status::OK
126
136
  end
127
137
 
@@ -129,6 +139,14 @@ describe Nagi::DSL do
129
139
  @dsl.collect(:all)
130
140
  @dsl.ok('message').class.should eq Nagi::Status::OK
131
141
  end
142
+
143
+ it 'throws :status when collection is enabled if forced' do
144
+ @dsl.collect(:all)
145
+ catch(:status) do
146
+ @dsl.ok('message', true)
147
+ nil
148
+ end.class.should eq Nagi::Status::OK
149
+ end
132
150
  end
133
151
 
134
152
  describe '.prefix' do
@@ -150,6 +168,7 @@ describe Nagi::DSL do
150
168
  it 'throws :status with unknown status' do
151
169
  catch(:status) do
152
170
  @dsl.unknown('message')
171
+ nil
153
172
  end.class.should eq Nagi::Status::Unknown
154
173
  end
155
174
 
@@ -157,6 +176,14 @@ describe Nagi::DSL do
157
176
  @dsl.collect(:all)
158
177
  @dsl.unknown('message').class.should eq Nagi::Status::Unknown
159
178
  end
179
+
180
+ it 'throws :status when collection is enabled if forced' do
181
+ @dsl.collect(:all)
182
+ catch(:status) do
183
+ @dsl.unknown('message', true)
184
+ nil
185
+ end.class.should eq Nagi::Status::Unknown
186
+ end
160
187
  end
161
188
 
162
189
  describe '.version' do
@@ -170,6 +197,7 @@ describe Nagi::DSL do
170
197
  it 'throws :status with warning status' do
171
198
  catch(:status) do
172
199
  @dsl.warning('message')
200
+ nil
173
201
  end.class.should eq Nagi::Status::Warning
174
202
  end
175
203
 
@@ -177,5 +205,13 @@ describe Nagi::DSL do
177
205
  @dsl.collect(:all)
178
206
  @dsl.warning('message').class.should eq Nagi::Status::Warning
179
207
  end
208
+
209
+ it 'throws :status when collection is enabled if forced' do
210
+ @dsl.collect(:all)
211
+ catch(:status) do
212
+ @dsl.warning('message', true)
213
+ nil
214
+ end.class.should eq Nagi::Status::Warning
215
+ end
180
216
  end
181
217
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nagi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-31 00:00:00.000000000Z
12
+ date: 2012-05-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70342039915540 !ruby/object:Gem::Requirement
16
+ requirement: &70118921103600 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70342039915540
24
+ version_requirements: *70118921103600
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70342039911220 !ruby/object:Gem::Requirement
27
+ requirement: &70118921102940 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70342039911220
35
+ version_requirements: *70118921102940
36
36
  description: A DSL for writing Nagios plugins
37
37
  email:
38
38
  - erik@bengler.no
@@ -79,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
79
  version: '0'
80
80
  requirements: []
81
81
  rubyforge_project:
82
- rubygems_version: 1.8.10
82
+ rubygems_version: 1.8.11
83
83
  signing_key:
84
84
  specification_version: 3
85
85
  summary: A DSL for writing Nagios plugins