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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -9
  3. data/LICENSE +1 -1
  4. data/README.md +202 -8
  5. data/lib/zabbix_manager/basic/basic_alias.rb +25 -3
  6. data/lib/zabbix_manager/basic/basic_func.rb +32 -61
  7. data/lib/zabbix_manager/basic/basic_init.rb +28 -13
  8. data/lib/zabbix_manager/basic/basic_logic.rb +172 -128
  9. data/lib/zabbix_manager/classes/actions.rb +21 -11
  10. data/lib/zabbix_manager/classes/applications.rb +12 -17
  11. data/lib/zabbix_manager/classes/configurations.rb +20 -5
  12. data/lib/zabbix_manager/classes/drules.rb +11 -23
  13. data/lib/zabbix_manager/classes/errors.rb +16 -28
  14. data/lib/zabbix_manager/classes/events.rb +6 -2
  15. data/lib/zabbix_manager/classes/graphs.rb +41 -34
  16. data/lib/zabbix_manager/classes/hostgroups.rb +53 -3
  17. data/lib/zabbix_manager/classes/hostinterfaces.rb +172 -12
  18. data/lib/zabbix_manager/classes/hosts.rb +197 -68
  19. data/lib/zabbix_manager/classes/httptests.rb +18 -20
  20. data/lib/zabbix_manager/classes/items.rb +199 -72
  21. data/lib/zabbix_manager/classes/maintenance.rb +6 -2
  22. data/lib/zabbix_manager/classes/mediatypes.rb +7 -63
  23. data/lib/zabbix_manager/classes/problems.rb +75 -57
  24. data/lib/zabbix_manager/classes/proxies.rb +48 -7
  25. data/lib/zabbix_manager/classes/roles.rb +47 -36
  26. data/lib/zabbix_manager/classes/screens.rb +45 -14
  27. data/lib/zabbix_manager/classes/scripts.rb +17 -7
  28. data/lib/zabbix_manager/classes/server.rb +7 -1
  29. data/lib/zabbix_manager/classes/templates.rb +59 -21
  30. data/lib/zabbix_manager/classes/triggers.rb +253 -66
  31. data/lib/zabbix_manager/classes/usergroups.rb +28 -6
  32. data/lib/zabbix_manager/classes/usermacros.rb +119 -33
  33. data/lib/zabbix_manager/classes/users.rb +39 -7
  34. data/lib/zabbix_manager/classes/valuemaps.rb +13 -19
  35. data/lib/zabbix_manager/client.rb +311 -135
  36. data/lib/zabbix_manager/http_transport.rb +192 -0
  37. data/lib/zabbix_manager/log_sanitizer.rb +68 -0
  38. data/lib/zabbix_manager/monitoring.rb +691 -0
  39. data/lib/zabbix_manager/version.rb +1 -1
  40. data/lib/zabbix_manager.rb +118 -40
  41. data/zabbix_manager.gemspec +21 -8
  42. metadata +208 -22
  43. data/lib/zabbix_manager/classes/unusable.rb +0 -11
@@ -2,78 +2,126 @@
2
2
 
3
3
  class ZabbixManager
4
4
  class Basic
5
- # 使用 API 新增 Zabbix 监控对象(使用默认值)
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] 调用 #{method_name}.create,参数: #{data.inspect}"
13
+ log "[DEBUG] Call create with parameters: #{data.inspect}"
8
14
 
9
- params = default_options.merge(data)
10
- result = @client.api_request(method: "#{method_name}.create", params: params)
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
- # 使用 API 更新 Zabbix 监控对象
15
- def update(data, force = false)
16
- log "[DEBUG] 调用 #{method_name}.update,参数: #{data.inspect}"
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 = symbolize_keys(item) if item[key].to_i == data[key.to_sym].to_i
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] 系统以有数据 #{dump} 和 待更新的数据 #{data} 相同,跳过本次更新"
69
+ log "[DEBUG] Equal keys #{dump} and #{data}, skip update"
24
70
  data[key.to_sym].to_i
25
71
  else
