icinga2 0.6.1 → 0.6.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.
@@ -2,14 +2,21 @@
2
2
  # frozen_string_literal: true
3
3
  module Icinga2
4
4
 
5
- #
6
- #
7
- #
5
+ # namespace for network handling
8
6
  module Network
9
7
 
8
+ # static function for GET Requests
10
9
  #
10
+ # @param [Hash] params
11
+ # @option params [String] :host
12
+ # @option params [String] :url
13
+ # @option params [String] :headers
14
+ # @option params [String] :options
15
+ # @option params [Hash] :payload
11
16
  #
12
17
  #
18
+ # @return [Hash]
19
+ #
13
20
  def self.get( params = {} )
14
21
 
15
22
  host = params.dig(:host)
@@ -95,8 +102,18 @@ module Icinga2
95
102
 
96
103
  end
97
104
 
105
+ # static function for GET Requests with payload
106
+ # internal we use here an POST Request and overwrite a http header
107
+ #
108
+ # @param [Hash] params
109
+ # @option params [String] :host
110
+ # @option params [String] :url
111
+ # @option params [String] :headers
112
+ # @option params [String] :options
113
+ # @option params [Hash] :payload
98
114
  #
99
115
  #
116
+ # @return [Hash]
100
117
  #
101
118
  def self.get_with_payload( params = {} )
102
119
 
@@ -177,8 +194,16 @@ module Icinga2
177
194
 
178
195
  end
179
196
 
197
+ # static function for POST Requests
198
+ #
199
+ # @param [Hash] params
200
+ # @option params [String] :url
201
+ # @option params [String] :headers
202
+ # @option params [String] :options
203
+ # @option params [Hash] :payload
180
204
  #
181
205
  #
206
+ # @return [Hash]
182
207
  #
183
208
  def self.post( params = {} )
184
209
 
@@ -265,9 +290,18 @@ module Icinga2
265
290
  result
266
291
  end
267
292
 
293
+ # static function for PUT Requests
268
294
  #
295
+ # @param [Hash] params
296
+ # @option params [String] :host
297
+ # @option params [String] :url
298
+ # @option params [String] :headers
299
+ # @option params [String] :options
300
+ # @option params [Hash] :payload
269
301
  #
270
302
  #
303
+ # @return [Hash]
304
+ #
271
305
  def self.put( params = {} )
272
306
 
273
307
  host = params.dig(:host)
@@ -369,8 +403,15 @@ module Icinga2
369
403
  result
370
404
  end
371
405
 
406
+ # static function for DELETE Requests
407
+ #
408
+ # @param [Hash] params
409
+ # @option params [String] :url
410
+ # @option params [String] :headers
411
+ # @option params [String] :options
372
412
  #
373
413
  #
414
+ # @return [Hash]
374
415
  #
375
416
  def self.delete( params = {} )
376
417
 
@@ -3,34 +3,47 @@
3
3
 
4
4
  module Icinga2
5
5
 
6
- #
7
- #
8
- #
6
+ # namespace for servicegroup handling
9
7
  module Notifications
10
8
 
9
+ # enable host notifications
11
10
  #
11
+ # @param [String] host
12
12
  #
13
+ # @example
14
+ # @icinga.enable_host_notification('icinga')
15
+ #
16
+ # @return [Hash]
13
17
  #
14
18
  def enable_host_notification( host )
15
19
 
16
20
  host_notification( name: host, enable_notifications: true )
17
21
  end
18
22
 
23
+ # disable host notifications
24
+ #
25
+ # @param [String] host
19
26
  #
27
+ # @example
28
+ # @icinga.disable_host_notification('icinga')
20
29
  #
30
+ # @return [Hash]
21
31
  #
22
32
  def disable_host_notification( host )
23
33
 
24
34
  host_notification( name: host, enable_notifications: false )
25
35
  end
26
36
 
37
+ # enable service notifications
27
38
  #
39
+ # @param [String] host
28
40
  #
41
+ # @example
42
+ # @icinga.enable_service_notification('icinga')
29
43
  #
30
- def enable_service_notification( params = {} )
31
-
32
- host = params.get(:host)
33
- service = params.get(:service)
44
+ # @return [Hash]
45
+ #
46
+ def enable_service_notification( host )
34
47
 
35
48
  if( host.nil? )
36
49
 
@@ -40,52 +53,125 @@ module Icinga2
40
53
  }
41
54
  end
42
55
 
43
- service_notification( name: host, service: service, enable_notifications: true )
56
+ service_notification( name: host, enable_notifications: true )
44
57
  end
45
58
 
59
+ # disable service notifications
60
+ #
61
+ # @param [String] host
46
62
  #
63
+ # @example
64
+ # @icinga.disable_service_notification('icinga')
47
65
  #
66
+ # @return [Hash]
48
67
  #
49
68
  def disable_service_notification( host )
