zabbixapi 3.1.0 → 3.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -0
  3. data/CHANGELOG.md +5 -0
  4. data/{LICENSE → LICENSE.md} +1 -1
  5. data/README.md +53 -569
  6. data/lib/zabbixapi.rb +102 -65
  7. data/lib/zabbixapi/basic/basic_alias.rb +21 -4
  8. data/lib/zabbixapi/basic/basic_func.rb +56 -23
  9. data/lib/zabbixapi/basic/basic_init.rb +21 -4
  10. data/lib/zabbixapi/basic/basic_logic.rb +75 -18
  11. data/lib/zabbixapi/classes/actions.rb +8 -4
  12. data/lib/zabbixapi/classes/applications.rb +20 -6
  13. data/lib/zabbixapi/classes/configurations.rb +23 -17
  14. data/lib/zabbixapi/classes/errors.rb +2 -4
  15. data/lib/zabbixapi/classes/graphs.rb +65 -15
  16. data/lib/zabbixapi/classes/hostgroups.rb +12 -4
  17. data/lib/zabbixapi/classes/hosts.rb +36 -10
  18. data/lib/zabbixapi/classes/httptests.rb +24 -4
  19. data/lib/zabbixapi/classes/items.rb +24 -5
  20. data/lib/zabbixapi/classes/maintenance.rb +8 -4
  21. data/lib/zabbixapi/classes/mediatypes.rb +20 -13
  22. data/lib/zabbixapi/classes/proxies.rb +29 -8
  23. data/lib/zabbixapi/classes/screens.rb +41 -25
  24. data/lib/zabbixapi/classes/server.rb +8 -4
  25. data/lib/zabbixapi/classes/templates.rb +46 -43
  26. data/lib/zabbixapi/classes/triggers.rb +43 -16
  27. data/lib/zabbixapi/classes/unusable.rb +0 -2
  28. data/lib/zabbixapi/classes/usergroups.rb +33 -26
  29. data/lib/zabbixapi/classes/usermacros.rb +137 -31
  30. data/lib/zabbixapi/classes/users.rb +32 -10
  31. data/lib/zabbixapi/classes/valuemaps.rb +50 -0
  32. data/lib/zabbixapi/client.rb +61 -22
  33. data/lib/zabbixapi/version.rb +1 -1
  34. data/zabbixapi.gemspec +26 -23
  35. metadata +25 -73
  36. data/.gitignore +0 -7
  37. data/.rspec +0 -1
  38. data/.travis.yml +0 -41
  39. data/Gemfile +0 -3
  40. data/Gemfile.lock +0 -36
  41. data/Rakefile +0 -1
  42. data/json-1.x.Gemfile +0 -4
  43. data/json-1.x.Gemfile.lock +0 -28
  44. data/spec/action.rb +0 -89
  45. data/spec/application.rb +0 -83
  46. data/spec/basic_func.rb +0 -4
  47. data/spec/configuration.rb +0 -122
  48. data/spec/graph.rb +0 -135
  49. data/spec/host.rb +0 -176
  50. data/spec/hostgroup.rb +0 -55
  51. data/spec/httptest.rb +0 -136
  52. data/spec/item.rb +0 -134
  53. data/spec/maintenance.rb +0 -81
  54. data/spec/mediatype.rb +0 -50
  55. data/spec/query.rb +0 -18
  56. data/spec/screen.rb +0 -88
  57. data/spec/script.rb +0 -123
  58. data/spec/server.rb +0 -15
  59. data/spec/spec_helper.rb +0 -21
  60. data/spec/template.rb +0 -148
  61. data/spec/trigger.rb +0 -103
  62. data/spec/user.rb +0 -116
  63. data/spec/usergroup.rb +0 -85
  64. data/spec/usermacro.rb +0 -190
@@ -1,32 +1,49 @@
1
1
  class ZabbixApi
2
2
  class Triggers < Basic
