zabbixapi_mgx 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.
Files changed (39) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +58 -0
  3. data/LICENSE.md +20 -0
  4. data/README.md +98 -0
  5. data/lib/zabbixapi/basic/basic_alias.rb +37 -0
  6. data/lib/zabbixapi/basic/basic_func.rb +103 -0
  7. data/lib/zabbixapi/basic/basic_init.rb +46 -0
  8. data/lib/zabbixapi/basic/basic_logic.rb +181 -0
  9. data/lib/zabbixapi/classes/actions.rb +41 -0
  10. data/lib/zabbixapi/classes/applications.rb +43 -0
  11. data/lib/zabbixapi/classes/configurations.rb +42 -0
  12. data/lib/zabbixapi/classes/drules.rb +55 -0
  13. data/lib/zabbixapi/classes/errors.rb +28 -0
  14. data/lib/zabbixapi/classes/events.rb +17 -0
  15. data/lib/zabbixapi/classes/graphs.rb +111 -0
  16. data/lib/zabbixapi/classes/hostgroups.rb +24 -0
  17. data/lib/zabbixapi/classes/hosts.rb +80 -0
  18. data/lib/zabbixapi/classes/httptests.rb +54 -0
  19. data/lib/zabbixapi/classes/items.rb +83 -0
  20. data/lib/zabbixapi/classes/maintenance.rb +17 -0
  21. data/lib/zabbixapi/classes/mediatypes.rb +109 -0
  22. data/lib/zabbixapi/classes/problems.rb +101 -0
  23. data/lib/zabbixapi/classes/proxies.rb +48 -0
  24. data/lib/zabbixapi/classes/roles.rb +114 -0
  25. data/lib/zabbixapi/classes/screens.rb +94 -0
  26. data/lib/zabbixapi/classes/scripts.rb +35 -0
  27. data/lib/zabbixapi/classes/server.rb +16 -0
  28. data/lib/zabbixapi/classes/templates.rb +106 -0
  29. data/lib/zabbixapi/classes/triggers.rb +105 -0
  30. data/lib/zabbixapi/classes/unusable.rb +8 -0
  31. data/lib/zabbixapi/classes/usergroups.rb +73 -0
  32. data/lib/zabbixapi/classes/usermacros.rb +228 -0
  33. data/lib/zabbixapi/classes/users.rb +64 -0
  34. data/lib/zabbixapi/classes/valuemaps.rb +50 -0
  35. data/lib/zabbixapi/client.rb +167 -0
  36. data/lib/zabbixapi/version.rb +3 -0
  37. data/lib/zabbixapi.rb +194 -0
  38. data/zabbixapi.gemspec +29 -0
  39. metadata +124 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f437f7bf85358d0f384168dde81bcd827feba26256ee92b06dd6e8255210ab9b