50
69
 
70
+ if( host.nil? )
71
+ return {
72
+ status: 404,
73
+ message: 'missing host name'
74
+ }
75
+ end
76
+
51
77
  service_notification( name: host, enable_notifications: false )
52
78
  end
53
79
 
80
+ # enable hostgroup notifications
54
81
  #
82
+ # @param [Hash] params
83
+ # @option params [String] host
84
+ # @option params [String] host_group
55
85
  #
86
+ # @example
87
+ # @icinga.enable_hostgroup_notification(host: 'icinga2', host_group: 'linux-servers')
56
88
  #
57
- def enable_hostgroup_notification( group )
89
+ # @return [Hash]
90
+ #
91
+ def enable_hostgroup_notification( params = {} )
92
+
93
+ host = params.dig(:host)
94
+ host_group = params.dig(:host_group)
95
+
96
+ if( host.nil? )
97
+ return {
98
+ status: 404,
99
+ message: 'missing host name'
100
+ }
101
+ end
102
+
103
+ if( host_group.nil? )
104
+ return {
105
+ status: 404,
106
+ message: 'missing host_group name'
107
+ }
108
+ end
58
109
 
59
- hostgroup_notification( host_group: group, enable_notifications: true )
110
+ hostgroup_notification( host: host, host_group: host_group, enable_notifications: true )
60
111
  end
61
112
 
113
+ # disable hostgroup notifications
62
114
  #
115
+ # @param [Hash] params
116
+ # @option params [String] host
117
+ # @option params [String] host_group
63
118
  #
119
+ # @example
120
+ # @icinga.disable_hostgroup_notification(host: 'icinga2', host_group: 'linux-servers')
64
121
  #
65
- def disable_hostgroup_notification( group )
122
+ # @return [Hash]
123
+ #
124
+ def disable_hostgroup_notification( params = {} )
125
+
126
+ host = params.dig(:host)
127
+ host_group = params.dig(:host_group)
128
+
129
+ if( host.nil? )
130
+ return {
131
+ status: 404,
132
+ message: 'missing host name'
133
+ }
134
+ end
66
135
 
67
- hostgroup_notification( host_group: group, enable_notifications: false )
136
+ if( host_group.nil? )
137
+ return {
138
+ status: 404,
139
+ message: 'missing host_group name'
140
+ }
141
+ end
142
+
143
+ hostgroup_notification( host: host, host_group: host_group, enable_notifications: false )
68
144
  end
69
145
 
146
+ # return all notifications
70
147
  #
148
+ # @param [Hash] params
149
+ # @option params [String] name
71
150
  #
151
+ # @return [Hash]
72
152
  #
73
153
  def notifications( params = {} )
74
154
 
75
155
  name = params.dig(:name)
76
156
 
77
- result = Network.get( host: name,
157
+ Network.get( host: name,
78
158
  url: format( '%s/v1/objects/notifications/%s', @icinga_api_url_base, name ),
79
159
  headers: @headers,
80
160
  options: @options )
81
161
 
82
- JSON.pretty_generate( result )
83
-
84
162
  end
85
163
 
86
164
 
87
- # PRIVATE SECTION
165
+ # function for host notifications
166
+ # @private
88
167
  #
168
+ # @param [Hash] params
169
+ # @option params [String] name
170
+ # @option params [Bool] enable_notifications (false)
171
+ #
172
+ # @return [Hash]
173
+ #
174
+ private
89
175
  def host_notification( params = {} )
90
176
 
91
177
  name = params.dig(:name)
@@ -97,21 +183,27 @@ module Icinga2
97
183
  }
98
184
  }
99
185
 
100
- result = Network.post( host: name,
186
+ Network.post( host: name,
101
187
  url: format( '%s/v1/objects/hosts/%s', @icinga_api_url_base, name ),
102
188
  headers: @headers,
103
189
  options: @options,
104
190
  payload: payload )
105
191
 
106
- JSON.pretty_generate( result )
107
-
108
192
  end
109
193
 
194
+ # function for hostgroup notifications
195
+ # @private
110
196
  #
197
+ # @param [Hash] params
198
+ # @option params [String] host_group
199
+ # @option params [Bool] enable_notifications (false)
111
200
  #
201
+ # @return [Hash]
112
202
  #
203
+ private
113
204
  def hostgroup_notification( params = {} )
114
205
 
206
+ host = params.dig(:host)
115
207
  group = params.dig(:host_group)
116
208
  notifications = params.dig(:enable_notifications) || false
117
209
 
@@ -122,19 +214,24 @@ module Icinga2
122
214
  }
123
215
  }
124
216
 
