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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +55 -9
- data/LICENSE +1 -1
- data/README.md +241 -24
- data/lib/zabbix_manager/classes/actions.rb +19 -17
- data/lib/zabbix_manager/classes/applications.rb +11 -22
- data/lib/zabbix_manager/classes/configurations.rb +20 -10
- data/lib/zabbix_manager/classes/discovery_rules.rb +23 -0
- data/lib/zabbix_manager/classes/errors.rb +18 -27
- data/lib/zabbix_manager/classes/events.rb +8 -3
- data/lib/zabbix_manager/classes/graphs.rb +48 -37
- data/lib/zabbix_manager/classes/host_groups.rb +64 -0
- data/lib/zabbix_manager/classes/host_interfaces.rb +261 -0
- data/lib/zabbix_manager/classes/hosts.rb +232 -76
- data/lib/zabbix_manager/classes/http_tests.rb +32 -0
- data/lib/zabbix_manager/classes/items.rb +206 -72
- data/lib/zabbix_manager/classes/maintenance.rb +8 -3
- data/lib/zabbix_manager/classes/media_types.rb +18 -0
- data/lib/zabbix_manager/classes/problems.rb +51 -62
- data/lib/zabbix_manager/classes/proxies.rb +45 -14
- data/lib/zabbix_manager/classes/proxy_groups.rb +16 -0
- data/lib/zabbix_manager/classes/roles.rb +46 -41
- data/lib/zabbix_manager/classes/screens.rb +36 -24
- data/lib/zabbix_manager/classes/scripts.rb +16 -12
- data/lib/zabbix_manager/classes/server.rb +8 -1
- data/lib/zabbix_manager/classes/templates.rb +26 -51
- data/lib/zabbix_manager/classes/triggers.rb +251 -67
- data/lib/zabbix_manager/classes/user_groups.rb +63 -0
- data/lib/zabbix_manager/classes/user_macros.rb +110 -0
- data/lib/zabbix_manager/classes/users.rb +16 -23
- data/lib/zabbix_manager/classes/value_maps.rb +52 -0
- data/lib/zabbix_manager/client.rb +183 -137
- data/lib/zabbix_manager/configuration.rb +107 -0
- data/lib/zabbix_manager/http_transport.rb +240 -0
- data/lib/zabbix_manager/log_sanitizer.rb +58 -0
- data/lib/zabbix_manager/monitoring/device.rb +393 -0
- data/lib/zabbix_manager/monitoring/expressions.rb +36 -0
- data/lib/zabbix_manager/monitoring/line.rb +175 -0
- data/lib/zabbix_manager/monitoring/line_items.rb +110 -0
- data/lib/zabbix_manager/monitoring/line_lifecycle.rb +169 -0
- data/lib/zabbix_manager/monitoring/line_plan.rb +113 -0
- data/lib/zabbix_manager/monitoring/thresholds.rb +182 -0
- data/lib/zabbix_manager/monitoring/traffic_items.rb +132 -0
- data/lib/zabbix_manager/monitoring/validation.rb +92 -0
- data/lib/zabbix_manager/monitoring.rb +265 -0
- data/lib/zabbix_manager/resource.rb +235 -0
- data/lib/zabbix_manager/traffic.rb +238 -0
- data/lib/zabbix_manager/version.rb +1 -1
- data/lib/zabbix_manager.rb +110 -145
- data/zabbix_manager.gemspec +12 -15
- metadata +67 -30
- data/lib/zabbix_manager/basic/basic_alias.rb +0 -20
- data/lib/zabbix_manager/basic/basic_func.rb +0 -84
- data/lib/zabbix_manager/basic/basic_init.rb +0 -35
- data/lib/zabbix_manager/basic/basic_logic.rb +0 -195
- data/lib/zabbix_manager/classes/drules.rb +0 -41
- data/lib/zabbix_manager/classes/hostgroups.rb +0 -20
- data/lib/zabbix_manager/classes/hostinterfaces.rb +0 -29
- data/lib/zabbix_manager/classes/httptests.rb +0 -40
- data/lib/zabbix_manager/classes/mediatypes.rb +0 -79
- data/lib/zabbix_manager/classes/unusable.rb +0 -11
- data/lib/zabbix_manager/classes/usergroups.rb +0 -53
- data/lib/zabbix_manager/classes/usermacros.rb +0 -136
- 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,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
|