zabbix_manager 5.0.1 → 5.0.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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/lib/zabbix_manager/basic/basic_alias.rb +37 -0
  3. data/lib/zabbix_manager/basic/basic_extend.rb +38 -0
  4. data/lib/zabbix_manager/basic/basic_func.rb +103 -0
  5. data/lib/zabbix_manager/basic/basic_init.rb +46 -0
  6. data/lib/zabbix_manager/basic/basic_logic.rb +227 -0
  7. data/lib/zabbix_manager/classes/actions.rb +41 -0
  8. data/lib/zabbix_manager/classes/applications.rb +43 -0
  9. data/lib/zabbix_manager/classes/configurations.rb +42 -0
  10. data/lib/zabbix_manager/classes/drules.rb +55 -0
  11. data/lib/zabbix_manager/classes/errors.rb +28 -0
  12. data/lib/zabbix_manager/classes/events.rb +18 -0
  13. data/lib/zabbix_manager/classes/graphs.rb +111 -0
  14. data/lib/zabbix_manager/classes/hostgroups.rb +58 -0
  15. data/lib/zabbix_manager/classes/hosts.rb +218 -0
  16. data/lib/zabbix_manager/classes/httptests.rb +54 -0
  17. data/lib/zabbix_manager/classes/items.rb +145 -0
  18. data/lib/zabbix_manager/classes/maintenance.rb +17 -0
  19. data/lib/zabbix_manager/classes/mediatypes.rb +109 -0
  20. data/lib/zabbix_manager/classes/problems.rb +133 -0
  21. data/lib/zabbix_manager/classes/proxies.rb +68 -0
  22. data/lib/zabbix_manager/classes/roles.rb +114 -0
  23. data/lib/zabbix_manager/classes/screens.rb +94 -0
  24. data/lib/zabbix_manager/classes/scripts.rb +35 -0
  25. data/lib/zabbix_manager/classes/server.rb +16 -0
  26. data/lib/zabbix_manager/classes/templates.rb +123 -0
  27. data/lib/zabbix_manager/classes/triggers.rb +166 -0
  28. data/lib/zabbix_manager/classes/unusable.rb +8 -0
  29. data/lib/zabbix_manager/classes/usergroups.rb +73 -0
  30. data/lib/zabbix_manager/classes/usermacros.rb +228 -0
  31. data/lib/zabbix_manager/classes/users.rb +64 -0
  32. data/lib/zabbix_manager/classes/valuemaps.rb +50 -0
  33. data/lib/zabbix_manager/client.rb +158 -0
  34. data/lib/zabbix_manager/version.rb +1 -1
  35. data/zabbix_manager-5.0.1.gem +0 -0
  36. metadata +77 -2
