zabbix_manager 5.1.4 → 5.1.6
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 +4 -4
- data/CHANGELOG.md +25 -9
- data/LICENSE +1 -1
- data/README.md +202 -8
- data/lib/zabbix_manager/basic/basic_alias.rb +25 -3
- data/lib/zabbix_manager/basic/basic_func.rb +32 -61
- data/lib/zabbix_manager/basic/basic_init.rb +28 -13
- data/lib/zabbix_manager/basic/basic_logic.rb +172 -128
- data/lib/zabbix_manager/classes/actions.rb +21 -11
- data/lib/zabbix_manager/classes/applications.rb +12 -17
- data/lib/zabbix_manager/classes/configurations.rb +20 -5
- data/lib/zabbix_manager/classes/drules.rb +11 -23
- data/lib/zabbix_manager/classes/errors.rb +16 -28
- data/lib/zabbix_manager/classes/events.rb +6 -2
- data/lib/zabbix_manager/classes/graphs.rb +41 -34
- data/lib/zabbix_manager/classes/hostgroups.rb +53 -3
- data/lib/zabbix_manager/classes/hostinterfaces.rb +172 -12
- data/lib/zabbix_manager/classes/hosts.rb +197 -68
- data/lib/zabbix_manager/classes/httptests.rb +18 -20
- data/lib/zabbix_manager/classes/items.rb +199 -72
- data/lib/zabbix_manager/classes/maintenance.rb +6 -2
- data/lib/zabbix_manager/classes/mediatypes.rb +7 -63
- data/lib/zabbix_manager/classes/problems.rb +75 -57
- data/lib/zabbix_manager/classes/proxies.rb +48 -7
- data/lib/zabbix_manager/classes/roles.rb +47 -36
- data/lib/zabbix_manager/classes/screens.rb +45 -14
- data/lib/zabbix_manager/classes/scripts.rb +17 -7
- data/lib/zabbix_manager/classes/server.rb +7 -1
- data/lib/zabbix_manager/classes/templates.rb +59 -21
- data/lib/zabbix_manager/classes/triggers.rb +253 -66
- data/lib/zabbix_manager/classes/usergroups.rb +28 -6
- data/lib/zabbix_manager/classes/usermacros.rb +119 -33
- data/lib/zabbix_manager/classes/users.rb +39 -7
- data/lib/zabbix_manager/classes/valuemaps.rb +13 -19
- data/lib/zabbix_manager/client.rb +311 -135
- data/lib/zabbix_manager/http_transport.rb +192 -0
- data/lib/zabbix_manager/log_sanitizer.rb +68 -0
- data/lib/zabbix_manager/monitoring.rb +691 -0
- data/lib/zabbix_manager/version.rb +1 -1
- data/lib/zabbix_manager.rb +118 -40
- data/zabbix_manager.gemspec +21 -8
- metadata +208 -22
- data/lib/zabbix_manager/classes/unusable.rb +0 -11
|
@@ -2,89 +2,152 @@
|
|
|
2
2
|
|
|
3
3
|
class ZabbixManager
|
|
4
4
|
class Usermacros < Basic
|
|
5
|
-
#
|
|
5
|
+
# 返回用于唯一识别用户宏的业务字段名。
|
|
6
|
+
#
|
|
7
|
+
# @return [String] 用户宏的业务标识字段名
|
|
6
8
|
def identify
|
|
7
9
|
"macro"
|
|
8
10
|
end
|
|
9
11
|
|
|
10
|
-
#
|
|
12
|
+
# 返回 Zabbix API 中用户宏对象的方法名前缀。
|
|
13
|
+
#
|
|
14
|
+
# @return [String] 用户宏对象的方法名前缀
|
|
11
15
|
def method_name
|
|
12
16
|
"usermacro"
|
|
13
17
|
end
|
|
14
18
|
|
|
15
|
-
#
|
|
19
|
+
# 按宏名称及主机条件查询主机宏 ID。
|
|
20
|
+
#
|
|
21
|
+
# @param data [Hash] 包含 macro 及可选主机过滤条件
|
|
22
|
+
# @raise [ApiError] Zabbix API 调用失败或缺少标识字段时抛出
|
|
23
|
+
# @raise [TransportError] Zabbix 服务返回非成功 HTTP 状态时抛出
|
|
24
|
+
# @return [Integer, nil] 主机宏 ID,未找到时返回 nil
|
|
16
25
|
def get_id(data)
|
|
17
26
|
log "[DEBUG] Call get_id with parameters: #{data.inspect}"
|
|
18
27
|
|
|
19
|
-
|
|
28
|
+
# 兼容字符串键输入。
|
|
29
|
+
data = data.deep_symbolize_keys if data.key?(identify)
|
|
30
|
+
# 标识字段缺失时拒绝继续查询。
|
|
20
31
|
name = data[identify.to_sym]
|
|
21
|
-
raise
|
|
32
|
+
raise Invalid, "#{identify} not supplied in call to get_id" if name.nil?
|
|
22
33
|
|
|
23
34
|
result = request(data, "usermacro.get", "hostmacroid")
|
|
24
35
|
|
|
25
|
-
!result
|
|
36
|
+
!result.empty? && result[0].key?("hostmacroid") ? result[0]["hostmacroid"].to_i : nil
|
|
26
37
|
end
|
|
27
38
|
|
|
28
|
-
#
|
|
39
|
+
# 按宏名称查询全局宏 ID。
|
|
40
|
+
#
|
|
41
|
+
# @param data [Hash] 包含 macro 的全局宏过滤条件
|
|
42
|
+
# @raise [ApiError] Zabbix API 调用失败或缺少标识字段时抛出
|
|
43
|
+
# @raise [TransportError] Zabbix 服务返回非成功 HTTP 状态时抛出
|
|
44
|
+
# @return [Integer, nil] 全局宏 ID,未找到时返回 nil
|
|
29
45
|
def get_id_global(data)
|
|
30
46
|
log "[DEBUG] Call get_id_global with parameters: #{data.inspect}"
|
|
31
47
|
|
|
32
|
-
|
|
48
|
+
# 兼容字符串键输入。
|
|
49
|
+
data = data.deep_symbolize_keys if data.key?(identify)
|
|
50
|
+
# 标识字段缺失时拒绝继续查询。
|
|
33
51
|
name = data[identify.to_sym]
|
|
34
|
-
raise
|
|
52
|
+
raise Invalid, "#{identify} not supplied in call to get_id_global" if name.nil?
|
|
35
53
|
|
|
36
54
|
result = request(data, "usermacro.get", "globalmacroid")
|
|
37
55
|
|
|
38
|
-
!result
|
|
56
|
+
!result.empty? && result[0].key?("globalmacroid") ? result[0]["globalmacroid"].to_i : nil
|
|
39
57
|
end
|
|
40
58
|
|
|
41
|
-
#
|
|
59
|
+
# 获取匹配主机宏的完整数据。
|
|
60
|
+
#
|
|
61
|
+
# @param data [Hash] 主机宏过滤条件
|
|
62
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
63
|
+
# @raise [TransportError] Zabbix 服务返回非成功 HTTP 状态时抛出
|
|
64
|
+
# @return [Array<Hash>] 匹配的主机宏数据
|
|
42
65
|
def get_full_data(data)
|
|
43
66
|
log "[DEBUG] Call get_full_data with parameters: #{data.inspect}"
|
|
44
67
|
|
|
45
68
|
request(data, "usermacro.get", "hostmacroid")
|
|
46
69
|
end
|
|
47
70
|
|
|
48
|
-
#
|
|
71
|
+
# 获取匹配全局宏的完整数据。
|
|
72
|
+
#
|
|
73
|
+
# @param data [Hash] 全局宏过滤条件
|
|
74
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
75
|
+
# @raise [TransportError] Zabbix 服务返回非成功 HTTP 状态时抛出
|
|
76
|
+
# @return [Array<Hash>] 匹配的全局宏数据
|
|
49
77
|
def get_full_data_global(data)
|
|
50
78
|
log "[DEBUG] Call get_full_data_global with parameters: #{data.inspect}"
|
|
51
79
|
|
|
52
80
|
request(data, "usermacro.get", "globalmacroid")
|
|
53
81
|
end
|
|
54
82
|
|
|
55
|
-
#
|
|
83
|
+
# 创建主机宏并返回首个新建宏的 ID。
|
|
84
|
+
#
|
|
85
|
+
# @param data [Hash] 包含 hostid、macro 和 value
|
|
86
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
87
|
+
# @raise [TransportError] Zabbix 服务返回非成功 HTTP 状态时抛出
|
|
88
|
+
# @return [Integer, nil] 新建主机宏的 ID
|
|
56
89
|
def create(data)
|
|
57
90
|
request(data, "usermacro.create", "hostmacroids")
|
|
58
91
|
end
|
|
59
92
|
|
|
60
|
-
#
|
|
93
|
+
# 创建全局宏并返回首个新建宏的 ID。
|
|
94
|
+
#
|
|
95
|
+
# @param data [Hash] 包含 macro 和 value
|
|
96
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
97
|
+
# @raise [TransportError] Zabbix 服务返回非成功 HTTP 状态时抛出
|
|
98
|
+
# @return [Integer, nil] 新建全局宏的 ID
|
|
61
99
|
def create_global(data)
|
|
62
100
|
request(data, "usermacro.createglobal", "globalmacroids")
|
|
63
101
|
end
|
|
64
102
|
|
|
65
|
-
#
|
|
103
|
+
# 删除指定主机宏并返回首个已删除宏的 ID。
|
|
104
|
+
#
|
|
105
|
+
# @param data [Hash, Integer, String] 要删除的 hostmacroid
|
|
106
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
107
|
+
# @raise [TransportError] Zabbix 服务返回非成功 HTTP 状态时抛出
|
|
108
|
+
# @return [Integer, nil] 已删除主机宏的 ID
|
|
66
109
|
def delete(data)
|
|
67
110
|
data_delete = [data]
|
|
68
111
|
request(data_delete, "usermacro.delete", "hostmacroids")
|
|
69
112
|
end
|
|
70
113
|
|
|
71
|
-
#
|
|
114
|
+
# 删除指定全局宏并返回首个已删除宏的 ID。
|
|
115
|
+
#
|
|
116
|
+
# @param data [Hash, Integer, String] 要删除的 globalmacroid
|
|
117
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
118
|
+
# @raise [TransportError] Zabbix 服务返回非成功 HTTP 状态时抛出
|
|
119
|
+
# @return [Integer, nil] 已删除全局宏的 ID
|
|
72
120
|
def delete_global(data)
|
|
73
121
|
data_delete = [data]
|
|
74
122
|
request(data_delete, "usermacro.deleteglobal", "globalmacroids")
|
|
75
123
|
end
|
|
76
124
|
|
|
77
|
-
#
|
|
125
|
+
# 更新主机宏并返回首个已更新宏的 ID。
|
|
126
|
+
#
|
|
127
|
+
# @param data [Hash] 包含 hostmacroid 及待更新字段
|
|
128
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
129
|
+
# @raise [TransportError] Zabbix 服务返回非成功 HTTP 状态时抛出
|
|
130
|
+
# @return [Integer, nil] 已更新主机宏的 ID
|
|
78
131
|
def update(data)
|
|
79
132
|
request(data, "usermacro.update", "hostmacroids")
|
|
80
133
|
end
|
|
81
134
|
|
|
82
|
-
#
|
|
135
|
+
# 更新全局宏并返回首个已更新宏的 ID。
|
|
136
|
+
#
|
|
137
|
+
# @param data [Hash] 包含 globalmacroid 及待更新字段
|
|
138
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
139
|
+
# @raise [TransportError] Zabbix 服务返回非成功 HTTP 状态时抛出
|
|
140
|
+
# @return [Integer, nil] 已更新全局宏的 ID
|
|
83
141
|
def update_global(data)
|
|
84
142
|
request(data, "usermacro.updateglobal", "globalmacroids")
|
|
85
143
|
end
|
|
86
144
|
|
|
87
|
-
#
|
|
145
|
+
# 按主机和宏名获取主机宏,不存在时创建。
|
|
146
|
+
#
|
|
147
|
+
# @param data [Hash] 包含 macro、hostid 及创建所需字段
|
|
148
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
149
|
+
# @raise [TransportError] Zabbix 服务返回非成功 HTTP 状态时抛出
|
|
150
|
+
# @return [Integer] 主机宏 ID
|
|
88
151
|
def get_or_create(data)
|
|
89
152
|
log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
|
|
90
153
|
|
|
@@ -94,7 +157,12 @@ class ZabbixManager
|
|
|
94
157
|
id
|
|
95
158
|
end
|
|
96
159
|
|
|
97
|
-
#
|
|
160
|
+
# 按宏名获取全局宏,不存在时创建。
|
|
161
|
+
#
|
|
162
|
+
# @param data [Hash] 包含 macro 及创建所需字段
|
|
163
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
164
|
+
# @raise [TransportError] Zabbix 服务返回非成功 HTTP 状态时抛出
|
|
165
|
+
# @return [Integer] 全局宏 ID
|
|
98
166
|
def get_or_create_global(data)
|
|
99
167
|
log "[DEBUG] Call get_or_create_global with parameters: #{data.inspect}"
|
|
100
168
|
|
|
@@ -104,13 +172,23 @@ class ZabbixManager
|
|
|
104
172
|
id
|
|
105
173
|
end
|
|
106
174
|
|
|
107
|
-
#
|
|
175
|
+
# 按主机和宏名创建或更新主机宏。
|
|
176
|
+
#
|
|
177
|
+
# @param data [Hash] 包含 macro、hostid 及宏属性
|
|
178
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
179
|
+
# @raise [TransportError] Zabbix 服务返回非成功 HTTP 状态时抛出
|
|
180
|
+
# @return [Integer] 主机宏 ID
|
|
108
181
|
def create_or_update(data)
|
|
109
182
|
hostmacroid = get_id(macro: data[:macro], hostid: data[:hostid])
|
|
110
183
|
hostmacroid ? update(data.merge(hostmacroid: hostmacroid)) : create(data)
|
|
111
184
|
end
|
|
112
185
|
|
|
113
|
-
#
|
|
186
|
+
# 按宏名创建或更新全局宏。
|
|
187
|
+
#
|
|
188
|
+
# @param data [Hash] 包含 macro 及宏属性
|
|
189
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
190
|
+
# @raise [TransportError] Zabbix 服务返回非成功 HTTP 状态时抛出
|
|
191
|
+
# @return [Integer] 全局宏 ID
|
|
114
192
|
def create_or_update_global(data)
|
|
115
193
|
globalmacroid = get_id_global(macro: data[:macro], hostid: data[:hostid])
|
|
116
194
|
globalmacroid ? update_global(data.merge(globalmacroid: globalmacroid)) : create_global(data)
|
|
@@ -118,19 +196,27 @@ class ZabbixManager
|
|
|
118
196
|
|
|
119
197
|
private
|
|
120
198
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
199
|
+
# 统一处理主机宏与全局宏请求,并按不同响应键提取结果。
|
|
200
|
+
#
|
|
201
|
+
# @param data [Hash, Array] Zabbix API 请求参数
|
|
202
|
+
# @param method [String] 要调用的 Zabbix API 方法
|
|
203
|
+
# @param result_key [String] 用于解析主机宏或全局宏结果的字段名
|
|
204
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
205
|
+
# @raise [TransportError] Zabbix 服务返回非成功 HTTP 状态时抛出
|
|
206
|
+
# @return [Array<Hash>, Integer, nil] 查询结果或变更后的宏 ID
|
|
207
|
+
def request(data, method, result_key)
|
|
208
|
+
# Zabbix 查询与变更接口使用不同的响应格式。
|
|
209
|
+
if method.include?(".get")
|
|
210
|
+
if result_key.include?("global")
|
|
211
|
+
@client.api_request(method: method, params: { globalmacro: true, filter: data })
|
|
212
|
+
else
|
|
213
|
+
@client.api_request(method: method, params: { filter: data })
|
|
214
|
+
end
|
|
126
215
|
else
|
|
127
|
-
@client.api_request(method: method, params:
|
|
128
|
-
end
|
|
129
|
-
else
|
|
130
|
-
result = @client.api_request(method: method, params: data)
|
|
216
|
+
result = @client.api_request(method: method, params: data)
|
|
131
217
|
|
|
132
|
-
|
|
218
|
+
result.key?(result_key) && !result[result_key].empty? ? result[result_key][0].to_i : nil
|
|
219
|
+
end
|
|
133
220
|
end
|
|
134
|
-
end
|
|
135
221
|
end
|
|
136
222
|
end
|
|
@@ -2,23 +2,45 @@
|
|
|
2
2
|
|
|
3
3
|
class ZabbixManager
|
|
4
4
|
class Users < Basic
|
|
5
|
-
#
|
|
5
|
+
# 返回 Zabbix API 中用户对象的方法名前缀。
|
|
6
|
+
#
|
|
7
|
+
# @return [String] 用户对象的方法名前缀
|
|
6
8
|
def method_name
|
|
7
9
|
"user"
|
|
8
10
|
end
|
|
9
11
|
|
|
10
|
-
#
|
|
12
|
+
# 返回用户对象批量结果中的 ID 字段名。
|
|
13
|
+
#
|
|
14
|
+
# @return [String] 用户 ID 复数字段名
|
|
15
|
+
def keys
|
|
16
|
+
"userids"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# 返回用户对象的主键字段名。
|
|
20
|
+
#
|
|
21
|
+
# @return [String] 用户对象的主键字段名
|
|
22
|
+
def key
|
|
23
|
+
"userid"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# 返回用于唯一识别用户的业务字段名。
|
|
27
|
+
#
|
|
28
|
+
# @return [String] 用户对象的业务标识字段名
|
|
11
29
|
def identify
|
|
12
30
|
"alias"
|
|
13
31
|
end
|
|
14
32
|
|
|
15
|
-
#
|
|
33
|
+
# 按指定动作批量更新用户媒介配置。
|
|
34
|
+
#
|
|
35
|
+
# @param data [Hash] 包含 userids 和 media
|
|
36
|
+
# @param action [String] user API 的动作名
|
|
37
|
+
# @return [Integer, nil] 首个已更新用户的 ID
|
|
16
38
|
def medias_helper(data, action)
|
|
17
39
|
result = @client.api_request(
|
|
18
40
|
method: "user.#{action}",
|
|
19
|
-
params: data[:userids].map do |
|
|
41
|
+
params: data[:userids].map do |t|
|
|
20
42
|
{
|
|
21
|
-
userid:
|
|
43
|
+
userid: t,
|
|
22
44
|
user_medias: data[:media]
|
|
23
45
|
}
|
|
24
46
|
end
|
|
@@ -26,12 +48,22 @@ class ZabbixManager
|
|
|
26
48
|
result ? result["userids"][0].to_i : nil
|
|
27
49
|
end
|
|
28
50
|
|
|
29
|
-
#
|
|
51
|
+
# 为指定用户添加媒介配置,当前通过 user.update 完成。
|
|
52
|
+
#
|
|
53
|
+
# @param data [Hash] 包含 userids 和 media
|
|
54
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
55
|
+
# @raise [TransportError] Zabbix 服务返回非成功 HTTP 状态时抛出
|
|
56
|
+
# @return [Integer, nil] 首个已更新用户的 ID
|
|
30
57
|
def add_medias(data)
|
|
31
58
|
medias_helper(data, "update")
|
|
32
59
|
end
|
|
33
60
|
|
|
34
|
-
#
|
|
61
|
+
# 批量替换指定用户的媒介配置。
|
|
62
|
+
#
|
|
63
|
+
# @param data [Hash] 包含 userids 和 media
|
|
64
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
65
|
+
# @raise [TransportError] Zabbix 服务返回非成功 HTTP 状态时抛出
|
|
66
|
+
# @return [Integer, nil] 首个已更新用户的 ID
|
|
35
67
|
def update_medias(data)
|
|
36
68
|
medias_helper(data, "update")
|
|
37
69
|
end
|
|
@@ -2,31 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
class ZabbixManager
|
|
4
4
|
class ValueMaps < Basic
|
|
5
|
-
#
|
|
5
|
+
# 返回 Zabbix API 中值映射对象的方法名前缀。
|
|
6
|
+
#
|
|
7
|
+
# @return [String] 值映射对象的方法名前缀
|
|
6
8
|
def method_name
|
|
7
9
|
"valuemap"
|
|
8
10
|
end
|
|
9
11
|
|
|
10
|
-
#
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
# 返回值映射对象的主键字段名。
|
|
13
|
+
#
|
|
14
|
+
# @return [String] 值映射对象的主键字段名
|
|
15
|
+
def key
|
|
16
|
+
"valuemapid"
|
|
13
17
|
end
|
|
14
18
|
|
|
15
|
-
#
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
id
|
|
21
|
-
else
|
|
22
|
-
create(data)
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# 通过 Zabbix API 创建或更新 Item 对象
|
|
27
|
-
def create_or_update(data)
|
|
28
|
-
valuemapid = get_id(name: data[:name])
|
|
29
|
-
valuemapid ? update(data.merge(valuemapids: [:valuemapid])) : create(data)
|
|
19
|
+
# 返回用于唯一识别值映射的业务字段名。
|
|
20
|
+
#
|
|
21
|
+
# @return [String] 值映射对象的业务标识字段名
|
|
22
|
+
def identify
|
|
23
|
+
"name"
|
|
30
24
|
end
|
|
31
25
|
end
|
|
32
26
|
end
|