zabbix_manager 5.1.0 → 5.1.1.pre.alpha1
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 +10 -2
- data/{LICENSE.txt → LICENSE} +6 -6
- data/README.md +3 -2
- data/lib/zabbix_manager/basic/basic_alias.rb +6 -8
- data/lib/zabbix_manager/basic/basic_func.rb +17 -18
- data/lib/zabbix_manager/basic/basic_init.rb +21 -18
- data/lib/zabbix_manager/basic/basic_logic.rb +143 -139
- data/lib/zabbix_manager/classes/actions.rb +1 -1
- data/lib/zabbix_manager/classes/applications.rb +8 -7
- data/lib/zabbix_manager/classes/configurations.rb +2 -2
- data/lib/zabbix_manager/classes/drules.rb +6 -6
- data/lib/zabbix_manager/classes/errors.rb +1 -1
- data/lib/zabbix_manager/classes/graphs.rb +6 -6
- data/lib/zabbix_manager/classes/hostgroups.rb +0 -34
- data/lib/zabbix_manager/classes/hostinterfaces.rb +26 -0
- data/lib/zabbix_manager/classes/hosts.rb +35 -153
- data/lib/zabbix_manager/classes/httptests.rb +3 -3
- data/lib/zabbix_manager/classes/items.rb +51 -49
- data/lib/zabbix_manager/classes/mediatypes.rb +5 -5
- data/lib/zabbix_manager/classes/problems.rb +43 -61
- data/lib/zabbix_manager/classes/proxies.rb +4 -24
- data/lib/zabbix_manager/classes/roles.rb +7 -7
- data/lib/zabbix_manager/classes/screens.rb +3 -3
- data/lib/zabbix_manager/classes/templates.rb +17 -33
- data/lib/zabbix_manager/classes/triggers.rb +31 -73
- data/lib/zabbix_manager/classes/usergroups.rb +6 -6
- data/lib/zabbix_manager/classes/usermacros.rb +38 -37
- data/lib/zabbix_manager/classes/users.rb +4 -4
- data/lib/zabbix_manager/classes/valuemaps.rb +8 -7
- data/lib/zabbix_manager/client.rb +70 -45
- data/lib/zabbix_manager/version.rb +2 -1
- data/lib/zabbix_manager.rb +18 -38
- data/zabbix_manager.gemspec +7 -11
- metadata +22 -66
- data/CODE_OF_CONDUCT.md +0 -84
- data/lib/zabbix_manager/basic/basic_extend.rb +0 -40
@@ -19,7 +19,7 @@ class ZabbixManager
|
|
19
19
|
# Get full/extended Action object data from API
|
20
20
|
#
|
21
21
|
# @param data [Hash] Should include object's id field name (identify) and id value
|
22
|
-
# @raise [
|
22
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
23
23
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
24
24
|
# @return [Hash]
|
25
25
|
def get_full_data(data)
|
@@ -19,24 +19,25 @@ class ZabbixManager
|
|
19
19
|
# Get or Create Application object using Zabbix API
|
20
20
|
#
|
21
21
|
# @param data [Hash] Needs to include name and hostid to properly identify Applications via Zabbix API
|
22
|
-
# @raise [
|
22
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
23
23
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
24
|
-
# @return [Integer] Zabbix object id
|
24
|
+
# @return [Integer, TrueClass, FalseClass] Zabbix object id
|
25
25
|
def get_or_create(data)
|
26
26
|
log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
|
27
27
|
|
28
|
-
|
29
|
-
id
|
28
|
+
if (id = get_id(name: data[:name], hostid: data[:hostid]))
|
29
|
+
id
|
30
|
+
else
|
31
|
+
create(data)
|
30
32
|
end
|
31
|
-
id
|
32
33
|
end
|
33
34
|
|
34
35
|
# Create or update Application object using Zabbix API
|
35
36
|
#
|
36
37
|
# @param data [Hash] Needs to include name and hostid to properly identify Applications via Zabbix API
|
37
|
-
# @raise [
|
38
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
38
39
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
39
|
-
# @return [Integer] Zabbix object id
|
40
|
+
# @return [Integer,TrueClass, FalseClass] Zabbix object id
|
40
41
|
def create_or_update(data)
|
41
42
|
applicationid = get_id(name: data[:name], hostid: data[:hostid])
|
42
43
|
applicationid ? update(data.merge(applicationid: applicationid)) : create(data)
|
@@ -24,7 +24,7 @@ class ZabbixManager
|
|
24
24
|
# Export configuration data using Zabbix API
|
25
25
|
#
|
26
26
|
# @param data [Hash]
|
27
|
-
# @raise [
|
27
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
28
28
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
29
29
|
# @return [Hash]
|
30
30
|
def export(data)
|
@@ -34,7 +34,7 @@ class ZabbixManager
|
|
34
34
|
# Import configuration data using Zabbix API
|
35
35
|
#
|
36
36
|
# @param data [Hash]
|
37
|
-
# @raise [
|
37
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
38
38
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
39
39
|
# @return [Hash]
|
40
40
|
def import(data)
|
@@ -21,17 +21,17 @@ class ZabbixManager
|
|
21
21
|
# @return [Hash]
|
22
22
|
def default_options
|
23
23
|
{
|
24
|
-
name:
|
24
|
+
name: nil,
|
25
25
|
iprange: nil,
|
26
|
-
delay:
|
27
|
-
status:
|
26
|
+
delay: 3600,
|
27
|
+
status: 0
|
28
28
|
}
|
29
29
|
end
|
30
30
|
|
31
31
|
# Get or Create Drule object using Zabbix API
|
32
32
|
#
|
33
33
|
# @param data [Hash] Needs to include name to properly identify Drule via Zabbix API
|
34
|
-
# @raise [
|
34
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
35
35
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
36
36
|
# @return [Integer] Zabbix object id
|
37
37
|
def get_or_create(data)
|
@@ -46,9 +46,9 @@ class ZabbixManager
|
|
46
46
|
# Create or update Drule object using Zabbix API
|
47
47
|
#
|
48
48
|
# @param data [Hash] Needs to include name to properly identify Drules via Zabbix API
|
49
|
-
# @raise [
|
49
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
50
50
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
51
|
-
# @return [Integer] Zabbix object id
|
51
|
+
# @return [Integer, TrueClass, FalseClass] Zabbix object id
|
52
52
|
def create_or_update(data)
|
53
53
|
druleid = get_id(name: data[:name])
|
54
54
|
druleid ? update(data.merge(druleid: druleid)) : create(data)
|
@@ -19,7 +19,7 @@ class ZabbixManager
|
|
19
19
|
# Get full/extended Graph data from Zabbix API
|
20
20
|
#
|
21
21
|
# @param data [Hash] Should include object's id field name (identify) and id value
|
22
|
-
# @raise [
|
22
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
23
23
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
24
24
|
# @return [Hash]
|
25
25
|
def get_full_data(data)
|
@@ -39,7 +39,7 @@ class ZabbixManager
|
|
39
39
|
# Get Graph ids for Host from Zabbix API
|
40
40
|
#
|
41
41
|
# @param data [Hash] Should include host value to query for matching graphs
|
42
|
-
# @raise [
|
42
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
43
43
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
44
44
|
# @return [Array] Returns array of Graph ids
|
45
45
|
def get_ids_by_host(data)
|
@@ -65,7 +65,7 @@ class ZabbixManager
|
|
65
65
|
# Get Graph Item object using Zabbix API
|
66
66
|
#
|
67
67
|
# @param data [Hash] Needs to include graphids to properly identify Graph Items via Zabbix API
|
68
|
-
# @raise [
|
68
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
69
69
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
70
70
|
# @return [Hash]
|
71
71
|
def get_items(data)
|
@@ -81,7 +81,7 @@ class ZabbixManager
|
|
81
81
|
# Get or Create Graph object using Zabbix API
|
82
82
|
#
|
83
83
|
# @param data [Hash] Needs to include name and templateid to properly identify Graphs via Zabbix API
|
84
|
-
# @raise [
|
84
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
85
85
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
86
86
|
# @return [Integer] Zabbix object id
|
87
87
|
def get_or_create(data)
|
@@ -97,9 +97,9 @@ class ZabbixManager
|
|
97
97
|
# Create or update Graph object using Zabbix API
|
98
98
|
#
|
99
99
|
# @param data [Hash] Needs to include name and templateid to properly identify Graphs via Zabbix API
|
100
|
-
# @raise [
|
100
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
101
101
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
102
|
-
# @return [Integer] Zabbix object id
|
102
|
+
# @return [Integer, TrueClass, FalseClass] Zabbix object id
|
103
103
|
def create_or_update(data)
|
104
104
|
graphid = get_id(name: data[:name], templateid: data[:templateid])
|
105
105
|
graphid ? _update(data.merge(graphid: graphid)) : create(data)
|
@@ -22,39 +22,5 @@ class ZabbixManager
|
|
22
22
|
def key
|
23
23
|
"groupid"
|
24
24
|
end
|
25
|
-
|
26
|
-
# 新增 get_hostgroup_ids 方法,使用列表 flatten 功能拉平属组对象
|
27
|
-
def get_hostgroup_ids(data)
|
28
|
-
result = @client.api_request(
|
29
|
-
method: "hostgroup.get",
|
30
|
-
params: {
|
31
|
-
output: "extend",
|
32
|
-
filter: {
|
33
|
-
name: [data].flatten
|
34
|
-
}
|
35
|
-
}
|
36
|
-
).map { |item| { groupid: item["groupid"] } }
|
37
|
-
|
38
|
-
# 检查是是否存在
|
39
|
-
result.empty? ? nil : result.flatten
|
40
|
-
end
|
41
|
-
|
42
|
-
# 新增 get_or_create_hostgroups 方法,查询或创建新的对象
|
43
|
-
def get_or_create_hostgroups(data)
|
44
|
-
# 是否存在设备属组,不存在则新建
|
45
|
-
[data].flatten.each do |item|
|
46
|
-
result = get_hostgroup_ids(item)
|
47
|
-
if result.nil?
|
48
|
-
@client.api_request(
|
49
|
-
method: "hostgroup.create",
|
50
|
-
params: {
|
51
|
-
name: item
|
52
|
-
}
|
53
|
-
)
|
54
|
-
end
|
55
|
-
rescue StandardError => e
|
56
|
-
ap e
|
57
|
-
end
|
58
|
-
end
|
59
25
|
end
|
60
26
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ZabbixManager
|
4
|
+
class HostInterfaces < Basic
|
5
|
+
# The method name used for interacting with HostInterfaces via Zabbix API
|
6
|
+
#
|
7
|
+
# @return [String]
|
8
|
+
def method_name
|
9
|
+
"hostinterface"
|
10
|
+
end
|
11
|
+
|
12
|
+
# The id field name used for identifying specific HostInterface objects via Zabbix API
|
13
|
+
#
|
14
|
+
# @return [String]
|
15
|
+
def identify
|
16
|
+
"hostids"
|
17
|
+
end
|
18
|
+
|
19
|
+
# The key field name used for HostInterface objects via Zabbix API
|
20
|
+
#
|
21
|
+
# @return [String]
|
22
|
+
def key
|
23
|
+
"interfaceid"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -19,45 +19,46 @@ class ZabbixManager
|
|
19
19
|
# Dump Host object data by key from Zabbix API
|
20
20
|
#
|
21
21
|
# @param data [Hash] Should include desired object's key and value
|
22
|
-
# @raise [
|
22
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
23
23
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
24
24
|
# @return [Hash]
|
25
25
|
def dump_by_id(data)
|
26
26
|
log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
|
27
|
+
|
27
28
|
@client.api_request(
|
28
29
|
method: "host.get",
|
29
30
|
params: {
|
30
|
-
filter:
|
31
|
+
filter: {
|
31
32
|
key.to_sym => data[key.to_sym]
|
32
33
|
},
|
33
|
-
output:
|
34
|
-
|
34
|
+
output: "extend",
|
35
|
+
selectHosts: "shorten"
|
35
36
|
}
|
36
37
|
)
|
37
38
|
end
|
38
39
|
|
39
40
|
# The default options used when creating Host objects via Zabbix API
|
40
|
-
#
|
41
|
+
# @note Create Host 缺省的配置参数
|
41
42
|
# @return [Hash]
|
42
43
|
def default_options
|
43
44
|
{
|
44
|
-
host:
|
45
|
-
interfaces:
|
46
|
-
main:
|
47
|
-
useip:
|
48
|
-
type:
|
49
|
-
ip:
|
50
|
-
dns:
|
51
|
-
port:
|
45
|
+
host: nil,
|
46
|
+
interfaces: {
|
47
|
+
main: 1,
|
48
|
+
useip: 1,
|
49
|
+
type: 2,
|
50
|
+
ip: nil,
|
51
|
+
dns: "",
|
52
|
+
port: 161,
|
52
53
|
details: {
|
53
|
-
version:
|
54
|
-
community: "
|
54
|
+
version: 2,
|
55
|
+
community: "public"
|
55
56
|
}
|
56
57
|
},
|
57
|
-
status:
|
58
|
-
available:
|
59
|
-
groups:
|
60
|
-
proxy_hostid:
|
58
|
+
status: 0,
|
59
|
+
available: 1,
|
60
|
+
groups: [],
|
61
|
+
proxy_hostid: nil,
|
61
62
|
inventory_mode: 1
|
62
63
|
}
|
63
64
|
end
|
@@ -65,156 +66,37 @@ class ZabbixManager
|
|
65
66
|
# Unlink/Remove Templates from Hosts using Zabbix API
|
66
67
|
#
|
67
68
|
# @param data [Hash] Should include hosts_id array and templates_id array
|
68
|
-
# @raise [
|
69
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
69
70
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
70
71
|
# @return [Boolean]
|
71
72
|
def unlink_templates(data)
|
72
73
|
result = @client.api_request(
|
73
74
|
method: "host.massRemove",
|
74
75
|
params: {
|
75
|
-
hostids:
|
76
|
+
hostids: data[:hosts_id],
|
76
77
|
templates: data[:templates_id]
|
77
78
|
}
|
78
79
|
)
|
79
80
|
result.empty? ? false : true
|
80
81
|
end
|
81
82
|
|
82
|
-
#
|
83
|
-
#
|
84
|
-
# @param data [
|
85
|
-
# @raise [
|
83
|
+
# Get Zabbix object ID by name using Zabbix API
|
84
|
+
# @note 基于监控对象索引键(#{identify})查询 #{key}
|
85
|
+
# @param data [String, Array] Needs to include host to properly identify Zabbix Objects via Zabbix API
|
86
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
86
87
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
87
|
-
# @return [
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
method: "hostinterface.get",
|
96
|
-
params: {
|
97
|
-
hostids: hostid
|
98
|
-
}
|
99
|
-
)
|
100
|
-
# 是否为空
|
101
|
-
result.empty? ? nil : result[0]["interfaceid"]
|
102
|
-
end
|
103
|
-
|
104
|
-
# 批量删除主机
|
105
|
-
def mojo_delete(data)
|
106
|
-
hostid = get_id(host: data[:host])
|
107
|
-
log "[DEBUG] Call get_id with parameters: #{hostid.inspect}"
|
108
|
-
|
109
|
-
result = @client.api_request(
|
110
|
-
method: "host.delete",
|
111
|
-
params: [hostid]
|
112
|
-
)
|
113
|
-
|
114
|
-
# 是否为空
|
115
|
-
if result.present?
|
116
|
-
p "成功移除监控主机 #{data.ip}"
|
117
|
-
else
|
118
|
-
p "未能移除监控主机 #{data.ip}"
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
# 测试数据
|
123
|
-
def update_mojo
|
124
|
-
data = {
|
125
|
-
name: "SZX1-16-SW3111111111",
|
126
|
-
groups: [
|
127
|
-
{
|
128
|
-
groupid: 22
|
129
|
-
}
|
130
|
-
],
|
131
|
-
templates: [
|
132
|
-
{
|
133
|
-
templateid: 10_227
|
134
|
-
}
|
135
|
-
],
|
136
|
-
inventory_mode: 1,
|
137
|
-
hostid: 15_951
|
138
|
-
}
|
139
|
-
|
140
|
-
# 请求后端接口
|
141
|
-
@client.api_request(method: "host.update", params: data)
|
142
|
-
end
|
143
|
-
|
144
|
-
# 根据主机名查询 hostid
|
145
|
-
def get_host_id(name)
|
146
|
-
result = @client.api_request(
|
147
|
-
method: "host.get",
|
148
|
-
params: {
|
149
|
-
output: "extend",
|
150
|
-
filter: {
|
151
|
-
host: name
|
152
|
-
}
|
153
|
-
}
|
154
|
-
)
|
155
|
-
|
156
|
-
# 检查是是否存在
|
157
|
-
result.empty? ? nil : result[0]["hostid"]
|
158
|
-
end
|
159
|
-
|
160
|
-
# 根据可见名称查询 hostid
|
161
|
-
def get_hostid_by_name(name)
|
162
|
-
result = @client.api_request(
|
163
|
-
method: "host.get",
|
164
|
-
params: {
|
165
|
-
output: "extend",
|
166
|
-
filter: {
|
167
|
-
name: name
|
168
|
-
}
|
88
|
+
# @return [Array, NilClass] Zabbix object id
|
89
|
+
def get_ids_by_name(data)
|
90
|
+
log "[DEBUG] Call #{method_name}.get_ids_by_name with parameters: #{data.inspect}"
|
91
|
+
|
92
|
+
result = get_raw(
|
93
|
+
{
|
94
|
+
filter: { name: [data].flatten },
|
95
|
+
output: ["#{key}"]
|
169
96
|
}
|
170
97
|
)
|
171
|
-
|
172
|
-
# 检查是是否存在
|
173
|
-
result.empty? ? nil : result[0]["hostid"]
|
98
|
+
result.empty? ? nil : result.map { |i| { "#{key}": i[key] } }
|
174
99
|
end
|
175
100
|
|
176
|
-
# update host index to serail
|
177
|
-
def update_host_to_serial(data)
|
178
|
-
# 检索出监控对象的 hostdid
|
179
|
-
hostid = get_hostid_by_name(host: data[:name])
|
180
|
-
|
181
|
-
if hostid.present?
|
182
|
-
p "已存在监控对象,正在更新 #{data[:name]} 的索引数据 #{data[:host]}"
|
183
|
-
# 数据更新期间不处理模板信息 | TODO 后续需要考虑实现
|
184
|
-
data.delete(:templates)
|
185
|
-
mojo_update("host.update", data.merge(hostid: hostid))
|
186
|
-
else
|
187
|
-
p "未检索到 #{data[:host]} 监控对象"
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
# create_or_update
|
192
|
-
def create_or_update(data)
|
193
|
-
hostid = get_id(host: data[:host])
|
194
|
-
# 此处更新需要拆分为 hosts 和 interfaces 的数据更新
|
195
|
-
if hostid.present?
|
196
|
-
p "已存在监控对象,正在更新 #{data[:host]} 监控数据"
|
197
|
-
|
198
|
-
# 查询接口对象
|
199
|
-
interfaceid = get_interface_id(hostid)
|
200
|
-
# 绑定接口属性
|
201
|
-
interfaces = data.delete(:interfaces)
|
202
|
-
interfaces[:interfaceid] = interfaceid
|
203
|
-
|
204
|
-
# 数据更新期间不处理模板信息 | TODO 后续需要考虑实现
|
205
|
-
data.delete(:templates)
|
206
|
-
|
207
|
-
# 分别更新接口和关联信息
|
208
|
-
mojo_update("hostinterface.update", interfaces)
|
209
|
-
mojo_update("host.update", data.merge(hostid: hostid))
|
210
|
-
else
|
211
|
-
p "正在创建 #{data[:host]} 监控对象"
|
212
|
-
# 新增监控对象
|
213
|
-
create data
|
214
|
-
end
|
215
|
-
rescue StandardError => e
|
216
|
-
puts "创建或新增主机 #{data[:host]} 异常,异常信息:#{e}"
|
217
|
-
# raise NotImplementedError
|
218
|
-
end
|
219
101
|
end
|
220
102
|
end
|
@@ -30,7 +30,7 @@ class ZabbixManager
|
|
30
30
|
# Get or Create HttpTest object using Zabbix API
|
31
31
|
#
|
32
32
|
# @param data [Hash] Needs to include name and hostid to properly identify HttpTests via Zabbix API
|
33
|
-
# @raise [
|
33
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
34
34
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
35
35
|
# @return [Integer] Zabbix object id
|
36
36
|
def get_or_create(data)
|
@@ -45,9 +45,9 @@ class ZabbixManager
|
|
45
45
|
# Create or update HttpTest object using Zabbix API
|
46
46
|
#
|
47
47
|
# @param data [Hash] Needs to include name and hostid to properly identify HttpTests via Zabbix API
|
48
|
-
# @raise [
|
48
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
49
49
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
50
|
-
# @return [Integer] Zabbix object id
|
50
|
+
# @return [Integer, TrueClass, FalseClass] Zabbix object id
|
51
51
|
def create_or_update(data)
|
52
52
|
httptestid = get_id(name: data[:name], hostid: data[:hostid])
|
53
53
|
httptestid ? update(data.merge(httptestid: httptestid)) : create(data)
|
@@ -59,40 +59,51 @@ class ZabbixManager
|
|
59
59
|
# Get or Create Item object using Zabbix API
|
60
60
|
#
|
61
61
|
# @param data [Hash] Needs to include name and hostid to properly identify Items via Zabbix API
|
62
|
-
# @raise [
|
62
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
63
63
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
64
|
-
# @return [Integer] Zabbix object id
|
64
|
+
# @return [Integer, TrueClass, FalseClass, NilClass] Zabbix object id
|
65
65
|
def get_or_create(data)
|
66
|
-
log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
|
66
|
+
log "[DEBUG] Call #{method_name}.get_or_create with parameters: #{data.inspect}"
|
67
67
|
|
68
|
-
|
69
|
-
id
|
68
|
+
if (id = get_id(name: data[:name], hostid: data[:hostid]))
|
69
|
+
id
|
70
|
+
else
|
71
|
+
create(data)
|
70
72
|
end
|
71
|
-
id
|
72
73
|
end
|
73
74
|
|
74
75
|
# Create or update Item object using Zabbix API
|
75
76
|
#
|
76
77
|
# @param data [Hash] Needs to include name and hostid to properly identify Items via Zabbix API
|
77
|
-
# @raise [
|
78
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
78
79
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
79
|
-
# @return [Integer] Zabbix object id
|
80
|
+
# @return [Integer, TrueClass, FalseClass, NilClass] Zabbix object id
|
80
81
|
def create_or_update(data)
|
81
82
|
itemid = get_id(name: data[:name], hostid: data[:hostid])
|
82
83
|
itemid ? update(data.merge(itemid: itemid)) : create(data)
|
83
84
|
end
|
84
85
|
|
85
|
-
#
|
86
|
+
# Create Dns Monitor object using Zabbix API
|
87
|
+
# @note 根据设备名称和接口名字查询监控项:入参 GigabitEthernet1/0/12,出参 15809
|
88
|
+
# @example Interface Et0/0(TO_CLOUD): Bits sent, snmpoid 1.3.6.1.2.1.31.1.1.1.10.1
|
89
|
+
# @example Interface Et0/0(TO_CLOUD): Operational status, snmpoid 1.3.6.1.2.1.2.2.1.8.1
|
90
|
+
# @example Interface Et0/0(TO_CLOUD): Speed, snmpoid 1.3.6.1.2.1.31.1.1.1.15.1
|
91
|
+
# @example Interface Et0/0(TO_CLOUD): Bits received, snmpoid 1.3.6.1.2.1.31.1.1.1.6.1
|
92
|
+
# @param hostid [String, Integer] Needs to include name and hostid to properly identify Items via Zabbix API
|
93
|
+
# @param name [String] Needs to include name and hostid to properly identify Items via Zabbix API
|
94
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
95
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
96
|
+
# @return [Integer, TrueClass, FalseClass, NilClass] Zabbix object id
|
86
97
|
def get_interface_items(hostid, name)
|
98
|
+
log "[DEBUG] Call #{method_name}.get_interface_items with parameters: #{data.inspect}"
|
99
|
+
|
87
100
|
# 自动剔除收尾空白字串
|
88
|
-
_name = name&.gsub(%r{[^/0-9]}, "")
|
101
|
+
_name = name&.gsub(%r{[^/0-9]}, "").strip
|
89
102
|
iface = "#{_name}("
|
90
103
|
|
91
104
|
# 模糊查询接口下所有监控项,同时过滤出特定的 snmp_oid
|
92
|
-
result =
|
93
|
-
|
94
|
-
params: {
|
95
|
-
# output: ["itemid", "name", "snmp_oid", "key_", "triggerids"],
|
105
|
+
result = get_raw(
|
106
|
+
{
|
96
107
|
output: "extend",
|
97
108
|
hostids: hostid,
|
98
109
|
search: {
|
@@ -104,49 +115,40 @@ class ZabbixManager
|
|
104
115
|
}.sort_by {
|
105
116
|
|item| item["key_"]
|
106
117
|
}
|
107
|
-
|
108
|
-
# 检查是是否存在
|
109
118
|
result.empty? ? nil : result
|
110
119
|
end
|
111
120
|
|
112
|
-
#
|
121
|
+
# The default options used when creating DNS Monitor objects via Zabbix API
|
122
|
+
# @note 缺省的 dns 参数
|
123
|
+
# @return [Hash]
|
124
|
+
def default_dns_params
|
125
|
+
{
|
126
|
+
type: 0, # 代表 zabbix_agent
|
127
|
+
value_type: 1, # 代表字符串
|
128
|
+
delay: "1m",
|
129
|
+
history: "90d",
|
130
|
+
lifetime: "30d",
|
131
|
+
timeout: "15s"
|
132
|
+
}
|
133
|
+
end
|
134
|
+
|
135
|
+
# Create Dns Monitor object using Zabbix API
|
136
|
+
#
|
137
|
+
# @param hostid [Hash] Needs to include dns_name and hostid to properly identify Items via Zabbix API
|
138
|
+
# @param dns_name [Hash] Needs to include dns_name and hostid to properly identify Items via Zabbix API
|
139
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
140
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
141
|
+
# @return [Integer, TrueClass, FalseClass, NilClass] Zabbix object id
|
113
142
|
def create_dns_item(hostid, dns_name)
|
114
|
-
|
115
|
-
|
116
|
-
item_key_ = "net.dns.record[,#{dns_name},A,2,2]"
|
143
|
+
name = "【DNS域名解析监控】#{dns_name}"
|
144
|
+
key = "net.dns.record[,#{dns_name},A,2,2]"
|
117
145
|
|
118
|
-
|
146
|
+
params = default_dns_params.merge(hostid: hostid, name: name, key: key)
|
119
147
|
result = @client.api_request(
|
120
148
|
method: "item.create",
|
121
|
-
params:
|
122
|
-
hostid: hostid,
|
123
|
-
name: item_name,
|
124
|
-
key_: item_key_,
|
125
|
-
# 代表 zabbix_agent
|
126
|
-
type: 0,
|
127
|
-
# 代表字符串
|
128
|
-
value_type: 1,
|
129
|
-
# 固定参数
|
130
|
-
delay: "1m",
|
131
|
-
history: "90d",
|
132
|
-
lifetime: "30d",
|
133
|
-
timeout: "3s"
|
134
|
-
}
|
135
|
-
)
|
136
|
-
p "成功创建 dns监控 #{dns_name}"
|
137
|
-
rescue StandardError
|
138
|
-
p "创建 dns监控 #{dns_name} 异常"
|
139
|
-
end
|
140
|
-
|
141
|
-
# 查询某个监控项具体信息
|
142
|
-
def get_item_info
|
143
|
-
result = @client.api_request(
|
144
|
-
method: "item.get",
|
145
|
-
params: {
|
146
|
-
output: "extend",
|
147
|
-
hostids: "16914"
|
148
|
-
}
|
149
|
+
params: params
|
149
150
|
)
|
151
|
+
result.empty? ? nil : result
|
150
152
|
end
|
151
153
|
end
|
152
154
|
end
|
@@ -44,7 +44,7 @@ class ZabbixManager
|
|
44
44
|
#
|
45
45
|
# @param data [Hash] Should include object's id field name (identify) and id value
|
46
46
|
# @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
|
47
|
-
# @raise [
|
47
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
48
48
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
49
49
|
# @return [Integer] The object id if a single object is created
|
50
50
|
# @return [Boolean] True/False if multiple objects are created
|
@@ -71,16 +71,16 @@ class ZabbixManager
|
|
71
71
|
# Get MediaType object id from API based on provided data
|
72
72
|
#
|
73
73
|
# @param data [Hash]
|
74
|
-
# @raise [
|
74
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
|
75
75
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
76
|
-
# @return [Integer] Zabbix object id
|
76
|
+
# @return [Integer, NilClass] Zabbix object id
|
77
77
|
def get_id(data)
|
78
78
|
log "[DEBUG] Call get_id with parameters: #{data.inspect}"
|
79
79
|
# symbolize keys if the user used string keys instead of symbols
|
80
80
|
data = symbolize_keys(data) if data.key?(identify)
|
81
81
|
# raise an error if identify name was not supplied
|
82
82
|
name = data[identify.to_sym]
|
83
|
-
raise
|
83
|
+
raise ZbxError, "#{identify} not supplied in call to get_id, #{data} (#{method_name})" if name.nil?
|
84
84
|
|
85
85
|
result = @client.api_request(
|
86
86
|
method: "#{method_name}.get",
|
@@ -97,7 +97,7 @@ class ZabbixManager
|
|
97
97
|
# Create or update MediaType object using API
|
98
98
|
#
|
99
99
|
# @param data [Hash] Should include object's id field name (identify) and id value
|
100
|
-
# @raise [
|
100
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
101
101
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
102
102
|
# @return [Integer] The object id if a single object is created
|
103
103
|
# @return [Boolean] True/False if multiple objects are created
|