4
+ data.tar.gz: d17b09bba91cfa99ea5a0084ac7a97640ebceb53dd560d4f39fd2a1e10857b6a
5
+ SHA512:
6
+ metadata.gz: ef66203b442560d4eb89452ed0740c2f4153c679a91d369ee306224d6f627a103c30727dbf1793e5537c9b2f920cd8696fbfcc5ead4eb977a5ac2ad6734e5208
7
+ data.tar.gz: 296d273f3ac1ed420652444f6651237088f58e6116bc8660807cfcf0c558268a8e5cc7832f537e1b56a8024bf9bc80ccf2b5ba3c7fed168f56ceb859a7180d3c
data/CHANGELOG.md ADDED
@@ -0,0 +1,58 @@
1
+ #CHANGELOG
2
+
3
+ ## 4.2.0
4
+ [PR #102](https://github.com/express42/zabbixapi/pull/102) Add events get method method. Fixed all testing failures. (Thanks @kevin-j-smith)
5
+
6
+ ## 4.1.2
7
+ [PR #99](https://github.com/express42/zabbixapi/pull/99) Patch addressing log error function not found
8
+
9
+ ## 4.1.1
10
+
11
+ [PR #97](https://github.com/express42/zabbixapi/pull/97) Bumped version
12
+
13
+ [PR #98](https://github.com/express42/zabbixapi/pull/98) Removed strict zabbix versioning error
14
+
15
+ ## 4.1.0
16
+
17
+ [PR #82](https://github.com/express42/zabbixapi/pull/82) Add logout method (Thanks @baurmatt)
18
+
19
+ [PR #86](https://github.com/express42/zabbixapi/pull/86) Feature: add support for Discovery Rules (`drule` API) (Thanks @lehn-etracker)
20
+
21
+ ## 4.0.0
22
+
23
+ [PR #90](https://github.com/express42/zabbixapi/pull/90) Add 4.0 support (Thanks @svdasein)
24
+
25
+ [PR #85](https://github.com/express42/zabbixapi/pull/85) Add 3.4 support (Thanks @ottok)
26
+
27
+ ## 3.2.0
28
+
29
+ [PR #77](https://github.com/express42/zabbixapi/pull/77) Add support for Valuemap (Thanks @julienlevasseur)
30
+
31
+ [PR #80](https://github.com/express42/zabbixapi/pull/80) Hide password then raising error (Thanks @bbaugher)
32
+
33
+ ## 3.1.0
34
+
35
+ [PR #68](https://github.com/express42/zabbixapi/pull/68) Add support for scripts (Thanx @jrbeilke)
36
+
37
+ ## 2.4.9
38
+
39
+ [PR #55](https://github.com/express42/zabbixapi/pull/55) Add 3.2.x support (Thanx @jrbeilke)
40
+
41
+ [PR #54](https://github.com/express42/zabbixapi/pull/54) Add web scenarios support (Thanx @jrbeilke)
42
+
43
+
44
+ ## 2.4.7
45
+
46
+ [PR #45](https://github.com/express42/zabbixapi/pull/45) Add support for zabbix 3.0.x (Thanx @wandenberg)
47
+
48
+ ## 2.4.6
49
+
50
+ [PR #39](https://github.com/express42/zabbixapi/issues/39) Add support for maintenance API
51
+
52
+ ## 2.4.5
53
+
54
+ [PR #33](https://github.com/express42/zabbixapi/issues/33) Typed exceptions
55
+
56
+ ## 2.4.4
57
+
58
+ [Issue #32](https://github.com/express42/zabbixapi/issues/32): Force update of objects in zabbix
data/LICENSE.md ADDED
@@ -0,0 +1,20 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015-2018 Express 42
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the "Software"), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software is furnished to do so,
10
+ subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,98 @@
1
+ # Ruby Zabbix Api Module
2
+
3
+ [![Gem Version](http://img.shields.io/gem/v/zabbixapi.svg)][gem]
4
+ [![Build Status](https://github.com/anapsix/zabbixapi/workflows/CI/badge.svg)][github-ci]
5
+
6
+ [gem]: https://rubygems.org/gems/zabbixapi
7
+ [github-ci]: https://github.com/express42/zabbixapi/actions?query=workflow%3ACI
8
+
9
+ Simple and lightweight ruby module for working with [Zabbix][Zabbix] via the [Zabbix API][Zabbix API]
10
+
11
+ ## Installation
12
+ ```sh
13
+ # latest
14
+ gem install zabbixapi
15
+
16
+ # specific version
17
+ gem install zabbixapi -v 4.2.0
18
+ ```
19
+
20
+ ## Documentation
21
+ [http://rdoc.info/gems/zabbixapi][documentation]
22
+
23
+ [documentation]: http://rdoc.info/gems/zabbixapi
24
+
25
+ ## Examples
26
+ [https://github.com/express42/zabbixapi/tree/master/examples][examples]
27
+
28
+ [examples]: https://github.com/express42/zabbixapi/tree/master/examples
29
+
30
+ ## Version Policy
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.
35
+
36
+ * Zabbix 1.8.2 (api version 1.2) | zabbixapi 0.6.x | [branch zabbix1.8](https://github.com/express42/zabbixapi/tree/zabbix1.8)
37
+ * Zabbix 1.8.9 (api version 1.3) | zabbixapi 0.6.x | [branch zabbix1.8](https://github.com/express42/zabbixapi/tree/zabbix1.8)
38
+ * Zabbix 2.0.x (api version 1.4 -> 2.0.10) | zabbixapi 2.0.x | [branch zabbix2.0](https://github.com/express42/zabbixapi/tree/zabbix2.0)
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)
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)
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)
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)
46
+
47
+ ## Supported Ruby Versions
48
+ This library aims to support and is [tested against][github-ci] the following Ruby
49
+ versions:
50
+
51
+ * Ruby 2.5
52
+ * Ruby 2.6
53
+ * Ruby 2.7
54
+ * JRuby 9.2.10.0
55
+
56
+ If something doesn't work on one of these versions, it's a bug.
57
+
58
+ This library may inadvertently work (or seem to work) on other Ruby versions,
59
+ however support will only be provided for the versions listed above.
60
+
61
+ If you would like this library to support another Ruby version or
62
+ implementation, you may volunteer to be a maintainer. Being a maintainer
63
+ entails making sure all tests run and pass on that implementation. When
64
+ something breaks on your implementation, you will be responsible for providing
65
+ patches in a timely fashion. If critical issues for a particular implementation
66
+ exist at the time of a major release, support for that Ruby version may be
67
+ dropped.
68
+
69
+ ## Dependencies
70
+
71
+ * net/http
72
+ * json
73
+
74
+ ## Contributing
75
+
76
+ * Fork the project.
77
+ * Base your work on the master branch.
78
+ * Make your feature addition or bug fix, write tests, write documentation/examples.
79
+ * Commit, do not mess with rakefile, version.
80
+ * Make a pull request.
81
+
82
+ ## Zabbix documentation
83
+
84
+ * [Zabbix Project Homepage][Zabbix]
85
+ * [Zabbix API docs][Zabbix API]
86
+
87
+ [Zabbix]: https://www.zabbix.com
88
+ [Zabbix API]: https://www.zabbix.com/documentation/5.2/manual/api
89
+
90
+ ## Copyright
91
+
92
+ - Copyright (c) 2021 [contributors]
93
+ - Copyright (c) 2015-2018 Express 42 and [contributors]
94
+
95
+ See [LICENSE] for details.
96
+
97
+ [LICENSE]: LICENSE.md
98
+ [contributors]: https://github.com/express42/zabbixapi/graphs/contributors
@@ -0,0 +1,37 @@
1
+ class ZabbixApi
2
+ class Basic
3
+ # Get Zabbix object data from API by id
4
+ #
5
+ # @param data [Hash] Should include object's id field name (identify) and id value
6
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
7
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
8
+ # @return [Hash]
9
+ def get(data)
10
+ get_full_data(data)
11
+ end
12
+
13
+ # Add new Zabbix object using API create
14
+ #
15
+ # @param data [Hash]
16
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
17
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
18
+ # @return [Integer] The object id if a single object is created
19
+ # @return [Boolean] True/False if multiple objects are created
20
+ def add(data)
21
+ create(data)
22
+ end
23
+
24
+ # Destroy Zabbix object using API delete
25
+ #
26
+ # @param data [Hash] Should include object's id field name (identify) and id value
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] The object id if a single object is deleted
30
+ # @return [Boolean] True/False if multiple objects are deleted
31
+ def destroy(data)
32
+ delete(data)
33
+ end
34
+
35
+ def method_name; end
36
+ end
37
+ end
@@ -0,0 +1,103 @@
1
+ class ZabbixApi
2
+ class Basic
3
+ # Log messages to stdout when debugging
4
+ #
5
+ # @param message [String]
6
+ def log(message)
7
+ puts message.to_s if @client.options[:debug]
8
+ end
9
+
10
+ # Compare two hashes for equality
11
+ #
12
+ # @param first_hash [Hash]
13
+ # @param second_hash [Hash]
14
+ # @return [Boolean]
15
+ def hash_equals?(first_hash, second_hash)
16
+ normalized_first_hash = normalize_hash(first_hash)
17
+ normalized_second_hash = normalize_hash(second_hash)
18
+
19
+ hash1 = normalized_first_hash.merge(normalized_second_hash)
20
+ hash2 = normalized_second_hash.merge(normalized_first_hash)
21
+ hash1 == hash2
22
+ end
23
+
24
+ # Convert all hash/array keys to symbols
25
+ #
26
+ # @param object [Array, Hash]
27
+ # @return [Array, Hash]
28
+ def symbolize_keys(object)
29
+ if object.is_a?(Array)
30
+ object.each_with_index do |val, index|
31
+ object[index] = symbolize_keys(val)
32
+ end
33
+ elsif object.is_a?(Hash)
34
+ object.keys.each do |key|
35
+ object[key.to_sym] = symbolize_keys(object.delete(key))
36
+ end
37
+ end
38
+ object
39
+ end
40
+
41
+ # Normalize all hash values to strings
42
+ #
43
+ # @param hash [Hash]
44
+ # @return [Hash]
45
+ def normalize_hash(hash)
46
+ result = hash.dup
47
+
48
+ result.delete(:hostid) # TODO: remove to logig. TemplateID and HostID has different id
49
+
50
+ result.each do |key, value|
51
+ result[key] = value.is_a?(Array) ? normalize_array(value) : value.to_s
52
+ end
53
+
54
+ result
55
+ end
56
+
57
+ # Normalize all array values to strings
58
+ #
59
+ # @param array [Array]
60
+ # @return [Array]
61
+ def normalize_array(array)
62
+ result = []
63
+
64
+ array.each do |e|
65
+ if e.is_a?(Array)
66
+ result.push(normalize_array(e))
67
+ elsif e.is_a?(Hash)
68
+ result.push(normalize_hash(e))
69
+ else
70
+ result.push(e.to_s)
71
+ end
72
+ end
73
+
74
+ result
75
+ end
76
+
77
+ # Parse a data hash for id key or boolean to return
78
+ #
79
+ # @param data [Hash]
80
+ # @return [Integer] The object id if a single object hash is provided with key
81
+ # @return [Boolean] True/False if multiple class object hash is provided
82
+ def parse_keys(data)
83
+ case data
84
+ when Hash
85
+ data.empty? ? nil : data[keys][0].to_i
86
+ when TrueClass
87
+ true
88
+ when FalseClass
89
+ false
90
+ end
91
+ end
92
+
93
+ # Merge two hashes into a single new hash
94
+ #
95
+ # @param first_hash [Hash]
96
+ # @param second_hash [Hash]
97
+ # @return [Hash]
98
+ def merge_params(first_hash, second_hash)
99
+ new = first_hash.dup
100
+ new.merge(second_hash)
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,46 @@
1
+ class ZabbixApi
2
+ class Basic
3
+ # Initializes a new Basic object with ZabbixApi Client
4
+ #
5
+ # @param client [ZabbixApi::Client]
6
+ # @return [ZabbixApi::Client]
7
+ def initialize(client)
8
+ @client = client
9
+ end
10
+
11
+ # Placeholder for inherited objects to provide object-specific method name
12
+ #
13
+ # @raise [ApiError] Basic object does not directly support method_name
14
+ def method_name
15
+ raise ApiError.new("Can't call method_name here")
16
+ end
17
+
18
+ # Placeholder for inherited objects to provide default options
19
+ #
20
+ # @return [Hash]
21
+ def default_options
22
+ {}
23
+ end
24
+
25
+ # Returns the object's plural id field name (identify) based on key
26
+ #
27
+ # @return [String]
28
+ def keys
29
+ key + 's'
30
+ end
31
+
32
+ # Returns the object's id field name (identify) based on method_name + id
33
+ #
34
+ # @return [String]
35
+ def key
36
+ method_name + 'id'
37
+ end
38
+
39
+ # Placeholder for inherited objects to provide object-specific id field name
40
+ #
41
+ # @raise [ApiError] Basic object does not directly support identify
42
+ def identify
43
+ raise ApiError.new("Can't call identify here")
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,181 @@
1
+ class ZabbixApi
2
+ class Basic
3
+ # Create new Zabbix object using API (with defaults)
4
+ #
5
+ # @param data [Hash]
6
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
7
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
8
+ # @return [Integer] The object id if a single object is created
9
+ # @return [Boolean] True/False if multiple objects are created
10
+ def create(data)
11
+ log "[DEBUG] Call create with parameters: #{data.inspect}"
12
+
13
+ data_with_default = default_options.empty? ? data : merge_params(default_options, data)
14
+ data_create = [data_with_default]
15
+ result = @client.api_request(method: "#{method_name}.create", params: data_create)
16
+ parse_keys result
17
+ end
18
+
19
+ # Delete Zabbix object using API
20
+ #
21
+ # @param data [Hash] Should include object's id field name (identify) and id value
22
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
23
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
24
+ # @return [Integer] The object id if a single object is deleted
25
+ # @return [Boolean] True/False if multiple objects are deleted
26
+ def delete(data)
27
+ log "[DEBUG] Call delete with parameters: #{data.inspect}"
28
+
29
+ data_delete = [data]
30
+ result = @client.api_request(method: "#{method_name}.delete", params: data_delete)
31
+ parse_keys result
32
+ end
33
+
34
+ # Create or update Zabbix object using API
35
+ #
36
+ # @param data [Hash] Should include object's id field name (identify) and id value
37
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
38
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
39
+ # @return [Integer] The object id if a single object is created
40
+ # @return [Boolean] True/False if multiple objects are created
41
+ def create_or_update(data)
42
+ log "[DEBUG] Call create_or_update with parameters: #{data.inspect}"
43
+
44
+ id = get_id(identify.to_sym => data[identify.to_sym])
45
+ id ? update(data.merge(key.to_sym => id.to_s)) : create(data)
46
+ end
47
+
48
+ # Update Zabbix object using API
49
+ #
50
+ # @param data [Hash] Should include object's id field name (identify) and id value
51
+ # @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
52
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
53
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
54
+ # @return [Integer] The object id if a single object is created
55
+ # @return [Boolean] True/False if multiple objects are created
56
+ def update(data, force = false)
57
+ log "[DEBUG] Call update with parameters: #{data.inspect}"
58
+ dump = {}
59
+ dump_by_id(key.to_sym => data[key.to_sym]).each do |item|
60
+ dump = symbolize_keys(item) if item[key].to_i == data[key.to_sym].to_i
61
+ end
62
+ if hash_equals?(dump, data) && !force
63
+ log "[DEBUG] Equal keys #{dump} and #{data}, skip update"
64
+ data[key.to_sym].to_i
65
+ else
66
+ data_update = [data]
67
+ result = @client.api_request(method: "#{method_name}.update", params: data_update)
68
+ parse_keys result
69
+ end
70
+ end
71
+
72
+ # Get full/extended Zabbix object data from API
73
+ #
74
+ # @param data [Hash] Should include object's id field name (identify) and id value
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 [Hash]
78
+ def get_full_data(data)
79
+ log "[DEBUG] Call get_full_data with parameters: #{data.inspect}"
80
+
81
+ @client.api_request(
82
+ method: "#{method_name}.get",
83
+ params: {
84
+ filter: {
85
+ identify.to_sym => data[identify.to_sym]
86
+ },
87
+ output: 'extend'
88
+ }
89
+ )
90
+ end
91
+
92
+ # Get raw Zabbix object data from API
93
+ #
94
+ # @param data [Hash]
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 [Hash]
98
+ def get_raw(data)
99
+ log "[DEBUG] Call get_raw with parameters: #{data.inspect}"
100
+
101
+ @client.api_request(
102
+ method: "#{method_name}.get",
103
+ params: data
104
+ )
105
+ end
106
+
107
+ # Dump Zabbix object data by key from API
108
+ #
109
+ # @param data [Hash] Should include desired object's key and value
110
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
111
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
112
+ # @return [Hash]
113
+ def dump_by_id(data)
114
+ log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
115
+
116
+ @client.api_request(
117
+ method: "#{method_name}.get",
118
+ params: {
119
+ filter: {
120
+ key.to_sym => data[key.to_sym]
121
+ },
122
+ output: 'extend'
123
+ }
124
+ )
125
+ end
126
+
127
+ # Get full/extended Zabbix data for all objects of type/class from API
128
+ #
129
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
130
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
131
+ # @return [Array<Hash>] Array of matching objects
132
+ def all
133
+ result = {}
134
+ @client.api_request(method: "#{method_name}.get", params: { output: 'extend' }).each do |item|
135
+ result[item[identify]] = item[key]
136
+ end
137
+ result
138
+ end
139
+
140
+ # Get Zabbix object id from API based on provided data
141
+ #
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 (identify).
144
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
145
+ # @return [Integer] Zabbix object id
146
+ def get_id(data)
147
+ log "[DEBUG] Call get_id with parameters: #{data.inspect}"
148
+ # symbolize keys if the user used string keys instead of symbols
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
+
154
+ result = @client.api_request(
155
+ method: "#{method_name}.get",
156
+ params: {
157
+ filter: data,
158
+ output: [key, identify]
159
+ }
160
+ )
161
+ id = nil
162
+ result.each { |item| id = item[key].to_i if item[identify] == data[identify.to_sym] }
163
+ id
164
+ end
165
+
166
+ # Get or Create Zabbix object using API
167
+ #
168
+ # @param data [Hash] Should include object's id field name (identify) and id value
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
172
+ def get_or_create(data)
173
+ log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
174
+
175
+ unless (id = get_id(identify.to_sym => data[identify.to_sym]))
176
+ id = create(data)
177
+ end
178
+ id
179
+ end
180
+ end
181
+ end
@@ -0,0 +1,41 @@
1
+ class ZabbixApi
2
+ class Actions < Basic
3
+ # The method name used for interacting with Actions via Zabbix API
4
+ #
5
+ # @return [String]
6
+ def method_name
7
+ 'action'
8
+ end
9
+
10
+ # The id field name used for identifying specific Action objects via Zabbix API
11
+ #
12
+ # @return [String]
13
+ def identify
14
+ 'name'
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
40
+ end
41
+ end
@@ -0,0 +1,43 @@
1
+ class ZabbixApi
2
+ class Applications < Basic
3
+ # The method name used for interacting with Applications via Zabbix API
4
+ #
5
+ # @return [String]
6
+ def method_name
7
+ 'application'
8
+ end
9
+
10
+ # The id field name used for identifying specific Application objects via Zabbix API
11
+ #
12
+ # @return [String]
13
+ def identify
14
+ 'name'
15
+ end
16
+
17
+ # Get or Create Application object using Zabbix API
18
+ #
19
+ # @param data [Hash] Needs to include name and hostid to properly identify Applications via Zabbix API
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 [Integer] Zabbix object id
23
+ def get_or_create(data)
24
+ log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
25
+
26
+ unless (id = get_id(name: data[:name], hostid: data[:hostid]))
27
+ id = create(data)
28
+ end
29
+ id
30
+ end
31
+
32
+ # Create or update Application object using Zabbix API
33
+ #
34
+ # @param data [Hash] Needs to include name and hostid to properly identify Applications via Zabbix API
35
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
36
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
37
+ # @return [Integer] Zabbix object id
38
+ def create_or_update(data)
39
+ applicationid = get_id(name: data[:name], hostid: data[:hostid])
40
+ applicationid ? update(data.merge(applicationid: applicationid)) : create(data)
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,42 @@
1
+ class ZabbixApi
2
+ class Configurations < Basic
3
+ # @return [Boolean]
4
+ def array_flag
5
+ true
6
+ end
7
+
8
+ # The method name used for interacting with Configurations via Zabbix API
9
+ #
10
+ # @return [String]
11
+ def method_name
12
+ 'configuration'
13
+ end
14
+
15
+ # The id field name used for identifying specific Configuration objects via Zabbix API
16
+ #
17
+ # @return [String]
18
+ def identify
19
+ 'host'
20
+ end
21
+
22
+ # Export configuration data using Zabbix API
23
+ #
24
+ # @param data [Hash]
25
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
26
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
27
+ # @return [Hash]
28
+ def export(data)
29
+ @client.api_request(method: 'configuration.export', params: data)
30
+ end
31
+
32
+ # Import configuration data using Zabbix API
33
+ #
34
+ # @param data [Hash]
35
+ # @raise [ApiError] Error returned when there is a problem with the Zabbix API call.
36
+ # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
37
+ # @return [Hash]
38
+ def import(data)
39
+ @client.api_request(method: 'configuration.import', params: data)
40
+ end
41
+ end
42
+ end