3
-
3
+ # The method name used for interacting with Triggers via Zabbix API
4
+ #
5
+ # @return [String]
4
6
  def method_name
5
- "trigger"
7
+ 'trigger'
6
8
  end
7
9
 
10
+ # The id field name used for identifying specific Trigger objects via Zabbix API
11
+ #
12
+ # @return [String]
8
13
  def indentify
9
- "description"
14
+ 'description'
10
15
  end
11
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 [ApiError] 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]
12
23
  def dump_by_id(data)
13
24
  log "[DEBUG] Call dump_by_id with parametrs: #{data.inspect}"
14
25
 
15
26
  @client.api_request(
16
- :method => "trigger.get",
27
+ :method => 'trigger.get',
17
28
  :params => {
18
29
  :filter => {
19
- key.to_sym => data[key.to_sym]
30
+ key.to_sym => data[key.to_sym],
20
31
  },
21
- :output => "extend",
22
- :select_items => "extend",
23
- :select_functions => "extend"
32
+ :output => 'extend',
33
+ :select_items => 'extend',
34
+ :select_functions => 'extend',
24
35
  }
25
36
  )
26
37
  end
27
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 [ApiError] 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
28
45
  def safe_update(data)
29
- log "[DEBUG] Call update with parametrs: #{data.inspect}"
46
+ log "[DEBUG] Call safe_update with parameters: #{data.inspect}"
30
47
 
31
48
  dump = {}
32
49
  item_id = data[key.to_sym].to_i
@@ -34,31 +51,36 @@ class ZabbixApi
34
51
  dump = symbolize_keys(item) if item[key].to_i == data[key.to_sym].to_i
35
52
  end
36
53
 
37
- expression = dump[:items][0][:key_]+"."+dump[:functions][0][:function]+"("+dump[:functions][0][:parameter]+")"
38
- dump[:expression] = dump[:expression].gsub(/\{(\d*)\}/,"{#{expression}}") #TODO ugly regexp
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
39
56
  dump.delete(:functions)
40
57
  dump.delete(:items)
41
58
 
42
59
  old_expression = data[:expression]