26
- result = @client.api_request(method: "#{method_name}.update", params: data)
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
- # 使用 API 删除 Zabbix 监控对象
32
- def delete(data)
33
- log "[DEBUG] 调用 #{method_name}.delete,参数: #{data.inspect}"
34
-
35
- result = @client.api_request(method: "#{method_name}.delete", params: [data].flatten)
36
- parse_keys result
37
- end
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
- ids = []
55
- [data].flatten.each do |item|
56
- if (id = get_or_create(item))
57
- ids << { key.to_sym => id }
58
- end
59
- end
60
- ids
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
- # 使用 API 创建或更新 Zabbix 监控对象
64
- def create_or_update(data)
65
- log "[DEBUG] 调用 #{method_name}.create_or_update,参数: #{data.inspect}"
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
- id = get_id(identify.to_sym => data[identify.to_sym])
68
- id ? update(data.merge(key.to_sym => id.to_s)) : create(data)
107
+ @client.api_request(
108
+ method: "#{method_name}.get",
109
+ params: data
110
+ )
69
111
  end
70
112
 
71
- # 使用 API 基于 key 打印 Zabbix 监控对象详情
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] 调用 #{method_name}.dump_by_id,参数: #{data.inspect}"
120
+ log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
74
121
 
75
- get_raw(
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
- # 使用 API 基于提供的数据查询 Zabbix 监控对象 id
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] 调用 #{method_name}.get_id,参数: #{data.inspect}"
156
+ log "[DEBUG] Call get_id with parameters: #{data.inspect}"
88
157
 
89
- data = symbolize_keys(data) if data.key?(identify)
158
+ data = data.deep_symbolize_keys
159
+ # 缺少业务标识字段时立即终止查询
90
160
  name = data[identify.to_sym]
91
- raise ZbxError, "在调用 get_id 时未提供 identify #{identify}" if name.nil?
161
+ raise Invalid, "#{identify} not supplied in call to get_id" if name.nil?
92
162
 
93
- # 输出信息截取 key identify
94
- result = get_raw(
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
- result.find { |item| item[identify] == data[identify.to_sym] }&.[](key)&.to_i
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
- # 使用 API 基于提供的数据查询 Zabbix 监控对象 id
118
- def get_key_ids(data)
119
- log "[DEBUG] 调用 #{method_name}.get_key_ids,参数: #{data.inspect}"
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
- ids = []
122
- [data].flatten.each do |item|
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
- ids
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
- # 使用 API 查询所有 Zabbix 监控对象的详细信息
157
- def all
158
- result = {}
159
- get_raw({ output: "extend" }).each do |item|
160
- result[item[identify]] = item[key]
161
- end
162
- result
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
- # 使用 API 查询 Zabbix 监控对象的详细信息
166
- def get_full_data(data)
167
- log "[DEBUG] 调用 #{method_name}.get_full_data,参数: #{data.inspect}"
168
-
169
- get_raw(
170
- {
171
- filter: {
172
- identify.to_sym => data[identify.to_sym]
173
- },
174
- output: "extend"
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
- # 使用 API 查询 Zabbix 监控对象的原始数据
180
- def get_raw(data)
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}.get",
221
+ method: "#{method_name}.update",
183
222
  params: data
184
223
  )
185
224
  end
186
225
 
187
- # 使用 API 查询 Zabbix 监控对象的原始数据
188
- def request_raw(method, data)
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: 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
- # 用于与 Zabbix API 交互的方法名称
5
+ # 返回操作对象对应的 Zabbix API 方法前缀。
6
+ #
7
+ # @return [String]
6
8
  def method_name
7
9
  "action"
8
10
  end
9
11
 
10
- # 用于通过 Zabbix API 标识特定 Action 对象的 id 字段名称
12
+ # 返回操作对象用于业务识别的字段名。
13
+ #
14
+ # @return [String]
11
15
  def identify
12
16
  "name"
13
17
  end
14
18
 
15
- # 从 API 获取完整/扩展的 Action 对象数据
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] 调用 get_full_data,参数为:#{data.inspect}"
26
+ log "[DEBUG] Call get_full_data with parameters: #{data.inspect}"
18
27
 
