nagiosharder 0.3.0 → 0.4.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +26 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +46 -0
- data/README.rdoc +44 -13
- data/Rakefile +2 -51
- data/bin/nagiosharder +9 -0
- data/lib/nagiosharder.rb +130 -89
- data/lib/nagiosharder/cli.rb +281 -0
- data/lib/nagiosharder/filters.rb +140 -0
- data/nagiosharder.gemspec +22 -59
- metadata +141 -123
- data/spec/nagiosharder_spec.rb +0 -7
- data/spec/spec.opts +0 -1
- data/spec/spec_helper.rb +0 -9
data/.gitignore
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
## MAC OS
|
2
|
+
.DS_Store
|
3
|
+
|
4
|
+
## TEXTMATE
|
5
|
+
*.tmproj
|
6
|
+
tmtags
|
7
|
+
|
8
|
+
## EMACS
|
9
|
+
*~
|
10
|
+
\#*
|
11
|
+
.\#*
|
12
|
+
|
13
|
+
## VIM
|
14
|
+
*.swp
|
15
|
+
|
16
|
+
## PROJECT::GENERAL
|
17
|
+
coverage
|
18
|
+
rdoc
|
19
|
+
pkg
|
20
|
+
|
21
|
+
## PROJECT::SPECIFIC
|
22
|
+
nagiosharder*.gem
|
23
|
+
.bundle
|
24
|
+
vendor/gems
|
25
|
+
config
|
26
|
+
*.yml
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
nagiosharder (0.4.0)
|
5
|
+
activesupport
|
6
|
+
hashie (~> 1.2.0)
|
7
|
+
httparty (~> 0.8.3)
|
8
|
+
i18n
|
9
|
+
nokogiri
|
10
|
+
rest-client (~> 1.6.1)
|
11
|
+
terminal-table
|
12
|
+
|
13
|
+
GEM
|
14
|
+
remote: http://rubygems.org/
|
15
|
+
specs:
|
16
|
+
activesupport (3.2.8)
|
17
|
+
i18n (~> 0.6)
|
18
|
+
multi_json (~> 1.0)
|
19
|
+
diff-lcs (1.1.3)
|
20
|
+
hashie (1.2.0)
|
21
|
+
httparty (0.8.3)
|
22
|
+
multi_json (~> 1.0)
|
23
|
+
multi_xml
|
24
|
+
i18n (0.6.1)
|
25
|
+
mime-types (1.19)
|
26
|
+
multi_json (1.3.6)
|
27
|
+
multi_xml (0.5.1)
|
28
|
+
nokogiri (1.5.5)
|
29
|
+
rest-client (1.6.7)
|
30
|
+
mime-types (>= 1.16)
|
31
|
+
rspec (2.7.0)
|
32
|
+
rspec-core (~> 2.7.0)
|
33
|
+
rspec-expectations (~> 2.7.0)
|
34
|
+
rspec-mocks (~> 2.7.0)
|
35
|
+
rspec-core (2.7.1)
|
36
|
+
rspec-expectations (2.7.0)
|
37
|
+
diff-lcs (~> 1.1.2)
|
38
|
+
rspec-mocks (2.7.0)
|
39
|
+
terminal-table (1.4.5)
|
40
|
+
|
41
|
+
PLATFORMS
|
42
|
+
ruby
|
43
|
+
|
44
|
+
DEPENDENCIES
|
45
|
+
nagiosharder!
|
46
|
+
rspec (>= 1.2.9)
|
data/README.rdoc
CHANGED
@@ -1,11 +1,18 @@
|
|
1
1
|
= nagiosharder
|
2
2
|
|
3
|
-
Query and command a Nagios install using the power of ruby
|
3
|
+
Query and command a Nagios install using the power of ruby (and lots of screen-scaping)! Do the usual gem install jig:
|
4
|
+
|
5
|
+
gem install nagiosharder
|
6
|
+
|
7
|
+
|
8
|
+
Now you have access to both a Ruby interface and a command line interface.
|
9
|
+
|
10
|
+
Here's some examples to get you started with the Ruby API:
|
4
11
|
|
5
12
|
require 'nagiosharder'
|
6
13
|
site = NagiosHarder::Site.new('http://path/to/nagios/cgi/directory', 'user', 'password', 'version')
|
7
14
|
# version defaults to 3
|
8
|
-
|
15
|
+
|
9
16
|
# get details back about a host's services
|
10
17
|
puts site.host_status('myhost')
|
11
18
|
|
@@ -13,16 +20,28 @@ Query and command a Nagios install using the power of ruby.
|
|
13
20
|
site.schedule_host_check('myhost')
|
14
21
|
|
15
22
|
# get details on all services
|
16
|
-
site.service_status
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
23
|
+
site.service_status
|
24
|
+
|
25
|
+
# or just things with problems
|
26
|
+
site.service_status(
|
27
|
+
:service_status_types => [
|
28
|
+
:critical,
|
29
|
+
:warning,
|
30
|
+
:unknown
|
31
|
+
]
|
32
|
+
)
|
33
|
+
|
34
|
+
# or just muted services, sorted desc by duration
|
35
|
+
site.service_status(
|
36
|
+
:service_props => [
|
37
|
+
:notifications_disabled,
|
38
|
+
],
|
39
|
+
:sort_type => :descending,
|
40
|
+
:sort_option => :state_duration,
|
41
|
+
)
|
42
|
+
|
24
43
|
# or get the details for a single service group
|
25
|
-
site.service_status(:
|
44
|
+
site.service_status(:group => "AWESOME")
|
26
45
|
|
27
46
|
# schedule a host to have services checks run again right now
|
28
47
|
site.schedule_service_check('myhost', 'myservice')
|
@@ -39,6 +58,9 @@ Query and command a Nagios install using the power of ruby.
|
|
39
58
|
# or unacknowledge
|
40
59
|
site.unacknowledge_service('myhost', 'myservice')
|
41
60
|
|
61
|
+
# acknowledge a down service
|
62
|
+
site.acknowledge_host('myhost', 'something bad happened')
|
63
|
+
|
42
64
|
# disable notifications for a service:
|
43
65
|
site.disable_service_notifications('myhost', 'myservice')
|
44
66
|
|
@@ -54,10 +76,19 @@ Query and command a Nagios install using the power of ruby.
|
|
54
76
|
sleep 3
|
55
77
|
end
|
56
78
|
|
57
|
-
|
79
|
+
Then there's the command line. Start with --help
|
80
|
+
|
81
|
+
nagiosharder --help
|
82
|
+
|
83
|
+
This will show you how you configure nagiosharder enough to talk to your nagios. You need at least a username, password, and nagios url. These can alternatively be in a config file. For example:
|
84
|
+
|
85
|
+
nagiosharder --config /path/to/yaml
|
86
|
+
|
87
|
+
This will display all available commands.
|
88
|
+
|
58
89
|
|
59
90
|
== Note on Patches/Pull Requests
|
60
|
-
|
91
|
+
|
61
92
|
* Fork the project.
|
62
93
|
* Make your feature addition or bug fix.
|
63
94
|
* Add tests for it. This is important so I don't break it in a future version unintentionally.
|
data/Rakefile
CHANGED
@@ -1,51 +1,2 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
|
4
|
-
begin
|
5
|
-
require 'jeweler'
|
6
|
-
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name = "nagiosharder"
|
8
|
-
gem.version = "0.3.0"
|
9
|
-
gem.summary = %Q{Nagios access at your ruby fingertips}
|
10
|
-
gem.description = %Q{Nagios access at your ruby fingertips}
|
11
|
-
gem.email = "josh@technicalpickles.com"
|
12
|
-
gem.homepage = "http://github.com/railsmachine/nagiosharder"
|
13
|
-
gem.authors = ["Joshua Nichols"]
|
14
|
-
gem.add_dependency 'rest-client', '~> 1.6.1'
|
15
|
-
gem.add_dependency 'nokogiri', '~> 1.4.3'
|
16
|
-
gem.add_dependency 'activesupport'
|
17
|
-
gem.add_dependency 'httparty', '~> 0.6.1'
|
18
|
-
gem.add_dependency 'hashie', '~> 1.0.0'
|
19
|
-
gem.add_development_dependency "rspec", ">= 1.2.9"
|
20
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
21
|
-
end
|
22
|
-
Jeweler::GemcutterTasks.new
|
23
|
-
rescue LoadError
|
24
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
25
|
-
end
|
26
|
-
|
27
|
-
require 'spec/rake/spectask'
|
28
|
-
Spec::Rake::SpecTask.new(:spec) do |spec|
|
29
|
-
spec.libs << 'lib' << 'spec'
|
30
|
-
spec.spec_files = FileList['spec/**/*_spec.rb']
|
31
|
-
end
|
32
|
-
|
33
|
-
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
34
|
-
spec.libs << 'lib' << 'spec'
|
35
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
36
|
-
spec.rcov = true
|
37
|
-
end
|
38
|
-
|
39
|
-
task :spec => :check_dependencies
|
40
|
-
|
41
|
-
task :default => :spec
|
42
|
-
|
43
|
-
require 'rake/rdoctask'
|
44
|
-
Rake::RDocTask.new do |rdoc|
|
45
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
46
|
-
|
47
|
-
rdoc.rdoc_dir = 'rdoc'
|
48
|
-
rdoc.title = "nagiosharder #{version}"
|
49
|
-
rdoc.rdoc_files.include('README*')
|
50
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
51
|
-
end
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
data/bin/nagiosharder
ADDED
data/lib/nagiosharder.rb
CHANGED
@@ -3,6 +3,7 @@ require 'nokogiri'
|
|
3
3
|
require 'active_support' # fine, we'll just do all of activesupport instead of the parts I want. thank Rails 3 for shuffling requires around.
|
4
4
|
require 'cgi'
|
5
5
|
require 'hashie'
|
6
|
+
require 'nagiosharder/filters'
|
6
7
|
|
7
8
|
# :(
|
8
9
|
require 'active_support/version' # double and triplely ensure ActiveSupport::VERSION is around
|
@@ -24,32 +25,54 @@ class NagiosHarder
|
|
24
25
|
attr_accessor :nagios_url, :user, :password, :default_options, :default_cookies, :version, :nagios_time_format
|
25
26
|
include HTTParty::ClassMethods
|
26
27
|
|
27
|
-
def initialize(nagios_url, user, password, version = 3)
|
28
|
+
def initialize(nagios_url, user, password, version = 3, nagios_time_format = nil)
|
28
29
|
@nagios_url = nagios_url.gsub(/\/$/, '')
|
29
30
|
@user = user
|
30
31
|
@password = password
|
31
32
|
@default_options = {}
|
32
33
|
@default_cookies = {}
|
33
34
|
@version = version
|
35
|
+
debug_output if ENV['DEBUG']
|
34
36
|
basic_auth(@user, @password) if @user && @password
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
37
|
+
@nagios_time_format = if nagios_time_format == 'us'
|
38
|
+
"%m-%d-%Y %H:%M:%S"
|
39
|
+
else
|
40
|
+
if @version.to_i < 3
|
41
|
+
"%m-%d-%Y %H:%M:%S"
|
42
|
+
else
|
43
|
+
"%Y-%m-%d %H:%M:%S"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
self
|
41
47
|
end
|
42
48
|
|
43
49
|
def acknowledge_service(host, service, comment)
|
44
|
-
# extra options: sticky_arg, send_notification, persistent
|
45
|
-
|
46
50
|
request = {
|
47
51
|
:cmd_typ => 34,
|
48
52
|
:cmd_mod => 2,
|
49
53
|
:com_author => @user,
|
50
54
|
:com_data => comment,
|
51
55
|
:host => host,
|
52
|
-
:service => service
|
56
|
+
:service => service,
|
57
|
+
:send_notification => true,
|
58
|
+
:persistent => false,
|
59
|
+
:sticky_ack => true
|
60
|
+
}
|
61
|
+
|
62
|
+
response = post(cmd_url, :body => request)
|
63
|
+
response.code == 200 && response.body =~ /successful/
|
64
|
+
end
|
65
|
+
|
66
|
+
def acknowledge_host(host, comment)
|
67
|
+
request = {
|
68
|
+
:cmd_typ => 33,
|
69
|
+
:cmd_mod => 2,
|
70
|
+
:com_author => @user,
|
71
|
+
:com_data => comment,
|
72
|
+
:host => host,
|
73
|
+
:send_notification => true,
|
74
|
+
:persistent => false,
|
75
|
+
:sticky_ack => true
|
53
76
|
}
|
54
77
|
|
55
78
|
response = post(cmd_url, :body => request)
|
@@ -63,7 +86,7 @@ class NagiosHarder
|
|
63
86
|
:host => host,
|
64
87
|
:service => service
|
65
88
|
}
|
66
|
-
|
89
|
+
|
67
90
|
response = post(cmd_url, :body => request)
|
68
91
|
response.code == 200 && response.body =~ /successful/
|
69
92
|
end
|
@@ -130,7 +153,7 @@ class NagiosHarder
|
|
130
153
|
|
131
154
|
response.code == 200 && response.body =~ /successful/
|
132
155
|
end
|
133
|
-
|
156
|
+
|
134
157
|
def cancel_downtime(downtime_id, downtime_type = :host_downtime)
|
135
158
|
downtime_types = {
|
136
159
|
:host_downtime => 78,
|
@@ -143,7 +166,7 @@ class NagiosHarder
|
|
143
166
|
})
|
144
167
|
response.code == 200 && response.body =~ /successful/
|
145
168
|
end
|
146
|
-
|
169
|
+
|
147
170
|
def schedule_host_check(host)
|
148
171
|
response = post(cmd_url, :body => {
|
149
172
|
:start_time => formatted_time_for(Time.now),
|
@@ -167,65 +190,49 @@ class NagiosHarder
|
|
167
190
|
response.code == 200 && response.body =~ /successful/
|
168
191
|
end
|
169
192
|
|
170
|
-
def service_status(
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
when :attempts then 5
|
198
|
-
when nil then nil
|
199
|
-
else
|
200
|
-
raise "Invalid options[:sort_option]"
|
201
|
-
end
|
202
|
-
|
203
|
-
service_group = options[:group]
|
204
|
-
|
205
|
-
|
206
|
-
params = {
|
207
|
-
'hoststatustype' => 15,
|
208
|
-
'servicestatustype' => service_status_type,
|
209
|
-
'host' => 'all'
|
210
|
-
}
|
193
|
+
def service_status(options = {})
|
194
|
+
params = {}
|
195
|
+
|
196
|
+
{
|
197
|
+
:host_status_types => :notification_host,
|
198
|
+
:service_status_types => :notification_service,
|
199
|
+
:sort_type => :sort,
|
200
|
+
:sort_option => :sort,
|
201
|
+
:host_props => :host,
|
202
|
+
:service_props => :service,
|
203
|
+
}.each do |key, val|
|
204
|
+
if options[key] && (options[key].is_a?(Array) || options[key].is_a?(Symbol))
|
205
|
+
params[key.to_s.gsub(/_/, '')] = Nagiosharder::Filters.value(val, *options[key])
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
# if any of the standard filter params are already integers, those win
|
210
|
+
%w(
|
211
|
+
:hoststatustypes,
|
212
|
+
:servicestatustypes,
|
213
|
+
:sorttype,
|
214
|
+
:sortoption,
|
215
|
+
:hostprops,
|
216
|
+
:serviceprops,
|
217
|
+
).each do |key|
|
218
|
+
params[key.to_s] = options[:val] if !options[:val].nil? && options[:val].match(/^\d*$/)
|
219
|
+
end
|
211
220
|
|
221
|
+
if @version == 3
|
222
|
+
params['servicegroup'] = options[:group] || 'all'
|
223
|
+
params['style'] = 'detail'
|
224
|
+
params['embedded'] = '1'
|
225
|
+
params['noheader'] = '1'
|
226
|
+
else
|
227
|
+
if options[:group]
|
228
|
+
params['servicegroup'] = options[:group]
|
229
|
+
params['style'] = 'detail'
|
230
|
+
else
|
231
|
+
params['host'] = 'all'
|
232
|
+
end
|
233
|
+
end
|
212
234
|
|
213
|
-
|
214
|
-
[ "servicegroup=all", "style=detail" ]
|
215
|
-
else
|
216
|
-
if service_group
|
217
|
-
["servicegroup=#{service_group}", "style=detail"]
|
218
|
-
else
|
219
|
-
["host=all"]
|
220
|
-
end
|
221
|
-
end
|
222
|
-
params += [
|
223
|
-
service_status_type ? "servicestatustypes=#{service_status_type}" : nil,
|
224
|
-
sort_type ? "sorttype=#{sort_type}" : nil,
|
225
|
-
sort_option ? "sortoption=#{sort_option}" : nil,
|
226
|
-
"hoststatustypes=15"
|
227
|
-
]
|
228
|
-
query = params.compact.join('&')
|
235
|
+
query = params.select {|k,v| v }.map {|k,v| "#{k}=#{v}" }.join('&')
|
229
236
|
url = "#{status_url}?#{query}"
|
230
237
|
response = get(url)
|
231
238
|
|
@@ -240,7 +247,7 @@ class NagiosHarder
|
|
240
247
|
end
|
241
248
|
|
242
249
|
def host_status(host)
|
243
|
-
host_status_url = "#{status_url}?host=#{host}"
|
250
|
+
host_status_url = "#{status_url}?host=#{host}&embedded=1&noheader=1"
|
244
251
|
response = get(host_status_url)
|
245
252
|
|
246
253
|
raise "wtf #{host_status_url}? #{response.code}" unless response.code == 200
|
@@ -249,18 +256,24 @@ class NagiosHarder
|
|
249
256
|
parse_status_html(response) do |status|
|
250
257
|
services[status[:service]] = status
|
251
258
|
end
|
252
|
-
|
259
|
+
|
253
260
|
services
|
254
261
|
end
|
255
262
|
|
256
263
|
def disable_service_notifications(host, service, options = {})
|
257
264
|
request = {
|
258
265
|
:cmd_mod => 2,
|
259
|
-
:
|
260
|
-
:host => host,
|
261
|
-
:service => service,
|
266
|
+
:host => host
|
262
267
|
}
|
263
268
|
|
269
|
+
if service
|
270
|
+
request[:cmd_typ] = 23
|
271
|
+
request[:service] = service
|
272
|
+
else
|
273
|
+
request[:cmd_typ] = 29
|
274
|
+
request[:ahas] = true
|
275
|
+
end
|
276
|
+
|
264
277
|
response = post(cmd_url, :body => request)
|
265
278
|
if response.code == 200 && response.body =~ /successful/
|
266
279
|
# TODO enable waiting. seems to hang intermittently
|
@@ -276,11 +289,17 @@ class NagiosHarder
|
|
276
289
|
def enable_service_notifications(host, service, options = {})
|
277
290
|
request = {
|
278
291
|
:cmd_mod => 2,
|
279
|
-
:
|
280
|
-
:host => host,
|
281
|
-
:service => service,
|
292
|
+
:host => host
|
282
293
|
}
|
283
294
|
|
295
|
+
if service
|
296
|
+
request[:cmd_typ] = 22
|
297
|
+
request[:service] = service
|
298
|
+
else
|
299
|
+
request[:cmd_typ] = 28
|
300
|
+
request[:ahas] = true
|
301
|
+
end
|
302
|
+
|
284
303
|
response = post(cmd_url, :body => request)
|
285
304
|
if response.code == 200 && response.body =~ /successful/
|
286
305
|
# TODO enable waiting. seems to hang intermittently
|
@@ -292,12 +311,12 @@ class NagiosHarder
|
|
292
311
|
false
|
293
312
|
end
|
294
313
|
end
|
295
|
-
|
314
|
+
|
296
315
|
def service_notifications_disabled?(host, service)
|
297
316
|
self.host_status(host)[service].notifications_disabled
|
298
317
|
end
|
299
|
-
|
300
|
-
|
318
|
+
|
319
|
+
|
301
320
|
def status_url
|
302
321
|
"#{nagios_url}/status.cgi"
|
303
322
|
end
|
@@ -317,14 +336,15 @@ class NagiosHarder
|
|
317
336
|
end
|
318
337
|
|
319
338
|
def parse_status_html(response)
|
320
|
-
doc = Nokogiri::HTML(response)
|
339
|
+
doc = Nokogiri::HTML(response.to_s)
|
321
340
|
rows = doc.css('table.status > tr')
|
322
341
|
|
323
342
|
last_host = nil
|
324
343
|
rows.each do |row|
|
325
344
|
columns = Nokogiri::HTML(row.inner_html).css('body > td').to_a
|
326
345
|
if columns.any?
|
327
|
-
|
346
|
+
|
347
|
+
# Host column
|
328
348
|
host = columns[0].inner_text.gsub(/\n/, '')
|
329
349
|
|
330
350
|
# for a given host, the host details are blank after the first row
|
@@ -335,7 +355,9 @@ class NagiosHarder
|
|
335
355
|
# or save it for later
|
336
356
|
host = last_host
|
337
357
|
end
|
358
|
+
debug 'parsed host column'
|
338
359
|
|
360
|
+
# Service Column
|
339
361
|
if columns[1]
|
340
362
|
service_links = columns[1].css('td a')
|
341
363
|
service_link, other_links = service_links[0], service_links[1..-1]
|
@@ -366,13 +388,21 @@ class NagiosHarder
|
|
366
388
|
|
367
389
|
service = service_links[0].inner_html
|
368
390
|
end
|
369
|
-
|
391
|
+
debug 'parsed service column'
|
392
|
+
|
393
|
+
# Status
|
370
394
|
status = columns[2].inner_html if columns[2]
|
395
|
+
debug 'parsed status column'
|
396
|
+
|
397
|
+
# Last Check
|
371
398
|
last_check = if columns[3] && columns[3].inner_html != 'N/A'
|
372
399
|
last_check_str = columns[3].inner_html
|
373
|
-
|
374
|
-
DateTime.strptime(columns[3].inner_html, nagios_time_format).
|
400
|
+
debug "Need to parse #{columns[3].inner_html} in #{nagios_time_format}"
|
401
|
+
DateTime.strptime(columns[3].inner_html, nagios_time_format).to_s
|
375
402
|
end
|
403
|
+
debug 'parsed last check column'
|
404
|
+
|
405
|
+
# Duration
|
376
406
|
duration = columns[4].inner_html.squeeze(' ').gsub(/^ /, '') if columns[4]
|
377
407
|
started_at = if duration && match_data = duration.match(/^\s*(\d+)d\s+(\d+)h\s+(\d+)m\s+(\d+)s\s*$/)
|
378
408
|
(
|
@@ -382,8 +412,16 @@ class NagiosHarder
|
|
382
412
|
match_data[4].to_i.seconds
|
383
413
|
).ago
|
384
414
|
end
|
415
|
+
debug 'parsed duration column'
|
416
|
+
|
417
|
+
# Attempts
|
385
418
|
attempts = columns[5].inner_html if columns[5]
|
386
|
-
|
419
|
+
debug 'parsed attempts column'
|
420
|
+
|
421
|
+
# Status info
|
422
|
+
status_info = columns[6].inner_html.gsub(' ', '').gsub("\302\240", '') if columns[6]
|
423
|
+
debug 'parsed status info column'
|
424
|
+
|
387
425
|
|
388
426
|
if host && service && status && last_check && duration && attempts && started_at && status_info
|
389
427
|
service_extinfo_url = "#{extinfo_url}?type=2&host=#{host}&service=#{CGI.escape(service)}"
|
@@ -412,7 +450,10 @@ class NagiosHarder
|
|
412
450
|
|
413
451
|
nil
|
414
452
|
end
|
415
|
-
|
416
|
-
end
|
417
453
|
|
454
|
+
def debug(*args)
|
455
|
+
$stderr.puts *args if ENV['DEBUG']
|
456
|
+
end
|
457
|
+
|
458
|
+
end
|
418
459
|
end
|