zabbix_manager 5.1.4 → 5.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/zabbix_manager/classes/graphs.rb +4 -4
- data/lib/zabbix_manager/classes/hosts.rb +22 -3
- data/lib/zabbix_manager/classes/httptests.rb +1 -1
- data/lib/zabbix_manager/classes/items.rb +8 -11
- data/lib/zabbix_manager/client.rb +3 -2
- data/lib/zabbix_manager/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 72554dfff6fd4d60ac8be48bc766c9367e4b07f9fa2e3df7500cb21b49a6b033
|
4
|
+
data.tar.gz: 01bea1ff565779f4ce5dab0b9a53d1832e80f9581b58dcc2e9bc943e83da9a46
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28bfea0b7a7bd6d99d394a0168a3399275af50fe139609141d03a996e6f488f484e8601529a58bf8710c492edd401514d66771e3b1411a53500898a05e8b6974
|
7
|
+
data.tar.gz: a25a5c306cffa53d2b601c6f281e5ab5afbfb72fd8cef106683668f7d4b907b047b5d4ab76fcc2aa1e62b9df979ba5129628443c53601effe0de95facb69dd90
|
@@ -38,11 +38,11 @@ class ZabbixManager
|
|
38
38
|
)
|
39
39
|
|
40
40
|
result.filter_map do |graph|
|
41
|
-
|
42
|
-
name
|
43
|
-
filter
|
41
|
+
graphid = graph["graphid"]
|
42
|
+
name = graph["name"]
|
43
|
+
filter = data[:filter]
|
44
44
|
|
45
|
-
|
45
|
+
graphid if filter.nil? || name.match?(/#{filter}/)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
@@ -64,17 +64,29 @@ class ZabbixManager
|
|
64
64
|
|
65
65
|
# 使用 Zabbix API 创建或更新 Zabbix 对象
|
66
66
|
def create_or_update(data)
|
67
|
+
# 输出调试日志,显示方法调用和参数信息
|
67
68
|
log "[DEBUG] 调用 #{method_name}.create_or_update 方法,参数: #{data.inspect}"
|
68
69
|
|
70
|
+
# 获取 Zabbix 对象的 ID
|
69
71
|
hostid = get_id(identify.to_sym => data[identify.to_sym])
|
72
|
+
# 如果不存在对应的对象ID,则创建新对象
|
70
73
|
return create(data) unless hostid
|
71
74
|
|
75
|
+
# 获取对象的接口 ID
|
72
76
|
interface_id = get_interfaceid(hostid)
|
77
|
+
# 如果接口 ID 不存在,抛出异常
|
73
78
|
raise ZbxError, "#{data.inspect} get_interfaceid 查无记录" unless interface_id
|
74
79
|
|
75
|
-
|
80
|
+
# 复制数据以避免修改原始数据
|
81
|
+
dump_data = data.dup
|
82
|
+
|
83
|
+
# 从数据中提取并删除 interfaces,并合并接口 ID
|
76
84
|
interfaces = dump_data.delete(:interfaces)&.merge(interfaceid: interface_id)
|
77
|
-
|
85
|
+
|
86
|
+
# 构建参数,包括 interfaces 和 Zabbix 对象的键值对
|
87
|
+
params = dump_data.merge(interfaces: interfaces).merge(key.to_sym => hostid.to_s)
|
88
|
+
|
89
|
+
# 更新对象
|
78
90
|
update(params)
|
79
91
|
end
|
80
92
|
|
@@ -86,7 +98,14 @@ class ZabbixManager
|
|
86
98
|
method: "hostinterface.get",
|
87
99
|
params: { output: "interfaceid", hostids: hostid }
|
88
100
|
)
|
89
|
-
|
101
|
+
|
102
|
+
# 使用 dig 方法获取深层嵌套的值
|
103
|
+
interface_id = result&.dig(0, "interfaceid")&.to_i
|
104
|
+
|
105
|
+
# 如果获取接口 ID 失败,提供更具体的错误信息
|
106
|
+
raise ZbxError, "无法获取 #{hostid} 的接口 ID" if interface_id.nil?
|
107
|
+
|
108
|
+
interface_id
|
90
109
|
end
|
91
110
|
|
92
111
|
# 在 Hosts 中使用 Zabbix API 取消关联/移除模板
|
@@ -23,7 +23,7 @@ class ZabbixManager
|
|
23
23
|
|
24
24
|
# 通过 Zabbix API 获取或创建 HttpTest 对象
|
25
25
|
def get_or_create(data)
|
26
|
-
log "[DEBUG]
|
26
|
+
log "[DEBUG] 使用参数调用 get_or_create: #{data.inspect}"
|
27
27
|
|
28
28
|
unless (id = get_id(name: data[:name], hostid: data[:hostid]))
|
29
29
|
id = create(data)
|
@@ -52,7 +52,7 @@ class ZabbixManager
|
|
52
52
|
|
53
53
|
# 通过 Zabbix API 获取或创建 Item 对象
|
54
54
|
def get_or_create(data)
|
55
|
-
log "[DEBUG]
|
55
|
+
log "[DEBUG] 调用 #{method_name}.get_or_create 方法,参数: #{data.inspect}"
|
56
56
|
|
57
57
|
if (id = get_id(name: data[:name], hostid: data[:hostid]))
|
58
58
|
id
|
@@ -80,19 +80,16 @@ class ZabbixManager
|
|
80
80
|
result = get_raw(
|
81
81
|
{
|
82
82
|
output: "extend",
|
83
|
-
hostids: hostid,
|
84
|
-
search: {
|
85
|
-
name: iface
|
86
|
-
}
|
83
|
+
hostids: [hostid],
|
84
|
+
search: { name: iface }
|
87
85
|
}
|
88
|
-
)
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
}
|
86
|
+
)
|
87
|
+
|
88
|
+
# 过滤结果,只保留符合正则表达式的项
|
89
|
+
filtered_result = result.select { |item| item["snmp_oid"].match?(/(1.3.6.1.2.1.31.1.1.1.(6|10|15)|1.3.6.1.2.1.2.2.1.8)./) }
|
93
90
|
|
94
91
|
# 如果结果为空,则返回 nil;否则,返回排序后的结果
|
95
|
-
|
92
|
+
filtered_result.empty? ? nil : filtered_result.sort_by { |item| item["key_"] }
|
96
93
|
end
|
97
94
|
end
|
98
95
|
end
|
@@ -60,7 +60,7 @@ class ZabbixManager
|
|
60
60
|
end
|
61
61
|
|
62
62
|
# 检查 Zabbix API 版本是否受支持
|
63
|
-
unless api_version.match?(/^
|
63
|
+
unless api_version.match?(/^[4-7]\.\d+\.\d+$/)
|
64
64
|
message = "Zabbix API版本:#{api_version} 不受此版本的 zabbix_manager 支持"
|
65
65
|
if @options[:ignore_version]
|
66
66
|
log "[WARNING] #{message}"
|
@@ -151,10 +151,12 @@ class ZabbixManager
|
|
151
151
|
if result["error"]
|
152
152
|
# 构建错误消息,包括服务器返回的错误信息和请求的详细信息
|
153
153
|
msg = <<~MOJO
|
154
|
+
|
154
155
|
---------------------------------------------------------------
|
155
156
|
Server answer API error: #{JSON.pretty_unparse(result["error"])}
|
156
157
|
on request: #{pretty_body(body)}
|
157
158
|
---------------------------------------------------------------
|
159
|
+
|
158
160
|
MOJO
|
159
161
|
|
160
162
|
# 抛出自定义异常 ZbxError,并传递错误消息和完整的响应结果
|
@@ -182,7 +184,6 @@ class ZabbixManager
|
|
182
184
|
# 通用的 API 调用发起方法
|
183
185
|
def api_request(body)
|
184
186
|
# 调用之前定义的 json_payload 方法,将请求信息转换为 JSON 字符串
|
185
|
-
# 然后调用之前定义的 _request 方法,发起 API 请求并解析响应结果
|
186
187
|
_request json_payload(body)
|
187
188
|
end
|
188
189
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zabbix_manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.1.
|
4
|
+
version: 5.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- WENWU YAN
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-11-
|
11
|
+
date: 2023-11-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|