zabbixapi 4.2.0 → 5.0.0.pre.alpha1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 58451fc1a06fa45c0ac63d0ec7d66c567455ae0eba7cc8a548cb223c8af3a987
4
- data.tar.gz: 7574a95089d1a4c32bfb30273dfd731e726b2367e50edd849d8165e06e033868
3
+ metadata.gz: 872ce78b417080b9ad0affdf398753332f6c88fb3cfac7b5db991413711e2b65
4
+ data.tar.gz: 077a81ef6f1d562091f61ab58b973192f12b4d1579c9683d8421779c907e6e33
5
5
  SHA512:
6
- metadata.gz: 3d432eb203cfe6723dea2d47fbc4a0c064131e9e732e08f6c753e6ed567d29f83e307335ee52c670b4ab8fc4e22381dbee8c614957e710785816eaf5fad50857
7
- data.tar.gz: 75cfa60403d32ab616e5caf6670c4b2a4bb3014606d6966a383a88e13e24284b49034fce287d0209a9e0637e53043b4235fe39ca70d194150c163924af32cd6f
6
+ metadata.gz: c818c7285117d51cc70dc770ba43c75ae5c8cab4ded5e553b2ffcb5a1256b1578da4720faeec57cdc086c02dbc152ccc540c620aba27b02a0426ed0eefedd289
7
+ data.tar.gz: ba45247a6463b805aa8fbcd3c1bf8ec2d9531e6a3e5db9bf82805ba29fc9c6a972bf8a0f8cb8f063c69b7429337bd89b1a7fe30d9e0054cbd73e1ca64ff7ada3
data/README.md CHANGED
@@ -1,15 +1,21 @@
1
1
  # Ruby Zabbix Api Module
2
2
 