19
- get_raw(
20
- {
21
- filter: {
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: "extend",
25
- selectOperations: "extend",
26
- selectRecoveryOperations: "extend",
34
+ output: "extend",
35
+ selectOperations: "extend",
36
+ selectRecoveryOperations: "extend",
27
37
  selectAcknowledgeOperations: "extend",
28
- selectFilter: "extend"
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
- # 用于通过 Zabbix API 与 Applications 交互的方法名称
5
+ # 返回应用集对象对应的 Zabbix API 方法前缀。
6
+ #
7
+ # @return [String]
6
8
  def method_name
7
9
  "application"
8
10
  end
9
11
 
10
- # 用于通过 Zabbix API 标识特定 Application 对象的 id 字段名称
12
+ # 返回应用集对象用于业务识别的字段名。
13
+ #
14
+ # @return [String]
11
15
  def identify
12
16
  "name"
13
17
  end
14
18
 
15
- # 通过 Zabbix API 获取或创建 Application 对象
16
- def get_or_create(data)
17
- log "[DEBUG] 调用 get_or_create,参数为:#{data.inspect}"
18
-
19
- if (id = get_id(name: data[:name], hostid: data[:hostid]))
20
- id
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
- # 用于通过 Zabbix API 与 Configurations 交互的方法名称
11
+ # 返回配置对象对应的 Zabbix API 方法前缀。
12
+ #
13
+ # @return [String]
11
14
  def method_name
12
15
  "configuration"
13
16
  end
14
17
 
15
- # 用于通过 Zabbix API 标识特定 Configuration 对象的 id 字段名称
18
+ # 返回配置对象用于业务识别的字段名。
19
+ #
20
+ # @return [String]
16
21
  def identify
17
22
  "host"
18
23
  end
19
24
 
20
- # 使用 Zabbix API 导出配置数据
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
- # 使用 Zabbix API 导入配置数据
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
- # 用于通过 Zabbix API 与 Drules 交互的方法名称
5
+ # 返回网络发现规则对应的 Zabbix API 方法前缀。
6
+ #
7
+ # @return [String]
6
8
  def method_name
7
9
  "drule"
8
10
  end
9
11
 
10
- # 用于通过 Zabbix API 标识特定 Drule 对象的 id 字段名称
12
+ # 返回网络发现规则用于业务识别的字段名。
13
+ #
14
+ # @return [String]
11
15
  def identify
12
16
  "name"
13
17
  end
14
18
 
15
- # 创建 Drule 对象时使用的默认选项
19
+ # 返回创建网络发现规则时使用的默认周期和启用状态。
20
+ #
21
+ # @return [Hash] 网络发现规则默认属性
16
22
  def default_options
17
23
  {
18
- name: nil,
19
- iprange: nil,
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
- # BaseError 是 ZabbixManager 模块中处理异常的基类
5
- class BaseError < RuntimeError
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
- def initialize(message, response = nil)
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
- # ZbxError 是 ZabbixManager 模块中处理 Zabbix API 异常的类
33
- class ZbxError < BaseError
34
- end
19
+ # 表示资源不唯一、身份冲突或无法安全收敛。
20
+ class Conflict < ApiError; end
35
21
 
36
- # HttpError 是 ZabbixManager 模块中处理 HTTP 异常的类
37
- class HttpError < BaseError
38
- end
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
- # 用于通过 Zabbix API 与 Events 交互的方法名称
5
+ # 返回事件对象对应的 Zabbix API 方法前缀。
6
+ #
7
+ # @return [String]
6
8
  def method_name
7
9
  "event"
8
10
  end
9
11
 
10
- # 用于通过 Zabbix API 标识特定 Event 对象的 id 字段名称
12
+ # 返回事件对象用于业务识别的字段名。
13
+ #
14
+ # @return [String]
11
15
  def identify
12
16
  "name"
13
17
  end