@@ -0,0 +1,166 @@
1
+ class ZabbixManager
2
+ class Triggers < Basic
3
+ # The method name used for interacting with Triggers via Zabbix API
4
+ #
5
+ # @return [String]
6
+ def method_name
7
+ 'trigger'
8
+ end
9
+
10
+ # The id field name used for identifying specific Trigger objects via Zabbix API
11
+ #
12
+ # @return [String]
13
+ def identify
14
+ 'description'
15
+ end
16
+
17
+ # Dump Trigger object data by key from Zabbix API
18
+ #
19
+ # @param data [Hash] Should include desired object's key and value
20
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
21
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
22
+ # @return [Hash]
23
+ def dump_by_id(data)
24
+ log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
25
+
26
+ @client.api_request(
27
+ method: 'trigger.get',
28
+ params: {
29
+ filter: {
30
+ keys.to_sym => data[keys.to_sym]
31
+ },
32
+ output: 'extend',
33
+ select_items: 'extend',
34
+ select_functions: 'extend'
35
+ }
36
+ )
37
+ end
38
+
39
+ # Safely update Trigger object using Zabbix API by deleting and replacing trigger
40
+ #
41
+ # @param data [Hash] Needs to include description and hostid to properly identify Triggers via Zabbix API
42
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
43
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
44
+ # @return [Integer] Zabbix object id
45
+ def safe_update(data)
46
+ log "[DEBUG] Call safe_update with parameters: #{data.inspect}"
47
+
48
+ dump = {}
49
+ item_id = data[key.to_sym].to_i
50
+ dump_by_id(key.to_sym => data[key.to_sym]).each do |item|
51
+ dump = symbolize_keys(item) if item[key].to_i == data[key.to_sym].to_i
52
+ end
53
+
54
+ expression = dump[:items][0][:key_] + '.' + dump[:functions][0][:function] + '(' + dump[:functions][0][:parameter] + ')'
55
+ dump[:expression] = dump[:expression].gsub(/\{(\d*)\}/, "{#{expression}}") # TODO: ugly regexp
56
+ dump.delete(:functions)
57
+ dump.delete(:items)
58
+
59
+ old_expression = data[:expression]
60
+ data[:expression] = data[:expression].gsub(/\{.*\:/, '{') # TODO: ugly regexp
61
+ data.delete(:templateid)
62
+
63
+ log "[DEBUG] expression: #{dump[:expression]}\n data: #{data[:expression]}"
64
+
65
+ if hash_equals?(dump, data)
66
+ log "[DEBUG] Equal keys #{dump} and #{data}, skip safe_update"
67
+ item_id
68
+ else
69
+ data[:expression] = old_expression
70
+ # disable old trigger
71
+ log '[DEBUG] disable :' + @client.api_request(method: "#{method_name}.update", params: [{ triggerid: data[:triggerid], status: '1' }]).inspect
72
+ # create new trigger
73
+ data.delete(:triggerid)
74
+ create(data)
75
+ end
76
+ end
77
+
78
+ # Get or Create Trigger object using Zabbix API
79
+ #
80
+ # @param data [Hash] Needs to include description and hostid to properly identify Triggers via Zabbix API
81
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
82
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
83
+ # @return [Integer] Zabbix object id
84
+ def get_or_create(data)
85
+ log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
86
+
87
+ unless (id = get_id(description: data[:description], hostid: data[:hostid]))
88
+ id = create(data)
89
+ end
90
+ id
91
+ end
92
+
93
+ # Create or update Trigger object using Zabbix API
94
+ #
95
+ # @param data [Hash] Needs to include description and hostid to properly identify Triggers via Zabbix API
96
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
97
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
98
+ # @return [Integer] Zabbix object id
99
+ def create_or_update(data)
100
+ triggerid = get_id(description: data[:description], hostid: data[:hostid])
101
+
102
+ triggerid ? update(data.merge(triggerid: triggerid)) : create(data)
103
+ end
104
+
105
+ # 测试数据
106
+ def mojo_data
107
+ data = {
108
+ comments: "MOJO1",
109
+ opdata: "MOJO_OPDATA",
110
+ priority: 1,
111
+ description: "MOJO1",
112
+ expression: "{SZX1-ISP-SW7:net.if.in[ifHCInOctets.1].avg(15m)}>=450000000 or {SZX1-ISP-SW7:net.if.out[ifHCOutOctets.1].avg(15m)}>=450000000",
113
+ recovery_expression: "{SZX1-ISP-SW7:net.if.in[ifHCInOctets.1].avg(15m)}<=350000000 or {SZX1-ISP-SW7:net.if.out[ifHCOutOctets.1].avg(15m)}<=350000000",
114
+ }
115
+
116
+ create_trigger data.stringify_keys!
117
+
118
+ end
119
+
120
+ # 设置触发器
121
+ def create_trigger(data = {})
122
+ data = data.with_indifferent_access
123
+ # 请求生成触发器
124
+ result = @client.api_request(
125
+ method: 'trigger.create',
126
+ params: {
127
+ comments: data["comments"],
128
+ priority: data["priority"],
129
+ description: data["description"],
130
+ expression: data["expression"],
131
+ recovery_expression: data["recovery_expression"],
132
+ opdata: data["opdata"],
133
+ recovery_mode: 1,
134
+ type: 0,
135
+ manual_close: 1,
136
+ }
137
+ )
138
+ # 检查是是否存在
139
+ result.empty? ? nil : result["triggerids"]
140
+ end
141
+
142
+ # 更新触发器
143
+ def update_trigger(triggerid, data = {})
144
+ data = data.with_indifferent_access
145
+ # 请求生成触发器
146
+ result = @client.api_request(
147
+ method: 'trigger.update',
148
+ params: {
149
+ triggerid: triggerid.to_i,
150
+ comments: data["comments"],
151
+ priority: data["priority"],
152
+ description: data["description"],
153
+ expression: data["expression"],
154
+ recovery_expression: data["recovery_expression"],
155
+ opdata: data["opdata"],
156
+ recovery_mode: 1,
157
+ type: 1,
158
+ manual_close: 1,
159
+ }
160
+ )
161
+ ap result
162
+ # 检查是是否存在
163
+ result.empty? ? nil : result["triggerids"]
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,8 @@
1
+ class ZabbixManager
2
+ class Triggers < Basic
3
+ def create_or_update(data)
4
+ log "[DEBUG] Call create_or_update with parameters: #{data.inspect}"
5
+ get_or_create(data)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,73 @@
1
+ class ZabbixManager
2
+ class Usergroups < Basic
3
+ # The method name used for interacting with Usergroups via Zabbix API
4
+ #
5
+ # @return [String]
6
+ def method_name
7
+ 'usergroup'
8
+ end
9
+
10
+ # The key field name used for Usergroup objects via Zabbix API
11
+ #
12
+ # @return [String]
13
+ def key
14
+ 'usrgrpid'
15
+ end
16
+
17
+ # The id field name used for identifying specific Usergroup objects via Zabbix API
18
+ #
19
+ # @return [String]
20
+ def identify
21
+ 'name'
22
+ end
23
+
24
+ # Set permissions for usergroup using Zabbix API
25
+ #
26
+ # @param data [Hash] Needs to include usrgrpids and hostgroupids along with permissions to set
27
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
28
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
29
+ # @return [Integer] Zabbix object id (usergroup)
30
+ def permissions(data)
31
+ permission = data[:permission] || 2
32
+ result = @client.api_request(
33
+ method: 'usergroup.update',
34
+ params: {
35
+ usrgrpid: data[:usrgrpid],
36
+ rights: data[:hostgroupids].map { |t| { permission: permission, id: t } }
37
+ }
38
+ )
39
+ result ? result['usrgrpids'][0].to_i : nil
40
+ end
41
+
42
+ # Add users to usergroup using Zabbix API
43
+ #
44
+ # @deprecated Zabbix has removed massAdd in favor of update.
45
+ # @param data [Hash] Needs to include userids and usrgrpids to mass add users to groups
46
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
47
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
48
+ # @return [Integer] Zabbix object id (usergroup)
49
+ def add_user(data)
50
+ update_users(data)
51
+ end
52
+
53
+ # Update users in usergroups using Zabbix API
54
+ #
55
+ # @param data [Hash] Needs to include userids and usrgrpids to mass update users in groups
56
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
57
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
58
+ # @return [Integer] Zabbix object id (usergroup)
59
+ def update_users(data)
60
+ user_groups = data[:usrgrpids].map do |t|
61
+ {
62
+ usrgrpid: t,
63
+ userids: data[:userids],
64
+ }
65
+ end
66
+ result = @client.api_request(
67
+ method: 'usergroup.update',
68
+ params: user_groups,
69
+ )
70
+ result ? result['usrgrpids'][0].to_i : nil
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,228 @@
1
+ class ZabbixManager
2
+ class Usermacros < Basic
3
+ # The id field name used for identifying specific User macro objects via Zabbix API
4
+ #
5
+ # @return [String]
6
+ def identify
7
+ 'macro'
8
+ end
9
+
10
+ # The method name used for interacting with User macros via Zabbix API
11
+ #
12
+ # @return [String]
13
+ def method_name
14
+ 'usermacro'
15
+ end
16
+
17
+ # Get User macro object id from Zabbix API based on provided data
18
+ #
19
+ # @param data [Hash] Needs to include macro to properly identify user macros via Zabbix API
20
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
21
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
22
+ # @return [Integer] Zabbix object id
23
+ def get_id(data)
24
+ log "[DEBUG] Call get_id with parameters: #{data.inspect}"
25
+
26
+ # symbolize keys if the user used string keys instead of symbols
27
+ data = symbolize_keys(data) if data.key?(identify)
28
+ # raise an error if identify name was not supplied
29
+ name = data[identify.to_sym]
30
+ raise ManagerError.new("#{identify} not supplied in call to get_id") if name.nil?
31
+
32
+ result = request(data, 'usermacro.get', 'hostmacroid')
33
+
34
+ !result.empty? && result[0].key?('hostmacroid') ? result[0]['hostmacroid'].to_i : nil
35
+ end
36
+
37
+ # Get Global macro object id from Zabbix API based on provided data
38
+ #
39
+ # @param data [Hash] Needs to include macro to properly identify global macros via Zabbix API
40
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
41
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
42
+ # @return [Integer] Zabbix object id
43
+ def get_id_global(data)
44
+ log "[DEBUG] Call get_id_global with parameters: #{data.inspect}"
45
+
46
+ # symbolize keys if the user used string keys instead of symbols
47
+ data = symbolize_keys(data) if data.key?(identify)
48
+ # raise an error if identify name was not supplied
49
+ name = data[identify.to_sym]
50
+ raise ManagerError.new("#{identify} not supplied in call to get_id_global") if name.nil?
51
+
52
+ result = request(data, 'usermacro.get', 'globalmacroid')
53
+
54
+ !result.empty? && result[0].key?('globalmacroid') ? result[0]['globalmacroid'].to_i : nil
55
+ end
56
+
57
+ # Get full/extended User macro data from Zabbix API
58
+ #
59
+ # @param data [Hash] Should include object's id field name (identify) and id value
60
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
61
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
62
+ # @return [Hash]
63
+ def get_full_data(data)
64
+ log "[DEBUG] Call get_full_data with parameters: #{data.inspect}"
65
+
66
+ request(data, 'usermacro.get', 'hostmacroid')
67
+ end
68
+
69
+ # Get full/extended Global macro data from Zabbix API
70
+ #
71
+ # @param data [Hash] Should include object's id field name (identify) and id value
72
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
73
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
74
+ # @return [Hash]
75
+ def get_full_data_global(data)
76
+ log "[DEBUG] Call get_full_data_global with parameters: #{data.inspect}"
77
+
78
+ request(data, 'usermacro.get', 'globalmacroid')
79
+ end
80
+
81
+ # Create new User macro object using Zabbix API (with defaults)
82
+ #
83
+ # @param data [Hash] Needs to include hostid, macro, and value to create User macro via Zabbix API
84
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
85
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
86
+ # @return [Integer] The object id if a single object is created
87
+ # @return [Boolean] True/False if multiple objects are created
88
+ def create(data)
89
+ request(data, 'usermacro.create', 'hostmacroids')
90
+ end
91
+
92
+ # Create new Global macro object using Zabbix API (with defaults)
93
+ #
94
+ # @param data [Hash] Needs to include hostid, macro, and value to create Global macro via Zabbix API
95
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
96
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
97
+ # @return [Integer] The object id if a single object is created
98
+ # @return [Boolean] True/False if multiple objects are created
99
+ def create_global(data)
100
+ request(data, 'usermacro.createglobal', 'globalmacroids')
101
+ end
102
+
103
+ # Delete User macro object using Zabbix API
104
+ #
105
+ # @param data [Hash] Should include hostmacroid's of User macros to delete
106
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
107
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
108
+ # @return [Integer] The object id if a single object is deleted
109
+ # @return [Boolean] True/False if multiple objects are deleted
110
+ def delete(data)
111
+ data_delete = [data]
112
+ request(data_delete, 'usermacro.delete', 'hostmacroids')
113
+ end
114
+
115
+ # Delete Global macro object using Zabbix API
116
+ #
117
+ # @param data [Hash] Should include hostmacroid's of Global macros to delete
118
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
119
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
120
+ # @return [Integer] The object id if a single object is deleted
121
+ # @return [Boolean] True/False if multiple objects are deleted
122
+ def delete_global(data)
123
+ data_delete = [data]
124
+ request(data_delete, 'usermacro.deleteglobal', 'globalmacroids')
125
+ end
126
+
127
+ # Update User macro object using Zabbix API
128
+ #
129
+ # @param data [Hash] Should include object's id field name (identify), id value, and fields to update
130
+ # @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
131
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
132
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
133
+ # @return [Integer] The object id if a single object is created
134
+ # @return [Boolean] True/False if multiple objects are created
135
+ def update(data)
136
+ request(data, 'usermacro.update', 'hostmacroids')
137
+ end
138
+
139
+ # Update Global macro object using Zabbix API
140
+ #
141
+ # @param data [Hash] Should include object's id field name (identify), id value, and fields to update
142
+ # @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
143
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
144
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
145
+ # @return [Integer] The object id if a single object is created
146
+ # @return [Boolean] True/False if multiple objects are created
147
+ def update_global(data)
148
+ request(data, 'usermacro.updateglobal', 'globalmacroids')
149
+ end
150
+
151
+ # Get or Create User macro object using Zabbix API
152
+ #
153
+ # @param data [Hash] Needs to include macro and hostid to properly identify User macros via Zabbix API
154
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
155
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
156
+ # @return [Integer] Zabbix object id
157
+ def get_or_create(data)
158
+ log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
159
+
160
+ unless (id = get_id(macro: data[:macro], hostid: data[:hostid]))
161
+ id = create(data)
162
+ end
163
+ id
164
+ end
165
+
166
+ # Get or Create Global macro object using Zabbix API
167
+ #
168
+ # @param data [Hash] Needs to include macro and hostid to properly identify Global macros via Zabbix API
169
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
170
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
171
+ # @return [Integer] Zabbix object id
172
+ def get_or_create_global(data)
173
+ log "[DEBUG] Call get_or_create_global with parameters: #{data.inspect}"
174
+
175
+ unless (id = get_id_global(macro: data[:macro], hostid: data[:hostid]))
176
+ id = create_global(data)
177
+ end
178
+ id
179
+ end
180
+
181
+ # Create or update User macro object using Zabbix API
182
+ #
183
+ # @param data [Hash] Needs to include macro and hostid to properly identify User macros via Zabbix API
184
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
185
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
186
+ # @return [Integer] Zabbix object id
187
+ def create_or_update(data)
188
+ hostmacroid = get_id(macro: data[:macro], hostid: data[:hostid])
189
+ hostmacroid ? update(data.merge(hostmacroid: hostmacroid)) : create(data)
190
+ end
191
+
192
+ # Create or update Global macro object using Zabbix API
193
+ #
194
+ # @param data [Hash] Needs to include macro and hostid to properly identify Global macros via Zabbix API
195
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
196
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
197
+ # @return [Integer] Zabbix object id
198
+ def create_or_update_global(data)
199
+ globalmacroid = get_id_global(macro: data[:macro], hostid: data[:hostid])
200
+ globalmacroid ? update_global(data.merge(globalmacroid: globalmacroid)) : create_global(data)
201
+ end
202
+
203
+ private
204
+
205
+ # Custom request method to handle both User and Global macros in one
206
+ #
207
+ # @param data [Hash] Needs to include macro and hostid to properly identify Global macros via Zabbix API
208
+ # @param method [String] Zabbix API method to use for the request
209
+ # @param result_key [String] Which key to use for parsing results based on User vs Global macros
210
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
211
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
212
+ # @return [Integer] Zabbix object id
213
+ def request(data, method, result_key)
214
+ # Zabbix has different result formats for gets vs updates
215
+ if method.include?('.get')
216
+ if result_key.include?('global')
217
+ @client.api_request(method: method, params: { globalmacro: true, filter: data })
218
+ else
219
+ @client.api_request(method: method, params: { filter: data })
220
+ end
221
+ else
222
+ result = @client.api_request(method: method, params: data)
223
+
224
+ result.key?(result_key) && !result[result_key].empty? ? result[result_key][0].to_i : nil
225
+ end
226
+ end
227
+ end
228
+ end
@@ -0,0 +1,64 @@
1
+ class ZabbixManager
2
+ class Users < Basic
3
+ # The method name used for interacting with Users via Zabbix API
4
+ #
5
+ # @return [String]
6
+ def method_name
7
+ 'user'
8
+ end
9
+
10
+ # The keys field name used for User objects via Zabbix API
11
+ #
12
+ # @return [String]
13
+ def keys
14
+ 'userids'
15
+ end
16
+
17
+ # The key field name used for User objects via Zabbix API
18
+ #
19
+ # @return [String]
20
+ def key
21
+ 'userid'
22
+ end
23
+
24
+ # The id field name used for identifying specific User objects via Zabbix API
25
+ #
26
+ # @return [String]
27
+ def identify
28
+ 'alias'
29
+ end
30
+
31
+ def medias_helper(data, action)
32
+ result = @client.api_request(
33
+ method: "user.#{action}",
34
+ params: data[:userids].map do |t|
35
+ {
36
+ userid: t,
37
+ user_medias: data[:media],
38
+ }
39
+ end,
40
+ )
41
+ result ? result['userids'][0].to_i : nil
42
+ end
43
+
44
+ # Add media to users using Zabbix API
45
+ #
46
+ # @param data [Hash] Needs to include userids and media to mass add media to users
47
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
48
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
49
+ # @return [Integer] Zabbix object id (media)
50
+ def add_medias(data)
51
+ medias_helper(data, 'update')
52
+ end
53
+
54
+ # Update media for users using Zabbix API
55
+ #
56
+ # @param data [Hash] Needs to include userids and media to mass update media for users
57
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
58
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
59
+ # @return [Integer] Zabbix object id (user)
60
+ def update_medias(data)
61
+ medias_helper(data, 'update')
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,50 @@
1
+ class ZabbixManager
2
+ class ValueMaps < Basic
3
+ # The method name used for interacting with ValueMaps via Zabbix API
4
+ #
5
+ # @return [String]
6
+ def method_name
7
+ 'valuemap'
8
+ end
9
+
10
+ # The key field name used for ValueMap objects via Zabbix API
11
+ #
12
+ # @return [String]
13
+ def key
14
+ 'valuemapid'
15
+ end
16
+
17
+ # The id field name used for identifying specific ValueMap objects via Zabbix API
18
+ #
19
+ # @return [String]
20
+ def identify
21
+ 'name'
22
+ end
23
+
24
+ # Get or Create ValueMap object using Zabbix API
25
+ #
26
+ # @param data [Hash] Needs to include valuemapids [List] to properly identify ValueMaps via Zabbix API
27
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
28
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
29
+ # @return [Integer] Zabbix object id
30
+ def get_or_create(data)
31
+ log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
32
+
33
+ unless (id = get_id(valuemapids: data[:valuemapids]))
34
+ id = create(data)
35
+ end
36
+ id
37
+ end
38
+
39
+ # Create or update Item object using Zabbix API
40
+ #
41
+ # @param data [Hash] Needs to include valuemapids to properly identify ValueMaps via Zabbix API
42
+ # @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
43
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
44
+ # @return [Integer] Zabbix object id
45
+ def create_or_update(data)
46
+ valuemapid = get_id(name: data[:name])
47
+ valuemapid ? update(data.merge(valuemapids: [:valuemapid])) : create(data)
48
+ end
49
+ end
50
+ end