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
@@ -0,0 +1,191 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
|
4
|
+
module Icinga2
|
5
|
+
|
6
|
+
# namespace for icinga2 statistics
|
7
|
+
module Statistics
|
8
|
+
|
9
|
+
|
10
|
+
# return statistic data for latency and execution_time
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# @icinga.cib_data
|
14
|
+
# latency, execution_time = @icinga.average_statistics.values
|
15
|
+
#
|
16
|
+
# h = @icinga.average_statistics
|
17
|
+
# latency = h.dig(:latency)
|
18
|
+
#
|
19
|
+
# @return [Hash]
|
20
|
+
# * latency (Float)
|
21
|
+
# * execution_time (Float)
|
22
|
+
#
|
23
|
+
def average_statistics
|
24
|
+
avg_latency = @avg_latency.nil? ? 0 : @avg_latency
|
25
|
+
avg_execution_time = @avg_execution_time.nil? ? 0 : @avg_execution_time
|
26
|
+
|
27
|
+
{
|
28
|
+
latency: avg_latency.to_f,
|
29
|
+
execution_time: avg_execution_time.to_f
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
# return statistic data for intervall data
|
34
|
+
#
|
35
|
+
# @example
|
36
|
+
# @icinga.cib_data
|
37
|
+
# hosts_active_checks, hosts_passive_checks, services_active_checks, services_passive_checks = @icinga.interval_statistics.values
|
38
|
+
#
|
39
|
+
# i = @icinga.interval_statistics
|
40
|
+
# hosts_active_checks = i.dig(:hosts_active_checks)
|
41
|
+
#
|
42
|
+
# @return [Hash]
|
43
|
+
# * hosts_active_checks (Float)
|
44
|
+
# * hosts_passive_checks (Float)
|
45
|
+
# * services_active_checks (Float)
|
46
|
+
# * services_passive_checks (Float)
|
47
|
+
#
|
48
|
+
def interval_statistics
|
49
|
+
|
50
|
+
# take a look into https://github.com/Icinga/pkg-icinga2-debian/blob/master/lib/icinga/cib.cpp
|
51
|
+
|
52
|
+
hosts_active_checks = @hosts_active_checks_1min.nil? ? 0 : @hosts_active_checks_1min
|
53
|
+
hosts_passive_checks = @hosts_passive_checks_1min.nil? ? 0 : @hosts_passive_checks_1min
|
54
|
+
services_active_checks = @services_active_checks_1min.nil? ? 0 : @services_active_checks_1min
|
55
|
+
services_passive_checks = @services_passive_checks_1min.nil? ? 0 : @services_passive_checks_1min
|
56
|
+
|
57
|
+
{
|
58
|
+
hosts_active_checks: hosts_active_checks.to_f,
|
59
|
+
hosts_passive_checks: hosts_passive_checks.to_f,
|
60
|
+
services_active_checks: services_active_checks.to_f,
|
61
|
+
services_passive_checks: services_passive_checks.to_f
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
# return statistic data for services
|
66
|
+
#
|
67
|
+
# @example
|
68
|
+
# @icinga.cib_data
|
69
|
+
# ok, warning, critical, unknown, pending, in_downtime, ack = @icinga.service_statistics.values
|
70
|
+
#
|
71
|
+
# s = @icinga.service_statistics
|
72
|
+
# critical = s.dig(:critical)
|
73
|
+
#
|
74
|
+
# @return [Hash]
|
75
|
+
# * ok (Integer)
|
76
|
+
# * warning (Integer)
|
77
|
+
# * critical (Integer)
|
78
|
+
# * unknown (Integer)
|
79
|
+
# * pending (Integer)
|
80
|
+
# * in_downtime (Integer)
|
81
|
+
# * acknowledged (Integer)
|
82
|
+
#
|
83
|
+
def service_statistics
|
84
|
+
|
85
|
+
services_ok = @services_ok.nil? ? 0 : @services_ok
|
86
|
+
services_warning = @services_warning.nil? ? 0 : @services_warning
|
87
|
+
services_critical = @services_critical.nil? ? 0 : @services_critical
|
88
|
+
services_unknown = @services_unknown.nil? ? 0 : @services_unknown
|
89
|
+
services_pending = @services_pending.nil? ? 0 : @services_pending
|
90
|
+
services_in_downtime = @services_in_downtime.nil? ? 0 : @services_in_downtime
|
91
|
+
services_acknowledged = @services_acknowledged.nil? ? 0 : @services_acknowledged
|
92
|
+
|
93
|
+
{
|
94
|
+
ok: services_ok.to_i,
|
95
|
+
warning: services_warning.to_i,
|
96
|
+
critical: services_critical.to_i,
|
97
|
+
unknown: services_unknown.to_i,
|
98
|
+
pending: services_pending.to_i,
|
99
|
+
in_downtime: services_in_downtime.to_i,
|
100
|
+
acknowledged: services_acknowledged.to_i
|
101
|
+
}
|
102
|
+
end
|
103
|
+
|
104
|
+
# return statistic data for hosts
|
105
|
+
#
|
106
|
+
# @example
|
107
|
+
# @icinga.cib_data
|
108
|
+
# up, down, pending, unreachable, in_downtime, ack = @icinga.host_statistics.values
|
109
|
+
#
|
110
|
+
# h = @icinga.host_statistics
|
111
|
+
# pending = h.dig(:pending)
|
112
|
+
#
|
113
|
+
# @return [Hash]
|
114
|
+
# * up (Integer)
|
115
|
+
# * down (Integer)
|
116
|
+
# * pending (Integer)
|
117
|
+
# * unreachable (Integer)
|
118
|
+
# * in_downtime (Integer)
|
119
|
+
# * acknowledged (Integer)
|
120
|
+
#
|
121
|
+
def host_statistics
|
122
|
+
|
123
|
+
hosts_up = @hosts_up.nil? ? 0 : @hosts_up
|
124
|
+
hosts_down = @hosts_down.nil? ? 0 : @hosts_down
|
125
|
+
hosts_pending = @hosts_pending.nil? ? 0 : @hosts_pending
|
126
|
+
hosts_unreachable = @hosts_unreachable.nil? ? 0 : @hosts_unreachable
|
127
|
+
hosts_in_downtime = @hosts_in_downtime.nil? ? 0 : @hosts_in_downtime
|
128
|
+
hosts_acknowledged = @hosts_acknowledged.nil? ? 0 : @hosts_acknowledged
|
129
|
+
|
130
|
+
{
|
131
|
+
up: hosts_up.to_i,
|
132
|
+
down: hosts_down.to_i,
|
133
|
+
pending: hosts_pending.to_i,
|
134
|
+
unreachable: hosts_unreachable.to_i,
|
135
|
+
in_downtime: hosts_in_downtime.to_i,
|
136
|
+
acknowledged: hosts_acknowledged.to_i
|
137
|
+
}
|
138
|
+
end
|
139
|
+
|
140
|
+
|
141
|
+
# return queue statistics from the api
|
142
|
+
#
|
143
|
+
# @example
|
144
|
+
# @icinga.work_queue_statistics
|
145
|
+
#
|
146
|
+
# @return [Hash]
|
147
|
+
#
|
148
|
+
def work_queue_statistics
|
149
|
+
|
150
|
+
stats = {}
|
151
|
+
data = Network.api_data(
|
152
|
+
url: format( '%s/status', @icinga_api_url_base ),
|
153
|
+
headers: @headers,
|
154
|
+
options: @options
|
155
|
+
)
|
156
|
+
|
157
|
+
return stats if data.nil?
|
158
|
+
|
159
|
+
if( data.dig(:status).nil? )
|
160
|
+
results = data.dig('results')
|
161
|
+
|
162
|
+
json_rpc_data = results.find { |k| k['name'] == 'ApiListener' }
|
163
|
+
graphite_data = results.find { |k| k['name'] == 'GraphiteWriter' }
|
164
|
+
ido_mysql_data = results.find { |k| k['name'] == 'IdoMysqlConnection' }
|
165
|
+
|
166
|
+
json_rpc_data = json_rpc_data.dig('status', 'api', 'json_rpc') unless( json_rpc_data.nil? )
|
167
|
+
graphite_data = graphite_data.dig('status', 'graphitewriter', 'graphite') unless( graphite_data.nil? )
|
168
|
+
ido_mysql_data = ido_mysql_data.dig('status', 'idomysqlconnection', 'ido-mysql') unless( ido_mysql_data.nil? )
|
169
|
+
|
170
|
+
a = {}
|
171
|
+
a['json_rpc'] = json_rpc_data if(json_rpc_data.is_a?(Hash))
|
172
|
+
a['graphite'] = graphite_data if(graphite_data.is_a?(Hash))
|
173
|
+
a['ido-mysql'] = ido_mysql_data if(ido_mysql_data.is_a?(Hash))
|
174
|
+
|
175
|
+
key_list = %w[work_queue_item_rate query_queue_item_rate]
|
176
|
+
|
177
|
+
a.each do |k,v|
|
178
|
+
key_list.each do |key|
|
179
|
+
if( v.include?( key ))
|
180
|
+
attr_name = format('%s queue rate', k)
|
181
|
+
stats[attr_name] = v[key].to_f.round(3)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
stats
|
188
|
+
end
|
189
|
+
|
190
|
+
end
|
191
|
+
end
|
data/lib/icinga2/tools.rb
CHANGED
@@ -13,7 +13,7 @@ module Icinga2
|
|
13
13
|
#
|
14
14
|
# @return [Bool]
|
15
15
|
#
|
16
|
-
def object_has_been_checked?(object)
|
16
|
+
def object_has_been_checked?( object )
|
17
17
|
object.dig('attrs', 'last_check').positive?
|
18
18
|
end
|
19
19
|
|
@@ -23,7 +23,7 @@ module Icinga2
|
|
23
23
|
#
|
24
24
|
# @return [String, String]
|
25
25
|
#
|
26
|
-
def parse_version(version)
|
26
|
+
def parse_version( version )
|
27
27
|
|
28
28
|
# version = "v2.4.10-504-gab4ba18"
|
29
29
|
# version = "v2.4.10"
|
@@ -46,43 +46,48 @@ module Icinga2
|
|
46
46
|
# return count of handled problems
|
47
47
|
#
|
48
48
|
# @param [Hash] objects
|
49
|
-
# @param [Integer]
|
49
|
+
# @param [Integer] state (nil)
|
50
50
|
#
|
51
51
|
# @example for host objects
|
52
52
|
# h_objects = @icinga.host_objects
|
53
|
-
#
|
53
|
+
# all = @icinga.count_problems(h_objects)
|
54
|
+
# down = @icinga.count_problems(h_objects, Icinga2::HOSTS_DOWN)
|
55
|
+
# critical = @icinga.count_problems(h_objects, Icinga2::HOSTS_CRITICAL)
|
56
|
+
# unknown = @icinga.count_problems(h_objects, Icinga2::HOSTS_UNKNOWN)
|
54
57
|
#
|
55
58
|
# @example for service objects
|
56
59
|
# s_objects = @icinga.service_objects
|
57
|
-
#
|
58
|
-
#
|
59
|
-
#
|
60
|
+
# all = @icinga.count_problems(s_objects)
|
61
|
+
# warning = @icinga.count_problems(s_objects, Icinga2::SERVICE_STATE_WARNING)
|
62
|
+
# critical = @icinga.count_problems(s_objects, Icinga2::SERVICE_STATE_CRITICAL)
|
63
|
+
# unknown = @icinga.count_problems(s_objects, Icinga2::SERVICE_STATE_UNKNOWN)
|
60
64
|
#
|
61
65
|
# @return [Integer]
|
62
66
|
#
|
63
|
-
def
|
67
|
+
def count_problems( objects, state = nil )
|
64
68
|
|
65
|
-
|
69
|
+
compare_states = []
|
66
70
|
|
67
|
-
|
68
|
-
nodes = objects.dig(:nodes)
|
71
|
+
unless( state.nil? )
|
69
72
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
+
# 0 = "Up" or "OK"
|
74
|
+
# 1 = "Down" or "Warning"
|
75
|
+
# 2 = "Critical"
|
76
|
+
# 3 = "Unknown"
|
77
|
+
compare_states = [1, 2, 3]
|
78
|
+
end
|
73
79
|
|
74
|
-
|
75
|
-
state = attrs.dig('state') || 0
|
76
|
-
downtime_depth = attrs.dig('downtime_depth') || 0
|
77
|
-
acknowledgement = attrs.dig('acknowledgement') || 0
|
80
|
+
compare_states.push(state) if( state.is_a?(Integer) )
|
78
81
|
|
79
|
-
|
80
|
-
problems += 1
|
81
|
-
end
|
82
|
+
objects = JSON.parse(objects) if objects.is_a?(String)
|
82
83
|
|
83
|
-
|
84
|
+
f = objects.select do |t|
|
85
|
+
t.dig('attrs','state') == state && \
|
86
|
+
( !t.dig('attrs','downtime_depth').nil? && t.dig('attrs','downtime_depth').zero?) && \
|
87
|
+
( !t.dig('attrs','acknowledgement').nil? && t.dig('attrs','acknowledgement').zero? )
|
84
88
|
end
|
85
|
-
|
89
|
+
|
90
|
+
f.size
|
86
91
|
end
|
87
92
|
|
88
93
|
end
|
data/lib/icinga2/usergroups.rb
CHANGED
@@ -9,25 +9,23 @@ module Icinga2
|
|
9
9
|
# add a usergroup
|
10
10
|
#
|
11
11
|
# @param [Hash] params
|
12
|
-
# @option params [String] :
|
12
|
+
# @option params [String] :user_group usergroup to create
|
13
13
|
# @option params [String] :display_name the displayed name
|
14
14
|
#
|
15
15
|
# @example
|
16
|
-
# @icinga.add_usergroup(
|
16
|
+
# @icinga.add_usergroup(user_group: 'foo', display_name: 'FOO')
|
17
17
|
#
|
18
18
|
# @return [Hash] result
|
19
19
|
#
|
20
|
-
def add_usergroup( params
|
20
|
+
def add_usergroup( params )
|
21
21
|
|
22
|
-
|
22
|
+
raise ArgumentError.new('only Hash are allowed') unless( params.is_a?(Hash) )
|
23
|
+
raise ArgumentError.new('missing params') if( params.size.zero? )
|
24
|
+
|
25
|
+
user_group = params.dig(:user_group)
|
23
26
|
display_name = params.dig(:display_name)
|
24
27
|
|
25
|
-
if(
|
26
|
-
return {
|
27
|
-
status: 404,
|
28
|
-
message: 'missing usergroup name'
|
29
|
-
}
|
30
|
-
end
|
28
|
+
raise ArgumentError.new('Missing user_group') if( user_group.nil? )
|
31
29
|
|
32
30
|
payload = {
|
33
31
|
'attrs' => {
|
@@ -35,82 +33,94 @@ module Icinga2
|
|
35
33
|
}
|
36
34
|
}
|
37
35
|
|
38
|
-
Network.put(
|
39
|
-
url: format( '%s/
|
36
|
+
Network.put(
|
37
|
+
url: format( '%s/objects/usergroups/%s', @icinga_api_url_base, user_group ),
|
40
38
|
headers: @headers,
|
41
39
|
options: @options,
|
42
|
-
payload: payload
|
43
|
-
|
40
|
+
payload: payload
|
41
|
+
)
|
44
42
|
end
|
45
43
|
|
46
44
|
# delete a usergroup
|
47
45
|
#
|
48
46
|
# @param [Hash] params
|
49
|
-
# @option params [String] :
|
47
|
+
# @option params [String] :user_group usergroup to delete
|
50
48
|
#
|
51
49
|
# @example
|
52
|
-
# @icinga.delete_usergroup(
|
50
|
+
# @icinga.delete_usergroup(user_group: 'foo')
|
53
51
|
#
|
54
52
|
# @return [Hash] result
|
55
53
|
#
|
56
|
-
def delete_usergroup( params
|
54
|
+
def delete_usergroup( params )
|
57
55
|
|
58
|
-
|
56
|
+
raise ArgumentError.new('only Hash are allowed') unless( params.is_a?(Hash) )
|
57
|
+
raise ArgumentError.new('missing params') if( params.size.zero? )
|
59
58
|
|
60
|
-
|
61
|
-
return {
|
62
|
-
status: 404,
|
63
|
-
message: 'missing usergroup name'
|
64
|
-
}
|
65
|
-
end
|
59
|
+
user_group = params.dig(:user_group)
|
66
60
|
|
67
|
-
|
68
|
-
url: format( '%s/v1/objects/usergroups/%s?cascade=1', @icinga_api_url_base, name ),
|
69
|
-
headers: @headers,
|
70
|
-
options: @options )
|
61
|
+
raise ArgumentError.new('Missing user_group') if( user_group.nil? )
|
71
62
|
|
63
|
+
Network.delete(
|
64
|
+
url: format( '%s/objects/usergroups/%s?cascade=1', @icinga_api_url_base, user_group ),
|
65
|
+
headers: @headers,
|
66
|
+
options: @options
|
67
|
+
)
|
72
68
|
end
|
73
69
|
|
74
70
|
# returns all usersgroups
|
75
71
|
#
|
76
72
|
# @param [Hash] params
|
77
|
-
# @option params [String] :
|
73
|
+
# @option params [String] :user_group ('') optional for a single usergroup
|
78
74
|
#
|
79
75
|
# @example to get all users
|
80
76
|
# @icinga.usergroups
|
81
77
|
#
|
82
78
|
# @example to get one user
|
83
|
-
# @icinga.usergroups(
|
79
|
+
# @icinga.usergroups(user_group: 'icingaadmins')
|
84
80
|
#
|
85
81
|
# @return [Hash] returns a hash with all usergroups
|
86
82
|
#
|
87
83
|
def usergroups( params = {} )
|
88
84
|
|
89
|
-
|
85
|
+
user_group = params.dig(:user_group)
|
86
|
+
|
87
|
+
url =
|
88
|
+
if( user_group.nil? )
|
89
|
+
format( '%s/objects/usergroups' , @icinga_api_url_base )
|
90
|
+
else
|
91
|
+
format( '%s/objects/usergroups/%s', @icinga_api_url_base, user_group )
|
92
|
+
end
|
90
93
|
|
91
|
-
Network.
|
92
|
-
url:
|
94
|
+
data = Network.api_data(
|
95
|
+
url: url,
|
93
96
|
headers: @headers,
|
94
|
-
options: @options
|
97
|
+
options: @options
|
98
|
+
)
|
95
99
|
|
100
|
+
return data.dig('results') if( data.dig(:status).nil? )
|
101
|
+
|
102
|
+
nil
|
96
103
|
end
|
97
104
|
|
98
105
|
# returns true if the usergroup exists
|
99
106
|
#
|
100
|
-
# @param [String]
|
107
|
+
# @param [String] user_group the name of the usergroups
|
101
108
|
#
|
102
109
|
# @example
|
103
110
|
# @icinga.exists_usergroup?('icingaadmins')
|
104
111
|
#
|
105
112
|
# @return [Bool] returns true if the usergroup exists
|
106
113
|
#
|
107
|
-
def exists_usergroup?(
|
114
|
+
def exists_usergroup?( user_group )
|
115
|
+
|
116
|
+
raise ArgumentError.new('only String are allowed') unless( user_group.is_a?(String) )
|
117
|
+
raise ArgumentError.new('Missing user_group') if( user_group.size.zero? )
|
108
118
|
|
109
|
-
result = usergroups(
|
119
|
+
result = usergroups( user_group: user_group )
|
110
120
|
result = JSON.parse( result ) if result.is_a?( String )
|
111
|
-
status = result.dig(:status)
|
112
121
|
|
113
|
-
return true if !
|
122
|
+
return true if !result.nil? && result.is_a?(Array)
|
123
|
+
|
114
124
|
false
|
115
125
|
end
|
116
126
|
|
data/lib/icinga2/users.rb
CHANGED
@@ -9,41 +9,32 @@ module Icinga2
|
|
9
9
|
# add a user
|
10
10
|
#
|
11
11
|
# @param [Hash] params
|
12
|
-
# @option params [String] :
|
13
|
-
# @option params [String] :display_name the displayed name
|
12
|
+
# @option params [String] :user_name ('') user to create
|
13
|
+
# @option params [String] :display_name ('') the displayed name
|
14
14
|
# @option params [String] :email ('') the user email
|
15
15
|
# @option params [String] :pager ('') optional a pager
|
16
16
|
# @option params [Bool] :enable_notifications (false) enable notifications for this user
|
17
17
|
# @option params [Array] :groups ([]) a hash with groups
|
18
18
|
#
|
19
19
|
# @example
|
20
|
-
# @icinga.add_user(
|
20
|
+
# @icinga.add_user(user_name: 'foo', display_name: 'FOO', email: 'foo@bar.com', pager: '0000', groups: ['icingaadmins'])
|
21
21
|
#
|
22
22
|
# @return [Hash] result
|
23
23
|
#
|
24
|
-
def add_user( params
|
24
|
+
def add_user( params )
|
25
25
|
|
26
|
-
|
26
|
+
raise ArgumentError.new('only Hash are allowed') unless( params.is_a?(Hash) )
|
27
|
+
raise ArgumentError.new('missing params') if( params.size.zero? )
|
28
|
+
|
29
|
+
user_name = params.dig(:user_name)
|
27
30
|
display_name = params.dig(:display_name)
|
28
31
|
email = params.dig(:email)
|
29
32
|
pager = params.dig(:pager)
|
30
33
|
notifications = params.dig(:enable_notifications) || false
|
31
34
|
groups = params.dig(:groups) || []
|
32
35
|
|
33
|
-
if(
|
34
|
-
|
35
|
-
status: 404,
|
36
|
-
message: 'missing user name'
|
37
|
-
}
|
38
|
-
end
|
39
|
-
|
40
|
-
unless( groups.is_a?( Array ) )
|
41
|
-
return {
|
42
|
-
status: 404,
|
43
|
-
message: 'groups must be an array',
|
44
|
-
data: params
|
45
|
-
}
|
46
|
-
end
|
36
|
+
raise ArgumentError.new('Missing user_name') if( user_name.nil? )
|
37
|
+
raise ArgumentError.new('groups must be an array') unless( groups.is_a?( Array ) )
|
47
38
|
|
48
39
|
payload = {
|
49
40
|
'attrs' => {
|
@@ -73,90 +64,94 @@ module Icinga2
|
|
73
64
|
}
|
74
65
|
end
|
75
66
|
|
76
|
-
Network.put(
|
77
|
-
url: format( '%s/
|
67
|
+
Network.put(
|
68
|
+
url: format( '%s/objects/users/%s', @icinga_api_url_base, user_name ),
|
78
69
|
headers: @headers,
|
79
70
|
options: @options,
|
80
|
-
payload: payload
|
81
|
-
|
82
|
-
# result:
|
83
|
-
# {:status=>200, :name=>nil, :message=>"Object was created"}
|
71
|
+
payload: payload
|
72
|
+
)
|
84
73
|
end
|
85
74
|
|
86
75
|
# delete a user
|
87
76
|
#
|
88
77
|
# @param [Hash] params
|
89
|
-
# @option params [String] :
|
78
|
+
# @option params [String] :user_name user to delete
|
90
79
|
#
|
91
80
|
# @example
|
92
|
-
# @icinga.delete_user(
|
81
|
+
# @icinga.delete_user(user_name: 'foo')
|
93
82
|
#
|
94
83
|
# @return [Hash] result
|
95
84
|
#
|
96
|
-
def delete_user( params
|
85
|
+
def delete_user( params )
|
97
86
|
|
98
|
-
|
87
|
+
raise ArgumentError.new('only Hash are allowed') unless( params.is_a?(Hash) )
|
88
|
+
raise ArgumentError.new('missing params') if( params.size.zero? )
|
99
89
|
|
100
|
-
|
101
|
-
return {
|
102
|
-
status: 404,
|
103
|
-
message: 'missing user name'
|
104
|
-
}
|
105
|
-
end
|
90
|
+
user_name = params.dig(:user_name)
|
106
91
|
|
107
|
-
|
108
|
-
url: format( '%s/v1/objects/users/%s?cascade=1', @icinga_api_url_base, name ),
|
109
|
-
headers: @headers,
|
110
|
-
options: @options )
|
92
|
+
raise ArgumentError.new('Missing user_name') if( user_name.nil? )
|
111
93
|
|
112
|
-
|
113
|
-
|
94
|
+
Network.delete(
|
95
|
+
url: format( '%s/objects/users/%s?cascade=1', @icinga_api_url_base, user_name ),
|
96
|
+
headers: @headers,
|
97
|
+
options: @options
|
98
|
+
)
|
114
99
|
end
|
115
100
|
|
116
|
-
# returns all users
|
101
|
+
# returns a named or all users
|
117
102
|
#
|
118
103
|
# @param [Hash] params
|
119
|
-
# @option params [String] :
|
104
|
+
# @option params [String] :user_name ('') optional for a single user
|
120
105
|
#
|
121
106
|
# @example to get all users
|
122
107
|
# @icinga.users
|
123
108
|
#
|
124
109
|
# @example to get one user
|
125
|
-
# @icinga.users(
|
110
|
+
# @icinga.users(user_name: 'icingaadmin')
|
126
111
|
#
|
127
|
-
# @return [Hash] returns a hash
|
112
|
+
# @return [Hash] returns a hash
|
128
113
|
#
|
129
114
|
def users( params = {} )
|
130
115
|
|
131
|
-
|
116
|
+
user_name = params.dig(:user_name)
|
132
117
|
|
133
|
-
|
134
|
-
|
118
|
+
url =
|
119
|
+
if( user_name.nil? )
|
120
|
+
format( '%s/objects/users' , @icinga_api_url_base )
|
121
|
+
else
|
122
|
+
format( '%s/objects/users/%s', @icinga_api_url_base, user_name )
|
123
|
+
end
|
124
|
+
|
125
|
+
data = Network.api_data(
|
126
|
+
url: url,
|
135
127
|
headers: @headers,
|
136
|
-
options: @options
|
128
|
+
options: @options
|
129
|
+
)
|
130
|
+
|
131
|
+
return data.dig('results') if( data.dig(:status).nil? )
|
137
132
|
|
138
|
-
|
139
|
-
# - named user:
|
140
|
-
# {:status=>200, :data=>{"icingaadmin"=>{:name=>"icingaadmin", :display_name=>"Icinga 2 Admin", :type=>"User"}}}
|
141
|
-
# - all users:
|
142
|
-
# {:status=>200, :data=>{"icingaadmin"=>{:name=>"icingaadmin", :display_name=>"Icinga 2 Admin", :type=>"User"}, "foo"=>{:name=>"foo", :display_name=>"FOO", :type=>"User"}}}
|
133
|
+
nil
|
143
134
|
end
|
144
135
|
|
145
|
-
#
|
136
|
+
# checks if the user exists
|
146
137
|
#
|
147
|
-
# @param [String]
|
138
|
+
# @param [String] user_name the name of the user
|
148
139
|
#
|
149
140
|
# @example
|
150
141
|
# @icinga.exists_user?('icingaadmin')
|
151
142
|
#
|
152
143
|
# @return [Bool] returns true if the user exists
|
153
|
-
|
144
|
+
#
|
145
|
+
def exists_user?( user_name )
|
146
|
+
|
147
|
+
raise ArgumentError.new('only String are allowed') unless( user_name.is_a?(String) )
|
148
|
+
raise ArgumentError.new('Missing user_name') if( user_name.size.zero? )
|
149
|
+
|
150
|
+
result = users( user_name: user_name )
|
151
|
+
result = JSON.parse( result ) if( result.is_a?(String) )
|
154
152
|
|
155
|
-
|
156
|
-
result = JSON.parse( result ) if result.is_a?( String )
|
157
|
-
status = result.dig(:status)
|
153
|
+
return true if( !result.nil? && result.is_a?(Array) )
|
158
154
|
|
159
|
-
return true if !status.nil? && status == 200
|
160
155
|
false
|
161
156
|
end
|
162
157
|
|