3
3
  [![Gem Version](http://img.shields.io/gem/v/zabbixapi.svg)][gem]
4
- [![Build Status](http://img.shields.io/travis/express42/zabbixapi.svg)][travis]
4
+ [![Build Status](https://github.com/anapsix/zabbixapi/workflows/CI/badge.svg)][github-ci]
5
5
 
6
6
  [gem]: https://rubygems.org/gems/zabbixapi
7
- [travis]: https://travis-ci.org/express42/zabbixapi
7
+ [github-ci]: https://github.com/express42/zabbixapi/actions?query=workflow%3ACI
8
8
 
9
9
  Simple and lightweight ruby module for working with [Zabbix][Zabbix] via the [Zabbix API][Zabbix API]
10
10
 
11
11
  ## Installation
12
- gem install zabbixapi
12
+ ```sh
13
+ # latest
14
+ gem install zabbixapi
15
+
16
+ # specific version
17
+ gem install zabbixapi -v 4.2.0
18
+ ```
13
19
 
14
20
  ## Documentation
15
21
  [http://rdoc.info/gems/zabbixapi][documentation]
@@ -22,7 +28,10 @@ Simple and lightweight ruby module for working with [Zabbix][Zabbix] via the [Za
22
28
  [examples]: https://github.com/express42/zabbixapi/tree/master/examples
23
29
 
24
30
  ## Version Policy
25
- We support only two last versions of zabbix (4.0 and 4.2), so you should consider all previous versions deprecated.
31
+
32
+ **NOTE:** `master` branch is used for ongoing development on Zabbix API 5.x (5.0 and 5.2).
33
+
34
+ We support only two last versions of zabbix (5.0 and 5.2), so you should consider all previous versions deprecated.
26
35
 
27
36
  * Zabbix 1.8.2 (api version 1.2) | zabbixapi 0.6.x | [branch zabbix1.8](https://github.com/express42/zabbixapi/tree/zabbix1.8)
28
37
  * Zabbix 1.8.9 (api version 1.3) | zabbixapi 0.6.x | [branch zabbix1.8](https://github.com/express42/zabbixapi/tree/zabbix1.8)
@@ -30,15 +39,18 @@ We support only two last versions of zabbix (4.0 and 4.2), so you should conside
30
39
  * Zabbix 2.2.x (api version 2.2.x) | zabbixapi 2.2.x | [branch zabbix2.2](https://github.com/express42/zabbixapi/tree/zabbix2.2)
31
40
  * Zabbix 2.4.x (api version 2.2.x) | zabbixapi 2.4.x | [branch zabbix2.4](https://github.com/express42/zabbixapi/tree/zabbix2.4)
32
41
  * Zabbix 3.0.x (api version 3.0.x) | zabbixapi 3.0.x | [branch zabbix3.0](https://github.com/express42/zabbixapi/tree/zabbix3.0)
33
- * Zabbix 3.2.x (api version 3.2.x) | zabbixapi 3.0.x | [branch zabbix3.2](https://github.com/express42/zabbixapi/tree/zabbix3.2)
42
+ * Zabbix 3.2.x (api version 3.2.x) | zabbixapi 3.2.x | [branch zabbix3.2](https://github.com/express42/zabbixapi/tree/zabbix3.2)
43
+ * Zabbix 4.0.x (api version 4.0.x) | zabbixapi 4.1.x | [branch zabbix4.0](https://github.com/express42/zabbixapi/tree/zabbix4.0)
44
+ * Zabbix 4.2.x (api version 4.2.x) | zabbixapi 4.1.x | [branch zabbix4.0](https://github.com/express42/zabbixapi/tree/zabbix4.0)
45
+ * Zabbix 4.4.x (api version 4.4.x) | zabbixapi 4.2.x | [branch zabbix4.2](https://github.com/express42/zabbixapi/tree/zabbix4.2)
34
46
 
35
47
  ## Supported Ruby Versions
36
- This library aims to support and is [tested against][travis] the following Ruby
48
+ This library aims to support and is [tested against][github-ci] the following Ruby
37
49
  versions:
38
50
 
39
- * Ruby 2.4
40
51
  * Ruby 2.5
41
52
  * Ruby 2.6
53
+ * Ruby 2.7
42
54
  * JRuby 9.2.10.0
43
55
 
44
56
  If something doesn't work on one of these versions, it's a bug.
@@ -62,6 +74,7 @@ dropped.
62
74
  ## Contributing
63
75
 
64
76
  * Fork the project.
77
+ * Base your work on the master branch.
65
78
  * Make your feature addition or bug fix, write tests, write documentation/examples.
66
79
  * Commit, do not mess with rakefile, version.
67
80
  * Make a pull request.
@@ -72,11 +85,14 @@ dropped.
72
85
  * [Zabbix API docs][Zabbix API]
73
86
 
74
87
  [Zabbix]: https://www.zabbix.com
75
- [Zabbix API]: https://www.zabbix.com/documentation/3.2/manual/api
88
+ [Zabbix API]: https://www.zabbix.com/documentation/5.2/manual/api
76
89
 
77
90
  ## Copyright
78
- Copyright (c) 2015-2018 Express 42
79
91
 
80
- See [LICENSE][] for details.
92
+ - Copyright (c) 2021 [contributors]
93
+ - Copyright (c) 2015-2018 Express 42 and [contributors]
94
+
95
+ See [LICENSE] for details.
81
96
 
82
- [license]: LICENSE.md
97
+ [LICENSE]: LICENSE.md
98
+ [contributors]: https://github.com/express42/zabbixapi/graphs/contributors
@@ -19,6 +19,8 @@ require 'zabbixapi/classes/items'
19
19
  require 'zabbixapi/classes/maintenance'
20
20
  require 'zabbixapi/classes/mediatypes'
21
21
  require 'zabbixapi/classes/proxies'
22
+ require 'zabbixapi/classes/problems'
23
+ require 'zabbixapi/classes/roles'
22
24
  require 'zabbixapi/classes/screens'
23
25
  require 'zabbixapi/classes/scripts'
24
26
  require 'zabbixapi/classes/server'
@@ -125,11 +127,21 @@ class ZabbixApi
125
127
  @mediatypes ||= Mediatypes.new(@client)
126
128
  end
127
129
 
130
+ # @return [ZabbixApi::Problems]
131
+ def problems
132
+ @problems ||= Problems.new(@client)
133
+ end
134
+
128
135
  # @return [ZabbixApi::Proxies]
129
136
  def proxies
130
137
  @proxies ||= Proxies.new(@client)
131
138
  end
132
139
 
140
+ # @return [ZabbixApi::Roles]
141
+ def roles
142
+ @roles ||= Roles.new(@client)
143
+ end
144
+
133
145
  # @return [ZabbixApi::Screens]
134
146
  def screens
135
147
  @screens ||= Screens.new(@client)
@@ -2,7 +2,7 @@ class ZabbixApi
2
2
  class Basic
3
3
  # Get Zabbix object data from API by id
4
4
  #
5
- # @param data [Hash] Should include object's id field name (indentify) and id value
5
+ # @param data [Hash] Should include object's id field name (identify) and id value
6
6
  # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
7
7
  # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
8
8
  # @return [Hash]
@@ -23,7 +23,7 @@ class ZabbixApi
23
23
 
24
24
  # Destroy Zabbix object using API delete
25
25
  #
26
- # @param data [Hash] Should include object's id field name (indentify) and id value
26
+ # @param data [Hash] Should include object's id field name (identify) and id value
27
27
  # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
28
28
  # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
29
29
  # @return [Integer] The object id if a single object is deleted
@@ -22,14 +22,14 @@ class ZabbixApi
22
22
  {}
23
23
  end
24
24
 
25
- # Returns the object's plural id field name (indentify) based on key
25
+ # Returns the object's plural id field name (identify) based on key
26
26
  #
27
27
  # @return [String]
28
28
  def keys
29
29
  key + 's'
30
30
  end
31
31
 
32
- # Returns the object's id field name (indentify) based on method_name + id
32
+ # Returns the object's id field name (identify) based on method_name + id
33
33
  #
34
34
  # @return [String]
35
35
  def key
@@ -38,9 +38,9 @@ class ZabbixApi
38
38
 
39
39
  # Placeholder for inherited objects to provide object-specific id field name
40
40
  #
41
- # @raise [ApiError] Basic object does not directly support indentify
42
- def indentify
43
- raise ApiError.new("Can't call indentify here")
41
+ # @raise [ApiError] Basic object does not directly support identify
42
+ def identify
43
+ raise ApiError.new("Can't call identify here")
44
44
  end
45
45
  end
46
46
  end
@@ -18,7 +18,7 @@ class ZabbixApi
18
18
 
19
19
  # Delete Zabbix object using API
20
20
  #
21
- # @param data [Hash] Should include object's id field name (indentify) and id value
21
+ # @param data [Hash] Should include object's id field name (identify) and id value
22
22
  # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
23
23
  # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
24
24
  # @return [Integer] The object id if a single object is deleted
@@ -33,7 +33,7 @@ class ZabbixApi
33
33
 
34
34
  # Create or update Zabbix object using API
35
35
  #
36
- # @param data [Hash] Should include object's id field name (indentify) and id value
36
+ # @param data [Hash] Should include object's id field name (identify) and id value
37
37
  # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
38
38
  # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
39
39
  # @return [Integer] The object id if a single object is created
@@ -41,13 +41,13 @@ class ZabbixApi
41
41
  def create_or_update(data)
42
42
  log "[DEBUG] Call create_or_update with parameters: #{data.inspect}"
43
43
 
44
- id = get_id(indentify.to_sym => data[indentify.to_sym])
44
+ id = get_id(identify.to_sym => data[identify.to_sym])
45
45
  id ? update(data.merge(key.to_sym => id.to_s)) : create(data)
46
46
  end
47
47
 
48
48
  # Update Zabbix object using API
49
49
  #
50
- # @param data [Hash] Should include object's id field name (indentify) and id value
50
+ # @param data [Hash] Should include object's id field name (identify) and id value
51
51
  # @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
52
52
  # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
53
53
  # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
@@ -71,7 +71,7 @@ class ZabbixApi
71
71
 
72
72
  # Get full/extended Zabbix object data from API
73
73
  #
74
- # @param data [Hash] Should include object's id field name (indentify) and id value
74
+ # @param data [Hash] Should include object's id field name (identify) and id value
75
75
  # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
76
76
  # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
77
77
  # @return [Hash]
@@ -82,7 +82,7 @@ class ZabbixApi
82
82
  method: "#{method_name}.get",
83
83
  params: {
84
84
  filter: {
85
- indentify.to_sym => data[indentify.to_sym]
85
+ identify.to_sym => data[identify.to_sym]
86
86
  },
87
87
  output: 'extend'
88
88
  }
@@ -132,7 +132,7 @@ class ZabbixApi
132
132
  def all
133
133
  result = {}
134
134
  @client.api_request(method: "#{method_name}.get", params: { output: 'extend' }).each do |item|
135
- result[item[indentify]] = item[key]
135
+ result[item[identify]] = item[key]
136
136
  end
137
137
  result
138
138
  end
@@ -140,39 +140,39 @@ class ZabbixApi
140
140
  # Get Zabbix object id from API based on provided data
141
141
  #
142
142
  # @param data [Hash]
143
- # @raise [ApiError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (indentify).
143
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
144
144
  # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
145
145
  # @return [Integer] Zabbix object id
146
146
  def get_id(data)
147
147
  log "[DEBUG] Call get_id with parameters: #{data.inspect}"
148
148
  # symbolize keys if the user used string keys instead of symbols
149
- data = symbolize_keys(data) if data.key?(indentify)
150
- # raise an error if indentify name was not supplied
151
- name = data[indentify.to_sym]
152
- raise ApiError.new("#{indentify} not supplied in call to get_id") if name.nil?
149
+ data = symbolize_keys(data) if data.key?(identify)
150
+ # raise an error if identify name was not supplied
151
+ name = data[identify.to_sym]
152
+ raise ApiError.new("#{identify} not supplied in call to get_id") if name.nil?
153
153
 
154
154
  result = @client.api_request(
155
155
  method: "#{method_name}.get",
156
156
  params: {
157
157
  filter: data,
158
- output: [key, indentify]
158
+ output: [key, identify]
159
159
  }
160
160
  )
161
161
  id = nil
162
- result.each { |item| id = item[key].to_i if item[indentify] == data[indentify.to_sym] }
162
+ result.each { |item| id = item[key].to_i if item[identify] == data[identify.to_sym] }
163
163
  id
164
164
  end
165
165
 
166
166
  # Get or Create Zabbix object using API
167
167
  #
168
- # @param data [Hash] Should include object's id field name (indentify) and id value
168
+ # @param data [Hash] Should include object's id field name (identify) and id value
169
169
  # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
170
170
  # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
171
171
  # @return [Integer] Zabbix object id
172
172
  def get_or_create(data)
173
173
  log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
174
174
 
175
- unless (id = get_id(indentify.to_sym => data[indentify.to_sym]))
175
+ unless (id = get_id(identify.to_sym => data[identify.to_sym]))
176
176
  id = create(data)
177
177
  end
178
178
  id
@@ -10,8 +10,32 @@ class ZabbixApi
10
10
  # The id field name used for identifying specific Action objects via Zabbix API
11
11
  #
12
12
  # @return [String]
13
- def indentify
13
+ def identify
14
14
  'name'
15
15
  end
16
+
17
+ # Get full/extended Action object data from API
18
+ #
19
+ # @param data [Hash] Should include object's id field name (identify) and id 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]
23
+ def get_full_data(data)
24
+ log "[DEBUG] Call get_full_data with parameters: #{data.inspect}"
25
+
26
+ @client.api_request(
27
+ method: "#{method_name}.get",
28
+ params: {
29
+ filter: {
30
+ identify.to_sym => data[identify.to_sym]
31
+ },
32
+ output: 'extend',
33
+ selectOperations: "extend",
34
+ selectRecoveryOperations: "extend",
35
+ selectAcknowledgeOperations: "extend",
36
+ selectFilter: "extend",
37
+ }
38
+ )
39
+ end
16
40
  end
17
41
  end
@@ -10,7 +10,7 @@ class ZabbixApi
10
10
  # The id field name used for identifying specific Application objects via Zabbix API
11
11
  #
12
12
  # @return [String]
13
- def indentify
13
+ def identify
14
14
  'name'
15
15
  end
16
16
 
@@ -15,7 +15,7 @@ class ZabbixApi
15
15
  # The id field name used for identifying specific Configuration objects via Zabbix API
16
16
  #
17
17
  # @return [String]
18
- def indentify
18
+ def identify
19
19
  'host'
20
20
  end
21
21
 
@@ -10,7 +10,7 @@ class ZabbixApi
10
10
  # The id field name used for identifying specific Drule objects via Zabbix API
11
11
  #
12
12
  # @return [String]
13
- def indentify
13
+ def identify
14
14
  'name'
15
15
  end
16
16
 
@@ -10,7 +10,7 @@ class ZabbixApi
10
10
  # The id field name used for identifying specific Event objects via Zabbix API
11
11
  #
12
12
  # @return [String]
13
- def indentify
13
+ def identify
14
14
  'name'
15
15
  end
16
16
  end
@@ -10,24 +10,24 @@ class ZabbixApi
10
10
  # The id field name used for identifying specific Graph objects via Zabbix API
11
11
  #
12
12
  # @return [String]
13
- def indentify
13
+ def identify
14
14
  'name'
15
15
  end
16
16
 
17
17
  # Get full/extended Graph data from Zabbix API
18
18
  #
19
- # @param data [Hash] Should include object's id field name (indentify) and id value
19
+ # @param data [Hash] Should include object's id field name (identify) and id value
20
20
  # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
21
21
  # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
22
22
  # @return [Hash]
23
23
  def get_full_data(data)
24
- log "[DEBUG] Call get_full_data with parametrs: #{data.inspect}"
24
+ log "[DEBUG] Call get_full_data with parameters: #{data.inspect}"
25
25
 
26
26
  @client.api_request(
27
27
  method: "#{method_name}.get",
28
28
  params: {
29
29
  search: {
30
- indentify.to_sym => data[indentify.to_sym]
30
+ identify.to_sym => data[identify.to_sym]
31
31
  },
32
32
  output: 'extend'
33
33
  }
@@ -10,7 +10,7 @@ class ZabbixApi
10
10
  # The id field name used for identifying specific HostGroup objects via Zabbix API
11
11
  #
12
12
  # @return [String]
13
- def indentify
13
+ def identify
14
14
  'name'
15
15
  end
16
16
 
@@ -10,7 +10,7 @@ class ZabbixApi
10
10
  # The id field name used for identifying specific Host objects via Zabbix API
11
11
  #
12
12
  # @return [String]
13
- def indentify
13
+ def identify
14
14
  'host'
15
15
  end
16
16
 
@@ -21,7 +21,7 @@ class ZabbixApi
21
21
  # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
22
22
  # @return [Hash]
23
23
  def dump_by_id(data)
24
- log "[DEBUG] Call dump_by_id with parametrs: #{data.inspect}"
24
+ log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
25
25
 
26
26
  @client.api_request(
27
27
  method: 'host.get',
@@ -10,7 +10,7 @@ class ZabbixApi
10
10
  # The id field name used for identifying specific HttpTest objects via Zabbix API
11
11
  #
12
12
  # @return [String]
13
- def indentify
13
+ def identify
14
14
  'name'
15
15
  end
16
16
 
@@ -10,7 +10,7 @@ class ZabbixApi
10
10
  # The id field name used for identifying specific Item objects via Zabbix API
11
11
  #
12
12
  # @return [String]
13
- def indentify
13
+ def identify
14
14
  'name'
15
15
  end
16
16
 
@@ -10,7 +10,7 @@ class ZabbixApi
10
10
  # The id field name used for identifying specific Maintenance objects via Zabbix API
11
11
  #
12
12
  # @return [String]
13
- def indentify
13
+ def identify
14
14
  'name'
15
15
  end
16
16
  end
@@ -10,8 +10,8 @@ class ZabbixApi
10
10
  # The id field name used for identifying specific MediaType objects via Zabbix API
11
11
  #
12
12
  # @return [String]
13
- def indentify
14
- 'description'
13
+ def identify
14
+ 'name'
15
15
  end
16
16
 
17
17
  # The default options used when creating MediaType objects via Zabbix API
@@ -19,7 +19,8 @@ class ZabbixApi
19
19
  # @return [Hash]
20
20
  def default_options
21
21
  {
22
- description: '', # Name
22
+ name: '', # Name
23
+ description: '', # Description
23
24
  type: 0, # 0 - Email, 1 - External script, 2 - SMS, 3 - Jabber, 100 - EzTexting
24
25
  smtp_server: '',
25
26
  smtp_helo: '',
@@ -30,5 +31,79 @@ class ZabbixApi
30
31
  passwd: '' # Jabber password used by Zabbix server
31
32
  }
32
33
  end
34
+
35
+ # def log(message)
36
+ # STDERR.puts
37
+ # STDERR.puts message.to_s
38
+ # STDERR.puts
39
+ # end
40
+
41
+ # Update MediaType object using API
42
+ #
43
+ # @param data [Hash] Should include object's id field name (identify) and id value
44
+ # @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
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] The object id if a single object is created
48
+ # @return [Boolean] True/False if multiple objects are created
49
+ def update(data, force = false)
50
+ log "[DEBUG] Call update with parameters: #{data.inspect}"
51
+ if data[key.to_sym].nil?
52
+ data[key.to_sym] = get_id(data)
53
+ log "[DEBUG] Enriched data with id: #{data.inspect}"
54
+ end
55
+ dump = {}
56
+ dump_by_id(key.to_sym => data[key.to_sym]).each do |item|
57
+ dump = symbolize_keys(item) if item[key].to_i == data[key.to_sym].to_i
58
+ end
59
+ if hash_equals?(dump, data) && !force
60
+ log "[DEBUG] Equal keys #{dump} and #{data}, skip update"
61
+ data[key.to_sym].to_i
62
+ else
63
+ data_update = [data]
64
+ result = @client.api_request(method: "#{method_name}.update", params: data_update)
65
+ parse_keys result
66
+ end
67
+ end
68
+
69
+ # Get MediaType object id from API based on provided data
70
+ #
71
+ # @param data [Hash]
72
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
73
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
74
+ # @return [Integer] Zabbix object id
75
+ def get_id(data)
76
+ log "[DEBUG] Call get_id with parameters: #{data.inspect}"
77
+ # symbolize keys if the user used string keys instead of symbols
78
+ data = symbolize_keys(data) if data.key?(identify)
79
+ # raise an error if identify name was not supplied
80
+ name = data[identify.to_sym]
81
+ raise ApiError.new("#{identify} not supplied in call to get_id, #{data} (#{method_name})") if name.nil?
82
+
83
+ result = @client.api_request(
84
+ method: "#{method_name}.get",
85
+ params: {
86
+ filter: {name: name},
87
+ output: [key, identify]
88
+ }
89
+ )
90
+ id = nil
91
+ result.each { |item| id = item[key].to_i if item[identify] == data[identify.to_sym] }
92
+ id
93
+ end
94
+
95
+ # Create or update MediaType object using API
96
+ #
97
+ # @param data [Hash] Should include object's id field name (identify) and id value
98
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
99
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
100
+ # @return [Integer] The object id if a single object is created
101
+ # @return [Boolean] True/False if multiple objects are created
102
+ def create_or_update(data)
103
+ log "[DEBUG] Call create_or_update with parameters: #{data.inspect}"
104
+
105
+ id = get_id(identify.to_sym => data[identify.to_sym])
106
+ id ? update(data.merge(key.to_sym => id.to_s)) : create(data)
107
+ end
33
108
  end
34
109
  end
@@ -0,0 +1,101 @@
1
+ class ZabbixApi
2
+ class Problems < Basic
3
+ # The method name used for interacting with Hosts via Zabbix API
4
+ #
5
+ # @return [String]
6
+ def method_name
7
+ 'problem'
8
+ end
9
+
10
+ # The id field name used for identifying specific Problem objects via Zabbix API
11
+ #
12
+ # @return [String]
13
+ def identify
14
+ 'name'
15
+ end
16
+
17
+ # The key field name used for Problem objects via Zabbix API
18
+ # However, Problem object does not have a unique identifier
19
+ #
20
+ # @return [String]
21
+ def key
22
+ 'problemid'
23
+ end
24
+
25
+ # Returns the object's plural id field name (identify) based on key
26
+ # However, Problem object does not have a unique identifier
27
+ #
28
+ # @return [String]
29
+ def keys
30
+ 'problemids'
31
+ end
32
+
33
+ # Dump Problem object data by key from Zabbix API
34
+ #
35
+ # @param data [Hash] Should include desired object's key and value
36
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
37
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
38
+ # @return [Hash]
39
+ def dump_by_id(data)
40
+ log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
41
+
42
+ @client.api_request(
43
+ method: 'problem.get',
44
+ params: {
45
+ filter: {
46
+ identify.to_sym => data[identify.to_sym]
47
+ },
48
+ output: 'extend'
49
+ }
50
+ )
51
+ end
52
+
53
+ # Get full/extended Problem data from Zabbix API
54
+ #
55
+ # @param data [Hash] Should include object's id field name (identify) and id value
56
+ # @raise [ApiError] 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 [Hash]
59
+ def get_full_data(data)
60
+ log "[DEBUG] Call get_full_data with parameters: #{data.inspect}"
61
+
62
+ data = symbolize_keys(data)
63
+
64
+ @client.api_request(
65
+ method: "#{method_name}.get",
66
+ params: {
67
+ filter: {
68
+ identify.to_sym => data[identify.to_sym]
69
+ },
70
+ eventids: data[:eventids] || nil,
71
+ groupids: data[:groupids] || nil,
72
+ hostids: data[:hostids] || nil,
73
+ objectids: data[:objectids] || nil,
74
+ applicationids: data[:applicationids] || nil,
75
+ tags: data[:tags] || nil,
76
+ time_from: data[:time_from] || nil,
77
+ time_till: data[:time_till] || nil,
78
+ eventid_from: data[:eventid_from] || nil,
79
+ eventid_till: data[:eventid_till] || nil,
80
+ recent: data[:recent] || false,
81
+ sortfield: data[:sortfield] || ['eventid'],
82
+ sortorder: data[:sortorder] || 'DESC',
83
+ countOutput: data[:countOutput] || nil,
84
+ output: 'extend',
85
+ selectAcknowledges: 'extend',
86
+ selectTags: 'extend',
87
+ selectSuppressionData: 'extend'
88
+ }
89
+ )
90
+ end
91
+
92
+ # Get full/extended Zabbix data for Problem objects from API
93
+ #
94
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
95
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
96
+ # @return [Array<Hash>] Array of matching objects
97
+ def all
98
+ get_full_data({})
99
+ end
100
+ end
101
+ end
@@ -10,7 +10,7 @@ class ZabbixApi
10
10
  # The id field name used for identifying specific Proxy objects via Zabbix API
11
11
  #
12
12
  # @return [String]
13
- def indentify
13
+ def identify
14
14
  'host'
15
15
  end
16
16
 
@@ -0,0 +1,114 @@
1
+ class ZabbixApi
2
+ class Roles < Basic
3
+ # The method name used for interacting with Role via Zabbix API
4
+ #
5
+ # @return [String]
6
+ def method_name
7
+ 'role'
8
+ end
9
+
10
+ # The key field name used for Role objects via Zabbix API
11
+ #
12
+ # @return [String]
13
+ def key
14
+ 'roleid'
15
+ end
16
+
17
+ # The id field name used for identifying specific Role 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 [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)
30
+ def rules(data)
31
+ rules = data[:rules] || 2
32
+ result = @client.api_request(
33
+ method: 'role.update',
34
+ params: {
35
+ roleid: data[:roleid],
36
+ rules: 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 [ApiError] 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
+ # Dump Role object data by key from Zabbix API
54
+ #
55
+ # @param data [Hash] Should include desired object's key and value
56
+ # @raise [ApiError] 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 [Hash]
59
+ def dump_by_id(data)
60
+ log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
61
+
62
+ @client.api_request(
63
+ method: 'role.get',
64
+ params: {
65
+ output: 'extend',
66
+ selectRules: 'extend',
67
+ roleids: data[:id]
68
+ }
69
+ )
70
+ end
71
+
72
+ # Get Role ids by Role Name from Zabbix API
73
+ #
74
+ # @param data [Hash] Should include host value to query for matching graphs
75
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
76
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
77
+ # @return [Array] Returns array of Graph ids
78
+ def get_ids_by_name(data)
79
+ result = @client.api_request(
80
+ method: 'role.get',
81
+ params: {
82
+ filter: {
83
+ name: data[:name]
84
+ },
85
+ output: 'extend'
86
+ }
87
+ )
88
+
89
+ result.map do |rule|
90
+ rule['roleid']
91
+ end.compact
92
+ end
93
+
94
+ # Update users in Userroles using Zabbix API
95
+ #
96
+ # @param data [Hash] Needs to include userids and usrgrpids to mass update users in groups
97
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
98
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
99
+ # @return [Integer] Zabbix object id (usergroup)
100
+ def update_users(data)
101
+ user_groups = data[:usrgrpids].map do |t|
102
+ {
103
+ usrgrpid: t,
104
+ userids: data[:userids],
105
+ }
106
+ end
107
+ result = @client.api_request(
108
+ method: 'usergroup.update',
109
+ params: user_groups,
110
+ )
111
+ result ? result['usrgrpids'][0].to_i : nil
112
+ end
113
+ end
114
+ end
@@ -29,7 +29,7 @@ class ZabbixApi
29
29
  # The id field name used for identifying specific Screen objects via Zabbix API
30
30
  #
31
31
  # @return [String]
32
- def indentify
32
+ def identify
33
33
  'name'
34
34
  end
35
35
 
@@ -7,7 +7,7 @@ class ZabbixApi
7
7
  # The id field name used for identifying specific Screen objects via Zabbix API
8
8
  #
9
9
  # @return [String]
10
- def indentify
10
+ def identify
11
11
  'name'
12
12
  end
13
13
 
@@ -10,7 +10,7 @@ class ZabbixApi
10
10
  # The id field name used for identifying specific Template objects via Zabbix API
11
11
  #
12
12
  # @return [String]
13
- def indentify
13
+ def identify
14
14
  'host'
15
15
  end
16
16
 
@@ -10,7 +10,7 @@ class ZabbixApi
10
10
  # The id field name used for identifying specific Trigger objects via Zabbix API
11
11
  #
12
12
  # @return [String]
13
- def indentify
13
+ def identify
14
14
  'description'
15
15
  end
16
16
 
@@ -21,7 +21,7 @@ class ZabbixApi
21
21
  # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
22
22
  # @return [Hash]
23
23
  def dump_by_id(data)
24
- log "[DEBUG] Call dump_by_id with parametrs: #{data.inspect}"
24
+ log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
25
25
 
26
26
  @client.api_request(
27
27
  method: 'trigger.get',
@@ -1,7 +1,7 @@
1
1
  class ZabbixApi
2
2
  class Triggers < Basic
3
3
  def create_or_update(data)
4
- log "[DEBUG] Call create_or_update with parametrs: #{data.inspect}"
4
+ log "[DEBUG] Call create_or_update with parameters: #{data.inspect}"
5
5
  get_or_create(data)
6
6
  end
7
7
  end
@@ -17,7 +17,7 @@ class ZabbixApi
17
17
  # The id field name used for identifying specific Usergroup objects via Zabbix API
18
18
  #
19
19
  # @return [String]
20
- def indentify
20
+ def identify
21
21
  'name'
22
22
  end
23
23
 
@@ -3,7 +3,7 @@ class ZabbixApi
3
3
  # The id field name used for identifying specific User macro objects via Zabbix API
4
4
  #
5
5
  # @return [String]
6
- def indentify
6
+ def identify
7
7
  'macro'
8
8
  end
9
9
 
@@ -17,17 +17,17 @@ class ZabbixApi
17
17
  # Get User macro object id from Zabbix API based on provided data
18
18
  #
19
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).
20
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
21
21
  # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
22
22
  # @return [Integer] Zabbix object id
23
23
  def get_id(data)
24
24
  log "[DEBUG] Call get_id with parameters: #{data.inspect}"
25
25
 
26
26
  # symbolize keys if the user used string keys instead of symbols
27
- data = symbolize_keys(data) if data.key?(indentify)
28
- # raise an error if indentify name was not supplied
29
- name = data[indentify.to_sym]
30
- raise ApiError.new("#{indentify} not supplied in call to get_id") if name.nil?
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 ApiError.new("#{identify} not supplied in call to get_id") if name.nil?
31
31
 
32
32
  result = request(data, 'usermacro.get', 'hostmacroid')
33
33
 
@@ -37,17 +37,17 @@ class ZabbixApi
37
37
  # Get Global macro object id from Zabbix API based on provided data
38
38
  #
39
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).
40
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
41
41
  # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
42
42
  # @return [Integer] Zabbix object id
43
43
  def get_id_global(data)
44
44
  log "[DEBUG] Call get_id_global with parameters: #{data.inspect}"
45
45
 
46
46
  # symbolize keys if the user used string keys instead of symbols
47
- data = symbolize_keys(data) if data.key?(indentify)
48
- # raise an error if indentify name was not supplied
49
- name = data[indentify.to_sym]
50
- raise ApiError.new("#{indentify} not supplied in call to get_id_global") if name.nil?
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 ApiError.new("#{identify} not supplied in call to get_id_global") if name.nil?
51
51
 
52
52
  result = request(data, 'usermacro.get', 'globalmacroid')
53
53
 
@@ -56,7 +56,7 @@ class ZabbixApi
56
56
 
57
57
  # Get full/extended User macro data from Zabbix API
58
58
  #
59
- # @param data [Hash] Should include object's id field name (indentify) and id value
59
+ # @param data [Hash] Should include object's id field name (identify) and id value
60
60
  # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
61
61
  # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
62
62
  # @return [Hash]
@@ -68,7 +68,7 @@ class ZabbixApi
68
68
 
69
69
  # Get full/extended Global macro data from Zabbix API
70
70
  #
71
- # @param data [Hash] Should include object's id field name (indentify) and id value
71
+ # @param data [Hash] Should include object's id field name (identify) and id value
72
72
  # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
73
73
  # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
74
74
  # @return [Hash]
@@ -126,7 +126,7 @@ class ZabbixApi
126
126
 
127
127
  # Update User macro object using Zabbix API
128
128
  #
129
- # @param data [Hash] Should include object's id field name (indentify), id value, and fields to update
129
+ # @param data [Hash] Should include object's id field name (identify), id value, and fields to update
130
130
  # @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
131
131
  # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
132
132
  # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
@@ -138,7 +138,7 @@ class ZabbixApi
138
138
 
139
139
  # Update Global macro object using Zabbix API
140
140
  #
141
- # @param data [Hash] Should include object's id field name (indentify), id value, and fields to update
141
+ # @param data [Hash] Should include object's id field name (identify), id value, and fields to update
142
142
  # @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
143
143
  # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
144
144
  # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
@@ -24,7 +24,7 @@ class ZabbixApi
24
24
  # The id field name used for identifying specific User objects via Zabbix API
25
25
  #
26
26
  # @return [String]
27
- def indentify
27
+ def identify
28
28
  'alias'
29
29
  end
30
30
 
@@ -17,7 +17,7 @@ class ZabbixApi
17
17
  # The id field name used for identifying specific ValueMap objects via Zabbix API
18
18
  #
19
19
  # @return [String]
20
- def indentify
20
+ def identify
21
21
  'name'
22
22
  end
23
23
 
@@ -60,9 +60,13 @@ class ZabbixApi
60
60
  @proxy_port = @proxy_uri.port
61
61
  @proxy_user, @proxy_pass = @proxy_uri.userinfo.split(/:/) if @proxy_uri.userinfo
62
62
  end
63
- unless api_version =~ %r{^4.[0|4]\.\d+$}
63
+ unless api_version =~ %r{^5.[0|2]\.\d+$}
64
64
  message = "Zabbix API version: #{api_version} is not supported by this version of zabbixapi"
65
- raise ZabbixApi::ApiError.new(message)
65
+ if @options[:ignore_version]
66
+ puts "[WARNING] #{message}" if @options[:debug]
67
+ else
68
+ raise ZabbixApi::ApiError.new(message)
69
+ end
66
70
  end
67
71
 
68
72
  @auth_hash = auth
@@ -1,3 +1,3 @@
1
1
  class ZabbixApi
2
- VERSION = '4.2.0'.freeze
2
+ VERSION = '5.0.0-alpha1'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zabbixapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0
4
+ version: 5.0.0.pre.alpha1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vasiliev D.V.
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-08-31 00:00:00.000000000 Z
12
+ date: 2021-01-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: http
@@ -82,7 +82,9 @@ files:
82
82
  - lib/zabbixapi/classes/items.rb
83
83
  - lib/zabbixapi/classes/maintenance.rb
84
84
  - lib/zabbixapi/classes/mediatypes.rb
85
+ - lib/zabbixapi/classes/problems.rb
85
86
  - lib/zabbixapi/classes/proxies.rb
87
+ - lib/zabbixapi/classes/roles.rb
86
88
  - lib/zabbixapi/classes/screens.rb
87
89
  - lib/zabbixapi/classes/scripts.rb
88
90
  - lib/zabbixapi/classes/server.rb
@@ -111,11 +113,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
111
113
  version: 2.0.0
112
114
  required_rubygems_version: !ruby/object:Gem::Requirement
113
115
  requirements:
114
- - - ">="
116
+ - - ">"
115
117
  - !ruby/object:Gem::Version
116
- version: '0'
118
+ version: 1.3.1
117
119
  requirements: []
118
- rubygems_version: 3.1.2
120
+ rubygems_version: 3.0.1
119
121
  signing_key:
120
122
  specification_version: 4
121
123
  summary: Simple and lightweight ruby module for working with the Zabbix API