icinga2 0.7.0.1 → 0.8.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
-