125
- result = Network.post( host: name,
217
+ Network.post( host: host,
126
218
  url: format( '%s/v1/objects/services', @icinga_api_url_base ),
127
219
  headers: @headers,
128
220
  options: @options,
129
221
  payload: payload )
130
222
 
131
- JSON.pretty_generate( result )
132
-
133
223
  end
134
224
 
225
+ # function for service notifications
226
+ # @private
135
227
  #
228
+ # @param [Hash] params
229
+ # @option params [String] name
230
+ # @option params [Bool] enable_notifications (false)
136
231
  #
232
+ # @return [Hash]
137
233
  #
234
+ private
138
235
  def service_notification( params = {} )
139
236
 
140
237
  name = params.dig(:name)
@@ -147,14 +244,12 @@ module Icinga2
147
244
  }
148
245
  }
149
246
 
150
- result = Network.post( host: name,
247
+ Network.post( host: name,
151
248
  url: format( '%s/v1/objects/services', @icinga_api_url_base ),
152
249
  headers: @headers,
153
250
  options: @options,
154
251
  payload: payload )
155
252
 
156
- JSON.pretty_generate( result )
157
-
158
253
  end
159
254
 
160
255
  end
@@ -3,17 +3,25 @@
3
3
 
4
4
  module Icinga2
5
5
 
6
- #
7
- #
8
- #
6
+ # namespace for servicegroup handling
9
7
  module Servicegroups
10
8
 
9
+ # add a servicegroup
11
10
  #
11
+ # @param [Hash] params
12
+ # @option params [String] :name servicegroup to create
13
+ # @option params [String] :display_name the displayed name
12
14
  #
15
+ # @example
16
+ # @icinga.add_servicegroup(name: 'foo', display_name: 'FOO')
17
+ #
18
+ # @return [Hash] result
13
19
  #
14
20
  def add_servicegroup( params = {} )
21
+
15
22
  name = params.dig(:name)
16
23
  display_name = params.dig(:display_name)
24
+
17
25
  if( name.nil? )
18
26
  return {
19
27
  status: 404,
@@ -23,20 +31,28 @@ module Icinga2
23
31
 
24
32
  payload = { 'attrs' => { 'display_name' => display_name } }
25
33
 
26
- result = Network.put( host: name,
34
+ Network.put( host: name,
27
35
  url: format( '%s/v1/objects/servicegroups/%s', @icinga_api_url_base, name ),
28
36
  headers: @headers,
29
37
  options: @options,
30
38
  payload: payload )
31
39
 
32
- JSON.pretty_generate( result )
33
40
  end
34
41
 
42
+ # delete a servicegroup
43
+ #
44
+ # @param [Hash] params
45
+ # @option params [String] :name servicegroup to delete
35
46
  #
47
+ # @example
48
+ # @icinga.delete_servicegroup(name: 'foo')
36
49
  #
50
+ # @return [Hash] result
37
51
  #
38
52
  def delete_servicegroup( params = {} )
53
+
39
54
  name = params.dig(:name)
55
+
40
56
  if( name.nil? )
41
57
  return {
42
58
  status: 404,
@@ -44,34 +60,52 @@ module Icinga2
44
60
  }
45
61
  end
46
62
 
47
- result = Network.delete( host: name,
63
+ Network.delete( host: name,
48
64
  url: format( '%s/v1/objects/servicegroups/%s?cascade=1', @icinga_api_url_base, name ),
49
65
  headers: @headers,
50
66
  options: @options )
51
67
 
52
- JSON.pretty_generate( result )
53
68
  end
54
69
 
70
+ # returns all servicegroups
71
+ #
72
+ # @param [Hash] params
73
+ # @option params [String] :name ('') optional for a single servicegroup
55
74
  #
75
+ # @example to get all users
76
+ # @icinga.servicegroups
56
77
  #
78
+ # @example to get one user
79
+ # @icinga.servicegroups(name: 'disk')
80
+ #
81
+ # @return [Hash] returns a hash with all servicegroups
57
82
  #
58
83
  def servicegroups( params = {} )
84
+
59
85
  name = params.dig(:name)
60
- result = Network.get( host: name,
86
+
87
+ Network.get( host: name,
61
88
  url: format( '%s/v1/objects/servicegroups/%s', @icinga_api_url_base, name ),
62
89
  headers: @headers,
63
90
  options: @options )
64
91
 
65
- JSON.pretty_generate( result )
66
92
  end
67
93
 
94
+ # returns true if the servicegroup exists
68
95
  #
96
+ # @param [String] name the name of the servicegroups
69
97
  #
98
+ # @example
99
+ # @icinga.exists_servicegroup?('disk')
100
+ #
101
+ # @return [Bool] returns true if the servicegroup exists
70
102
  #
71
103
  def exists_servicegroup?( name )
72
104
  result = servicegroups( name: name )
73
105
  result = JSON.parse( result ) if result.is_a?( String )
74
- status = result.dig('status')
106
+
107
+ status = result.dig(:status)
108
+
75
109
  return true if !status.nil? && status == 200
76
110
  false
77
111
  end