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.
@@ -0,0 +1,1004 @@
1
+
2
+ # frozen_string_literal: true
3
+ module Icinga2
4
+
5
+ # namespace for network handling
6
+ module Network
7
+
8
+ def self.api_data( params = {} )
9
+
10
+ host = params.dig(:host)
11
+ url = params.dig(:url)
12
+ headers = params.dig(:headers)
13
+ options = params.dig(:options)
14
+ payload = params.dig(:payload) || {}
15
+
16
+ # puts params
17
+
18
+ rest_client = RestClient::Resource.new( URI.encode( url ), options )
19
+
20
+ max_retries = 10
21
+ retried = 0
22
+
23
+ begin
24
+ if payload
25
+ headers["X-HTTP-Method-Override"] = "GET"
26
+ payload = JSON.generate(payload)
27
+ res = rest_client.post(payload, headers)
28
+ else
29
+ res = rest_client.get(headers)
30
+ end
31
+
32
+ rescue RestClient::Unauthorized => e
33
+
34
+ return {
35
+ status: 401,
36
+ message: 'unauthorized'
37
+ }
38
+
39
+ rescue RestClient::NotFound => e
40
+
41
+ message = format( "not found (request %s)", url )
42
+
43
+ $stderr.puts( message )
44
+
45
+ return {
46
+ status: 404,
47
+ message: message
48
+ }
49
+
50
+ rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
51
+
52
+ if (retried < max_retries)
53
+ retried += 1
54
+ $stderr.puts(format("Cannot execute request against '%s': '%s' (retry %d / %d)", url, e, retried, max_retries))
55
+ sleep(2)
56
+ retry
57
+ else
58
+
59
+ message = format( "Maximum retries (%d) against '%s' reached. Giving up ...", max_retries, url )
60
+ $stderr.puts( message )
61
+
62
+ return {
63
+ status: 500,
64
+ message: message
65
+ }
66
+
67
+ end
68
+ end
69
+
70
+ body = res.body
71
+ data = JSON.parse(body)
72
+
73
+ return data
74
+ end
75
+
76
+
77
+ def self.application_data( params = {} )
78
+
79
+ url = params.dig(:url)
80
+ headers = params.dig(:headers)
81
+ options = params.dig(:options)
82
+
83
+ # puts params
84
+
85
+ data = Network.api_data( url: url, headers: headers, options: options )
86
+
87
+ status = data.dig(:status)
88
+
89
+ if( status.nil? )
90
+
91
+ results = data.dig('results')
92
+
93
+ unless( results.nil? )
94
+
95
+ return results.first.dig('status')
96
+ end
97
+ end
98
+
99
+ return nil
100
+
101
+ # if not data or not data.has_key?('results') or data['results'].empty? or not data['results'][0].has_key?('status')
102
+ # return nil
103
+ # end
104
+ #
105
+ # return data['results'][0]['status'] #there's only one row
106
+ end
107
+
108
+
109
+
110
+ # static function for POST Requests
111
+ #
112
+ # @param [Hash] params
113
+ # @option params [String] :url
114
+ # @option params [String] :headers
115
+ # @option params [String] :options
116
+ # @option params [Hash] :payload
117
+ #
118
+ #
119
+ # @return [Hash]
120
+ #
121
+ def self.post( params = {} )
122
+
123
+ url = params.dig(:url)
124
+ headers = params.dig(:headers)
125
+ options = params.dig(:options)
126
+ payload = params.dig(:payload)
127
+ max_retries = 30
128
+ times_retried = 0
129
+
130
+ headers['X-HTTP-Method-Override'] = 'POST'
131
+
132
+ result = {}
133
+
134
+ rest_client = RestClient::Resource.new(
135
+ URI.encode( url ),
136
+ options
137
+ )
138
+
139
+ begin
140
+
141
+ data = rest_client.post(
142
+ JSON.generate( payload ),
143
+ headers
144
+ )
145
+
146
+ data = JSON.parse( data )
147
+ results = data.dig('results').first
148
+
149
+ unless( results.nil? )
150
+
151
+ result = {
152
+ status: results.dig('code').to_i,
153
+ name: results.dig('name'),
154
+ message: results.dig('status')
155
+ }
156
+
157
+ end
158
+
159
+ rescue RestClient::ExceptionWithResponse => e
160
+
161
+ error = e.response ? e.response : nil
162
+ error = JSON.parse( error ) if error.is_a?( String )
163
+
164
+ results = error.dig( 'results' )
165
+
166
+ if( !results.nil? )
167
+
168
+ result = result.first
169
+
170
+ result = {
171
+ status: results.dig('code').to_i,
172
+ name: results.dig('name'),
173
+ message: results.dig('status'),
174
+ error: results.dig('errors')
175
+ }
176
+ else
177
+ result = {
178
+ status: error.dig( 'error' ).to_i,
179
+ message: error.dig( 'status' )
180
+ }
181
+ end
182
+
183
+ rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
184
+
185
+ if( times_retried < max_retries )
186
+
187
+ times_retried += 1
188
+ $stderr.puts(format( 'Cannot execute request %s', url ))
189
+ $stderr.puts(format( ' cause: %s', e ))
190
+ $stderr.puts(format( ' retry %d / %d', times_retried, max_retries ))
191
+
192
+ sleep( 4 )
193
+ retry
194
+ else
195
+ $stderr.puts( 'Exiting request ...' )
196
+
197
+ return {
198
+ status: 500,
199
+ message: format( 'Errno::ECONNREFUSED for request: %s', url )
200
+ }
201
+ end
202
+ end
203
+
204
+ result
205
+ end
206
+
207
+ # static function for PUT Requests
208
+ #
209
+ # @param [Hash] params
210
+ # @option params [String] :host
211
+ # @option params [String] :url
212
+ # @option params [String] :headers
213
+ # @option params [String] :options
214
+ # @option params [Hash] :payload
215
+ #
216
+ #
217
+ # @return [Hash]
218
+ #
219
+ def self.put( params = {} )
220
+
221
+ host = params.dig(:host)
222
+ url = params.dig(:url)
223
+ headers = params.dig(:headers)
224
+ options = params.dig(:options)
225
+ payload = params.dig(:payload)
226
+ max_retries = 30
227
+ times_retried = 0
228
+
229
+ headers['X-HTTP-Method-Override'] = 'PUT'
230
+
231
+ result = {}
232
+
233
+ rest_client = RestClient::Resource.new(
234
+ URI.encode( url ),
235
+ options
236
+ )
237
+
238
+ begin
239
+
240
+ data = rest_client.put(
241
+ JSON.generate( payload ),
242
+ headers
243
+ )
244
+
245
+ data = JSON.parse( data )
246
+ results = data.dig('results').first
247
+
248
+ unless( results.nil? )
249
+
250
+ result = {
251
+ status: results.dig('code').to_i,
252
+ name: results.dig('name'),
253
+ message: results.dig('status')
254
+ }
255
+
256
+ end
257
+
258
+ rescue RestClient::ExceptionWithResponse => e
259
+
260
+ error = e.response ? e.response : nil
261
+
262
+ error = JSON.parse( error ) if error.is_a?( String )
263
+
264
+ results = error.dig( 'results' )
265
+
266
+ if( !results.nil? )
267
+
268
+ if( result.is_a?( Hash ) && result.count != 0 )
269
+
270
+ result = result.first
271
+
272
+ result = {
273
+ status: results.dig('code').to_i,
274
+ name: results.dig('name'),
275
+ message: results.dig('status'),
276
+ error: results.dig('errors')
277
+ }
278
+
279
+ else
280
+
281
+ result = {
282
+ status: 204,
283
+ name: host,
284
+ message: 'unknown result'
285
+ }
286
+ end
287
+
288
+ else
289
+
290
+ result = {
291
+ status: error.dig( 'error' ).to_i,
292
+ message: error.dig( 'status' )
293
+ }
294
+
295
+ end
296
+
297
+ rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
298
+
299
+ if( times_retried < max_retries )
300
+
301
+ times_retried += 1
302
+ $stderr.puts(format( 'Cannot execute request %s', url ))
303
+ $stderr.puts(format( ' cause: %s', e ))
304
+ $stderr.puts(format( ' retry %d / %d', times_retried, max_retries ))
305
+
306
+ sleep( 4 )
307
+ retry
308
+ else
309
+ $stderr.puts( 'Exiting request ...' )
310
+
311
+ return {
312
+ status: 500,
313
+ message: format( 'Errno::ECONNREFUSED for request: %s', url )
314
+ }
315
+ end
316
+ end
317
+
318
+ result
319
+ end
320
+
321
+ # static function for DELETE Requests
322
+ #
323
+ # @param [Hash] params
324
+ # @option params [String] :url
325
+ # @option params [String] :headers
326
+ # @option params [String] :options
327
+ #
328
+ #
329
+ # @return [Hash]
330
+ #
331
+ def self.delete( params = {} )
332
+
333
+ url = params.dig(:url)
334
+ headers = params.dig(:headers)
335
+ options = params.dig(:options)
336
+ max_retries = 3
337
+ times_retried = 0
338
+
339
+ headers['X-HTTP-Method-Override'] = 'DELETE'
340
+
341
+ result = {}
342
+
343
+ rest_client = RestClient::Resource.new(
344
+ URI.encode( url ),
345
+ options
346
+ )
347
+
348
+ begin
349
+ data = rest_client.get( headers )
350
+
351
+ if( data )
352
+
353
+ data = JSON.parse( data ) #.body )
354
+ results = data.dig('results').first
355
+
356
+ unless( results.nil? )
357
+
358
+ result = {
359
+ status: results.dig('code').to_i,
360
+ name: results.dig('name'),
361
+ message: results.dig('status')
362
+ }
363
+
364
+ end
365
+ end
366
+
367
+ rescue RestClient::ExceptionWithResponse => e
368
+
369
+ error = e.response ? e.response : nil
370
+
371
+ error = JSON.parse( error ) if error.is_a?( String )
372
+
373
+ results = error.dig('results')
374
+
375
+ result = if( !results.nil? )
376
+
377
+ {
378
+ status: results.dig('code').to_i,
379
+ name: results.dig('name'),
380
+ message: results.dig('status')
381
+ }
382
+
383
+ else
384
+
385
+ {
386
+ status: error.dig( 'error' ).to_i,
387
+ # :name => results.dig('name'),
388
+ message: error.dig( 'status' )
389
+ }
390
+
391
+ end
392
+ rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
393
+
394
+ if( times_retried < max_retries )
395
+
396
+ times_retried += 1
397
+ $stderr.puts(format( 'Cannot execute request %s', url ))
398
+ $stderr.puts(format( ' cause: %s', e ))
399
+ $stderr.puts(format( ' retry %d / %d', times_retried, max_retries ))
400
+
401
+ sleep( 4 )
402
+ retry
403
+ else
404
+ $stderr.puts( 'Exiting request ...' )
405
+
406
+ return {
407
+ status: 500,
408
+ message: format( 'Errno::ECONNREFUSED for request: %s', url )
409
+ }
410
+ end
411
+ end
412
+
413
+ result
414
+ end
415
+
416
+ end
417
+
418
+ # namespace for network handling
419
+ module NetworkOld
420
+
421
+ # static function for GET Requests
422
+ #
423
+ # @param [Hash] params
424
+ # @option params [String] :host
425
+ # @option params [String] :url
426
+ # @option params [String] :headers
427
+ # @option params [String] :options
428
+ # @option params [Hash] :payload
429
+ #
430
+ #
431
+ # @return [Hash]
432
+ #
433
+ def self.get( params = {} )
434
+
435
+ host = params.dig(:host)
436
+ url = params.dig(:url)
437
+ headers = params.dig(:headers)
438
+ options = params.dig(:options)
439
+ payload = params.dig(:payload) || {}
440
+ result = {}
441
+ max_retries = 30
442
+ times_retried = 0
443
+
444
+ return get_with_payload( params ) if payload.count >= 1
445
+
446
+ headers.delete( 'X-HTTP-Method-Override' )
447
+
448
+ result = {}
449
+
450
+ rest_client = RestClient::Resource.new(
451
+ URI.encode( url ),
452
+ options
453
+ )
454
+
455
+ begin
456
+
457
+ data = rest_client.get( headers )
458
+ results = JSON.parse( data.body )
459
+ results = results.dig('results')
460
+
461
+ result[:status] = 200
462
+ result[:data] ||={}
463
+
464
+ results.each do |r|
465
+ attrs = r.dig('attrs')
466
+ if( !attrs.nil? )
467
+ result[:data][attrs['name']] = {
468
+ name: attrs['name'],
469
+ display_name: attrs['display_name'],
470
+ type: attrs['type']
471
+ }
472
+ else
473
+ result = r
474
+ end
475
+
476
+ end
477
+ rescue RestClient::Unauthorized => e
478
+
479
+ result = {
480
+ status: 401,
481
+ name: host,
482
+ message: 'unauthorized'
483
+ }
484
+
485
+ rescue RestClient::ExceptionWithResponse => e
486
+
487
+ error = e.response ? e.response : nil
488
+ error = JSON.parse( error )
489
+
490
+ result = {
491
+ status: error['error'].to_i,
492
+ name: host,
493
+ message: error['status']
494
+ }
495
+ rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
496
+
497
+ if( times_retried < max_retries )
498
+
499
+ times_retried += 1
500
+ $stderr.puts(format( 'Cannot execute request %s', url ))
501
+ $stderr.puts(format( ' cause: %s', e ))
502
+ $stderr.puts(format( ' retry %d / %d', times_retried, max_retries ))
503
+
504
+ sleep( 4 )
505
+ retry
506
+ else
507
+ $stderr.puts(format( "Maximum retries (%d) against '%s' reached. Giving up ...", max_retries, url ))
508
+
509
+ return {
510
+ status: 500,
511
+ message: format( "Maximum retries (%d) against '%s' reached. Giving up ...", max_retries, url )
512
+ }
513
+ end
514
+ end
515
+
516
+ result
517
+ end
518
+
519
+ # static function for GET Requests without filters
520
+ #
521
+ # @param [Hash] params
522
+ # @option params [String] :host
523
+ # @option params [String] :url
524
+ # @option params [String] :headers
525
+ # @option params [String] :options
526
+ # @option params [Hash] :payload
527
+ #
528
+ #
529
+ # @return [Hash]
530
+ #
531
+ def self.get_raw( params = {} )
532
+
533
+ host = params.dig(:host)
534
+ url = params.dig(:url)
535
+ headers = params.dig(:headers)
536
+ options = params.dig(:options)
537
+ payload = params.dig(:payload) || {}
538
+ result = {}
539
+ max_retries = 30
540
+ times_retried = 0
541
+
542
+ return get_with_payload( params ) if payload.count >= 1
543
+
544
+ headers.delete( 'X-HTTP-Method-Override' )
545
+
546
+ result = {}
547
+
548
+ rest_client = RestClient::Resource.new(
549
+ URI.encode( url ),
550
+ options
551
+ )
552
+
553
+ begin
554
+
555
+ data = rest_client.get( headers )
556
+ results = JSON.parse( data.body )
557
+ results = results.dig('results')
558
+
559
+ result[:status] = 200
560
+ result[:data] ||={}
561
+
562
+ results.each do |r|
563
+
564
+ r.reject! { |x| x == 'perfdata' }
565
+ result[:data][r.dig('name')] = r.dig('status')
566
+ end
567
+
568
+ rescue RestClient::ExceptionWithResponse => e
569
+
570
+ error = e.response ? e.response : nil
571
+ error = JSON.parse( error )
572
+
573
+ result = {
574
+ status: error['error'].to_i,
575
+ name: host,
576
+ message: error['status']
577
+ }
578
+ rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
579
+
580
+ if( times_retried < max_retries )
581
+
582
+ times_retried += 1
583
+ $stderr.puts(format( 'Cannot execute request %s', url ))
584
+ $stderr.puts(format( ' cause: %s', e ))
585
+ $stderr.puts(format( ' retry %d / %d', times_retried, max_retries ))
586
+
587
+ sleep( 4 )
588
+ retry
589
+ else
590
+ $stderr.puts(format( "Maximum retries (%d) against '%s' reached. Giving up ...", max_retries, url ))
591
+
592
+ return {
593
+ status: 500,
594
+ message: format( "Maximum retries (%d) against '%s' reached. Giving up ...", max_retries, url )
595
+ }
596
+ end
597
+ end
598
+
599
+ result
600
+ end
601
+
602
+
603
+ # static function for GET Requests with payload
604
+ # internal we use here an POST Request and overwrite a http header
605
+ #
606
+ # @param [Hash] params
607
+ # @option params [String] :host
608
+ # @option params [String] :url
609
+ # @option params [String] :headers
610
+ # @option params [String] :options
611
+ # @option params [Hash] :payload
612
+ #
613
+ #
614
+ # @return [Hash]
615
+ #
616
+ def self.get_with_payload( params = {} )
617
+
618
+ host = params.dig(:host)
619
+ url = params.dig(:url)
620
+ headers = params.dig(:headers)
621
+ options = params.dig(:options)
622
+ payload = params.dig(:payload) || {}
623
+ result = {}
624
+ max_retries = 30
625
+ times_retried = 0
626
+
627
+ headers['X-HTTP-Method-Override'] = 'GET'
628
+
629
+ rest_client = RestClient::Resource.new(
630
+ URI.encode( url ),
631
+ options
632
+ )
633
+
634
+ begin
635
+
636
+ response = rest_client.post(
637
+ JSON.generate( payload ),
638
+ headers
639
+ )
640
+
641
+ response_code = response.code
642
+ response_body = response.body
643
+ node = {}
644
+
645
+ data = JSON.parse( response_body )
646
+ results = data.dig('results')
647
+
648
+ unless( results.nil? )
649
+
650
+ results.each do |r|
651
+ node[r.dig('name')] = r
652
+ end
653
+
654
+ result = {
655
+ status: response_code,
656
+ nodes: node
657
+ }
658
+ end
659
+
660
+ rescue RestClient::ExceptionWithResponse => e
661
+
662
+ error = e.response ? e.response : nil
663
+ error = JSON.parse( error )
664
+
665
+ result = {
666
+ status: error['error'].to_i,
667
+ name: host,
668
+ message: error['status']
669
+ }
670
+ rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
671
+
672
+ if( times_retried < max_retries )
673
+
674
+ times_retried += 1
675
+ $stderr.puts(format( 'Cannot execute request %s', url ))
676
+ $stderr.puts(format( ' cause: %s', e ))
677
+ $stderr.puts(format( ' retry %d / %d', times_retried, max_retries ))
678
+
679
+ sleep( 4 )
680
+ retry
681
+ else
682
+ $stderr.puts( 'Exiting request ...' )
683
+
684
+ return {
685
+ status: 500,
686
+ message: format( 'Errno::ECONNREFUSED for request: %s', url )
687
+ }
688
+ end
689
+ end
690
+
691
+ result
692
+
693
+ end
694
+
695
+ # static function for POST Requests
696
+ #
697
+ # @param [Hash] params
698
+ # @option params [String] :url
699
+ # @option params [String] :headers
700
+ # @option params [String] :options
701
+ # @option params [Hash] :payload
702
+ #
703
+ #
704
+ # @return [Hash]
705
+ #
706
+ def self.post( params = {} )
707
+
708
+ url = params.dig(:url)
709
+ headers = params.dig(:headers)
710
+ options = params.dig(:options)
711
+ payload = params.dig(:payload)
712
+ max_retries = 30
713
+ times_retried = 0
714
+
715
+ headers['X-HTTP-Method-Override'] = 'POST'
716
+
717
+ result = {}
718
+
719
+ rest_client = RestClient::Resource.new(
720
+ URI.encode( url ),
721
+ options
722
+ )
723
+
724
+ begin
725
+
726
+ data = rest_client.post(
727
+ JSON.generate( payload ),
728
+ headers
729
+ )
730
+
731
+ data = JSON.parse( data )
732
+ results = data.dig('results').first
733
+
734
+ unless( results.nil? )
735
+
736
+ result = {
737
+ status: results.dig('code').to_i,
738
+ name: results.dig('name'),
739
+ message: results.dig('status')
740
+ }
741
+
742
+ end
743
+
744
+ rescue RestClient::ExceptionWithResponse => e
745
+
746
+ error = e.response ? e.response : nil
747
+ error = JSON.parse( error ) if error.is_a?( String )
748
+
749
+ results = error.dig( 'results' )
750
+
751
+ if( !results.nil? )
752
+
753
+ result = result.first
754
+
755
+ result = {
756
+ status: results.dig('code').to_i,
757
+ name: results.dig('name'),
758
+ message: results.dig('status'),
759
+ error: results.dig('errors')
760
+ }
761
+ else
762
+ result = {
763
+ status: error.dig( 'error' ).to_i,
764
+ message: error.dig( 'status' )
765
+ }
766
+ end
767
+
768
+ rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
769
+
770
+ if( times_retried < max_retries )
771
+
772
+ times_retried += 1
773
+ $stderr.puts(format( 'Cannot execute request %s', url ))
774
+ $stderr.puts(format( ' cause: %s', e ))
775
+ $stderr.puts(format( ' retry %d / %d', times_retried, max_retries ))
776
+
777
+ sleep( 4 )
778
+ retry
779
+ else
780
+ $stderr.puts( 'Exiting request ...' )
781
+
782
+ return {
783
+ status: 500,
784
+ message: format( 'Errno::ECONNREFUSED for request: %s', url )
785
+ }
786
+ end
787
+ end
788
+
789
+ result
790
+ end
791
+
792
+ # static function for PUT Requests
793
+ #
794
+ # @param [Hash] params
795
+ # @option params [String] :host
796
+ # @option params [String] :url
797
+ # @option params [String] :headers
798
+ # @option params [String] :options
799
+ # @option params [Hash] :payload
800
+ #
801
+ #
802
+ # @return [Hash]
803
+ #
804
+ def self.put( params = {} )
805
+
806
+ host = params.dig(:host)
807
+ url = params.dig(:url)
808
+ headers = params.dig(:headers)
809
+ options = params.dig(:options)
810
+ payload = params.dig(:payload)
811
+ max_retries = 30
812
+ times_retried = 0
813
+
814
+ headers['X-HTTP-Method-Override'] = 'PUT'
815
+
816
+ result = {}
817
+
818
+ rest_client = RestClient::Resource.new(
819
+ URI.encode( url ),
820
+ options
821
+ )
822
+
823
+ begin
824
+
825
+ data = rest_client.put(
826
+ JSON.generate( payload ),
827
+ headers
828
+ )
829
+
830
+ data = JSON.parse( data )
831
+ results = data.dig('results').first
832
+
833
+ unless( results.nil? )
834
+
835
+ result = {
836
+ status: results.dig('code').to_i,
837
+ name: results.dig('name'),
838
+ message: results.dig('status')
839
+ }
840
+
841
+ end
842
+
843
+ rescue RestClient::ExceptionWithResponse => e
844
+
845
+ error = e.response ? e.response : nil
846
+
847
+ error = JSON.parse( error ) if error.is_a?( String )
848
+
849
+ results = error.dig( 'results' )
850
+
851
+ if( !results.nil? )
852
+
853
+ if( result.is_a?( Hash ) && result.count != 0 )
854
+
855
+ result = result.first
856
+
857
+ result = {
858
+ status: results.dig('code').to_i,
859
+ name: results.dig('name'),
860
+ message: results.dig('status'),
861
+ error: results.dig('errors')
862
+ }
863
+
864
+ else
865
+
866
+ result = {
867
+ status: 204,
868
+ name: host,
869
+ message: 'unknown result'
870
+ }
871
+ end
872
+
873
+ else
874
+
875
+ result = {
876
+ status: error.dig( 'error' ).to_i,
877
+ message: error.dig( 'status' )
878
+ }
879
+
880
+ end
881
+
882
+ rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
883
+
884
+ if( times_retried < max_retries )
885
+
886
+ times_retried += 1
887
+ $stderr.puts(format( 'Cannot execute request %s', url ))
888
+ $stderr.puts(format( ' cause: %s', e ))
889
+ $stderr.puts(format( ' retry %d / %d', times_retried, max_retries ))
890
+
891
+ sleep( 4 )
892
+ retry
893
+ else
894
+ $stderr.puts( 'Exiting request ...' )
895
+
896
+ return {
897
+ status: 500,
898
+ message: format( 'Errno::ECONNREFUSED for request: %s', url )
899
+ }
900
+ end
901
+ end
902
+
903
+ result
904
+ end
905
+
906
+ # static function for DELETE Requests
907
+ #
908
+ # @param [Hash] params
909
+ # @option params [String] :url
910
+ # @option params [String] :headers
911
+ # @option params [String] :options
912
+ #
913
+ #
914
+ # @return [Hash]
915
+ #
916
+ def self.delete( params = {} )
917
+
918
+ url = params.dig(:url)
919
+ headers = params.dig(:headers)
920
+ options = params.dig(:options)
921
+ max_retries = 3
922
+ times_retried = 0
923
+
924
+ headers['X-HTTP-Method-Override'] = 'DELETE'
925
+
926
+ result = {}
927
+
928
+ rest_client = RestClient::Resource.new(
929
+ URI.encode( url ),
930
+ options
931
+ )
932
+
933
+ begin
934
+ data = rest_client.get( headers )
935
+
936
+ if( data )
937
+
938
+ data = JSON.parse( data ) #.body )
939
+ results = data.dig('results').first
940
+
941
+ unless( results.nil? )
942
+
943
+ result = {
944
+ status: results.dig('code').to_i,
945
+ name: results.dig('name'),
946
+ message: results.dig('status')
947
+ }
948
+
949
+ end
950
+ end
951
+
952
+ rescue RestClient::ExceptionWithResponse => e
953
+
954
+ error = e.response ? e.response : nil
955
+
956
+ error = JSON.parse( error ) if error.is_a?( String )
957
+
958
+ results = error.dig('results')
959
+
960
+ result = if( !results.nil? )
961
+
962
+ {
963
+ status: results.dig('code').to_i,
964
+ name: results.dig('name'),
965
+ message: results.dig('status')
966
+ }
967
+
968
+ else
969
+
970
+ {
971
+ status: error.dig( 'error' ).to_i,
972
+ # :name => results.dig('name'),
973
+ message: error.dig( 'status' )
974
+ }
975
+
976
+ end
977
+ rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
978
+
979
+ if( times_retried < max_retries )
980
+
981
+ times_retried += 1
982
+ $stderr.puts(format( 'Cannot execute request %s', url ))
983
+ $stderr.puts(format( ' cause: %s', e ))
984
+ $stderr.puts(format( ' retry %d / %d', times_retried, max_retries ))
985
+
986
+ sleep( 4 )
987
+ retry
988
+ else
989
+ $stderr.puts( 'Exiting request ...' )
990
+
991
+ return {
992
+ status: 500,
993
+ message: format( 'Errno::ECONNREFUSED for request: %s', url )
994
+ }
995
+ end
996
+ end
997
+
998
+ result
999
+ end
1000
+
1001
+ end
1002
+ end
1003
+
1004
+