zabbix_manager 5.1.5 → 6.0.0

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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +55 -9
  3. data/LICENSE +1 -1
  4. data/README.md +241 -24
  5. data/lib/zabbix_manager/classes/actions.rb +19 -17
  6. data/lib/zabbix_manager/classes/applications.rb +11 -22
  7. data/lib/zabbix_manager/classes/configurations.rb +20 -10
  8. data/lib/zabbix_manager/classes/discovery_rules.rb +23 -0
  9. data/lib/zabbix_manager/classes/errors.rb +18 -27
  10. data/lib/zabbix_manager/classes/events.rb +8 -3
  11. data/lib/zabbix_manager/classes/graphs.rb +48 -37
  12. data/lib/zabbix_manager/classes/host_groups.rb +64 -0
  13. data/lib/zabbix_manager/classes/host_interfaces.rb +261 -0
  14. data/lib/zabbix_manager/classes/hosts.rb +232 -76
  15. data/lib/zabbix_manager/classes/http_tests.rb +32 -0
  16. data/lib/zabbix_manager/classes/items.rb +206 -72
  17. data/lib/zabbix_manager/classes/maintenance.rb +8 -3
  18. data/lib/zabbix_manager/classes/media_types.rb +18 -0
  19. data/lib/zabbix_manager/classes/problems.rb +51 -62
  20. data/lib/zabbix_manager/classes/proxies.rb +45 -14
  21. data/lib/zabbix_manager/classes/proxy_groups.rb +16 -0
  22. data/lib/zabbix_manager/classes/roles.rb +46 -41
  23. data/lib/zabbix_manager/classes/screens.rb +36 -24
  24. data/lib/zabbix_manager/classes/scripts.rb +16 -12
  25. data/lib/zabbix_manager/classes/server.rb +8 -1
  26. data/lib/zabbix_manager/classes/templates.rb +26 -51
  27. data/lib/zabbix_manager/classes/triggers.rb +251 -67
  28. data/lib/zabbix_manager/classes/user_groups.rb +63 -0
  29. data/lib/zabbix_manager/classes/user_macros.rb +110 -0
  30. data/lib/zabbix_manager/classes/users.rb +16 -23
  31. data/lib/zabbix_manager/classes/value_maps.rb +52 -0
  32. data/lib/zabbix_manager/client.rb +183 -137
  33. data/lib/zabbix_manager/configuration.rb +107 -0
  34. data/lib/zabbix_manager/http_transport.rb +240 -0
  35. data/lib/zabbix_manager/log_sanitizer.rb +58 -0
  36. data/lib/zabbix_manager/monitoring/device.rb +393 -0
  37. data/lib/zabbix_manager/monitoring/expressions.rb +36 -0
  38. data/lib/zabbix_manager/monitoring/line.rb +175 -0
  39. data/lib/zabbix_manager/monitoring/line_items.rb +110 -0
  40. data/lib/zabbix_manager/monitoring/line_lifecycle.rb +169 -0
  41. data/lib/zabbix_manager/monitoring/line_plan.rb +113 -0
  42. data/lib/zabbix_manager/monitoring/thresholds.rb +182 -0
  43. data/lib/zabbix_manager/monitoring/traffic_items.rb +132 -0
  44. data/lib/zabbix_manager/monitoring/validation.rb +92 -0
  45. data/lib/zabbix_manager/monitoring.rb +265 -0
  46. data/lib/zabbix_manager/resource.rb +235 -0
  47. data/lib/zabbix_manager/traffic.rb +238 -0
  48. data/lib/zabbix_manager/version.rb +1 -1
  49. data/lib/zabbix_manager.rb +110 -145
  50. data/zabbix_manager.gemspec +12 -15
  51. metadata +67 -30
  52. data/lib/zabbix_manager/basic/basic_alias.rb +0 -20
  53. data/lib/zabbix_manager/basic/basic_func.rb +0 -84
  54. data/lib/zabbix_manager/basic/basic_init.rb +0 -35
  55. data/lib/zabbix_manager/basic/basic_logic.rb +0 -195
  56. data/lib/zabbix_manager/classes/drules.rb +0 -41
  57. data/lib/zabbix_manager/classes/hostgroups.rb +0 -20
  58. data/lib/zabbix_manager/classes/hostinterfaces.rb +0 -29
  59. data/lib/zabbix_manager/classes/httptests.rb +0 -40
  60. data/lib/zabbix_manager/classes/mediatypes.rb +0 -79
  61. data/lib/zabbix_manager/classes/unusable.rb +0 -11
  62. data/lib/zabbix_manager/classes/usergroups.rb +0 -53
  63. data/lib/zabbix_manager/classes/usermacros.rb +0 -136
  64. data/lib/zabbix_manager/classes/valuemaps.rb +0 -32
