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,78 +2,126 @@
|
|
|
2
2
|
|
|
3
3
|
class ZabbixManager
|
|
4
4
|
class Basic
|
|
5
|
-
#
|
|
5
|
+
# 合并默认选项后通过 Zabbix API 创建对象。
|
|
6
|
+
#
|
|
7
|
+
# @param data [Hash] 待创建的对象属性
|
|
8
|
+
# @raise [ApiError] Zabbix API 调用失败时抛出
|
|
9
|
+
# @raise [TransportError] Zabbix 服务端返回非 200 状态时抛出
|
|
10
|
+
# @return [Integer] 创建单个对象时返回对象 ID
|
|
11
|
+
# @return [Boolean] 创建多个对象时返回操作结果
|
|
6
12
|
def create(data)
|
|
7
|
-
log "[DEBUG]
|
|
13
|
+
log "[DEBUG] Call create with parameters: #{data.inspect}"
|
|
8
14
|
|
|
9
|
-
|
|
10
|
-
|
|
15
|
+
# 判断是否绑定默认选项并重新生成配置
|
|
16
|
+
data_with_default = default_options.empty? ? data : default_options.merge(data)
|
|
17
|
+
data_create = [data_with_default]
|
|
18
|
+
|
|
19
|
+
# 调用实例方法
|
|
20
|
+
result = @client.api_request(method: "#{method_name}.create", params: data_create)
|
|
21
|
+
# 判断是否执行成功并返回结果
|
|
11
22
|
parse_keys result
|
|
12
23
|
end
|
|
13
24
|
|
|
14
|
-
#
|
|
15
|
-
|
|
16
|
-
|
|
25
|
+
# 通过 Zabbix API 删除对象。
|
|
26
|
+
#
|
|
27
|
+
# @param data [Hash] 包含待删除对象的 ID 字段和值
|
|
28
|
+
# @raise [ApiError] Zabbix API 调用失败时抛出
|
|
29
|
+
# @raise [TransportError] Zabbix 服务端返回非 200 状态时抛出
|
|
30
|
+
# @return [Integer] 删除单个对象时返回对象 ID
|
|
31
|
+
# @return [Boolean] 删除多个对象时返回操作结果
|
|
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
|
|
17
39
|
|
|
40
|
+
# 按业务标识查找对象,存在则更新,否则创建。
|
|
41
|
+
#
|
|
42
|
+
# @param data [Hash] 包含对象业务标识及待写入属性
|
|
43
|
+
# @raise [ApiError] Zabbix API 调用失败时抛出
|
|
44
|
+
# @raise [TransportError] Zabbix 服务端返回非 200 状态时抛出
|
|
45
|
+
# @return [Integer] 创建或更新后的对象 ID
|
|
46
|
+
# @return [Boolean] 批量操作时返回操作结果
|
|
47
|
+
def create_or_update(data)
|
|
48
|
+
log "[DEBUG] Call create_or_update with parameters: #{data.inspect}"
|
|
49
|
+
|
|
50
|
+
id = get_id(**identity_filter(data))
|
|
51
|
+
id ? update(data.merge(key.to_sym => id)) : create(data)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# 在属性发生变化或强制更新时通过 Zabbix API 更新对象。
|
|
55
|
+
#
|
|
56
|
+
# @param data [Hash] 包含对象 ID 及待更新属性
|
|
57
|
+
# @param force [Boolean] 属性一致时是否仍强制更新
|
|
58
|
+
# @raise [ApiError] Zabbix API 调用失败时抛出
|
|
59
|
+
# @raise [TransportError] Zabbix 服务端返回非 200 状态时抛出
|
|
60
|
+
# @return [Integer] 更新后的对象 ID
|
|
61
|
+
# @return [Boolean] 批量操作时返回操作结果
|
|
62
|
+
def update(data, force = false)
|
|
63
|
+
log "[DEBUG] Call update with parameters: #{data.inspect}"
|
|
18
64
|
dump = {}
|
|
19
65
|
dump_by_id(key.to_sym => data[key.to_sym]).each do |item|
|
|
20
|
-
dump =
|
|
66
|
+
dump = item.deep_symbolize_keys if item[key].to_i == data[key.to_sym].to_i
|
|
21
67
|
end
|
|
22
68
|
if hash_equals?(dump, data) && !force
|
|
23
|
-
log "[DEBUG]
|
|
69
|
+
log "[DEBUG] Equal keys #{dump} and #{data}, skip update"
|
|
24
70
|
data[key.to_sym].to_i
|
|
25
71
|
else
|
|
26
|
-
|
|
72
|
+
data_update = [data]
|
|
73
|
+
result = @client.api_request(method: "#{method_name}.update", params: data_update)
|
|
27
74
|
parse_keys result
|
|
28
75
|
end
|
|
29
76
|
end
|
|
30
77
|
|
|
31
|
-
#
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
# 使用 API 获取或创建 Zabbix 监控对象
|
|
40
|
-
def get_or_create(data)
|
|
41
|
-
log "[DEBUG] 调用 #{method_name}.get_or_create,参数: #{data.inspect}"
|
|
42
|
-
|
|
43
|
-
if (id = get_id(identify.to_sym => data[identify.to_sym]))
|
|
44
|
-
id
|
|
45
|
-
else
|
|
46
|
-
create(data)
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# 使用 API 批量获取或创建 Zabbix 监控对象
|
|
51
|
-
def get_or_create_keys(data)
|
|
52
|
-
log "[DEBUG] 调用 #{method_name}.get_or_create_keys,参数: #{data.inspect}"
|
|
78
|
+
# 按业务标识从 Zabbix API 获取对象扩展数据。
|
|
79
|
+
#
|
|
80
|
+
# @param data [Hash] 包含对象业务标识字段及其值
|
|
81
|
+
# @raise [ApiError] Zabbix API 调用失败时抛出
|
|
82
|
+
# @raise [TransportError] Zabbix 服务端返回非 200 状态时抛出
|
|
83
|
+
# @return [Hash] 对象扩展数据
|
|
84
|
+
def get_full_data(data)
|
|
85
|
+
log "[DEBUG] Call get_full_data with parameters: #{data.inspect}"
|
|
53
86
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
87
|
+
@client.api_request(
|
|
88
|
+
method: "#{method_name}.get",
|
|
89
|
+
params: {
|
|
90
|
+
filter: {
|
|
91
|
+
identify.to_sym => data[identify.to_sym]
|
|
92
|
+
},
|
|
93
|
+
output: "extend"
|
|
94
|
+
}
|
|
95
|
+
)
|
|
61
96
|
end
|
|
62
97
|
|
|
63
|
-
#
|
|
64
|
-
|
|
65
|
-
|
|
98
|
+
# 将调用方参数直接传给对应的 Zabbix get 方法。
|
|
99
|
+
#
|
|
100
|
+
# @param data [Hash] 原始查询参数
|
|
101
|
+
# @raise [ApiError] Zabbix API 调用失败时抛出
|
|
102
|
+
# @raise [TransportError] Zabbix 服务端返回非 200 状态时抛出
|
|
103
|
+
# @return [Hash] API 返回数据
|
|
104
|
+
def get_raw(data)
|
|
105
|
+
log "[DEBUG] Call get_raw with parameters: #{data.inspect}"
|
|
66
106
|
|
|
67
|
-
|
|
68
|
-
|
|
107
|
+
@client.api_request(
|
|
108
|
+
method: "#{method_name}.get",
|
|
109
|
+
params: data
|
|
110
|
+
)
|
|
69
111
|
end
|
|
70
112
|
|
|
71
|
-
#
|
|
113
|
+
# 按对象 ID 字段从 Zabbix API 获取扩展数据。
|
|
114
|
+
#
|
|
115
|
+
# @param data [Hash] 包含对象 ID 字段及其值
|
|
116
|
+
# @raise [ApiError] Zabbix API 调用失败时抛出
|
|
117
|
+
# @raise [TransportError] Zabbix 服务端返回非 200 状态时抛出
|
|
118
|
+
# @return [Hash] 对象扩展数据
|
|
72
119
|
def dump_by_id(data)
|
|
73
|
-
log "[DEBUG]
|
|
120
|
+
log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
|
|
74
121
|
|
|
75
|
-
|
|
76
|
-
{
|
|
122
|
+
@client.api_request(
|
|
123
|
+
method: "#{method_name}.get",
|
|
124
|
+
params: {
|
|
77
125
|
filter: {
|
|
78
126
|
key.to_sym => data[key.to_sym]
|
|
79
127
|
},
|
|
@@ -82,112 +130,108 @@ class ZabbixManager
|
|
|
82
130
|
)
|
|
83
131
|
end
|
|
84
132
|
|
|
85
|
-
#
|
|
133
|
+
# 获取当前资源的全部对象,并返回业务标识到 ID 的映射。
|
|
134
|
+
#
|
|
135
|
+
# @raise [ApiError] Zabbix API 调用失败时抛出
|
|
136
|
+
# @raise [TransportError] Zabbix 服务端返回非 200 状态时抛出
|
|
137
|
+
# @return [Hash] 业务标识到对象 ID 的映射
|
|
138
|
+
def all
|
|
139
|
+
result = {}
|
|
140
|
+
@client.api_request(
|
|
141
|
+
method: "#{method_name}.get",
|
|
142
|
+
params: { output: "extend" }
|
|
143
|
+
).each do |item|
|
|
144
|
+
result[item[identify]] = item[key]
|
|
145
|
+
end
|
|
146
|
+
result
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# 按业务标识精确查询对象 ID,并拒绝歧义结果。
|
|
150
|
+
#
|
|
151
|
+
# @param data [Hash] 业务标识过滤条件
|
|
152
|
+
# @raise [ApiError] API 调用失败、缺少标识字段或结果不唯一时抛出
|
|
153
|
+
# @raise [TransportError] Zabbix 服务端返回非 200 状态时抛出
|
|
154
|
+
# @return [Integer, nil] Zabbix 对象 ID,未找到时返回空值
|
|
86
155
|
def get_id(data)
|
|
87
|
-
log "[DEBUG]
|
|
156
|
+
log "[DEBUG] Call get_id with parameters: #{data.inspect}"
|
|
88
157
|
|
|
89
|
-
data =
|
|
158
|
+
data = data.deep_symbolize_keys
|
|
159
|
+
# 缺少业务标识字段时立即终止查询
|
|
90
160
|
name = data[identify.to_sym]
|
|
91
|
-
raise
|
|
161
|
+
raise Invalid, "#{identify} not supplied in call to get_id" if name.nil?
|
|
92
162
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
{
|
|
163
|
+
result = @client.api_request(
|
|
164
|
+
method: "#{method_name}.get",
|
|
165
|
+
params: {
|
|
96
166
|
filter: data,
|
|
97
167
|
output: [key, identify]
|
|
98
168
|
}
|
|
99
169
|
)
|
|
170
|
+
matches = result.select { |item| item[identify].to_s == name.to_s }
|
|
171
|
+
raise Conflict, "multiple #{method_name} objects match #{identify}=#{name}" if matches.length > 1
|
|
100
172
|
|
|
101
|
-
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# 使用 API 基于提供的数据查询 Zabbix 监控对象 ids
|
|
105
|
-
def get_ids(data)
|
|
106
|
-
log "[DEBUG] 调用 #{method_name}.get_ids,参数: #{data.inspect}"
|
|
107
|
-
|
|
108
|
-
ids = []
|
|
109
|
-
[data].flatten.each do |item|
|
|
110
|
-
if (id = get_id(item))
|
|
111
|
-
ids << id
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
ids
|
|
173
|
+
matches.first&.fetch(key, nil)&.to_i
|
|
115
174
|
end
|
|
116
175
|
|
|
117
|
-
#
|
|
118
|
-
|
|
119
|
-
|
|
176
|
+
# 按业务标识获取对象,不存在时创建。
|
|
177
|
+
#
|
|
178
|
+
# @param data [Hash] 包含对象业务标识及待创建属性
|
|
179
|
+
# @raise [ApiError] Zabbix API 调用失败时抛出
|
|
180
|
+
# @raise [TransportError] Zabbix 服务端返回非 200 状态时抛出
|
|
181
|
+
# @return [Integer] Zabbix 对象 ID
|
|
182
|
+
def get_or_create(data)
|
|
183
|
+
log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
|
|
120
184
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
if (id = get_id(item))
|
|
124
|
-
ids << { key.to_sym => id }
|
|
125
|
-
end
|
|
185
|
+
unless (id = get_id(**identity_filter(data)))
|
|
186
|
+
id = create(data)
|
|
126
187
|
end
|
|
127
|
-
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
# 使用 API 基于 name 查询 Zabbix 监控对象 id
|
|
131
|
-
def get_ids_by_identify(data)
|
|
132
|
-
log "[DEBUG] 调用 #{method_name}.get_ids_by_identify,参数: #{data.inspect}"
|
|
133
|
-
|
|
134
|
-
result = get_raw(
|
|
135
|
-
{
|
|
136
|
-
filter: { identify.to_sym => [data].flatten },
|
|
137
|
-
output: [key]
|
|
138
|
-
}
|
|
139
|
-
)
|
|
140
|
-
result.empty? ? nil : result.map { |i| i[key] }
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
# 使用 API 基于 name 查询 Zabbix 监控对象 id
|
|
144
|
-
def get_key_ids_by_identify(data)
|
|
145
|
-
log "[DEBUG] 调用 #{method_name}.get_key_ids_by_identify,参数: #{data.inspect}"
|
|
146
|
-
|
|
147
|
-
result = get_raw(
|
|
148
|
-
{
|
|
149
|
-
filter: { identify.to_sym => [data].flatten },
|
|
150
|
-
output: [key]
|
|
151
|
-
}
|
|
152
|
-
)
|
|
153
|
-
result.empty? ? nil : result.map { |i| { key.to_sym => i[key] } }
|
|
188
|
+
id
|
|
154
189
|
end
|
|
155
190
|
|
|
156
|
-
#
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
191
|
+
# 提取通用获取或写入操作使用的远端业务标识。
|
|
192
|
+
#
|
|
193
|
+
# @param data [Hash] 对象属性
|
|
194
|
+
# @return [Hash] 业务标识过滤条件
|
|
195
|
+
def identity_filter(data)
|
|
196
|
+
attributes = data.deep_symbolize_keys
|
|
197
|
+
{ identify.to_sym => attributes.fetch(identify.to_sym) }
|
|
163
198
|
end
|
|
164
199
|
|
|
165
|
-
#
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
}
|
|
200
|
+
# 使用原始参数直接创建 Zabbix 对象。
|
|
201
|
+
#
|
|
202
|
+
# @param data [Hash, Array] 原始创建参数
|
|
203
|
+
# @return [Object] API 返回结果
|
|
204
|
+
def create_raw(data)
|
|
205
|
+
log "[DEBUG] Call create_raw with parameters: #{data.inspect}"
|
|
206
|
+
# 请求创建数据
|
|
207
|
+
@client.api_request(
|
|
208
|
+
method: "#{method_name}.create",
|
|
209
|
+
params: data
|
|
176
210
|
)
|
|
177
211
|
end
|
|
178
212
|
|
|
179
|
-
#
|
|
180
|
-
|
|
213
|
+
# 使用原始参数直接更新 Zabbix 对象。
|
|
214
|
+
#
|
|
215
|
+
# @param data [Hash, Array] 原始更新参数
|
|
216
|
+
# @return [Object] API 返回结果
|
|
217
|
+
def update_raw(data)
|
|
218
|
+
log "[DEBUG] Call update_raw with parameters: #{data.inspect}"
|
|
219
|
+
# 请求创建数据
|
|
181
220
|
@client.api_request(
|
|
182
|
-
method: "#{method_name}.
|
|
221
|
+
method: "#{method_name}.update",
|
|
183
222
|
params: data
|
|
184
223
|
)
|
|
185
224
|
end
|
|
186
225
|
|
|
187
|
-
#
|
|
188
|
-
|
|
226
|
+
# 使用原始参数直接删除 Zabbix 对象。
|
|
227
|
+
#
|
|
228
|
+
# @param data [Hash, Array] 原始删除参数
|
|
229
|
+
# @return [Object] API 返回结果
|
|
230
|
+
def delete_raw(data)
|
|
231
|
+
log "[DEBUG] Call delete_raw with parameters: #{data.inspect}"
|
|
232
|
+
# 请求创建数据
|
|
189
233
|
@client.api_request(
|
|
190
|
-
method:
|
|
234
|
+
method: "#{method_name}.delete",
|
|
191
235
|
params: data
|
|
192
236
|
)
|
|
193
237
|
end
|
|
@@ -2,30 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
class ZabbixManager
|
|
4
4
|
class Actions < Basic
|
|
5
|
-
#
|
|
5
|
+
# 返回操作对象对应的 Zabbix API 方法前缀。
|
|
6
|
+
#
|
|
7
|
+
# @return [String]
|
|
6
8
|
def method_name
|
|
7
9
|
"action"
|
|
8
10
|
end
|
|
9
11
|
|
|
10
|
-
#
|
|
12
|
+
# 返回操作对象用于业务识别的字段名。
|
|
13
|
+
#
|
|
14
|
+
# @return [String]
|
|
11
15
|
def identify
|
|
12
16
|
"name"
|
|
13
17
|
end
|
|
14
18
|
|
|
15
|
-
#
|
|
19
|
+
# 获取操作及其执行、恢复、确认操作和过滤条件的完整数据。
|
|
20
|
+
#
|
|
21
|
+
# @param data [Hash] 包含识别字段及其值的查询条件
|
|
22
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
23
|
+
# @raise [TransportError] Zabbix 服务端返回非成功 HTTP 状态时抛出
|
|
24
|
+
# @return [Hash] 匹配的操作完整数据
|
|
16
25
|
def get_full_data(data)
|
|
17
|
-
log "[DEBUG]
|
|
26
|
+
log "[DEBUG] Call get_full_data with parameters: #{data.inspect}"
|
|
18
27
|
|
|
19
|
-
|
|
20
|
-
{
|
|
21
|
-
|
|
28
|
+
@client.api_request(
|
|
29
|
+
method: "#{method_name}.get",
|
|
30
|
+
params: {
|
|
31
|
+
filter: {
|
|
22
32
|
identify.to_sym => data[identify.to_sym]
|
|
23
33
|
},
|
|
24
|
-
output:
|
|
25
|
-
selectOperations:
|
|
26
|
-
selectRecoveryOperations:
|
|
34
|
+
output: "extend",
|
|
35
|
+
selectOperations: "extend",
|
|
36
|
+
selectRecoveryOperations: "extend",
|
|
27
37
|
selectAcknowledgeOperations: "extend",
|
|
28
|
-
selectFilter:
|
|
38
|
+
selectFilter: "extend"
|
|
29
39
|
}
|
|
30
40
|
)
|
|
31
41
|
end
|
|
@@ -2,31 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
class ZabbixManager
|
|
4
4
|
class Applications < Basic
|
|
5
|
-
#
|
|
5
|
+
# 返回应用集对象对应的 Zabbix API 方法前缀。
|
|
6
|
+
#
|
|
7
|
+
# @return [String]
|
|
6
8
|
def method_name
|
|
7
9
|
"application"
|
|
8
10
|
end
|
|
9
11
|
|
|
10
|
-
#
|
|
12
|
+
# 返回应用集对象用于业务识别的字段名。
|
|
13
|
+
#
|
|
14
|
+
# @return [String]
|
|
11
15
|
def identify
|
|
12
16
|
"name"
|
|
13
17
|
end
|
|
14
18
|
|
|
15
|
-
#
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
else
|
|
22
|
-
create(data)
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# 通过 Zabbix API 创建或更新 Application 对象
|
|
27
|
-
def create_or_update(data)
|
|
28
|
-
applicationid = get_id(name: data[:name], hostid: data[:hostid])
|
|
29
|
-
applicationid ? update(data.merge(applicationid: applicationid)) : create(data)
|
|
19
|
+
# 生成由应用集名称和所属主机构成的稳定查询条件。
|
|
20
|
+
# @param data [Hash] 包含 name 和 hostid 的应用集属性
|
|
21
|
+
# @return [Hash] 应用集唯一查询条件
|
|
22
|
+
def identity_filter(data)
|
|
23
|
+
attributes = data.deep_symbolize_keys
|
|
24
|
+
{ name: attributes.fetch(:name), hostid: attributes.fetch(:hostid) }
|
|
30
25
|
end
|
|
31
26
|
end
|
|
32
27
|
end
|
|
@@ -2,27 +2,42 @@
|
|
|
2
2
|
|
|
3
3
|
class ZabbixManager
|
|
4
4
|
class Configurations < Basic
|
|
5
|
-
#
|
|
5
|
+
# 标记配置接口使用数组形式处理 API 返回值。
|
|
6
|
+
# @return [Boolean] 始终返回 true
|
|
6
7
|
def array_flag
|
|
7
8
|
true
|
|
8
9
|
end
|
|
9
10
|
|
|
10
|
-
#
|
|
11
|
+
# 返回配置对象对应的 Zabbix API 方法前缀。
|
|
12
|
+
#
|
|
13
|
+
# @return [String]
|
|
11
14
|
def method_name
|
|
12
15
|
"configuration"
|
|
13
16
|
end
|
|
14
17
|
|
|
15
|
-
#
|
|
18
|
+
# 返回配置对象用于业务识别的字段名。
|
|
19
|
+
#
|
|
20
|
+
# @return [String]
|
|
16
21
|
def identify
|
|
17
22
|
"host"
|
|
18
23
|
end
|
|
19
24
|
|
|
20
|
-
#
|
|
25
|
+
# 通过 Zabbix API 导出配置数据。
|
|
26
|
+
#
|
|
27
|
+
# @param data [Hash] 配置导出参数
|
|
28
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
29
|
+
# @raise [TransportError] Zabbix 服务端返回非成功 HTTP 状态时抛出
|
|
30
|
+
# @return [Hash] 配置导出结果
|
|
21
31
|
def export(data)
|
|
22
32
|
@client.api_request(method: "configuration.export", params: data)
|
|
23
33
|
end
|
|
24
34
|
|
|
25
|
-
#
|
|
35
|
+
# 通过 Zabbix API 导入配置数据。
|
|
36
|
+
#
|
|
37
|
+
# @param data [Hash] 配置导入参数及内容
|
|
38
|
+
# @raise [ApiError] Zabbix API 返回业务错误时抛出
|
|
39
|
+
# @raise [TransportError] Zabbix 服务端返回非成功 HTTP 状态时抛出
|
|
40
|
+
# @return [Hash] 配置导入结果
|
|
26
41
|
def import(data)
|
|
27
42
|
@client.api_request(method: "configuration.import", params: data)
|
|
28
43
|
end
|
|
@@ -2,40 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
class ZabbixManager
|
|
4
4
|
class Drules < Basic
|
|
5
|
-
#
|
|
5
|
+
# 返回网络发现规则对应的 Zabbix API 方法前缀。
|
|
6
|
+
#
|
|
7
|
+
# @return [String]
|
|
6
8
|
def method_name
|
|
7
9
|
"drule"
|
|
8
10
|
end
|
|
9
11
|
|
|
10
|
-
#
|
|
12
|
+
# 返回网络发现规则用于业务识别的字段名。
|
|
13
|
+
#
|
|
14
|
+
# @return [String]
|
|
11
15
|
def identify
|
|
12
16
|
"name"
|
|
13
17
|
end
|
|
14
18
|
|
|
15
|
-
#
|
|
19
|
+
# 返回创建网络发现规则时使用的默认周期和启用状态。
|
|
20
|
+
#
|
|
21
|
+
# @return [Hash] 网络发现规则默认属性
|
|
16
22
|
def default_options
|
|
17
23
|
{
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
delay: 3600,
|
|
21
|
-
status: 0
|
|
24
|
+
delay: "1h",
|
|
25
|
+
status: 0
|
|
22
26
|
}
|
|
23
27
|
end
|
|
24
|
-
|
|
25
|
-
# 通过 Zabbix API 获取或创建 Drule 对象
|
|
26
|
-
def get_or_create(data)
|
|
27
|
-
log "[DEBUG] 调用 get_or_create,参数为:#{data.inspect}"
|
|
28
|
-
|
|
29
|
-
unless (id = get_id(name: data[:name]))
|
|
30
|
-
id = create(data)
|
|
31
|
-
end
|
|
32
|
-
id
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# 通过 Zabbix API 创建或更新 Drule 对象
|
|
36
|
-
def create_or_update(data)
|
|
37
|
-
druleid = get_id(name: data[:name])
|
|
38
|
-
druleid ? update(data.merge(druleid: druleid)) : create(data)
|
|
39
|
-
end
|
|
40
28
|
end
|
|
41
29
|
end
|
|
@@ -1,39 +1,27 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
class ZabbixManager
|
|
4
|
-
#
|
|
5
|
-
class
|
|
6
|
-
# 用于存储响应对象
|
|
7
|
-
attr_accessor :response
|
|
8
|
-
# 用于存储 Zabbix API 错误信息
|
|
9
|
-
attr_accessor :error
|
|
10
|
-
# 用于存储格式化后的错误消息
|
|
11
|
-
attr_accessor :error_message
|
|
4
|
+
# 表示调用方输入或配置无效。
|
|
5
|
+
class Invalid < ArgumentError; end
|
|
12
6
|
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
# 表示 Zabbix JSON-RPC 返回的业务错误或无效响应。
|
|
8
|
+
class ApiError < StandardError
|
|
9
|
+
attr_reader :response
|
|
10
|
+
|
|
11
|
+
# 保存经过脱敏的远端响应,便于调用方诊断。
|
|
12
|
+
# @return [ApiError]
|
|
13
|
+
def initialize(message = nil, response = nil)
|
|
15
14
|
super(message)
|
|
16
15
|
@response = response
|
|
17
|
-
set_error! if @response
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
private
|
|
21
|
-
|
|
22
|
-
# 从响应中提取 Zabbix API 错误信息
|
|
23
|
-
def set_error!
|
|
24
|
-
@error = @response["error"]
|
|
25
|
-
@error_message = "#{@error["message"]}: #{@error["data"]}"
|
|
26
|
-
rescue StandardError
|
|
27
|
-
@error = nil
|
|
28
|
-
@error_message = nil
|
|
29
16
|
end
|
|
30
17
|
end
|
|
31
18
|
|
|
32
|
-
#
|
|
33
|
-
class
|
|
34
|
-
end
|
|
19
|
+
# 表示资源不唯一、身份冲突或无法安全收敛。
|
|
20
|
+
class Conflict < ApiError; end
|
|
35
21
|
|
|
36
|
-
#
|
|
37
|
-
class
|
|
38
|
-
|
|
22
|
+
# 表示 HTTP 状态或传输层失败。
|
|
23
|
+
class TransportError < StandardError; end
|
|
24
|
+
|
|
25
|
+
# 表示远端可能已完成写入,调用方不得自动重放。
|
|
26
|
+
class ResultUnknown < TransportError; end
|
|
39
27
|
end
|
|
@@ -2,12 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
class ZabbixManager
|
|
4
4
|
class Events < Basic
|
|
5
|
-
#
|
|
5
|
+
# 返回事件对象对应的 Zabbix API 方法前缀。
|
|
6
|
+
#
|
|
7
|
+
# @return [String]
|
|
6
8
|
def method_name
|
|
7
9
|
"event"
|
|
8
10
|
end
|
|
9
11
|
|
|
10
|
-
#
|
|
12
|
+
# 返回事件对象用于业务识别的字段名。
|
|
13
|
+
#
|
|
14
|
+
# @return [String]
|
|
11
15
|
def identify
|
|
12
16
|
"name"
|
|
13
17
|
end
|