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.
@@ -17,90 +17,73 @@ module Icinga2
17
17
  #
18
18
  # @return [Hash]
19
19
  #
20
- def self.get( params = {} )
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
- headers.delete( 'X-HTTP-Method-Override' )
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
- result = {}
35
+ rest_client = RestClient::Resource.new( URI.encode( url ), options )
36
36
 
37
- rest_client = RestClient::Resource.new(
38
- URI.encode( url ),
39
- options
40
- )
37
+ max_retries = 10
38
+ retried = 0
41
39
 
42
40
  begin
43
-
44
- data = rest_client.get( headers )
45
- results = JSON.parse( data.body )
46
- results = results.dig('results')
47
-
48
- result[:status] = 200
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
- result = {
51
+ return {
67
52
  status: 401,
68
- name: host,
69
53
  message: 'unauthorized'
70
54
  }
71
55
 
72
- rescue RestClient::ExceptionWithResponse => e
56
+ rescue RestClient::NotFound => e
73
57
 
74
- error = e.response ? e.response : nil
75
- error = JSON.parse( error )
58
+ message = format( 'not found (request %s)', url )
59
+ # $stderr.puts( message )
76
60
 
77
- result = {
78
- status: error['error'].to_i,
79
- name: host,
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
- times_retried += 1
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
- sleep( 4 )
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
- $stderr.puts(format( "Maximum retries (%d) against '%s' reached. Giving up ...", max_retries, url ))
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: format( "Maximum retries (%d) against '%s' reached. Giving up ...", max_retries, url )
80
+ message: message
99
81
  }
100
82
  end
101
83
  end
102
84
 
103
- result
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.get_raw( params = {} )
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
- error = e.response ? e.response : nil
158
- error = JSON.parse( error )
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
- result = {
253
- status: error['error'].to_i,
254
- name: host,
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
- sleep( 4 )
267
- retry
268
- else
269
- $stderr.puts( 'Exiting request ...' )
114
+ data = Network.api_data( url: url, headers: headers, options: options )
270
115
 
271
- return {
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
- result
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
- headers['X-HTTP-Method-Override'] = 'POST'
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
- result = {}
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
- result = result.first
181
+ # result = result.first
341
182
 
342
- result = {
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
- result = {
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( times_retried < max_retries )
358
-
359
- times_retried += 1
360
- $stderr.puts(format( 'Cannot execute request %s', url ))
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
- $stderr.puts( 'Exiting request ...' )
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: format( 'Errno::ECONNREFUSED for request: %s', url )
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
- headers['X-HTTP-Method-Override'] = 'PUT'
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
- result = {}
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( 'results' )
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
- result = {
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
- result = {
463
- status: error.dig( 'error' ).to_i,
464
- message: error.dig( 'status' )
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( times_retried < max_retries )
472
-
473
- times_retried += 1
474
- $stderr.puts(format( 'Cannot execute request %s', url ))
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
- $stderr.puts( 'Exiting request ...' )
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: format( 'Errno::ECONNREFUSED for request: %s', url )
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
- max_retries = 3
509
- times_retried = 0
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 ) #.body )
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
- result = if( !results.nil? )
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( times_retried < max_retries )
567
-
568
- times_retried += 1
569
- $stderr.puts(format( 'Cannot execute request %s', url ))
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
- $stderr.puts( 'Exiting request ...' )
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: format( 'Errno::ECONNREFUSED for request: %s', url )
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
-