zabbix_manager 5.1.2.pre.alpha2 → 5.1.4
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/lib/zabbix_manager/basic/basic_alias.rb +3 -20
- data/lib/zabbix_manager/basic/basic_func.rb +24 -46
- data/lib/zabbix_manager/basic/basic_init.rb +8 -24
- data/lib/zabbix_manager/basic/basic_logic.rb +67 -105
- data/lib/zabbix_manager/classes/actions.rb +11 -21
- data/lib/zabbix_manager/classes/applications.rb +5 -19
- data/lib/zabbix_manager/classes/configurations.rb +5 -19
- data/lib/zabbix_manager/classes/drules.rb +6 -22
- data/lib/zabbix_manager/classes/errors.rb +19 -9
- data/lib/zabbix_manager/classes/events.rb +2 -6
- data/lib/zabbix_manager/classes/graphs.rb +16 -47
- data/lib/zabbix_manager/classes/hostgroups.rb +3 -9
- data/lib/zabbix_manager/classes/hostinterfaces.rb +12 -9
- data/lib/zabbix_manager/classes/hosts.rb +57 -55
- data/lib/zabbix_manager/classes/httptests.rb +7 -23
- data/lib/zabbix_manager/classes/items.rb +12 -68
- data/lib/zabbix_manager/classes/maintenance.rb +2 -6
- data/lib/zabbix_manager/classes/mediatypes.rb +20 -52
- data/lib/zabbix_manager/classes/problems.rb +38 -66
- data/lib/zabbix_manager/classes/proxies.rb +7 -26
- data/lib/zabbix_manager/classes/roles.rb +18 -57
- data/lib/zabbix_manager/classes/screens.rb +7 -21
- data/lib/zabbix_manager/classes/scripts.rb +7 -10
- data/lib/zabbix_manager/classes/server.rb +1 -6
- data/lib/zabbix_manager/classes/templates.rb +15 -49
- data/lib/zabbix_manager/classes/triggers.rb +16 -52
- data/lib/zabbix_manager/classes/unusable.rb +2 -1
- data/lib/zabbix_manager/classes/usergroups.rb +6 -28
- data/lib/zabbix_manager/classes/usermacros.rb +19 -113
- data/lib/zabbix_manager/classes/users.rb +7 -34
- data/lib/zabbix_manager/classes/valuemaps.rb +5 -26
- data/lib/zabbix_manager/client.rb +65 -69
- data/lib/zabbix_manager/version.rb +1 -2
- data/lib/zabbix_manager.rb +41 -84
- metadata +5 -5
@@ -2,23 +2,17 @@
|
|
2
2
|
|
3
3
|
class ZabbixManager
|
4
4
|
class Drules < Basic
|
5
|
-
#
|
6
|
-
#
|
7
|
-
# @return [String]
|
5
|
+
# 用于通过 Zabbix API 与 Drules 交互的方法名称
|
8
6
|
def method_name
|
9
7
|
"drule"
|
10
8
|
end
|
11
9
|
|
12
|
-
#
|
13
|
-
#
|
14
|
-
# @return [String]
|
10
|
+
# 用于通过 Zabbix API 标识特定 Drule 对象的 id 字段名称
|
15
11
|
def identify
|
16
12
|
"name"
|
17
13
|
end
|
18
14
|
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# @return [Hash]
|
15
|
+
# 创建 Drule 对象时使用的默认选项
|
22
16
|
def default_options
|
23
17
|
{
|
24
18
|
name: nil,
|
@@ -28,14 +22,9 @@ class ZabbixManager
|
|
28
22
|
}
|
29
23
|
end
|
30
24
|
|
31
|
-
#
|
32
|
-
#
|
33
|
-
# @param data [Hash] Needs to include name to properly identify Drule via Zabbix API
|
34
|
-
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
35
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
36
|
-
# @return [Integer] Zabbix object id
|
25
|
+
# 通过 Zabbix API 获取或创建 Drule 对象
|
37
26
|
def get_or_create(data)
|
38
|
-
log "[DEBUG]
|
27
|
+
log "[DEBUG] 调用 get_or_create,参数为:#{data.inspect}"
|
39
28
|
|
40
29
|
unless (id = get_id(name: data[:name]))
|
41
30
|
id = create(data)
|
@@ -43,12 +32,7 @@ class ZabbixManager
|
|
43
32
|
id
|
44
33
|
end
|
45
34
|
|
46
|
-
#
|
47
|
-
#
|
48
|
-
# @param data [Hash] Needs to include name to properly identify Drules via Zabbix API
|
49
|
-
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
50
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
51
|
-
# @return [Integer, TrueClass, FalseClass] Zabbix object id
|
35
|
+
# 通过 Zabbix API 创建或更新 Drule 对象
|
52
36
|
def create_or_update(data)
|
53
37
|
druleid = get_id(name: data[:name])
|
54
38
|
druleid ? update(data.merge(druleid: druleid)) : create(data)
|
@@ -1,29 +1,39 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class ZabbixManager
|
4
|
+
# BaseError 是 ZabbixManager 模块中处理异常的基类
|
4
5
|
class BaseError < RuntimeError
|
5
|
-
|
6
|
+
# 用于存储响应对象
|
7
|
+
attr_accessor :response
|
8
|
+
# 用于存储 Zabbix API 错误信息
|
9
|
+
attr_accessor :error
|
10
|
+
# 用于存储格式化后的错误消息
|
11
|
+
attr_accessor :error_message
|
6
12
|
|
13
|
+
# 初始化异常对象
|
7
14
|
def initialize(message, response = nil)
|
8
15
|
super(message)
|
9
16
|
@response = response
|
10
|
-
|
11
17
|
set_error! if @response
|
12
18
|
end
|
13
19
|
|
14
20
|
private
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
21
|
+
|
22
|
+
# 从响应中提取 Zabbix API 错误信息
|
23
|
+
def set_error!
|
24
|
+
@error = @response["error"]
|
25
|
+
@error_message = "#{@error["message"]}: #{@error["data"]}"
|
26
|
+
rescue StandardError
|
27
|
+
@error = nil
|
28
|
+
@error_message = nil
|
29
|
+
end
|
22
30
|
end
|
23
31
|
|
32
|
+
# ZbxError 是 ZabbixManager 模块中处理 Zabbix API 异常的类
|
24
33
|
class ZbxError < BaseError
|
25
34
|
end
|
26
35
|
|
36
|
+
# HttpError 是 ZabbixManager 模块中处理 HTTP 异常的类
|
27
37
|
class HttpError < BaseError
|
28
38
|
end
|
29
39
|
end
|
@@ -2,16 +2,12 @@
|
|
2
2
|
|
3
3
|
class ZabbixManager
|
4
4
|
class Events < Basic
|
5
|
-
#
|
6
|
-
#
|
7
|
-
# @return [String]
|
5
|
+
# 用于通过 Zabbix API 与 Events 交互的方法名称
|
8
6
|
def method_name
|
9
7
|
"event"
|
10
8
|
end
|
11
9
|
|
12
|
-
#
|
13
|
-
#
|
14
|
-
# @return [String]
|
10
|
+
# 用于通过 Zabbix API 标识特定 Event 对象的 id 字段名称
|
15
11
|
def identify
|
16
12
|
"name"
|
17
13
|
end
|
@@ -2,32 +2,22 @@
|
|
2
2
|
|
3
3
|
class ZabbixManager
|
4
4
|
class Graphs < Basic
|
5
|
-
#
|
6
|
-
#
|
7
|
-
# @return [String]
|
5
|
+
# 用于通过 Zabbix API 与 Graphs 交互的方法名称
|
8
6
|
def method_name
|
9
7
|
"graph"
|
10
8
|
end
|
11
9
|
|
12
|
-
#
|
13
|
-
#
|
14
|
-
# @return [String]
|
10
|
+
# 用于通过 Zabbix API 标识特定 Graph 对象的 id 字段名称
|
15
11
|
def identify
|
16
12
|
"name"
|
17
13
|
end
|
18
14
|
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# @param data [Hash] Should include object's id field name (identify) and id value
|
22
|
-
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
23
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
24
|
-
# @return [Hash]
|
15
|
+
# 从 Zabbix API 获取完整/扩展的 Graph 数据
|
25
16
|
def get_full_data(data)
|
26
|
-
log "[DEBUG]
|
17
|
+
log "[DEBUG] 使用参数调用 get_full_data: #{data.inspect}"
|
27
18
|
|
28
|
-
|
29
|
-
|
30
|
-
params: {
|
19
|
+
get_raw(
|
20
|
+
{
|
31
21
|
search: {
|
32
22
|
identify.to_sym => data[identify.to_sym]
|
33
23
|
},
|
@@ -36,16 +26,10 @@ class ZabbixManager
|
|
36
26
|
)
|
37
27
|
end
|
38
28
|
|
39
|
-
#
|
40
|
-
#
|
41
|
-
# @param data [Hash] Should include host value to query for matching graphs
|
42
|
-
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
43
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
44
|
-
# @return [Array] Returns array of Graph ids
|
29
|
+
# 从 Zabbix API 获取主机的 Graph ids
|
45
30
|
def get_ids_by_host(data)
|
46
|
-
result =
|
47
|
-
|
48
|
-
params: {
|
31
|
+
result = get_raw(
|
32
|
+
{
|
49
33
|
filter: {
|
50
34
|
host: data[:host]
|
51
35
|
},
|
@@ -54,38 +38,28 @@ class ZabbixManager
|
|
54
38
|
)
|
55
39
|
|
56
40
|
result.filter_map do |graph|
|
57
|
-
num
|
58
|
-
name
|
41
|
+
num = graph["graphid"]
|
42
|
+
name = graph["name"]
|
59
43
|
filter = data[:filter]
|
60
44
|
|
61
45
|
num if filter.nil? || /#{filter}/ =~ name
|
62
46
|
end
|
63
47
|
end
|
64
48
|
|
65
|
-
#
|
66
|
-
#
|
67
|
-
# @param data [Hash] Needs to include graphids to properly identify Graph Items via Zabbix API
|
68
|
-
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
69
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
70
|
-
# @return [Hash]
|
49
|
+
# 通过 Zabbix API 获取 Graph Item 对象
|
71
50
|
def get_items(data)
|
72
51
|
@client.api_request(
|
73
52
|
method: "graphitem.get",
|
74
53
|
params: {
|
75
54
|
graphids: [data],
|
76
|
-
output:
|
55
|
+
output: "extend"
|
77
56
|
}
|
78
57
|
)
|
79
58
|
end
|
80
59
|
|
81
|
-
#
|
82
|
-
#
|
83
|
-
# @param data [Hash] Needs to include name and templateid to properly identify Graphs via Zabbix API
|
84
|
-
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
85
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
86
|
-
# @return [Integer] Zabbix object id
|
60
|
+
# 通过 Zabbix API 获取或创建 Graph 对象
|
87
61
|
def get_or_create(data)
|
88
|
-
log "[DEBUG]
|
62
|
+
log "[DEBUG] 使用参数调用 get_or_create: #{data.inspect}"
|
89
63
|
|
90
64
|
unless (id = get_id(name: data[:name], templateid: data[:templateid]))
|
91
65
|
id = create(data)
|
@@ -94,12 +68,7 @@ class ZabbixManager
|
|
94
68
|
id
|
95
69
|
end
|
96
70
|
|
97
|
-
#
|
98
|
-
#
|
99
|
-
# @param data [Hash] Needs to include name and templateid to properly identify Graphs via Zabbix API
|
100
|
-
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
101
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
102
|
-
# @return [Integer, TrueClass, FalseClass] Zabbix object id
|
71
|
+
# 通过 Zabbix API 创建或更新 Graph 对象
|
103
72
|
def create_or_update(data)
|
104
73
|
graphid = get_id(name: data[:name], templateid: data[:templateid])
|
105
74
|
graphid ? _update(data.merge(graphid: graphid)) : create(data)
|
@@ -2,23 +2,17 @@
|
|
2
2
|
|
3
3
|
class ZabbixManager
|
4
4
|
class HostGroups < Basic
|
5
|
-
#
|
6
|
-
#
|
7
|
-
# @return [String]
|
5
|
+
# 用于通过 Zabbix API 与 HostGroups 交互的方法名称
|
8
6
|
def method_name
|
9
7
|
"hostgroup"
|
10
8
|
end
|
11
9
|
|
12
|
-
#
|
13
|
-
#
|
14
|
-
# @return [String]
|
10
|
+
# 用于通过 Zabbix API 标识特定 HostGroup 对象的 id 字段名称
|
15
11
|
def identify
|
16
12
|
"name"
|
17
13
|
end
|
18
14
|
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# @return [String]
|
15
|
+
# HostGroup 对象通过 Zabbix API 使用的 key 字段名称
|
22
16
|
def key
|
23
17
|
"groupid"
|
24
18
|
end
|
@@ -2,25 +2,28 @@
|
|
2
2
|
|
3
3
|
class ZabbixManager
|
4
4
|
class HostInterfaces < Basic
|
5
|
-
#
|
6
|
-
#
|
7
|
-
# @return [String]
|
5
|
+
# 用于通过 Zabbix API 与 HostInterfaces 交互的方法名称
|
8
6
|
def method_name
|
9
7
|
"hostinterface"
|
10
8
|
end
|
11
9
|
|
12
|
-
#
|
13
|
-
#
|
14
|
-
# @return [String]
|
10
|
+
# 用于通过 Zabbix API 标识特定 HostInterface 对象的 id 字段名称
|
15
11
|
def identify
|
16
12
|
"hostids"
|
17
13
|
end
|
18
14
|
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# @return [String]
|
15
|
+
# HostInterface 对象通过 Zabbix API 使用的 key 字段名称
|
22
16
|
def key
|
23
17
|
"interfaceid"
|
24
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
|
25
28
|
end
|
26
29
|
end
|
@@ -2,44 +2,17 @@
|
|
2
2
|
|
3
3
|
class ZabbixManager
|
4
4
|
class Hosts < Basic
|
5
|
-
#
|
6
|
-
#
|
7
|
-
# @return [String]
|
5
|
+
# 与 Zabbix API 交互的主机方法名称
|
8
6
|
def method_name
|
9
7
|
"host"
|
10
8
|
end
|
11
9
|
|
12
|
-
#
|
13
|
-
#
|
14
|
-
# @return [String]
|
10
|
+
# 用于通过 Zabbix API 标识特定主机对象的 id 字段名称
|
15
11
|
def identify
|
16
12
|
"host"
|
17
13
|
end
|
18
14
|
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# @param data [Hash] Should include desired object's key and value
|
22
|
-
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
23
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
24
|
-
# @return [Hash]
|
25
|
-
def dump_by_id(data)
|
26
|
-
log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
|
27
|
-
|
28
|
-
@client.api_request(
|
29
|
-
method: "host.get",
|
30
|
-
params: {
|
31
|
-
filter: {
|
32
|
-
key.to_sym => data[key.to_sym]
|
33
|
-
},
|
34
|
-
output: "extend",
|
35
|
-
selectHosts: "shorten"
|
36
|
-
}
|
37
|
-
)
|
38
|
-
end
|
39
|
-
|
40
|
-
# The default options used when creating Host objects via Zabbix API
|
41
|
-
# @note Create Host 缺省的配置参数
|
42
|
-
# @return [Hash]
|
15
|
+
# 在通过 Zabbix API 创建主机对象时使用的默认选项
|
43
16
|
def default_options
|
44
17
|
{
|
45
18
|
host: nil,
|
@@ -63,12 +36,60 @@ class ZabbixManager
|
|
63
36
|
}
|
64
37
|
end
|
65
38
|
|
66
|
-
#
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
39
|
+
# 通过 Zabbix API 从指定的 key 值获取主机对象数据
|
40
|
+
def dump_by_id(data)
|
41
|
+
log "[DEBUG] 调用 dump_by_id 方法,参数: #{data.inspect}"
|
42
|
+
|
43
|
+
get_raw({
|
44
|
+
filter: {
|
45
|
+
key.to_sym => data[key.to_sym]
|
46
|
+
},
|
47
|
+
output: "extend",
|
48
|
+
selectHosts: "shorten"
|
49
|
+
}
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
53
|
+
# 通过 Zabbix API 根据名称获取 Zabbix 对象的 ID
|
54
|
+
def get_ids_by_name(data)
|
55
|
+
log "[DEBUG] 调用 #{method_name}.get_ids_by_name 方法,参数: #{data.inspect}"
|
56
|
+
|
57
|
+
result = get_raw({
|
58
|
+
filter: { name: [data].flatten },
|
59
|
+
output: [key]
|
60
|
+
}
|
61
|
+
)
|
62
|
+
result.empty? ? nil : result.map { |i| { key.to_sym => i[key] } }
|
63
|
+
end
|
64
|
+
|
65
|
+
# 使用 Zabbix API 创建或更新 Zabbix 对象
|
66
|
+
def create_or_update(data)
|
67
|
+
log "[DEBUG] 调用 #{method_name}.create_or_update 方法,参数: #{data.inspect}"
|
68
|
+
|
69
|
+
hostid = get_id(identify.to_sym => data[identify.to_sym])
|
70
|
+
return create(data) unless hostid
|
71
|
+
|
72
|
+
interface_id = get_interfaceid(hostid)
|
73
|
+
raise ZbxError, "#{data.inspect} get_interfaceid 查无记录" unless interface_id
|
74
|
+
|
75
|
+
dump_data = data.dup
|
76
|
+
interfaces = dump_data.delete(:interfaces)&.merge(interfaceid: interface_id)
|
77
|
+
params = dump_data.merge(interfaces: interfaces).merge(key.to_sym => hostid.to_s)
|
78
|
+
update(params)
|
79
|
+
end
|
80
|
+
|
81
|
+
# 从 API 中基于提供的 hostid 获取 Zabbix interface 的 id
|
82
|
+
def get_interfaceid(hostid)
|
83
|
+
log "[DEBUG] 调用 #{method_name}.get_interfaceid 方法,参数: #{hostid.inspect}"
|
84
|
+
|
85
|
+
result = @client.api_request(
|
86
|
+
method: "hostinterface.get",
|
87
|
+
params: { output: "interfaceid", hostids: hostid }
|
88
|
+
)
|
89
|
+
result&.[](0)&.[]("interfaceid")&.to_i
|
90
|
+
end
|
91
|
+
|
92
|
+
# 在 Hosts 中使用 Zabbix API 取消关联/移除模板
|
72
93
|
def unlink_templates(data)
|
73
94
|
result = @client.api_request(
|
74
95
|
method: "host.massRemove",
|
@@ -79,24 +100,5 @@ class ZabbixManager
|
|
79
100
|
)
|
80
101
|
result.empty? ? false : true
|
81
102
|
end
|
82
|
-
|
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.
|
87
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
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}"]
|
96
|
-
}
|
97
|
-
)
|
98
|
-
result.empty? ? nil : result.map { |i| { "#{key}": i[key] } }
|
99
|
-
end
|
100
|
-
|
101
103
|
end
|
102
104
|
end
|
@@ -2,37 +2,26 @@
|
|
2
2
|
|
3
3
|
class ZabbixManager
|
4
4
|
class HttpTests < Basic
|
5
|
-
#
|
6
|
-
#
|
7
|
-
# @return [String]
|
5
|
+
# 用于通过 Zabbix API 与 HttpTests 交互的方法名称
|
8
6
|
def method_name
|
9
7
|
"httptest"
|
10
8
|
end
|
11
9
|
|
12
|
-
#
|
13
|
-
#
|
14
|
-
# @return [String]
|
10
|
+
# 用于通过 Zabbix API 标识特定 HttpTest 对象的 id 字段名称
|
15
11
|
def identify
|
16
12
|
"name"
|
17
13
|
end
|
18
14
|
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# @return [Hash]
|
15
|
+
# 通过 Zabbix API 创建 HttpTest 对象时使用的默认选项
|
22
16
|
def default_options
|
23
17
|
{
|
24
18
|
hostid: nil,
|
25
|
-
name:
|
26
|
-
steps:
|
19
|
+
name: nil,
|
20
|
+
steps: []
|
27
21
|
}
|
28
22
|
end
|
29
23
|
|
30
|
-
#
|
31
|
-
#
|
32
|
-
# @param data [Hash] Needs to include name and hostid to properly identify HttpTests via Zabbix API
|
33
|
-
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
34
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
35
|
-
# @return [Integer] Zabbix object id
|
24
|
+
# 通过 Zabbix API 获取或创建 HttpTest 对象
|
36
25
|
def get_or_create(data)
|
37
26
|
log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
|
38
27
|
|
@@ -42,12 +31,7 @@ class ZabbixManager
|
|
42
31
|
id
|
43
32
|
end
|
44
33
|
|
45
|
-
#
|
46
|
-
#
|
47
|
-
# @param data [Hash] Needs to include name and hostid to properly identify HttpTests via Zabbix API
|
48
|
-
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
49
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
50
|
-
# @return [Integer, TrueClass, FalseClass] Zabbix object id
|
34
|
+
# 通过 Zabbix API 创建或更新 HttpTest 对象
|
51
35
|
def create_or_update(data)
|
52
36
|
httptestid = get_id(name: data[:name], hostid: data[:hostid])
|
53
37
|
httptestid ? update(data.merge(httptestid: httptestid)) : create(data)
|
@@ -2,23 +2,17 @@
|
|
2
2
|
|
3
3
|
class ZabbixManager
|
4
4
|
class Items < Basic
|
5
|
-
#
|
6
|
-
#
|
7
|
-
# @return [String]
|
5
|
+
# 用于通过 Zabbix API 与 Items 交互的方法名称
|
8
6
|
def method_name
|
9
7
|
"item"
|
10
8
|
end
|
11
9
|
|
12
|
-
#
|
13
|
-
#
|
14
|
-
# @return [String]
|
10
|
+
# 用于通过 Zabbix API 标识特定 Item 对象的 id 字段名称
|
15
11
|
def identify
|
16
12
|
"name"
|
17
13
|
end
|
18
14
|
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# @return [Hash]
|
15
|
+
# 通过 Zabbix API 创建 Item 对象时使用的默认选项
|
22
16
|
def default_options
|
23
17
|
{
|
24
18
|
name: nil,
|
@@ -56,12 +50,7 @@ class ZabbixManager
|
|
56
50
|
}
|
57
51
|
end
|
58
52
|
|
59
|
-
#
|
60
|
-
#
|
61
|
-
# @param data [Hash] Needs to include name and hostid to properly identify Items via Zabbix API
|
62
|
-
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
63
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
64
|
-
# @return [Integer, TrueClass, FalseClass, NilClass] Zabbix object id
|
53
|
+
# 通过 Zabbix API 获取或创建 Item 对象
|
65
54
|
def get_or_create(data)
|
66
55
|
log "[DEBUG] Call #{method_name}.get_or_create with parameters: #{data.inspect}"
|
67
56
|
|
@@ -72,36 +61,22 @@ class ZabbixManager
|
|
72
61
|
end
|
73
62
|
end
|
74
63
|
|
75
|
-
#
|
76
|
-
#
|
77
|
-
# @param data [Hash] Needs to include name and hostid to properly identify Items via Zabbix API
|
78
|
-
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
79
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
80
|
-
# @return [Integer, TrueClass, FalseClass, NilClass] Zabbix object id
|
64
|
+
# 通过 Zabbix API 创建或更新 Item 对象
|
81
65
|
def create_or_update(data)
|
82
66
|
itemid = get_id(name: data[:name], hostid: data[:hostid])
|
83
67
|
itemid ? update(data.merge(itemid: itemid)) : create(data)
|
84
68
|
end
|
85
69
|
|
86
|
-
#
|
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
|
70
|
+
# 通过 Zabbix API 获取特定主机和接口下的监控项
|
97
71
|
def get_interface_items(hostid, name)
|
98
|
-
|
72
|
+
# 记录调试信息,标识方法调用以及传递的参数
|
73
|
+
log "[DEBUG] 调用 #{method_name}.get_interface_items,参数:hostid #{hostid.inspect},name #{name.inspect}"
|
99
74
|
|
100
|
-
#
|
101
|
-
_name = name&.gsub(%r{[^/0-9]}, "")
|
75
|
+
# 自动剔除收尾空白字符,规范化接口名
|
76
|
+
_name = name&.gsub(%r{[^/0-9]}, "")&.strip
|
102
77
|
iface = "#{_name}("
|
103
78
|
|
104
|
-
#
|
79
|
+
# 使用 Zabbix API 进行模糊查询,获取特定主机和接口下的监控项
|
105
80
|
result = get_raw(
|
106
81
|
{
|
107
82
|
output: "extend",
|
@@ -115,39 +90,8 @@ class ZabbixManager
|
|
115
90
|
}.sort_by {
|
116
91
|
|item| item["key_"]
|
117
92
|
}
|
118
|
-
result.empty? ? nil : result
|
119
|
-
end
|
120
|
-
|
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
|
142
|
-
def create_dns_item(hostid, dns_name)
|
143
|
-
name = "【DNS域名解析监控】#{dns_name}"
|
144
|
-
key = "net.dns.record[,#{dns_name},A,2,2]"
|
145
93
|
|
146
|
-
|
147
|
-
result = @client.api_request(
|
148
|
-
method: "item.create",
|
149
|
-
params: params
|
150
|
-
)
|
94
|
+
# 如果结果为空,则返回 nil;否则,返回排序后的结果
|
151
95
|
result.empty? ? nil : result
|
152
96
|
end
|
153
97
|
end
|
@@ -2,16 +2,12 @@
|
|
2
2
|
|
3
3
|
class ZabbixManager
|
4
4
|
class Maintenance < Basic
|
5
|
-
#
|
6
|
-
#
|
7
|
-
# @return [String]
|
5
|
+
# 用于通过 Zabbix API 与维护窗口对象交互的方法名称
|
8
6
|
def method_name
|
9
7
|
"maintenance"
|
10
8
|
end
|
11
9
|
|
12
|
-
#
|
13
|
-
#
|
14
|
-
# @return [String]
|
10
|
+
# 用于通过 Zabbix API 识别特定维护窗口对象的 id 字段名称
|
15
11
|
def identify
|
16
12
|
"name"
|
17
13
|
end
|