zabbix_manager 5.1.0 → 5.1.1.pre.alpha1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -2
- data/{LICENSE.txt → LICENSE} +6 -6
- data/README.md +3 -2
- data/lib/zabbix_manager/basic/basic_alias.rb +6 -8
- data/lib/zabbix_manager/basic/basic_func.rb +17 -18
- data/lib/zabbix_manager/basic/basic_init.rb +21 -18
- data/lib/zabbix_manager/basic/basic_logic.rb +143 -139
- data/lib/zabbix_manager/classes/actions.rb +1 -1
- data/lib/zabbix_manager/classes/applications.rb +8 -7
- data/lib/zabbix_manager/classes/configurations.rb +2 -2
- data/lib/zabbix_manager/classes/drules.rb +6 -6
- data/lib/zabbix_manager/classes/errors.rb +1 -1
- data/lib/zabbix_manager/classes/graphs.rb +6 -6
- data/lib/zabbix_manager/classes/hostgroups.rb +0 -34
- data/lib/zabbix_manager/classes/hostinterfaces.rb +26 -0
- data/lib/zabbix_manager/classes/hosts.rb +35 -153
- data/lib/zabbix_manager/classes/httptests.rb +3 -3
- data/lib/zabbix_manager/classes/items.rb +51 -49
- data/lib/zabbix_manager/classes/mediatypes.rb +5 -5
- data/lib/zabbix_manager/classes/problems.rb +43 -61
- data/lib/zabbix_manager/classes/proxies.rb +4 -24
- data/lib/zabbix_manager/classes/roles.rb +7 -7
- data/lib/zabbix_manager/classes/screens.rb +3 -3
- data/lib/zabbix_manager/classes/templates.rb +17 -33
- data/lib/zabbix_manager/classes/triggers.rb +31 -73
- data/lib/zabbix_manager/classes/usergroups.rb +6 -6
- data/lib/zabbix_manager/classes/usermacros.rb +38 -37
- data/lib/zabbix_manager/classes/users.rb +4 -4
- data/lib/zabbix_manager/classes/valuemaps.rb +8 -7
- data/lib/zabbix_manager/client.rb +70 -45
- data/lib/zabbix_manager/version.rb +2 -1
- data/lib/zabbix_manager.rb +18 -38
- data/zabbix_manager.gemspec +7 -11
- metadata +22 -66
- data/CODE_OF_CONDUCT.md +0 -84
- data/lib/zabbix_manager/basic/basic_extend.rb +0 -40
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f399a8e709f4dd599a96f7262fd9db1fe45df50517e1dbe6c03fb800802c842
|
4
|
+
data.tar.gz: 31bed21203fb1f34d2f334454a8e4bc4eeaba82f0cd15c2991b0b3a1c44bf6b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bc102949b9b885ef3b66b29af279bab13c81fd3356cccb2a6e3bbd72db107f9bb6edd7fbc30dc9d157bae70de67076678a8f98f053040a7feb6fe81720ab9ad
|
7
|
+
data.tar.gz: 6ea4885896f47adace6df1b8c3ce8538a2af28d3cf7fe32a485bc2b285fe20f3e06a72fae6ac56503d59ad694b0861b6eb2cff90c109dfb8a03104c261e833c9
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
-
#CHANGELOG
|
1
|
+
# CHANGELOG
|
2
2
|
|
3
|
-
|
3
|
+
## 5.1.1
|
4
|
+
* 新增基类查询方法:
|
5
|
+
* get_key_ids_by_identify:基于监控对象索引键(#{identify})查询 { "#{key}": id };
|
6
|
+
* get_key_ids:基于监控对象索引建"#{identify}"查询 { "#{key}": id };
|
7
|
+
* get_or_create_keys:批量创建或更新监控对象并返回 [{ "#{key}": id }];
|
8
|
+
* 优化 Client 对象实例化逻辑:
|
9
|
+
* 增加入参检查:必须提供 url、user和password,以及 @id 缓存;
|
10
|
+
* 优化 debug 模式,接口请求入参和出参打印,均使用 JSON.pretty_unparse(data) 美化;
|
11
|
+
* 完善项目注释,项目注释覆盖率90%;
|
data/{LICENSE.txt → LICENSE}
RENAMED
@@ -1,6 +1,6 @@
|
|
1
|
-
|
1
|
+
MIT License
|
2
2
|
|
3
|
-
Copyright (c)
|
3
|
+
Copyright (c) 2023 WENWU YAN
|
4
4
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
@@ -9,13 +9,13 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
9
|
copies of the Software, and to permit persons to whom the Software is
|
10
10
|
furnished to do so, subject to the following conditions:
|
11
11
|
|
12
|
-
The above copyright notice and this permission notice shall be included in
|
13
|
-
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
14
|
|
15
15
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
16
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
17
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
18
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
[gem]: https://rubygems.org/gems/zabbix_manager
|
6
6
|
|
7
|
-
Most
|
7
|
+
Most of the code in the project is based on rewriting the ZabbixApi
|
8
8
|
Simple and lightweight ruby module for working with [Zabbix][Zabbix] via the [Zabbix API][Zabbix API]
|
9
9
|
|
10
10
|
## Installation
|
@@ -13,7 +13,7 @@ Simple and lightweight ruby module for working with [Zabbix][Zabbix] via the [Za
|
|
13
13
|
gem install zabbix_manager
|
14
14
|
|
15
15
|
# specific version
|
16
|
-
gem install zabbix_manager -v
|
16
|
+
gem install zabbix_manager -v 5.1.1
|
17
17
|
```
|
18
18
|
|
19
19
|
## Documentation
|
@@ -50,6 +50,7 @@ dropped.
|
|
50
50
|
|
51
51
|
* net/http
|
52
52
|
* json
|
53
|
+
* activesupport
|
53
54
|
|
54
55
|
## Contributing
|
55
56
|
|
@@ -3,9 +3,9 @@
|
|
3
3
|
class ZabbixManager
|
4
4
|
class Basic
|
5
5
|
# Get Zabbix object data from API by id
|
6
|
-
#
|
6
|
+
# @note 通用的查询方法
|
7
7
|
# @param data [Hash] Should include object's id field name (identify) and id value
|
8
|
-
# @raise [
|
8
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
9
9
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
10
10
|
# @return [Hash]
|
11
11
|
def get(data)
|
@@ -13,9 +13,9 @@ class ZabbixManager
|
|
13
13
|
end
|
14
14
|
|
15
15
|
# Add new Zabbix object using API create
|
16
|
-
#
|
16
|
+
# @note 通用的新增方法
|
17
17
|
# @param data [Hash]
|
18
|
-
# @raise [
|
18
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
19
19
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
20
20
|
# @return [Integer] The object id if a single object is created
|
21
21
|
# @return [Boolean] True/False if multiple objects are created
|
@@ -24,16 +24,14 @@ class ZabbixManager
|
|
24
24
|
end
|
25
25
|
|
26
26
|
# Destroy Zabbix object using API delete
|
27
|
-
#
|
27
|
+
# @note 通用的删除方法
|
28
28
|
# @param data [Hash] Should include object's id field name (identify) and id value
|
29
|
-
# @raise [
|
29
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
30
30
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
31
31
|
# @return [Integer] The object id if a single object is deleted
|
32
32
|
# @return [Boolean] True/False if multiple objects are deleted
|
33
33
|
def destroy(data)
|
34
34
|
delete(data)
|
35
35
|
end
|
36
|
-
|
37
|
-
def method_name; end
|
38
36
|
end
|
39
37
|
end
|
@@ -3,19 +3,19 @@
|
|
3
3
|
class ZabbixManager
|
4
4
|
class Basic
|
5
5
|
# Log messages to stdout when debugging
|
6
|
-
#
|
6
|
+
# @note 开启debug模式,打印日志
|
7
7
|
# @param message [String]
|
8
8
|
def log(message)
|
9
|
-
puts message
|
9
|
+
puts message if @client.options[:debug]
|
10
10
|
end
|
11
11
|
|
12
12
|
# Compare two hashes for equality
|
13
|
-
#
|
13
|
+
# @note 比较两个哈希是否相等
|
14
14
|
# @param first_hash [Hash]
|
15
15
|
# @param second_hash [Hash]
|
16
16
|
# @return [Boolean]
|
17
17
|
def hash_equals?(first_hash, second_hash)
|
18
|
-
normalized_first_hash
|
18
|
+
normalized_first_hash = normalize_hash(first_hash)
|
19
19
|
normalized_second_hash = normalize_hash(second_hash)
|
20
20
|
|
21
21
|
hash1 = normalized_first_hash.merge(normalized_second_hash)
|
@@ -24,25 +24,22 @@ class ZabbixManager
|
|
24
24
|
end
|
25
25
|
|
26
26
|
# Convert all hash/array keys to symbols
|
27
|
-
#
|
27
|
+
# @@note 将数组或哈希序列化
|
28
28
|
# @param object [Array, Hash]
|
29
29
|
# @return [Array, Hash]
|
30
30
|
def symbolize_keys(object)
|
31
31
|
case object
|
32
32
|
when Array
|
33
|
-
object.
|
34
|
-
object[index] = symbolize_keys(val)
|
35
|
-
end
|
33
|
+
object.map(&method(:symbolize_keys))
|
36
34
|
when Hash
|
37
|
-
object.
|
38
|
-
|
39
|
-
|
35
|
+
object.transform_keys(&:to_sym).transform_values(&method(:symbolize_keys))
|
36
|
+
else
|
37
|
+
object
|
40
38
|
end
|
41
|
-
object
|
42
39
|
end
|
43
40
|
|
44
41
|
# Normalize all hash values to strings
|
45
|
-
#
|
42
|
+
# @note 将哈希元素序列化成字符串
|
46
43
|
# @param hash [Hash]
|
47
44
|
# @return [Hash]
|
48
45
|
def normalize_hash(hash)
|
@@ -51,14 +48,14 @@ class ZabbixManager
|
|
51
48
|
result.delete(:hostid) # TODO: remove to logig. TemplateID and HostID has different id
|
52
49
|
|
53
50
|
result.each do |key, value|
|
54
|
-
result[key] = value.is_a?(Array) ? normalize_array(value) : value.to_s
|
51
|
+
result[key.to_sym] = value.is_a?(Array) ? normalize_array(value) : value.to_s
|
55
52
|
end
|
56
53
|
|
57
54
|
result
|
58
55
|
end
|
59
56
|
|
60
57
|
# Normalize all array values to strings
|
61
|
-
#
|
58
|
+
# @note 将数组元素序列化成字符串
|
62
59
|
# @param array [Array]
|
63
60
|
# @return [Array]
|
64
61
|
def normalize_array(array)
|
@@ -79,18 +76,20 @@ class ZabbixManager
|
|
79
76
|
end
|
80
77
|
|
81
78
|
# Parse a data hash for id key or boolean to return
|
82
|
-
#
|
83
|
-
# @param data
|
79
|
+
# @note 提取 zabbix 监控对象 CRUD key 或者 keys
|
80
|
+
# @param data
|
84
81
|
# @return [Integer] The object id if a single object hash is provided with key
|
85
82
|
# @return [Boolean] True/False if multiple class object hash is provided
|
86
83
|
def parse_keys(data)
|
87
84
|
case data
|
88
85
|
when Hash
|
89
|
-
data.empty? ?
|
86
|
+
data.empty? ? false : data[keys][0].to_i
|
90
87
|
when TrueClass
|
91
88
|
true
|
92
89
|
when FalseClass
|
93
90
|
false
|
91
|
+
else
|
92
|
+
false
|
94
93
|
end
|
95
94
|
end
|
96
95
|
|
@@ -1,9 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class ZabbixManager
|
4
|
+
# @author: WENWU YAN
|
5
|
+
# @email: 968828@gmail.com
|
6
|
+
# @date: 2023/3/25下午4:47
|
4
7
|
class Basic
|
5
8
|
# Initializes a new Basic object with ZabbixManager Client
|
6
|
-
#
|
9
|
+
# @note zabbix api 基类
|
7
10
|
# @param client [ZabbixManager::Client]
|
8
11
|
# @return [ZabbixManager::Client]
|
9
12
|
def initialize(client)
|
@@ -11,38 +14,38 @@ class ZabbixManager
|
|
11
14
|
end
|
12
15
|
|
13
16
|
# Placeholder for inherited objects to provide object-specific method name
|
14
|
-
#
|
15
|
-
# @raise [
|
17
|
+
# @note 子类必须实现的方法 method_name
|
18
|
+
# @raise [ZbxError] Basic object does not directly support method_name
|
16
19
|
def method_name
|
17
|
-
raise
|
20
|
+
raise ZbxError, "Can't call method_name here"
|
21
|
+
end
|
22
|
+
|
23
|
+
# Placeholder for inherited objects to provide object-specific id field name
|
24
|
+
# @note 子类必须实现的方法
|
25
|
+
# @raise [ZbxError] Basic object does not directly support identify
|
26
|
+
def identify
|
27
|
+
raise ZbxError, "Can't call identify here"
|
18
28
|
end
|
19
29
|
|
20
30
|
# Placeholder for inherited objects to provide default options
|
21
|
-
#
|
31
|
+
# @note 子类缺省的 options
|
22
32
|
# @return [Hash]
|
23
33
|
def default_options
|
24
34
|
{}
|
25
35
|
end
|
26
36
|
|
27
|
-
# Returns the object's plural id field name (identify) based on key
|
28
|
-
#
|
29
|
-
# @return [String]
|
30
|
-
def keys
|
31
|
-
"#{key}s"
|
32
|
-
end
|
33
|
-
|
34
37
|
# Returns the object's id field name (identify) based on method_name + id
|
35
|
-
#
|
38
|
+
# @note 默认 key 为 "#{method_name}id"
|
36
39
|
# @return [String]
|
37
40
|
def key
|
38
41
|
"#{method_name}id"
|
39
42
|
end
|
40
43
|
|
41
|
-
#
|
42
|
-
#
|
43
|
-
# @
|
44
|
-
def
|
45
|
-
|
44
|
+
# Returns the object's plural id field name (identify) based on key
|
45
|
+
# @note 默认 key 为 "#{method_name}ids"
|
46
|
+
# @return [String]
|
47
|
+
def keys
|
48
|
+
"#{key}s"
|
46
49
|
end
|
47
50
|
end
|
48
51
|
end
|
@@ -3,64 +3,31 @@
|
|
3
3
|
class ZabbixManager
|
4
4
|
class Basic
|
5
5
|
# Create new Zabbix object using API (with defaults)
|
6
|
-
#
|
6
|
+
# @note 新增 zabbix 监控对象,返回监控对象 id
|
7
7
|
# @param data [Hash]
|
8
|
-
# @raise [
|
8
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
9
9
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
10
10
|
# @return [Integer] The object id if a single object is created
|
11
11
|
# @return [Boolean] True/False if multiple objects are created
|
12
12
|
def create(data)
|
13
|
-
log "[DEBUG] Call create with parameters: #{data.inspect}"
|
13
|
+
log "[DEBUG] Call #{method_name}.create with parameters: #{data.inspect}"
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
data_create = [data_with_default]
|
18
|
-
|
19
|
-
# 调用实例方法
|
20
|
-
result = @client.api_request(method: "#{method_name}.create", params: data_create)
|
21
|
-
# 判断是否执行成功并返回结果
|
15
|
+
params = default_options.merge(data)
|
16
|
+
result = @client.api_request(method: "#{method_name}.create", params: params)
|
22
17
|
parse_keys result
|
23
18
|
end
|
24
19
|
|
25
|
-
# Delete Zabbix object using API
|
26
|
-
#
|
27
|
-
# @param data [Hash] Should include object's id field name (identify) and id value
|
28
|
-
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
29
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
30
|
-
# @return [Integer] The object id if a single object is deleted
|
31
|
-
# @return [Boolean] True/False if multiple objects are deleted
|
32
|
-
def delete(data)
|
33
|
-
log "[DEBUG] Call delete with parameters: #{data.inspect}"
|
34
|
-
|
35
|
-
data_delete = [data]
|
36
|
-
result = @client.api_request(method: "#{method_name}.delete", params: data_delete)
|
37
|
-
parse_keys result
|
38
|
-
end
|
39
|
-
|
40
|
-
# Create or update Zabbix object using API
|
41
|
-
#
|
42
|
-
# @param data [Hash] Should include object's id field name (identify) and id value
|
43
|
-
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
44
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
45
|
-
# @return [Integer] The object id if a single object is created
|
46
|
-
# @return [Boolean] True/False if multiple objects are created
|
47
|
-
def create_or_update(data)
|
48
|
-
log "[DEBUG] Call create_or_update with parameters: #{data.inspect}"
|
49
|
-
|
50
|
-
id = get_id(identify.to_sym => data[identify.to_sym])
|
51
|
-
id ? update(data.merge(key.to_sym => id.to_s)) : create(data)
|
52
|
-
end
|
53
|
-
|
54
20
|
# Update Zabbix object using API
|
55
|
-
#
|
21
|
+
# @note 更新 zabbix 监控对象,返回监控对象 id
|
56
22
|
# @param data [Hash] Should include object's id field name (identify) and id value
|
57
23
|
# @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
|
58
|
-
# @raise [
|
24
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
59
25
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
60
26
|
# @return [Integer] The object id if a single object is created
|
61
27
|
# @return [Boolean] True/False if multiple objects are created
|
62
28
|
def update(data, force = false)
|
63
|
-
log "[DEBUG] Call update with parameters: #{data.inspect}"
|
29
|
+
log "[DEBUG] Call #{method_name}.update with parameters: #{data.inspect}"
|
30
|
+
|
64
31
|
dump = {}
|
65
32
|
dump_by_id(key.to_sym => data[key.to_sym]).each do |item|
|
66
33
|
dump = symbolize_keys(item) if item[key].to_i == data[key.to_sym].to_i
|
@@ -69,67 +36,85 @@ class ZabbixManager
|
|
69
36
|
log "[DEBUG] Equal keys #{dump} and #{data}, skip update"
|
70
37
|
data[key.to_sym].to_i
|
71
38
|
else
|
72
|
-
|
73
|
-
result = @client.api_request(method: "#{method_name}.update", params: data_update)
|
39
|
+
result = @client.api_request(method: "#{method_name}.update", params: data)
|
74
40
|
parse_keys result
|
75
41
|
end
|
76
42
|
end
|
77
43
|
|
78
|
-
#
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
44
|
+
# Delete Zabbix object using API
|
45
|
+
# @note 删除 zabbix 监控对象,返回监控对象 id
|
46
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
47
|
+
# @raise [ZbxError] 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] The object id if a single object is deleted
|
50
|
+
# @return [Boolean] True/False if multiple objects are deleted
|
51
|
+
def delete(data)
|
52
|
+
log "[DEBUG] Call #{method_name}.delete with parameters: #{data.inspect}"
|
83
53
|
|
84
|
-
|
54
|
+
result = @client.api_request(method: "#{method_name}.delete", params: data)
|
55
|
+
parse_keys result
|
56
|
+
end
|
85
57
|
|
86
|
-
# Get
|
87
|
-
#
|
58
|
+
# Get or Create Zabbix object using API
|
59
|
+
# @note 创建或更新 zabbix 监控对象,返回监控对象 id
|
88
60
|
# @param data [Hash] Should include object's id field name (identify) and id value
|
89
|
-
# @raise [
|
61
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
90
62
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
91
|
-
# @return [
|
92
|
-
def
|
93
|
-
log "[DEBUG] Call
|
63
|
+
# @return [Integer, Array, TrueClass, FalseClass] Zabbix object id
|
64
|
+
def get_or_create(data)
|
65
|
+
log "[DEBUG] Call #{method_name}.get_or_create with parameters: #{data.inspect}"
|
94
66
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
output: "extend"
|
102
|
-
}
|
103
|
-
)
|
67
|
+
# Call get_id return object id if exists
|
68
|
+
if (id = get_id(identify.to_sym => data[identify.to_sym]))
|
69
|
+
id
|
70
|
+
else
|
71
|
+
create(data)
|
72
|
+
end
|
104
73
|
end
|
105
74
|
|
106
|
-
# Get
|
107
|
-
#
|
108
|
-
# @param data [Hash]
|
109
|
-
# @raise [
|
75
|
+
# Get or Create Zabbix object [{ key: id }] using API
|
76
|
+
# @note 批量创建或更新监控对象并返回 [ { "#{key}": id } ]
|
77
|
+
# @param data [Hash, Array] Should include object's id field name (identify) and id value
|
78
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
110
79
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
111
|
-
# @return [
|
112
|
-
def
|
113
|
-
log "[DEBUG] Call
|
80
|
+
# @return [Array] Zabbix object [{keys: id}]
|
81
|
+
def get_or_create_keys(data)
|
82
|
+
log "[DEBUG] Call #{method_name}.get_or_create_keys with parameters: #{data.inspect}"
|
83
|
+
|
84
|
+
ids = []
|
85
|
+
[data].flatten.each do |item|
|
86
|
+
if (id = get_or_create(item))
|
87
|
+
ids << { "#{key}": id }
|
88
|
+
end
|
89
|
+
end
|
90
|
+
ids
|
91
|
+
end
|
114
92
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
93
|
+
# Create or update Zabbix object using API
|
94
|
+
# @note 创建或更新 zabbix 监控对象,入参为基于符号的哈希对象,返回监控对象 id
|
95
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
96
|
+
# @raise [ZbxError] 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] The object id if a single object is created
|
99
|
+
# @return [Boolean] True/False if multiple objects are created
|
100
|
+
def create_or_update(data)
|
101
|
+
log "[DEBUG] Call #{method_name}.create_or_update with parameters: #{data.inspect}"
|
102
|
+
|
103
|
+
id = get_id(identify.to_sym => data[identify.to_sym])
|
104
|
+
id ? update(data.merge(key.to_sym => id.to_s)) : create(data)
|
119
105
|
end
|
120
106
|
|
121
107
|
# Dump Zabbix object data by key from API
|
122
|
-
#
|
108
|
+
# @note 基于 "#{key}" 打印 zabbix 监控对象详情
|
123
109
|
# @param data [Hash] Should include desired object's key and value
|
124
|
-
# @raise [
|
110
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
125
111
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
126
112
|
# @return [Hash]
|
127
113
|
def dump_by_id(data)
|
128
|
-
log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
|
114
|
+
log "[DEBUG] Call #{method_name}.dump_by_id with parameters: #{data.inspect}"
|
129
115
|
|
130
|
-
|
131
|
-
|
132
|
-
params: {
|
116
|
+
get_raw(
|
117
|
+
{
|
133
118
|
filter: {
|
134
119
|
key.to_sym => data[key.to_sym]
|
135
120
|
},
|
@@ -138,90 +123,109 @@ class ZabbixManager
|
|
138
123
|
)
|
139
124
|
end
|
140
125
|
|
141
|
-
# Get full/extended Zabbix data for all objects of type/class from API
|
142
|
-
#
|
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 [Array<Hash>] Array of matching objects
|
146
|
-
def all
|
147
|
-
result = {}
|
148
|
-
@client.api_request(
|
149
|
-
method: "#{method_name}.get",
|
150
|
-
params: { output: "extend" }
|
151
|
-
).each do |item|
|
152
|
-
result[item[identify]] = item[key]
|
153
|
-
end
|
154
|
-
result
|
155
|
-
end
|
156
|
-
|
157
126
|
# Get Zabbix object id from API based on provided data
|
158
|
-
#
|
127
|
+
# @note 基于 zabbix "#{identify}" 查询监控对象的 "#{key}"
|
159
128
|
# @param data [Hash]
|
160
|
-
# @raise [
|
129
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
|
161
130
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
162
|
-
# @return [Integer] Zabbix object id
|
131
|
+
# @return [Integer, NilClass] Zabbix object id
|
163
132
|
def get_id(data)
|
164
|
-
log "[DEBUG] Call get_id with parameters: #{data.inspect}"
|
133
|
+
log "[DEBUG] Call #{method_name}.get_id with parameters: #{data.inspect}"
|
165
134
|
|
166
135
|
# symbolize keys if the user used string keys instead of symbols
|
167
136
|
data = symbolize_keys(data) if data.key?(identify)
|
168
137
|
# raise an error if identify name was not supplied
|
169
138
|
name = data[identify.to_sym]
|
170
|
-
raise
|
139
|
+
raise ZbxError, "#{identify} not supplied in call to get_id" if name.nil?
|
171
140
|
|
172
|
-
result =
|
173
|
-
|
174
|
-
params: {
|
141
|
+
result = get_raw(
|
142
|
+
{
|
175
143
|
filter: data,
|
176
144
|
output: [key, identify]
|
177
145
|
}
|
178
146
|
)
|
179
|
-
|
180
|
-
result.
|
181
|
-
id
|
147
|
+
|
148
|
+
result.find { |item| item[identify] == data[identify.to_sym] }&.[](key)&.to_i
|
182
149
|
end
|
183
150
|
|
184
|
-
# Get
|
185
|
-
#
|
186
|
-
# @param data [Hash]
|
187
|
-
# @raise [
|
151
|
+
# Get Zabbix object [{ key: id }] from API based on provided data
|
152
|
+
# @note 基于监控对象索引建"#{identify}"查询 { "#{key}": id }
|
153
|
+
# @param data [Hash, Array]
|
154
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
|
188
155
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
189
|
-
# @return [
|
190
|
-
def
|
191
|
-
log "[DEBUG] Call
|
192
|
-
|
193
|
-
|
194
|
-
|
156
|
+
# @return [Array] Zabbix object id
|
157
|
+
def get_key_ids(data)
|
158
|
+
log "[DEBUG] Call #{method_name}.get_key_ids with parameters: #{data.inspect}"
|
159
|
+
|
160
|
+
ids = []
|
161
|
+
[data].flatten.each do |item|
|
162
|
+
if (id = get_id(item))
|
163
|
+
ids << { "#{key}": id }
|
164
|
+
end
|
195
165
|
end
|
196
|
-
|
166
|
+
ids
|
197
167
|
end
|
198
168
|
|
199
|
-
#
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
169
|
+
# Get Zabbix object ID by name using Zabbix API
|
170
|
+
# @note 基于监控对象索引键(#{identify})查询 #{key}
|
171
|
+
# @param data [String, Array] Needs to include host to properly identify Zabbix Objects via Zabbix API
|
172
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
173
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
174
|
+
# @return [Array, NilClass] Zabbix object id
|
175
|
+
def get_key_ids_by_identify(data)
|
176
|
+
log "[DEBUG] Call #{method_name}.get_ids_by_name with parameters: #{data.inspect}"
|
177
|
+
|
178
|
+
result = get_raw(
|
179
|
+
{
|
180
|
+
filter: { "#{identify}": [data].flatten },
|
181
|
+
output: ["#{key}"]
|
182
|
+
}
|
206
183
|
)
|
184
|
+
result.empty? ? nil : result.map { |i| { "#{key}": i[key] } }
|
207
185
|
end
|
208
186
|
|
209
|
-
#
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
187
|
+
# Get full/extended Zabbix data for all objects of type/class from API
|
188
|
+
# @note 查询 zabbix 监控对象所有的 "#{identify}: #{key}"
|
189
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
190
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
191
|
+
# @return [Hash] Array of matching objects
|
192
|
+
def all
|
193
|
+
result = {}
|
194
|
+
get_raw({ output: "extend" }).each do |item|
|
195
|
+
result[item[identify]] = item[key]
|
196
|
+
end
|
197
|
+
result
|
198
|
+
end
|
199
|
+
|
200
|
+
# Get full/extended Zabbix object data from API
|
201
|
+
# @note 基于 "#{identify}" 过滤 zabbix 监控对象,输出详情
|
202
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
203
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
204
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
205
|
+
# @return [Hash]
|
206
|
+
def get_full_data(data)
|
207
|
+
log "[DEBUG] Call #{method_name}.get_full_data with parameters: #{data.inspect}"
|
208
|
+
|
209
|
+
get_raw(
|
210
|
+
{
|
211
|
+
filter: {
|
212
|
+
identify.to_sym => data[identify.to_sym]
|
213
|
+
},
|
214
|
+
output: "extend"
|
215
|
+
}
|
216
216
|
)
|
217
217
|
end
|
218
218
|
|
219
|
-
#
|
220
|
-
|
221
|
-
|
222
|
-
|
219
|
+
# Get raw Zabbix object data from API
|
220
|
+
# @note zabbix 监控对象低阶查询方法,静默方法 debug 打印信息
|
221
|
+
# @param data [Hash]
|
222
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
223
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
224
|
+
# @return [Hash]
|
225
|
+
def get_raw(data)
|
226
|
+
# log "[DEBUG] Call #{method_name}.get_raw with parameters: #{data.inspect}"
|
223
227
|
@client.api_request(
|
224
|
-
method: "#{method_name}.
|
228
|
+
method: "#{method_name}.get",
|
225
229
|
params: data
|
226
230
|
)
|
227
231
|
end
|