@@ -1,195 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ZabbixManager
4
- class Basic
5
- # 使用 API 新增 Zabbix 监控对象(使用默认值)
6
- def create(data)
7
- log "[DEBUG] 调用 #{method_name}.create,参数: #{data.inspect}"
8
-
9
- params = default_options.merge(data)
10
- result = @client.api_request(method: "#{method_name}.create", params: params)
11
- parse_keys result
12
- end
13
-
14
- # 使用 API 更新 Zabbix 监控对象
15
- def update(data, force = false)
16
- log "[DEBUG] 调用 #{method_name}.update,参数: #{data.inspect}"
17
-
18
- dump = {}
19
- 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
21
- end
22
- if hash_equals?(dump, data) && !force
23
- log "[DEBUG] 系统以有数据 #{dump} 和 待更新的数据 #{data} 相同,跳过本次更新"
24
- data[key.to_sym].to_i
25
- else
26
- result = @client.api_request(method: "#{method_name}.update", params: data)
27
- parse_keys result
28
- end
29
- end
30
-
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}"
53
-
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
61
- end
62
-
63
- # 使用 API 创建或更新 Zabbix 监控对象
64
- def create_or_update(data)
65
- log "[DEBUG] 调用 #{method_name}.create_or_update,参数: #{data.inspect}"
66
-
67
- id = get_id(identify.to_sym => data[identify.to_sym])
68
- id ? update(data.merge(key.to_sym => id.to_s)) : create(data)
69
- end
70
-
71
- # 使用 API 基于 key 打印 Zabbix 监控对象详情
72
- def dump_by_id(data)
73
- log "[DEBUG] 调用 #{method_name}.dump_by_id,参数: #{data.inspect}"
74
-
75
- get_raw(
76
- {
77
- filter: {
78
- key.to_sym => data[key.to_sym]
79
- },
80
- output: "extend"
81
- }
82
- )
83
- end
84
-
85
- # 使用 API 基于提供的数据查询 Zabbix 监控对象 id
86
- def get_id(data)
87
- log "[DEBUG] 调用 #{method_name}.get_id,参数: #{data.inspect}"
88
-
89
- data = symbolize_keys(data) if data.key?(identify)
90
- name = data[identify.to_sym]
91
- raise ZbxError, "在调用 get_id 时未提供 identify #{identify}" if name.nil?
92
-
93
- # 输出信息截取 key identify
94
- result = get_raw(
95
- {
96
- filter: data,
97
- output: [key, identify]
98
- }
99
- )
100
-
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
115
- end
116
-
117
- # 使用 API 基于提供的数据查询 Zabbix 监控对象 id
118
- def get_key_ids(data)
119
- log "[DEBUG] 调用 #{method_name}.get_key_ids,参数: #{data.inspect}"
120
-
121
- ids = []
122
- [data].flatten.each do |item|
123
- if (id = get_id(item))
124
- ids << { key.to_sym => id }
125
- end
126
- 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] } }
154
- end
155
-
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
163
- end
164
-
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
- }
176
- )
177
- end
178
-
179
- # 使用 API 查询 Zabbix 监控对象的原始数据
180
- def get_raw(data)
181
- @client.api_request(
182
- method: "#{method_name}.get",
183
- params: data
184
- )
185
- end
186
-
187
- # 使用 API 查询 Zabbix 监控对象的原始数据
188
- def request_raw(method, data)
189
- @client.api_request(
190
- method: method,
191
- params: data
192
- )
193
- end
194
- end
195
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ZabbixManager
4
- class Drules < Basic
5
- # 用于通过 Zabbix API 与 Drules 交互的方法名称
6
- def method_name
7
- "drule"
8
- end
9
-
10
- # 用于通过 Zabbix API 标识特定 Drule 对象的 id 字段名称
11
- def identify
12
- "name"
13
- end
14
-
15
- # 创建 Drule 对象时使用的默认选项
16
- def default_options
17
- {
18
- name: nil,
19
- iprange: nil,
20
- delay: 3600,
21
- status: 0
22
- }
23
- 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
- end
41
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ZabbixManager
4
- class HostGroups < Basic
5
- # 用于通过 Zabbix API 与 HostGroups 交互的方法名称
6
- def method_name
7
- "hostgroup"
8
- end
9
-
10
- # 用于通过 Zabbix API 标识特定 HostGroup 对象的 id 字段名称
11
- def identify
12
- "name"
13
- end
14
-
15
- # HostGroup 对象通过 Zabbix API 使用的 key 字段名称
16
- def key
17
- "groupid"
18
- end
19
- end
20
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ZabbixManager
4
- class HostInterfaces < Basic
5
- # 用于通过 Zabbix API 与 HostInterfaces 交互的方法名称
6
- def method_name
7
- "hostinterface"
8
- end
9
-
10
- # 用于通过 Zabbix API 标识特定 HostInterface 对象的 id 字段名称
11
- def identify
12
- "hostids"
13
- end
14
-
15
- # HostInterface 对象通过 Zabbix API 使用的 key 字段名称
16
- def key
17
- "interfaceid"
18
- end
19
-
20
- # 通过 Zabbix API 基于提供的 hostid 获取 Zabbix interface 的 id
21
- # @note 基于 hostid 查询关联的 Interfaceid
22
- def get_interfaceid(hostid)
23
- result = get_raw({ output: key, identify.to_sym => hostid })
24
-
25
- # 如果查询结果不为空,且第一个元素不为空,则继续获取 {interfaceid} 并转换为整数
26
- result&.[](0)&.[](key)&.to_i
27
- end
28
- end
29
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ZabbixManager
4
- class HttpTests < Basic
5
- # 用于通过 Zabbix API 与 HttpTests 交互的方法名称
6
- def method_name
7
- "httptest"
8
- end
9
-
10
- # 用于通过 Zabbix API 标识特定 HttpTest 对象的 id 字段名称
11
- def identify
12
- "name"
13
- end
14
-
15
- # 通过 Zabbix API 创建 HttpTest 对象时使用的默认选项
16
- def default_options
17
- {
18
- hostid: nil,
19
- name: nil,
20
- steps: []
21
- }
22
- end
23
-
24
- # 通过 Zabbix API 获取或创建 HttpTest 对象
25
- def get_or_create(data)
26
- log "[DEBUG] 使用参数调用 get_or_create: #{data.inspect}"
27
-
28
- unless (id = get_id(name: data[:name], hostid: data[:hostid]))
29
- id = create(data)
30
- end
31
- id
32
- end
33
-
34
- # 通过 Zabbix API 创建或更新 HttpTest 对象
35
- def create_or_update(data)
36
- httptestid = get_id(name: data[:name], hostid: data[:hostid])
37
- httptestid ? update(data.merge(httptestid: httptestid)) : create(data)
38
- end
39
- end
40
- end
@@ -1,79 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ZabbixManager
4
- class Mediatypes < Basic
5
- # 与 Zabbix API 交互的媒体类型方法名称
6
- def method_name
7
- "mediatype"
8
- end
9
-
10
- # 识别特定媒体类型对象的 id 字段名称
11
- def identify
12
- "name"
13
- end
14
-
15
- # 默认选项,用于通过 Zabbix API 创建媒体类型对象
16
- def default_options
17
- {
18
- name: "", # 媒体类型名称
19
- description: "", # 描述
20
- type: 0, # 0 - 电子邮件,1 - 外部脚本,2 - 短信,3 - Jabber,100 - EzTexting
21
- smtp_server: "",
22
- smtp_helo: "",
23
- smtp_email: "", # Zabbix 服务器的电子邮件地址
24
- exec_path: "", # 外部脚本的名称
25
- gsm_modem: "", # GSM modem 的串口设备名称
26
- username: "", # Zabbix 服务器使用的 Jabber 用户名
27
- passwd: "" # Zabbix 服务器使用的 Jabber 密码
28
- }
29
- end
30
-
31
- # 使用 API 更新媒体类型对象
32
- def update(data, force = false)
33
- log "[DEBUG] 调用 update 方法,参数: #{data.inspect}"
34
- if data[key.to_sym].nil?
35
- data[key.to_sym] = get_id(data)
36
- log "[DEBUG] 用 ID 丰富数据: #{data.inspect}"
37
- end
38
- dump = {}
39
- dump_by_id(key.to_sym => data[key.to_sym]).each do |item|
40
- dump = symbolize_keys(item) if item[key].to_i == data[key.to_sym].to_i
41
- end
42
- if hash_equals?(dump, data) && !force
43
- log "[DEBUG] 键 #{dump} 和 #{data} 相等,跳过更新"
44
- data[key.to_sym].to_i
45
- else
46
- data_update = [data]
47
- result = @client.api_request(method: "#{method_name}.update", params: data_update)
48
- parse_keys result
49
- end
50
- end
51
-
52
- # 从 API 获取媒体类型对象的 id
53
- def get_id(data)
54
- log "[DEBUG] 调用 get_id 方法,参数: #{data.inspect}"
55
- data = symbolize_keys(data) if data.key?(identify)
56
- name = data[identify.to_sym]
57
- raise ZbxError, "未提供 #{identify} 参数,#{data} (#{method_name})" if name.nil?
58
-
59
- result = @client.api_request(
60
- method: "#{method_name}.get",
61
- params: {
62
- filter: { name: name },
63
- output: [key, identify]
64
- }
65
- )
66
- id = nil
67
- result.each { |item| id = item[key].to_i if item[identify] == data[identify.to_sym] }
68
- id
69
- end
70
-
71
- # 创建或更新媒体类型对象
72
- def create_or_update(data)
73
- log "[DEBUG] 调用 create_or_update 方法,参数: #{data.inspect}"
74
-
75
- id = get_id(identify.to_sym => data[identify.to_sym])
76
- id ? update(data.merge(key.to_sym => id.to_s)) : create(data)
77
- end
78
- end
79
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ZabbixManager
4
- class Triggers < Basic
5
- # 使用 Zabbix API 创建或更新触发器对象
6
- def create_or_update(data)
7
- log "[DEBUG] 调用 create_or_update 方法,参数: #{data.inspect}"
8
- get_or_create(data)
9
- end
10
- end
11
- end
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ZabbixManager
4
- class Usergroups < Basic
5
- # 用于通过 Zabbix API 与 Usergroups 交互的方法名称
6
- def method_name
7
- "usergroup"
8
- end
9
-
10
- # 用于 Usergroup 对象通过 Zabbix API 的键字段名称
11
- def key
12
- "usrgrpid"
13
- end
14
-
15
- # 用于通过 Zabbix API 识别特定 Usergroup 对象的 id 字段名称
16
- def identify
17
- "name"
18
- end
19
-
20
- # 使用 Zabbix API 设置用户组的权限
21
- def permissions(data)
22
- permission = data[:permission] || 2
23
- result = @client.api_request(
24
- method: "usergroup.update",
25
- params: {
26
- usrgrpid: data[:usrgrpid],
27
- rights: data[:hostgroupids].map { |t| { permission: permission, id: t } }
28
- }
29
- )
30
- result ? result["usrgrpids"][0].to_i : nil
31
- end
32
-
33
- # 使用 Zabbix API 将用户添加到用户组
34
- def add_user(data)
35
- update_users(data)
36
- end
37
-
38
- # 使用 Zabbix API 更新用户组中的用户
39
- def update_users(data)
40
- user_groups = data[:usrgrpids].map do |t|
41
- {
42
- usrgrpid: t,
43
- userids: data[:userids]
44
- }
45
- end
46
- result = @client.api_request(
47
- method: "usergroup.update",
48
- params: user_groups
49
- )
50
- result ? result["usrgrpids"][0].to_i : nil
51
- end
52
- end
53
- end
@@ -1,136 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ZabbixManager
4
- class Usermacros < Basic
5
- # 用于通过 Zabbix API 识别特定 User 宏对象的 id 字段名称
6
- def identify
7
- "macro"
8
- end
9
-
10
- # 用于通过 Zabbix API 与 User 宏交互的方法名称
11
- def method_name
12
- "usermacro"
13
- end
14
-
15
- # 通过 Zabbix API 根据提供的数据获取 User 宏对象的 id
16
- def get_id(data)
17
- log "[DEBUG] Call get_id with parameters: #{data.inspect}"
18
-
19
- data = symbolize_keys(data) if data.key?(identify)
20
- name = data[identify.to_sym]
21
- raise ZbxError, "#{identify} not supplied in call to get_id" if name.nil?
22
-
23
- result = request(data, "usermacro.get", "hostmacroid")
24
-
25
- !result&.empty? && result[0].key?("hostmacroid") ? result[0]["hostmacroid"].to_i : nil
26
- end
27
-
28
- # 通过 Zabbix API 根据提供的数据获取 Global 宏对象的 id
29
- def get_id_global(data)
30
- log "[DEBUG] Call get_id_global with parameters: #{data.inspect}"
31
-
32
- data = symbolize_keys(data) if data.key?(identify)
33
- name = data[identify.to_sym]
34
- raise ZbxError, "#{identify} not supplied in call to get_id_global" if name.nil?
35
-
36
- result = request(data, "usermacro.get", "globalmacroid")
37
-
38
- !result&.empty? && result[0].key?("globalmacroid") ? result[0]["globalmacroid"].to_i : nil
39
- end
40
-
41
- # 通过 Zabbix API 获取完整/扩展的 User 宏数据
42
- def get_full_data(data)
43
- log "[DEBUG] Call get_full_data with parameters: #{data.inspect}"
44
-
45
- request(data, "usermacro.get", "hostmacroid")
46
- end
47
-
48
- # 通过 Zabbix API 获取完整/扩展的 Global 宏数据
49
- def get_full_data_global(data)
50
- log "[DEBUG] Call get_full_data_global with parameters: #{data.inspect}"
51
-
52
- request(data, "usermacro.get", "globalmacroid")
53
- end
54
-
55
- # 通过 Zabbix API 创建新的 User 宏对象(使用默认值)
56
- def create(data)
57
- request(data, "usermacro.create", "hostmacroids")
58
- end
59
-
60
- # 通过 Zabbix API 创建新的 Global 宏对象(使用默认值)
61
- def create_global(data)
62
- request(data, "usermacro.createglobal", "globalmacroids")
63
- end
64
-
65
- # 通过 Zabbix API 删除 User 宏对象
66
- def delete(data)
67
- data_delete = [data]
68
- request(data_delete, "usermacro.delete", "hostmacroids")
69
- end
70
-
71
- # 通过 Zabbix API 删除 Global 宏对象
72
- def delete_global(data)
73
- data_delete = [data]
74
- request(data_delete, "usermacro.deleteglobal", "globalmacroids")
75
- end
76
-
77
- # 通过 Zabbix API 更新 User 宏对象
78
- def update(data)
79
- request(data, "usermacro.update", "hostmacroids")
80
- end
81
-
82
- # 通过 Zabbix API 更新 Global 宏对象
83
- def update_global(data)
84
- request(data, "usermacro.updateglobal", "globalmacroids")
85
- end
86
-
87
- # 通过 Zabbix API 获取或创建 User 宏对象
88
- def get_or_create(data)
89
- log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
90
-
91
- unless (id = get_id(macro: data[:macro], hostid: data[:hostid]))
92
- id = create(data)
93
- end
94
- id
95
- end
96
-
97
- # 通过 Zabbix API 获取或创建 Global 宏对象
98
- def get_or_create_global(data)
99
- log "[DEBUG] Call get_or_create_global with parameters: #{data.inspect}"
100
-
101
- unless (id = get_id_global(macro: data[:macro], hostid: data[:hostid]))
102
- id = create_global(data)
103
- end
104
- id
105
- end
106
-
107
- # 通过 Zabbix API 创建或更新 User 宏对象
108
- def create_or_update(data)
109
- hostmacroid = get_id(macro: data[:macro], hostid: data[:hostid])
110
- hostmacroid ? update(data.merge(hostmacroid: hostmacroid)) : create(data)
111
- end
112
-
113
- # 通过 Zabbix API 创建或更新 Global 宏对象
114
- def create_or_update_global(data)
115
- globalmacroid = get_id_global(macro: data[:macro], hostid: data[:hostid])
116
- globalmacroid ? update_global(data.merge(globalmacroid: globalmacroid)) : create_global(data)
117
- end
118
-
119
- private
120
-
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 })
126
- else
127
- @client.api_request(method: method, params: { filter: data })
128
- end
129
- else
130
- result = @client.api_request(method: method, params: data)
131
-
132
- result.key?(result_key) && !result[result_key].empty? ? result[result_key][0].to_i : nil
133
- end
134
- end
135
- end
136
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ZabbixManager
4
- class ValueMaps < Basic
5
- # 用于通过 Zabbix API 与 ValueMaps 交互的方法名称
6
- def method_name
7
- "valuemap"
8
- end
9
-
10
- # 用于通过 Zabbix API 识别特定 ValueMap 对象的 id 字段名称
11
- def identify
12
- "name"
13
- end
14
-
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)
30
- end
31
- end
32
- end