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,89 +2,152 @@
2
2
 
3
3
  class ZabbixManager
4
4
  class Usermacros < Basic
5
- # 用于通过 Zabbix API 识别特定 User 宏对象的 id 字段名称
5
+ # 返回用于唯一识别用户宏的业务字段名。
6
+ #
7
+ # @return [String] 用户宏的业务标识字段名
6
8
  def identify
7
9
  "macro"
8
10
  end
9
11
 
10
- # 用于通过 Zabbix API 与 User 宏交互的方法名称
12
+ # 返回 Zabbix API 中用户宏对象的方法名前缀。
13
+ #
14
+ # @return [String] 用户宏对象的方法名前缀
11
15
  def method_name
12
16
  "usermacro"
13
17
  end
14
18
 
15
- # 通过 Zabbix API 根据提供的数据获取 User 宏对象的 id
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
- data = symbolize_keys(data) if data.key?(identify)
28
+ # 兼容字符串键输入。
29
+ data = data.deep_symbolize_keys if data.key?(identify)
30
+ # 标识字段缺失时拒绝继续查询。
20
31
  name = data[identify.to_sym]
21
- raise ZbxError, "#{identify} not supplied in call to get_id" if name.nil?
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&.empty? && result[0].key?("hostmacroid") ? result[0]["hostmacroid"].to_i : nil
36
+ !result.empty? && result[0].key?("hostmacroid") ? result[0]["hostmacroid"].to_i : nil
26
37
  end
27
38
 
28
- # 通过 Zabbix API 根据提供的数据获取 Global 宏对象的 id
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
- data = symbolize_keys(data) if data.key?(identify)
48
+ # 兼容字符串键输入。
49
+ data = data.deep_symbolize_keys if data.key?(identify)
50
+ # 标识字段缺失时拒绝继续查询。
33
51
  name = data[identify.to_sym]
34
- raise ZbxError, "#{identify} not supplied in call to get_id_global" if name.nil?
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&.empty? && result[0].key?("globalmacroid") ? result[0]["globalmacroid"].to_i : nil
56
+ !result.empty? && result[0].key?("globalmacroid") ? result[0]["globalmacroid"].to_i : nil
39
57
  end
40
58
 
41
- # 通过 Zabbix API 获取完整/扩展的 User 宏数据
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
- # 通过 Zabbix API 获取完整/扩展的 Global 宏数据
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
- # 通过 Zabbix API 创建新的 User 宏对象(使用默认值)
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
- # 通过 Zabbix API 创建新的 Global 宏对象(使用默认值)
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
- # 通过 Zabbix API 删除 User 宏对象
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
- # 通过 Zabbix API 删除 Global 宏对象
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
- # 通过 Zabbix API 更新 User 宏对象
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
- # 通过 Zabbix API 更新 Global 宏对象
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
- # 通过 Zabbix API 获取或创建 User 宏对象
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
- # 通过 Zabbix API 获取或创建 Global 宏对象
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
- # 通过 Zabbix API 创建或更新 User 宏对象
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
- # 通过 Zabbix API 创建或更新 Global 宏对象
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
- # 自定义请求方法,以处理 User 和 Global 宏
122
- def request(data, method, result_key)
123
- if method.include?(".get")
124
- if result_key.include?("global")
125
- @client.api_request(method: method, params: { globalmacro: true, filter: data })
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: { filter: data })
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
- result.key?(result_key) && !result[result_key].empty? ? result[result_key][0].to_i : nil
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
- # 用于通过 Zabbix API 与 Users 交互的方法名称
5
+ # 返回 Zabbix API 中用户对象的方法名前缀。
6
+ #
7
+ # @return [String] 用户对象的方法名前缀
6
8
  def method_name
7
9
  "user"
8
10
  end
9
11
 
10
- # 用于通过 Zabbix API 识别特定 User 对象的 id 字段名称
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 |i|
41
+ params: data[:userids].map do |t|
20
42
  {
21
- userid: i,
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
- # 通过 Zabbix API 为用户添加媒体信息
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
- # 通过 Zabbix API 更新用户媒体信息
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
- # 用于通过 Zabbix API 与 ValueMaps 交互的方法名称
5
+ # 返回 Zabbix API 中值映射对象的方法名前缀。
6
+ #
7
+ # @return [String] 值映射对象的方法名前缀
6
8
  def method_name
7
9
  "valuemap"
8
10
  end
9
11
 
10
- # 用于通过 Zabbix API 识别特定 ValueMap 对象的 id 字段名称
11
- def identify
12
- "name"
12
+ # 返回值映射对象的主键字段名。
13
+ #
14
+ # @return [String] 值映射对象的主键字段名
15
+ def key
16
+ "valuemapid"
13
17
  end
14
18
 
15
- # 通过 Zabbix API 获取或创建 ValueMap 对象
16
- def get_or_create(data)
17
- log "[DEBUG] 调用 get_or_create 方法,参数: #{data.inspect}"
18
-
19
- if (id = get_id(valuemapids: data[:valuemapids]))
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