icinga2 0.7.0.1 → 0.8.1.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.
- checksums.yaml +4 -4
- data/README.md +73 -58
- data/doc/Icinga2.html +35 -3
- data/doc/Logging.html +2 -2
- data/doc/_index.html +2 -2
- data/doc/class_list.html +1 -1
- data/doc/downtimes.md +21 -4
- data/doc/file.README.html +118 -66
- data/doc/hostgroups.md +26 -11
- data/doc/hosts.md +93 -20
- data/doc/index.html +118 -66
- data/doc/method_list.html +84 -300
- data/doc/notifications.md +42 -14
- data/doc/servicegroups.md +28 -11
- data/doc/services.md +91 -21
- data/doc/statistics.md +54 -0
- data/doc/top-level-namespace.html +1 -1
- data/doc/usergroups.md +25 -4
- data/doc/users.md +26 -29
- data/examples/test.rb +213 -76
- data/lib/icinga2.rb +256 -71
- data/lib/icinga2/converts.rb +5 -2
- data/lib/icinga2/downtimes.rb +26 -88
- data/lib/icinga2/hostgroups.rb +46 -32
- data/lib/icinga2/hosts.rb +205 -92
- data/lib/icinga2/network.rb +136 -325
- data/lib/icinga2/network.rb-SAVE +1004 -0
- data/lib/icinga2/notifications.rb +49 -72
- data/lib/icinga2/servicegroups.rb +54 -42
- data/lib/icinga2/services.rb +212 -82
- data/lib/icinga2/statistics.rb +191 -0
- data/lib/icinga2/tools.rb +28 -23
- data/lib/icinga2/usergroups.rb +49 -39
- data/lib/icinga2/users.rb +56 -61
- data/lib/icinga2/version.rb +3 -3
- metadata +5 -3
- data/lib/icinga2/status.rb +0 -210
data/lib/icinga2/network.rb
CHANGED
@@ -17,90 +17,73 @@ module Icinga2
|
|
17
17
|
#
|
18
18
|
# @return [Hash]
|
19
19
|
#
|
20
|
-
def self.
|
20
|
+
def self.api_data( params )
|
21
|
+
|
22
|
+
raise ArgumentError.new('only Hash are allowed') unless( params.is_a?(Hash) )
|
23
|
+
raise ArgumentError.new('missing params') if( params.size.zero? )
|
21
24
|
|
22
|
-
host = params.dig(:host)
|
23
25
|
url = params.dig(:url)
|
24
26
|
headers = params.dig(:headers)
|
25
27
|
options = params.dig(:options)
|
26
28
|
payload = params.dig(:payload) || {}
|
27
|
-
result = {}
|
28
|
-
max_retries = 30
|
29
|
-
times_retried = 0
|
30
|
-
|
31
|
-
return get_with_payload( params ) if payload.count >= 1
|
32
29
|
|
33
|
-
|
30
|
+
raise ArgumentError.new('Missing url') if( url.nil? )
|
31
|
+
raise ArgumentError.new('Missing headers') if( headers.nil? )
|
32
|
+
raise ArgumentError.new('Missing options') if( options.nil? )
|
33
|
+
raise ArgumentError.new('only Hash for payload are allowed') unless( payload.is_a?(Hash) )
|
34
34
|
|
35
|
-
|
35
|
+
rest_client = RestClient::Resource.new( URI.encode( url ), options )
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
options
|
40
|
-
)
|
37
|
+
max_retries = 10
|
38
|
+
retried = 0
|
41
39
|
|
42
40
|
begin
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
result[:data] ||={}
|
50
|
-
|
51
|
-
results.each do |r|
|
52
|
-
attrs = r.dig('attrs')
|
53
|
-
if( !attrs.nil? )
|
54
|
-
result[:data][attrs['name']] = {
|
55
|
-
name: attrs['name'],
|
56
|
-
display_name: attrs['display_name'],
|
57
|
-
type: attrs['type']
|
58
|
-
}
|
59
|
-
else
|
60
|
-
result = r
|
61
|
-
end
|
62
|
-
|
41
|
+
if payload
|
42
|
+
headers['X-HTTP-Method-Override'] = 'GET'
|
43
|
+
payload = JSON.generate(payload)
|
44
|
+
res = rest_client.post(payload, headers)
|
45
|
+
else
|
46
|
+
res = rest_client.get(headers)
|
63
47
|
end
|
48
|
+
|
64
49
|
rescue RestClient::Unauthorized => e
|
65
50
|
|
66
|
-
|
51
|
+
return {
|
67
52
|
status: 401,
|
68
|
-
name: host,
|
69
53
|
message: 'unauthorized'
|
70
54
|
}
|
71
55
|
|
72
|
-
rescue RestClient::
|
56
|
+
rescue RestClient::NotFound => e
|
73
57
|
|
74
|
-
|
75
|
-
|
58
|
+
message = format( 'not found (request %s)', url )
|
59
|
+
# $stderr.puts( message )
|
76
60
|
|
77
|
-
|
78
|
-
status:
|
79
|
-
|
80
|
-
message: error['status']
|
61
|
+
return {
|
62
|
+
status: 404,
|
63
|
+
message: message
|
81
64
|
}
|
82
|
-
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
|
83
|
-
|
84
|
-
if( times_retried < max_retries )
|
85
65
|
|
86
|
-
|
87
|
-
$stderr.puts(format( 'Cannot execute request %s', url ))
|
88
|
-
$stderr.puts(format( ' cause: %s', e ))
|
89
|
-
$stderr.puts(format( ' retry %d / %d', times_retried, max_retries ))
|
66
|
+
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
|
90
67
|
|
91
|
-
|
68
|
+
if( retried < max_retries )
|
69
|
+
retried += 1
|
70
|
+
$stderr.puts(format("Cannot execute request against '%s': '%s' (retry %d / %d)", url, e, retried, max_retries))
|
71
|
+
sleep(2)
|
92
72
|
retry
|
93
73
|
else
|
94
|
-
|
74
|
+
|
75
|
+
message = format( "Maximum retries (%d) against '%s' reached. Giving up ...", max_retries, url )
|
76
|
+
# $stderr.puts( message )
|
95
77
|
|
96
78
|
return {
|
97
79
|
status: 500,
|
98
|
-
message:
|
80
|
+
message: message
|
99
81
|
}
|
100
82
|
end
|
101
83
|
end
|
102
84
|
|
103
|
-
|
85
|
+
body = res.body
|
86
|
+
JSON.parse(body)
|
104
87
|
end
|
105
88
|
|
106
89
|
# static function for GET Requests without filters
|
@@ -115,168 +98,26 @@ module Icinga2
|
|
115
98
|
#
|
116
99
|
# @return [Hash]
|
117
100
|
#
|
118
|
-
def self.
|
119
|
-
|
120
|
-
host = params.dig(:host)
|
121
|
-
url = params.dig(:url)
|
122
|
-
headers = params.dig(:headers)
|
123
|
-
options = params.dig(:options)
|
124
|
-
payload = params.dig(:payload) || {}
|
125
|
-
result = {}
|
126
|
-
max_retries = 30
|
127
|
-
times_retried = 0
|
128
|
-
|
129
|
-
return get_with_payload( params ) if payload.count >= 1
|
130
|
-
|
131
|
-
headers.delete( 'X-HTTP-Method-Override' )
|
132
|
-
|
133
|
-
result = {}
|
134
|
-
|
135
|
-
rest_client = RestClient::Resource.new(
|
136
|
-
URI.encode( url ),
|
137
|
-
options
|
138
|
-
)
|
139
|
-
|
140
|
-
begin
|
141
|
-
|
142
|
-
data = rest_client.get( headers )
|
143
|
-
results = JSON.parse( data.body )
|
144
|
-
results = results.dig('results')
|
145
|
-
|
146
|
-
result[:status] = 200
|
147
|
-
result[:data] ||={}
|
148
|
-
|
149
|
-
results.each do |r|
|
150
|
-
|
151
|
-
r.reject! { |x| x == 'perfdata' }
|
152
|
-
result[:data][r.dig('name')] = r.dig('status')
|
153
|
-
end
|
154
|
-
|
155
|
-
rescue RestClient::ExceptionWithResponse => e
|
101
|
+
def self.application_data( params )
|
156
102
|
|
157
|
-
|
158
|
-
|
103
|
+
raise ArgumentError.new('only Hash are allowed') unless( params.is_a?(Hash) )
|
104
|
+
raise ArgumentError.new('missing params') if( params.size.zero? )
|
159
105
|
|
160
|
-
result = {
|
161
|
-
status: error['error'].to_i,
|
162
|
-
name: host,
|
163
|
-
message: error['status']
|
164
|
-
}
|
165
|
-
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
|
166
|
-
|
167
|
-
if( times_retried < max_retries )
|
168
|
-
|
169
|
-
times_retried += 1
|
170
|
-
$stderr.puts(format( 'Cannot execute request %s', url ))
|
171
|
-
$stderr.puts(format( ' cause: %s', e ))
|
172
|
-
$stderr.puts(format( ' retry %d / %d', times_retried, max_retries ))
|
173
|
-
|
174
|
-
sleep( 4 )
|
175
|
-
retry
|
176
|
-
else
|
177
|
-
$stderr.puts(format( "Maximum retries (%d) against '%s' reached. Giving up ...", max_retries, url ))
|
178
|
-
|
179
|
-
return {
|
180
|
-
status: 500,
|
181
|
-
message: format( "Maximum retries (%d) against '%s' reached. Giving up ...", max_retries, url )
|
182
|
-
}
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
result
|
187
|
-
end
|
188
|
-
|
189
|
-
|
190
|
-
# static function for GET Requests with payload
|
191
|
-
# internal we use here an POST Request and overwrite a http header
|
192
|
-
#
|
193
|
-
# @param [Hash] params
|
194
|
-
# @option params [String] :host
|
195
|
-
# @option params [String] :url
|
196
|
-
# @option params [String] :headers
|
197
|
-
# @option params [String] :options
|
198
|
-
# @option params [Hash] :payload
|
199
|
-
#
|
200
|
-
#
|
201
|
-
# @return [Hash]
|
202
|
-
#
|
203
|
-
def self.get_with_payload( params = {} )
|
204
|
-
|
205
|
-
host = params.dig(:host)
|
206
106
|
url = params.dig(:url)
|
207
107
|
headers = params.dig(:headers)
|
208
108
|
options = params.dig(:options)
|
209
|
-
payload = params.dig(:payload) || {}
|
210
|
-
result = {}
|
211
|
-
max_retries = 30
|
212
|
-
times_retried = 0
|
213
|
-
|
214
|
-
headers['X-HTTP-Method-Override'] = 'GET'
|
215
|
-
|
216
|
-
rest_client = RestClient::Resource.new(
|
217
|
-
URI.encode( url ),
|
218
|
-
options
|
219
|
-
)
|
220
|
-
|
221
|
-
begin
|
222
|
-
|
223
|
-
response = rest_client.post(
|
224
|
-
JSON.generate( payload ),
|
225
|
-
headers
|
226
|
-
)
|
227
|
-
|
228
|
-
response_code = response.code
|
229
|
-
response_body = response.body
|
230
|
-
node = {}
|
231
|
-
|
232
|
-
data = JSON.parse( response_body )
|
233
|
-
results = data.dig('results')
|
234
|
-
|
235
|
-
unless( results.nil? )
|
236
|
-
|
237
|
-
results.each do |r|
|
238
|
-
node[r.dig('name')] = r
|
239
|
-
end
|
240
|
-
|
241
|
-
result = {
|
242
|
-
status: response_code,
|
243
|
-
nodes: node
|
244
|
-
}
|
245
|
-
end
|
246
|
-
|
247
|
-
rescue RestClient::ExceptionWithResponse => e
|
248
|
-
|
249
|
-
error = e.response ? e.response : nil
|
250
|
-
error = JSON.parse( error )
|
251
109
|
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
message: error['status']
|
256
|
-
}
|
257
|
-
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
|
258
|
-
|
259
|
-
if( times_retried < max_retries )
|
260
|
-
|
261
|
-
times_retried += 1
|
262
|
-
$stderr.puts(format( 'Cannot execute request %s', url ))
|
263
|
-
$stderr.puts(format( ' cause: %s', e ))
|
264
|
-
$stderr.puts(format( ' retry %d / %d', times_retried, max_retries ))
|
110
|
+
raise ArgumentError.new('Missing url') if( url.nil? )
|
111
|
+
raise ArgumentError.new('Missing headers') if( headers.nil? )
|
112
|
+
raise ArgumentError.new('Missing options') if( options.nil? )
|
265
113
|
|
266
|
-
|
267
|
-
retry
|
268
|
-
else
|
269
|
-
$stderr.puts( 'Exiting request ...' )
|
114
|
+
data = Network.api_data( url: url, headers: headers, options: options )
|
270
115
|
|
271
|
-
|
272
|
-
status: 500,
|
273
|
-
message: format( 'Errno::ECONNREFUSED for request: %s', url )
|
274
|
-
}
|
275
|
-
end
|
276
|
-
end
|
116
|
+
return nil unless( data.dig(:status).nil? )
|
277
117
|
|
278
|
-
|
118
|
+
results = data.dig('results')
|
279
119
|
|
120
|
+
return results.first.dig('status') unless( results.nil? )
|
280
121
|
end
|
281
122
|
|
282
123
|
# static function for POST Requests
|
@@ -290,18 +131,26 @@ module Icinga2
|
|
290
131
|
#
|
291
132
|
# @return [Hash]
|
292
133
|
#
|
293
|
-
def self.post( params
|
134
|
+
def self.post( params )
|
135
|
+
|
136
|
+
raise ArgumentError.new('only Hash are allowed') unless( params.is_a?(Hash) )
|
137
|
+
raise ArgumentError.new('missing params') if( params.size.zero? )
|
294
138
|
|
295
139
|
url = params.dig(:url)
|
296
140
|
headers = params.dig(:headers)
|
297
141
|
options = params.dig(:options)
|
298
142
|
payload = params.dig(:payload)
|
299
|
-
max_retries = 30
|
300
|
-
times_retried = 0
|
301
143
|
|
302
|
-
|
144
|
+
raise ArgumentError.new('Missing url') if( url.nil? )
|
145
|
+
raise ArgumentError.new('Missing headers') if( headers.nil? )
|
146
|
+
raise ArgumentError.new('Missing options') if( options.nil? )
|
147
|
+
raise ArgumentError.new('only Hash for payload are allowed') unless( payload.is_a?(Hash) )
|
303
148
|
|
304
|
-
|
149
|
+
max_retries = 30
|
150
|
+
retried = 0
|
151
|
+
result = {}
|
152
|
+
|
153
|
+
headers['X-HTTP-Method-Override'] = 'POST'
|
305
154
|
|
306
155
|
rest_client = RestClient::Resource.new(
|
307
156
|
URI.encode( url ),
|
@@ -318,15 +167,7 @@ module Icinga2
|
|
318
167
|
data = JSON.parse( data )
|
319
168
|
results = data.dig('results').first
|
320
169
|
|
321
|
-
unless( results.nil? )
|
322
|
-
|
323
|
-
result = {
|
324
|
-
status: results.dig('code').to_i,
|
325
|
-
name: results.dig('name'),
|
326
|
-
message: results.dig('status')
|
327
|
-
}
|
328
|
-
|
329
|
-
end
|
170
|
+
return { status: results.dig('code').to_i, name: results.dig('name'), message: results.dig('status') } unless( results.nil? )
|
330
171
|
|
331
172
|
rescue RestClient::ExceptionWithResponse => e
|
332
173
|
|
@@ -337,16 +178,16 @@ module Icinga2
|
|
337
178
|
|
338
179
|
if( !results.nil? )
|
339
180
|
|
340
|
-
|
181
|
+
# result = result.first
|
341
182
|
|
342
|
-
|
183
|
+
return {
|
343
184
|
status: results.dig('code').to_i,
|
344
185
|
name: results.dig('name'),
|
345
186
|
message: results.dig('status'),
|
346
187
|
error: results.dig('errors')
|
347
188
|
}
|
348
189
|
else
|
349
|
-
|
190
|
+
return {
|
350
191
|
status: error.dig( 'error' ).to_i,
|
351
192
|
message: error.dig( 'status' )
|
352
193
|
}
|
@@ -354,21 +195,19 @@ module Icinga2
|
|
354
195
|
|
355
196
|
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
|
356
197
|
|
357
|
-
if(
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
$stderr.puts(format( ' cause: %s', e ))
|
362
|
-
$stderr.puts(format( ' retry %d / %d', times_retried, max_retries ))
|
363
|
-
|
364
|
-
sleep( 4 )
|
198
|
+
if( retried < max_retries )
|
199
|
+
retried += 1
|
200
|
+
$stderr.puts(format("Cannot execute request against '%s': '%s' (retry %d / %d)", url, e, retried, max_retries))
|
201
|
+
sleep(2)
|
365
202
|
retry
|
366
203
|
else
|
367
|
-
|
204
|
+
|
205
|
+
message = format( "Maximum retries (%d) against '%s' reached. Giving up ...", max_retries, url )
|
206
|
+
$stderr.puts( message )
|
368
207
|
|
369
208
|
return {
|
370
209
|
status: 500,
|
371
|
-
message:
|
210
|
+
message: message
|
372
211
|
}
|
373
212
|
end
|
374
213
|
end
|
@@ -388,19 +227,26 @@ module Icinga2
|
|
388
227
|
#
|
389
228
|
# @return [Hash]
|
390
229
|
#
|
391
|
-
def self.put( params
|
230
|
+
def self.put( params )
|
231
|
+
|
232
|
+
raise ArgumentError.new('only Hash are allowed') unless( params.is_a?(Hash) )
|
233
|
+
raise ArgumentError.new('missing params') if( params.size.zero? )
|
392
234
|
|
393
|
-
host = params.dig(:host)
|
394
235
|
url = params.dig(:url)
|
395
236
|
headers = params.dig(:headers)
|
396
237
|
options = params.dig(:options)
|
397
238
|
payload = params.dig(:payload)
|
398
|
-
max_retries = 30
|
399
|
-
times_retried = 0
|
400
239
|
|
401
|
-
|
240
|
+
raise ArgumentError.new('Missing url') if( url.nil? )
|
241
|
+
raise ArgumentError.new('Missing headers') if( headers.nil? )
|
242
|
+
raise ArgumentError.new('Missing options') if( options.nil? )
|
243
|
+
raise ArgumentError.new('only Hash for payload are allowed') unless( payload.is_a?(Hash) )
|
402
244
|
|
403
|
-
|
245
|
+
max_retries = 30
|
246
|
+
retried = 0
|
247
|
+
result = {}
|
248
|
+
|
249
|
+
headers['X-HTTP-Method-Override'] = 'PUT'
|
404
250
|
|
405
251
|
rest_client = RestClient::Resource.new(
|
406
252
|
URI.encode( url ),
|
@@ -408,81 +254,55 @@ module Icinga2
|
|
408
254
|
)
|
409
255
|
|
410
256
|
begin
|
411
|
-
|
412
257
|
data = rest_client.put(
|
413
258
|
JSON.generate( payload ),
|
414
259
|
headers
|
415
260
|
)
|
416
|
-
|
417
261
|
data = JSON.parse( data )
|
418
262
|
results = data.dig('results').first
|
419
263
|
|
420
|
-
unless( results.nil? )
|
421
|
-
|
422
|
-
result = {
|
423
|
-
status: results.dig('code').to_i,
|
424
|
-
name: results.dig('name'),
|
425
|
-
message: results.dig('status')
|
426
|
-
}
|
427
|
-
|
428
|
-
end
|
264
|
+
return { status: results.dig('code').to_i, name: results.dig('name'), message: results.dig('status') } unless( results.nil? )
|
429
265
|
|
430
266
|
rescue RestClient::ExceptionWithResponse => e
|
431
267
|
|
432
268
|
error = e.response ? e.response : nil
|
433
|
-
|
434
269
|
error = JSON.parse( error ) if error.is_a?( String )
|
435
270
|
|
436
|
-
results = error.dig(
|
437
|
-
|
438
|
-
if( !results.nil? )
|
439
|
-
|
440
|
-
if( result.is_a?( Hash ) && result.count != 0 )
|
441
|
-
|
442
|
-
result = result.first
|
443
|
-
|
444
|
-
result = {
|
445
|
-
status: results.dig('code').to_i,
|
446
|
-
name: results.dig('name'),
|
447
|
-
message: results.dig('status'),
|
448
|
-
error: results.dig('errors')
|
449
|
-
}
|
450
|
-
|
451
|
-
else
|
271
|
+
results = error.dig('results')
|
452
272
|
|
453
|
-
|
454
|
-
status: 204,
|
455
|
-
name: host,
|
456
|
-
message: 'unknown result'
|
457
|
-
}
|
458
|
-
end
|
273
|
+
return { status: error.dig('error').to_i, message: error.dig('status'), error: results } if( results.nil? )
|
459
274
|
|
275
|
+
if( results.is_a?( Hash ) && results.count != 0 )
|
276
|
+
# result = result.first
|
277
|
+
return {
|
278
|
+
status: results.dig('code').to_i,
|
279
|
+
name: results.dig('name'),
|
280
|
+
message: results.dig('status'),
|
281
|
+
error: results
|
282
|
+
}
|
460
283
|
else
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
284
|
+
return {
|
285
|
+
status: results.first.dig('code').to_i,
|
286
|
+
message: format('%s (possible, object already exists)', results.first.dig('status') ),
|
287
|
+
error: results
|
465
288
|
}
|
466
|
-
|
467
289
|
end
|
468
290
|
|
469
291
|
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
|
470
292
|
|
471
|
-
if(
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
$stderr.puts(format( ' cause: %s', e ))
|
476
|
-
$stderr.puts(format( ' retry %d / %d', times_retried, max_retries ))
|
477
|
-
|
478
|
-
sleep( 4 )
|
293
|
+
if( retried < max_retries )
|
294
|
+
retried += 1
|
295
|
+
$stderr.puts(format("Cannot execute request against '%s': '%s' (retry %d / %d)", url, e, retried, max_retries))
|
296
|
+
sleep(2)
|
479
297
|
retry
|
480
298
|
else
|
481
|
-
|
299
|
+
|
300
|
+
message = format( "Maximum retries (%d) against '%s' reached. Giving up ...", max_retries, url )
|
301
|
+
$stderr.puts( message )
|
482
302
|
|
483
303
|
return {
|
484
304
|
status: 500,
|
485
|
-
message:
|
305
|
+
message: message
|
486
306
|
}
|
487
307
|
end
|
488
308
|
end
|
@@ -500,13 +320,21 @@ module Icinga2
|
|
500
320
|
#
|
501
321
|
# @return [Hash]
|
502
322
|
#
|
503
|
-
def self.delete( params
|
323
|
+
def self.delete( params )
|
324
|
+
|
325
|
+
raise ArgumentError.new('only Hash are allowed') unless( params.is_a?(Hash) )
|
326
|
+
raise ArgumentError.new('missing params') if( params.size.zero? )
|
504
327
|
|
505
328
|
url = params.dig(:url)
|
506
329
|
headers = params.dig(:headers)
|
507
330
|
options = params.dig(:options)
|
508
|
-
|
509
|
-
|
331
|
+
|
332
|
+
raise ArgumentError.new('Missing url') if( url.nil? )
|
333
|
+
raise ArgumentError.new('Missing headers') if( headers.nil? )
|
334
|
+
raise ArgumentError.new('Missing options') if( options.nil? )
|
335
|
+
|
336
|
+
max_retries = 3
|
337
|
+
retried = 0
|
510
338
|
|
511
339
|
headers['X-HTTP-Method-Override'] = 'DELETE'
|
512
340
|
|
@@ -522,18 +350,10 @@ module Icinga2
|
|
522
350
|
|
523
351
|
if( data )
|
524
352
|
|
525
|
-
data = JSON.parse( data )
|
353
|
+
data = JSON.parse( data )
|
526
354
|
results = data.dig('results').first
|
527
355
|
|
528
|
-
unless( results.nil? )
|
529
|
-
|
530
|
-
result = {
|
531
|
-
status: results.dig('code').to_i,
|
532
|
-
name: results.dig('name'),
|
533
|
-
message: results.dig('status')
|
534
|
-
}
|
535
|
-
|
536
|
-
end
|
356
|
+
return { status: results.dig('code').to_i, name: results.dig('name'), message: results.dig('status') } unless( results.nil? )
|
537
357
|
end
|
538
358
|
|
539
359
|
rescue RestClient::ExceptionWithResponse => e
|
@@ -544,40 +364,33 @@ module Icinga2
|
|
544
364
|
|
545
365
|
results = error.dig('results')
|
546
366
|
|
547
|
-
|
548
|
-
|
549
|
-
|
367
|
+
if( results.nil? )
|
368
|
+
return {
|
369
|
+
status: error.dig( 'error' ).to_i,
|
370
|
+
message: error.dig( 'status' )
|
371
|
+
}
|
372
|
+
else
|
373
|
+
return {
|
550
374
|
status: results.dig('code').to_i,
|
551
375
|
name: results.dig('name'),
|
552
376
|
message: results.dig('status')
|
553
377
|
}
|
554
|
-
|
555
|
-
else
|
556
|
-
|
557
|
-
{
|
558
|
-
status: error.dig( 'error' ).to_i,
|
559
|
-
# :name => results.dig('name'),
|
560
|
-
message: error.dig( 'status' )
|
561
|
-
}
|
562
|
-
|
563
|
-
end
|
378
|
+
end
|
564
379
|
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
|
565
380
|
|
566
|
-
if(
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
$stderr.puts(format( ' cause: %s', e ))
|
571
|
-
$stderr.puts(format( ' retry %d / %d', times_retried, max_retries ))
|
572
|
-
|
573
|
-
sleep( 4 )
|
381
|
+
if( retried < max_retries )
|
382
|
+
retried += 1
|
383
|
+
$stderr.puts(format("Cannot execute request against '%s': '%s' (retry %d / %d)", url, e, retried, max_retries))
|
384
|
+
sleep(2)
|
574
385
|
retry
|
575
386
|
else
|
576
|
-
|
387
|
+
|
388
|
+
message = format( "Maximum retries (%d) against '%s' reached. Giving up ...", max_retries, url )
|
389
|
+
$stderr.puts( message )
|
577
390
|
|
578
391
|
return {
|
579
392
|
status: 500,
|
580
|
-
message:
|
393
|
+
message: message
|
581
394
|
}
|
582
395
|
end
|
583
396
|
end
|
@@ -587,5 +400,3 @@ module Icinga2
|
|
587
400
|
|
588
401
|
end
|
589
402
|
end
|
590
|
-
|
591
|
-
|