zabbix_manager 5.1.3 → 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 +66 -104
- 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 +7 -15
- data/lib/zabbix_manager/classes/hosts.rb +42 -76
- 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 +15 -49
- 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 +33 -46
- metadata +3 -3
@@ -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,35 +2,27 @@
|
|
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
|
25
19
|
|
26
|
-
#
|
20
|
+
# 通过 Zabbix API 基于提供的 hostid 获取 Zabbix interface 的 id
|
27
21
|
# @note 基于 hostid 查询关联的 Interfaceid
|
28
|
-
# @param hostid [Integer, String]
|
29
|
-
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
|
30
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
31
|
-
# @return [Integer, NilClass] Zabbix object id
|
32
22
|
def get_interfaceid(hostid)
|
33
|
-
result = get_raw({ output: key,
|
23
|
+
result = get_raw({ output: key, identify.to_sym => hostid })
|
24
|
+
|
25
|
+
# 如果查询结果不为空,且第一个元素不为空,则继续获取 {interfaceid} 并转换为整数
|
34
26
|
result&.[](0)&.[](key)&.to_i
|
35
27
|
end
|
36
28
|
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,76 +36,69 @@ class ZabbixManager
|
|
63
36
|
}
|
64
37
|
end
|
65
38
|
|
66
|
-
#
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
templates: data[:templates_id]
|
78
|
-
}
|
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
|
+
}
|
79
50
|
)
|
80
|
-
result.empty? ? false : true
|
81
51
|
end
|
82
52
|
|
83
|
-
#
|
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
|
53
|
+
# 通过 Zabbix API 根据名称获取 Zabbix 对象的 ID
|
89
54
|
def get_ids_by_name(data)
|
90
|
-
log "[DEBUG]
|
55
|
+
log "[DEBUG] 调用 #{method_name}.get_ids_by_name 方法,参数: #{data.inspect}"
|
91
56
|
|
92
|
-
result = get_raw(
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
}
|
57
|
+
result = get_raw({
|
58
|
+
filter: { name: [data].flatten },
|
59
|
+
output: [key]
|
60
|
+
}
|
97
61
|
)
|
98
|
-
result.empty? ? nil : result.map { |i| {
|
62
|
+
result.empty? ? nil : result.map { |i| { key.to_sym => i[key] } }
|
99
63
|
end
|
100
64
|
|
101
|
-
#
|
102
|
-
# @note 创建或更新 Host 监控对象,入参为基于符号的哈希对象,返回监控对象 id
|
103
|
-
# @note 重写基类方法 create_or_update,特殊处理 interfaces 对象
|
104
|
-
# @param data [Hash] Should include object's id field name (identify) and id value
|
105
|
-
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
106
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
107
|
-
# @return [Integer] The object id if a single object is created
|
108
|
-
# @return [Boolean] True/False if multiple objects are created
|
65
|
+
# 使用 Zabbix API 创建或更新 Zabbix 对象
|
109
66
|
def create_or_update(data)
|
110
|
-
log "[DEBUG]
|
67
|
+
log "[DEBUG] 调用 #{method_name}.create_or_update 方法,参数: #{data.inspect}"
|
111
68
|
|
112
69
|
hostid = get_id(identify.to_sym => data[identify.to_sym])
|
113
70
|
return create(data) unless hostid
|
114
71
|
|
115
72
|
interface_id = get_interfaceid(hostid)
|
116
|
-
raise ZbxError, "
|
73
|
+
raise ZbxError, "#{data.inspect} get_interfaceid 查无记录" unless interface_id
|
117
74
|
|
118
|
-
|
119
|
-
|
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)
|
120
78
|
update(params)
|
121
79
|
end
|
122
80
|
|
123
|
-
#
|
124
|
-
# @note 基于 hostid 查询关联的 Interfaceid
|
125
|
-
# @param hostid [Integer, String]
|
126
|
-
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
|
127
|
-
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
128
|
-
# @return [Integer, NilClass] Zabbix object id
|
81
|
+
# 从 API 中基于提供的 hostid 获取 Zabbix interface 的 id
|
129
82
|
def get_interfaceid(hostid)
|
83
|
+
log "[DEBUG] 调用 #{method_name}.get_interfaceid 方法,参数: #{hostid.inspect}"
|
84
|
+
|
130
85
|
result = @client.api_request(
|
131
86
|
method: "hostinterface.get",
|
132
87
|
params: { output: "interfaceid", hostids: hostid }
|
133
88
|
)
|
134
89
|
result&.[](0)&.[]("interfaceid")&.to_i
|
135
90
|
end
|
91
|
+
|
92
|
+
# 在 Hosts 中使用 Zabbix API 取消关联/移除模板
|
93
|
+
def unlink_templates(data)
|
94
|
+
result = @client.api_request(
|
95
|
+
method: "host.massRemove",
|
96
|
+
params: {
|
97
|
+
hostids: data[:hosts_id],
|
98
|
+
templates: data[:templates_id]
|
99
|
+
}
|
100
|
+
)
|
101
|
+
result.empty? ? false : true
|
102
|
+
end
|
136
103
|
end
|
137
104
|
end
|
138
|
-
|
@@ -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
|