43
- data[:expression] = data[:expression].gsub(/\{.*\:/,"{") #TODO ugly regexp
60
+ data[:expression] = data[:expression].gsub(/\{.*\:/, '{') # TODO: ugly regexp
44
61
  data.delete(:templateid)
45
62
 
46
63
  log "[DEBUG] expression: #{dump[:expression]}\n data: #{data[:expression]}"
47
64
 
48
65
  if hash_equals?(dump, data)
49
- log "[DEBUG] Equal keys #{dump} and #{data}, skip update"
66
+ log "[DEBUG] Equal keys #{dump} and #{data}, skip safe_update"
50
67
  item_id
51
68
  else
52
69
  data[:expression] = old_expression
53
70
  # disable old trigger
54
- log "[DEBUG] disable :" + @client.api_request(:method => "#{method_name}.update", :params => [{:triggerid=> data[:triggerid], :status => "1" }]).inspect
71
+ log '[DEBUG] disable :' + @client.api_request(:method => "#{method_name}.update", :params => [{:triggerid => data[:triggerid], :status => '1'}]).inspect
55
72
  # create new trigger
56
73
  data.delete(:triggerid)
57
74
  create(data)
58
75
  end
59
-
60
76
  end
61
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 [ApiError] 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
62
84
  def get_or_create(data)
63
85
  log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
64
86
 
@@ -68,10 +90,15 @@ class ZabbixApi
68
90
  id
69
91
  end
70
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 [ApiError] 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
71
99
  def create_or_update(data)
72
100
  triggerid = get_id(:description => data[:description], :hostid => data[:hostid])
73
101
  triggerid ? update(data.merge(:triggerid => triggerid)) : create(data)
74
102
  end
75
-
76
103
  end
77
104
  end
@@ -1,10 +1,8 @@
1
1
  class ZabbixApi
2
2
  class Triggers < Basic
3
-
4
3
  def create_or_update(data)
5
4
  log "[DEBUG] Call create_or_update with parametrs: #{data.inspect}"
6
5
  get_or_create(data)
7
6
  end
8
-
9
7
  end
10
8
  end
@@ -1,69 +1,76 @@
1
1
  class ZabbixApi
2
2
  class Usergroups < Basic
3
-
3
+ # The method name used for interacting with Usergroups via Zabbix API
4
+ #
5
+ # @return [String]
4
6
  def method_name
5
- "usergroup"
7
+ 'usergroup'
6
8
  end
7
9
 
10
+ # The key field name used for Usergroup objects via Zabbix API
11
+ #
12
+ # @return [String]
8
13
  def key
9
- "usrgrpid"
14
+ 'usrgrpid'
10
15
  end
11
16
 
17
+ # The id field name used for identifying specific Usergroup objects via Zabbix API
18
+ #
19
+ # @return [String]
12
20
  def indentify
13
- "name"
21
+ 'name'
14
22
  end
15
23
 
16
- # Set permission for usrgrp on some hostgroup
24
+ # Set permissions for usergroup using Zabbix API
17
25
  #
18
- # * *Args* :
19
- # - +data+ -> Hash with :usrgrpids => id, :hostgroupids => [], :permission => 2,3 (read and read write)
20
- # * *Returns* :
21
- # - Integer
26
+ # @param data [Hash] Needs to include usrgrpids and hostgroupids along with permissions to set
27
+ # @raise [ApiError] 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)
22
30
  def set_perms(data)
23
31
  permission = data[:permission] || 2
24
32
  result = @client.api_request(
25
- :method => "usergroup.massAdd",
33
+ :method => 'usergroup.massAdd',
26
34
  :params => {
27
35
  :usrgrpids => [data[:usrgrpid]],
28
- :rights => data[:hostgroupids].map { |t| {:permission => permission, :id => t} }
36
+ :rights => data[:hostgroupids].map { |t| {:permission => permission, :id => t} },
29
37
  }
30
38
  )
31
39
  result ? result['usrgrpids'][0].to_i : nil
32
40
  end
33
41
 
34
- # Update usergroup, add user
42
+ # Add users to usergroup using Zabbix API
35
43
  #
36
- # * *Args* :
37
- # - +data+ -> Hash with :usrgrpids => id, :userids => []
38
- # * *Returns* :
39
- # - Integer
44
+ # @param data [Hash] Needs to include userids and usrgrpids to mass add users to groups
45
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
46
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
47
+ # @return [Integer] Zabbix object id (usergroup)
40
48
  def add_user(data)
41
49
  result = @client.api_request(
42
- :method => "usergroup.massAdd",
50
+ :method => 'usergroup.massAdd',
43
51
  :params => {
44
52
  :usrgrpids => data[:usrgrpids],
45
- :userids => data[:userids]
53
+ :userids => data[:userids],
46
54
  }
47
55
  )
48
56
  result ? result['usrgrpids'][0].to_i : nil
49
57
  end
50
58
 
51
- # Update usergroup, modify users
59
+ # Update users in usergroups using Zabbix API
52
60
  #
53
- # * *Args* :
54
- # - +data+ -> Hash with :usrgrpids => id, :userids => []
55
- # * *Returns* :
56
- # - Integer
61
+ # @param data [Hash] Needs to include userids and usrgrpids to mass update users in groups
62
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
63
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
64
+ # @return [Integer] Zabbix object id (usergroup)
57
65
  def update_users(data)
58
66
  result = @client.api_request(
59
- :method => "usergroup.massUpdate",
67
+ :method => 'usergroup.massUpdate',
60
68
  :params => {
61
69
  :usrgrpids => data[:usrgrpids],
62
- :userids => data[:userids]
70
+ :userids => data[:userids],
63
71
  }
64
72
  )
65
73
  result ? result['usrgrpids'][0].to_i : nil
66
74
  end
67
-
68
75
  end
69
76
  end
@@ -1,79 +1,159 @@
1
1
  class ZabbixApi
2
2
  class Usermacros < Basic
3
+ # The id field name used for identifying specific User macro objects via Zabbix API
4
+ #
5
+ # @return [String]
3
6
  def indentify
4
- "macro"
7
+ 'macro'
5
8
  end
6
9
 
10
+ # The method name used for interacting with User macros via Zabbix API
11
+ #
12
+ # @return [String]
7
13
  def method_name
8
- "usermacro"
14
+ 'usermacro'
9
15
  end
10
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 [ApiError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (indentify).
21
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
22
+ # @return [Integer] Zabbix object id
11
23
  def get_id(data)
12
24
  log "[DEBUG] Call get_id with parameters: #{data.inspect}"
13
25
 
14
26
  # symbolize keys if the user used string keys instead of symbols
15
27
  data = symbolize_keys(data) if data.key?(indentify)
16
- # raise an error if indentify name was not supplied
28
+ # raise an error if indentify name was not supplied
17
29
  name = data[indentify.to_sym]
18
- raise ApiError.new("#{indentify} not supplied in call to get_id") if name == nil
30
+ raise ApiError.new("#{indentify} not supplied in call to get_id") if name.nil?
19
31
 
20
- result = request(data, "usermacro.get", "hostmacroid")
32
+ result = request(data, 'usermacro.get', 'hostmacroid')
21
33
 
22
- result.length > 0 && result[0].key?("hostmacroid") ? result[0]["hostmacroid"].to_i : nil
34
+ !result.empty? && result[0].key?('hostmacroid') ? result[0]['hostmacroid'].to_i : nil
23
35
  end
24
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 [ApiError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (indentify).
41
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
42
+ # @return [Integer] Zabbix object id
25
43
  def get_id_global(data)
26
44
  log "[DEBUG] Call get_id_global with parameters: #{data.inspect}"
27
45
 
28
46
  # symbolize keys if the user used string keys instead of symbols
29
47
  data = symbolize_keys(data) if data.key?(indentify)
30
- # raise an error if indentify name was not supplied
48
+ # raise an error if indentify name was not supplied
31
49
  name = data[indentify.to_sym]
32
- raise ApiError.new("#{indentify} not supplied in call to get_id") if name == nil
50
+ raise ApiError.new("#{indentify} not supplied in call to get_id") if name.nil?
33
51
 
34
- result = request(data, "usermacro.get", "globalmacroid")
52
+ result = request(data, 'usermacro.get', 'globalmacroid')
35
53
 
36
- result.length > 0 && result[0].key?("globalmacroid") ? result[0]["globalmacroid"].to_i : nil
54
+ !result.empty? && result[0].key?('globalmacroid') ? result[0]['globalmacroid'].to_i : nil
37
55
  end
38
56
 
57
+ # Get full/extended User macro data from Zabbix API
58
+ #
59
+ # @param data [Hash] Should include object's id field name (indentify) and id value
60
+ # @raise [ApiError] 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]
39
63
  def get_full_data(data)
40
64
  log "[DEBUG] Call get_full_data with parameters: #{data.inspect}"
41
65
 
42
- request(data, "usermacro.get", "hostmacroid")
66
+ request(data, 'usermacro.get', 'hostmacroid')
43
67
  end
44
68
 
69
+ # Get full/extended Global macro data from Zabbix API
70
+ #
71
+ # @param data [Hash] Should include object's id field name (indentify) and id value
72
+ # @raise [ApiError] 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]
45
75
  def get_full_data_global(data)
46
76
  log "[DEBUG] Call get_full_data_global with parameters: #{data.inspect}"
47
77
 
48
- request(data, "usermacro.get", "globalmacroid")
78
+ request(data, 'usermacro.get', 'globalmacroid')
49
79
  end
50
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 [ApiError] 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
51
88
  def create(data)
52
- request(data, "usermacro.create", "hostmacroids")
89
+ request(data, 'usermacro.create', 'hostmacroids')
53
90
  end
54
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 [ApiError] 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
55
99
  def create_global(data)
56
- request(data, "usermacro.createglobal", "globalmacroids")
100
+ request(data, 'usermacro.createglobal', 'globalmacroids')
57
101
  end
58
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 [ApiError] 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
59
110
  def delete(data)
60
111
  data_delete = [data]
61
- request(data_delete, "usermacro.delete", "hostmacroids")
112
+ request(data_delete, 'usermacro.delete', 'hostmacroids')
62
113
  end
63
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 [ApiError] 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
64
122
  def delete_global(data)
65
123
  data_delete = [data]
66
- request(data_delete, "usermacro.deleteglobal", "globalmacroids")
124
+ request(data_delete, 'usermacro.deleteglobal', 'globalmacroids')
67
125
  end
68
126
 
127
+ # Update User macro object using Zabbix API
128
+ #
129
+ # @param data [Hash] Should include object's id field name (indentify), id value, and fields to update
130
+ # @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
131
+ # @raise [ApiError] 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
69
135
  def update(data)
70
- request(data, "usermacro.update", "hostmacroids")
136
+ request(data, 'usermacro.update', 'hostmacroids')
71
137
  end
72
138
 
139
+ # Update Global macro object using Zabbix API
140
+ #
141
+ # @param data [Hash] Should include object's id field name (indentify), id value, and fields to update
142
+ # @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
143
+ # @raise [ApiError] 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
73
147
  def update_global(data)
74
- request(data, "usermacro.updateglobal", "globalmacroids")
148
+ request(data, 'usermacro.updateglobal', 'globalmacroids')
75
149
  end
76
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 [ApiError] 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
77
157
  def get_or_create(data)
78
158
  log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
79
159
 
@@ -83,6 +163,12 @@ class ZabbixApi
83
163
  id
84
164
  end
85
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 [ApiError] 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
86
172
  def get_or_create_global(data)
87
173
  log "[DEBUG] Call get_or_create_global with parameters: #{data.inspect}"
88
174
 
@@ -92,31 +178,51 @@ class ZabbixApi
92
178
  id
93
179
  end
94
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 [ApiError] 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
95
187
  def create_or_update(data)
96
188
  hostmacroid = get_id(:macro => data[:macro], :hostid => data[:hostid])
97
189
  hostmacroid ? update(data.merge(:hostmacroid => hostmacroid)) : create(data)
98
190
  end
99
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 [ApiError] 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
100
198
  def create_or_update_global(data)
101
199
  hostmacroid = get_id_global(:macro => data[:macro], :hostid => data[:hostid])
102
200
  hostmacroid ? update_global(data.merge(:globalmacroid => globalmacroid)) : create_global(data)
103
201
  end
104
202
 
105
- private
106
- def request(data, method, result_key)
107
- # Zabbix has different result formats for gets vs updates
108
- if method.include?(".get")
109
- if result_key.include?("global")
110
- result = @client.api_request(:method => method, :params => { :globalmacro => true, :filter => data })
111
- else
112
- result = @client.api_request(:method => method, :params => { :filter => data })
113
- end
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 [ApiError] 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})
114
218
  else
115
- result = @client.api_request(:method => method, :params => data)
116
-
117
- result.key?(result_key) && result[result_key].length > 0 ? result[result_key][0].to_i : nil
219
+ @client.api_request(:method => method, :params => {:filter => data})
118
220
  end
119
- end
221
+ else
222
+ result = @client.api_request(:method => method, :params => data)
120
223
 
224
+ result.key?(result_key) && !result[result_key].empty? ? result[result_key][0].to_i : nil
225
+ end
226
+ end
121
227
  end
122
228
  end