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
@@ -2,6 +2,9 @@
|
|
2
2
|
|
3
3
|
class ZabbixManager
|
4
4
|
class Problems < Basic
|
5
|
+
require "active_support"
|
6
|
+
require "active_support/core_ext/date/calculations"
|
7
|
+
|
5
8
|
# The method name used for interacting with Hosts via Zabbix API
|
6
9
|
#
|
7
10
|
# @return [String]
|
@@ -16,33 +19,17 @@ class ZabbixManager
|
|
16
19
|
"name"
|
17
20
|
end
|
18
21
|
|
19
|
-
# The key field name used for Problem objects via Zabbix API
|
20
|
-
# However, Problem object does not have a unique identifier
|
21
|
-
#
|
22
|
-
# @return [String]
|
23
|
-
def key
|
24
|
-
"problemid"
|
25
|
-
end
|
26
|
-
|
27
|
-
# Returns the object's plural id field name (identify) based on key
|
28
|
-
# However, Problem object does not have a unique identifier
|
29
|
-
#
|
30
|
-
# @return [String]
|
31
|
-
def keys
|
32
|
-
"problemids"
|
33
|
-
end
|
34
|
-
|
35
22
|
# Dump Problem object data by key from Zabbix API
|
36
23
|
#
|
37
24
|
# @param data [Hash] Should include desired object's key and value
|
38
|
-
# @raise [
|
25
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
39
26
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
40
27
|
# @return [Hash]
|
41
28
|
def dump_by_id(data)
|
42
|
-
log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
|
29
|
+
log "[DEBUG] Call #{method_name}.dump_by_id with parameters: #{data.inspect}"
|
43
30
|
|
44
31
|
@client.api_request(
|
45
|
-
method: "
|
32
|
+
method: "#{method_name}.get",
|
46
33
|
params: {
|
47
34
|
filter: {
|
48
35
|
identify.to_sym => data[identify.to_sym]
|
@@ -55,37 +42,37 @@ class ZabbixManager
|
|
55
42
|
# Get full/extended Problem data from Zabbix API
|
56
43
|
#
|
57
44
|
# @param data [Hash] Should include object's id field name (identify) and id value
|
58
|
-
# @raise [
|
45
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
59
46
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
60
47
|
# @return [Hash]
|
61
48
|
def get_full_data(data)
|
62
|
-
log "[DEBUG] Call get_full_data with parameters: #{data.inspect}"
|
49
|
+
log "[DEBUG] Call #{method_name}.get_full_data with parameters: #{data.inspect}"
|
63
50
|
|
64
51
|
data = symbolize_keys(data)
|
65
52
|
|
66
53
|
@client.api_request(
|
67
54
|
method: "#{method_name}.get",
|
68
55
|
params: {
|
69
|
-
filter:
|
56
|
+
filter: {
|
70
57
|
identify.to_sym => data[identify.to_sym]
|
71
58
|
},
|
72
|
-
eventids:
|
73
|
-
groupids:
|
74
|
-
hostids:
|
75
|
-
objectids:
|
76
|
-
applicationids:
|
77
|
-
tags:
|
78
|
-
time_from:
|
79
|
-
time_till:
|
80
|
-
eventid_from:
|
81
|
-
eventid_till:
|
82
|
-
recent:
|
83
|
-
sortfield:
|
84
|
-
sortorder:
|
85
|
-
countOutput:
|
86
|
-
output:
|
87
|
-
selectAcknowledges:
|
88
|
-
selectTags:
|
59
|
+
eventids: data[:eventids] || nil,
|
60
|
+
groupids: data[:groupids] || nil,
|
61
|
+
hostids: data[:hostids] || nil,
|
62
|
+
objectids: data[:objectids] || nil,
|
63
|
+
applicationids: data[:applicationids] || nil,
|
64
|
+
tags: data[:tags] || nil,
|
65
|
+
time_from: data[:time_from] || nil,
|
66
|
+
time_till: data[:time_till] || nil,
|
67
|
+
eventid_from: data[:eventid_from] || nil,
|
68
|
+
eventid_till: data[:eventid_till] || nil,
|
69
|
+
recent: data[:recent] || false,
|
70
|
+
sortfield: data[:sortfield] || ["eventid"],
|
71
|
+
sortorder: data[:sortorder] || "DESC",
|
72
|
+
countOutput: data[:countOutput] || nil,
|
73
|
+
output: "extend",
|
74
|
+
selectAcknowledges: "extend",
|
75
|
+
selectTags: "extend",
|
89
76
|
selectSuppressionData: "extend"
|
90
77
|
}
|
91
78
|
)
|
@@ -93,42 +80,37 @@ class ZabbixManager
|
|
93
80
|
|
94
81
|
# Get full/extended Zabbix data for Problem objects from API
|
95
82
|
#
|
96
|
-
# @raise [
|
83
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
97
84
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
98
|
-
# @return [
|
85
|
+
# @return [Hash] Array of matching objects
|
99
86
|
def all
|
100
87
|
get_full_data({})
|
101
88
|
end
|
102
89
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
90
|
+
# Acknowledged problems according to the given parameters.
|
91
|
+
# @note 自动确认14天前的问题单
|
92
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
93
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
94
|
+
# @return [Array, NilClass] Array of matching objects
|
95
|
+
def ack_problem
|
96
|
+
time_from = 90.days.ago.at_beginning_of_day.to_i
|
97
|
+
time_till = 7.days.ago.at_beginning_of_day.to_i
|
110
98
|
event_ids = []
|
111
99
|
|
112
|
-
|
113
|
-
data.each do |item|
|
100
|
+
get_full_data(time_from: time_from, time_till: time_till).each do |item|
|
114
101
|
event_ids << item["eventid"]
|
115
102
|
end
|
103
|
+
return if event_ids.empty?
|
116
104
|
|
117
|
-
|
118
|
-
ack_event event_ids
|
119
|
-
end
|
120
|
-
|
121
|
-
def ack_event(eventids)
|
122
|
-
# 请求后端
|
123
|
-
@client.api_request(
|
105
|
+
result = @client.api_request(
|
124
106
|
method: "event.acknowledge",
|
125
107
|
params: {
|
126
|
-
eventids:
|
127
|
-
action:
|
128
|
-
message:
|
108
|
+
eventids: event_ids,
|
109
|
+
action: 2,
|
110
|
+
message: "本次告警通过 zabbix_api 关闭"
|
129
111
|
}
|
130
112
|
)
|
131
|
-
|
113
|
+
result.empty? ? nil : result.map { |i| { eventids: i["eventids"] } }
|
132
114
|
end
|
133
115
|
end
|
134
116
|
end
|
@@ -19,9 +19,9 @@ class ZabbixManager
|
|
19
19
|
# Delete Proxy object using Zabbix API
|
20
20
|
#
|
21
21
|
# @param data [Array] Should include array of proxyid's
|
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] The Proxy object id that was deleted
|
24
|
+
# @return [Integer, NilClass] The Proxy object id that was deleted
|
25
25
|
def delete(data)
|
26
26
|
result = @client.api_request(method: "proxy.delete", params: data)
|
27
27
|
result.empty? ? nil : result["proxyids"][0].to_i
|
@@ -30,7 +30,7 @@ class ZabbixManager
|
|
30
30
|
# Check if a Proxy object is readable using Zabbix API
|
31
31
|
#
|
32
32
|
# @param data [Array] Should include array of proxyid's
|
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 [Boolean] Returns true if the given proxies are readable
|
36
36
|
def isreadable(data)
|
@@ -40,31 +40,11 @@ class ZabbixManager
|
|
40
40
|
# Check if a Proxy object is writable using Zabbix API
|
41
41
|
#
|
42
42
|
# @param data [Array] Should include array of proxyid's
|
43
|
-
# @raise [
|
43
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
44
44
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
45
45
|
# @return [Boolean] Returns true if the given proxies are writable
|
46
46
|
def iswritable(data)
|
47
47
|
@client.api_request(method: "proxy.iswritable", params: data)
|
48
48
|
end
|
49
|
-
|
50
|
-
# 新增代理服务器查询接口
|
51
|
-
def get_proxy_id(proxy)
|
52
|
-
# 边界条件判断
|
53
|
-
return nil if proxy.nil?
|
54
|
-
|
55
|
-
# 请求后端接口,只支持单个代理节点
|
56
|
-
result = @client.api_request(
|
57
|
-
method: "proxy.get",
|
58
|
-
params: {
|
59
|
-
output: "extend",
|
60
|
-
filter: {
|
61
|
-
host: proxy
|
62
|
-
}
|
63
|
-
}
|
64
|
-
)
|
65
|
-
|
66
|
-
# 返回代理节点
|
67
|
-
result.empty? ? nil : result[0]["proxyid"]
|
68
|
-
end
|
69
49
|
end
|
70
50
|
end
|
@@ -26,9 +26,9 @@ class ZabbixManager
|
|
26
26
|
# Set permissions for usergroup using Zabbix API
|
27
27
|
#
|
28
28
|
# @param data [Hash] Needs to include usrgrpids and hostgroupids along with permissions to set
|
29
|
-
# @raise [
|
29
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
30
30
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
31
|
-
# @return [Integer] Zabbix object id (usergroup)
|
31
|
+
# @return [Integer, NilClass] Zabbix object id (usergroup)
|
32
32
|
def rules(data)
|
33
33
|
rules = data[:rules] || 2
|
34
34
|
result = @client.api_request(
|
@@ -45,7 +45,7 @@ class ZabbixManager
|
|
45
45
|
#
|
46
46
|
# @deprecated Zabbix has removed massAdd in favor of update.
|
47
47
|
# @param data [Hash] Needs to include userids and usrgrpids to mass add users to groups
|
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
50
|
# @return [Integer] Zabbix object id (usergroup)
|
51
51
|
def add_user(data)
|
@@ -55,7 +55,7 @@ class ZabbixManager
|
|
55
55
|
# Dump Role object data by key from Zabbix API
|
56
56
|
#
|
57
57
|
# @param data [Hash] Should include desired object's key and value
|
58
|
-
# @raise [
|
58
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
59
59
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
60
60
|
# @return [Hash]
|
61
61
|
def dump_by_id(data)
|
@@ -74,7 +74,7 @@ class ZabbixManager
|
|
74
74
|
# Get Role ids by Role Name from Zabbix API
|
75
75
|
#
|
76
76
|
# @param data [Hash] Should include host value to query for matching graphs
|
77
|
-
# @raise [
|
77
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
78
78
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
79
79
|
# @return [Array] Returns array of Graph ids
|
80
80
|
def get_ids_by_name(data)
|
@@ -96,9 +96,9 @@ class ZabbixManager
|
|
96
96
|
# Update users in Userroles using Zabbix API
|
97
97
|
#
|
98
98
|
# @param data [Hash] Needs to include userids and usrgrpids to mass update users in groups
|
99
|
-
# @raise [
|
99
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
100
100
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
101
|
-
# @return [Integer] Zabbix object id (usergroup)
|
101
|
+
# @return [Integer, NilClass] Zabbix object id (usergroup)
|
102
102
|
def update_users(data)
|
103
103
|
user_groups = data[:usrgrpids].map do |t|
|
104
104
|
{
|
@@ -38,9 +38,9 @@ class ZabbixManager
|
|
38
38
|
# Delete Screen object using Zabbix API
|
39
39
|
#
|
40
40
|
# @param data [String, Array] Should include id's of the screens to delete
|
41
|
-
# @raise [
|
41
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
42
42
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
43
|
-
# @return [Integer] Zabbix object id
|
43
|
+
# @return [Integer, NilClass] Zabbix object id
|
44
44
|
def delete(data)
|
45
45
|
result = @client.api_request(method: "screen.delete", params: [data])
|
46
46
|
result.empty? ? nil : result["screenids"][0].to_i
|
@@ -49,7 +49,7 @@ class ZabbixManager
|
|
49
49
|
# Get or Create Screen object for Host using Zabbix API
|
50
50
|
#
|
51
51
|
# @param data [Hash] Needs to include screen_name and graphids to properly identify Screens via Zabbix API
|
52
|
-
# @raise [
|
52
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
53
53
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
54
54
|
# @return [Integer] Zabbix object id
|
55
55
|
def get_or_create_for_host(data)
|
@@ -19,9 +19,9 @@ class ZabbixManager
|
|
19
19
|
# Delete Template object using Zabbix API
|
20
20
|
#
|
21
21
|
# @param data [Array] Should include array of templateid's
|
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] The Template object id that was deleted
|
24
|
+
# @return [Integer, NilClass] The Template object id that was deleted
|
25
25
|
def delete(data)
|
26
26
|
result = @client.api_request(method: "template.delete", params: [data])
|
27
27
|
result.empty? ? nil : result["templateids"][0].to_i
|
@@ -30,7 +30,7 @@ class ZabbixManager
|
|
30
30
|
# Get Template ids for Host from Zabbix API
|
31
31
|
#
|
32
32
|
# @param data [Hash] Should include host value to query for matching templates
|
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 [Array] Returns array of Template ids
|
36
36
|
def get_ids_by_host(data)
|
@@ -42,27 +42,28 @@ class ZabbixManager
|
|
42
42
|
# Get or Create Template object using Zabbix API
|
43
43
|
#
|
44
44
|
# @param data [Hash] Needs to include host to properly identify Templates via Zabbix API
|
45
|
-
# @raise [
|
45
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
46
46
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
47
|
-
# @return [Integer] Zabbix object id
|
47
|
+
# @return [Integer, TrueClass, FalseClass] Zabbix object id
|
48
48
|
def get_or_create(data)
|
49
|
-
|
50
|
-
templateid
|
49
|
+
if (templateid = get_id(host: data[:host]))
|
50
|
+
templateid
|
51
|
+
else
|
52
|
+
create(data)
|
51
53
|
end
|
52
|
-
templateid
|
53
54
|
end
|
54
55
|
|
55
56
|
# Mass update Templates for Hosts using Zabbix API
|
56
57
|
#
|
57
58
|
# @param data [Hash] Should include hosts_id array and templates_id array
|
58
|
-
# @raise [
|
59
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
59
60
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
60
61
|
# @return [Boolean]
|
61
62
|
def mass_update(data)
|
62
63
|
result = @client.api_request(
|
63
64
|
method: "template.massUpdate",
|
64
65
|
params: {
|
65
|
-
hosts:
|
66
|
+
hosts: data[:hosts_id].map { |t| { hostid: t } },
|
66
67
|
templates: data[:templates_id].map { |t| { templateid: t } }
|
67
68
|
}
|
68
69
|
)
|
@@ -72,14 +73,14 @@ class ZabbixManager
|
|
72
73
|
# Mass add Templates to Hosts using Zabbix API
|
73
74
|
#
|
74
75
|
# @param data [Hash] Should include hosts_id array and templates_id array
|
75
|
-
# @raise [
|
76
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
76
77
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
77
78
|
# @return [Boolean]
|
78
79
|
def mass_add(data)
|
79
80
|
result = @client.api_request(
|
80
81
|
method: "template.massAdd",
|
81
82
|
params: {
|
82
|
-
hosts:
|
83
|
+
hosts: data[:hosts_id].map { |t| { hostid: t } },
|
83
84
|
templates: data[:templates_id].map { |t| { templateid: t } }
|
84
85
|
}
|
85
86
|
)
|
@@ -89,37 +90,20 @@ class ZabbixManager
|
|
89
90
|
# Mass remove Templates to Hosts using Zabbix API
|
90
91
|
#
|
91
92
|
# @param data [Hash] Should include hosts_id array and templates_id array
|
92
|
-
# @raise [
|
93
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
93
94
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
94
95
|
# @return [Boolean]
|
95
96
|
def mass_remove(data)
|
96
97
|
result = @client.api_request(
|
97
98
|
method: "template.massRemove",
|
98
99
|
params: {
|
99
|
-
hostids:
|
100
|
+
hostids: data[:hosts_id],
|
100
101
|
templateids: data[:templates_id],
|
101
|
-
groupids:
|
102
|
-
force:
|
102
|
+
groupids: data[:group_id],
|
103
|
+
force: 1
|
103
104
|
}
|
104
105
|
)
|
105
106
|
result.empty? ? false : true
|
106
107
|
end
|
107
|
-
|
108
|
-
# 新增 get_template_id 方法,使用列表 flatten 功能拉平数组对象
|
109
|
-
def get_template_ids(data)
|
110
|
-
# 直接调后端接口
|
111
|
-
result = @client.api_request(
|
112
|
-
method: "template.get",
|
113
|
-
params: {
|
114
|
-
output: "extend",
|
115
|
-
filter: {
|
116
|
-
host: [data].flatten
|
117
|
-
}
|
118
|
-
}
|
119
|
-
).map { |temp| [templateid: temp["templateid"]] }
|
120
|
-
|
121
|
-
# 返回 template 模板数组对象
|
122
|
-
result.empty? ? nil : result.flatten
|
123
|
-
end
|
124
108
|
end
|
125
109
|
end
|
@@ -16,10 +16,21 @@ class ZabbixManager
|
|
16
16
|
"description"
|
17
17
|
end
|
18
18
|
|
19
|
+
# The default options used when creating zabbix triggers
|
20
|
+
# @note 缺省的 trigger 参数
|
21
|
+
# @return [Hash]
|
22
|
+
def default_options
|
23
|
+
{
|
24
|
+
recovery_mode: 1,
|
25
|
+
type: 0,
|
26
|
+
manual_close: 1
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
19
30
|
# Dump Trigger object data by key from Zabbix API
|
20
31
|
#
|
21
32
|
# @param data [Hash] Should include desired object's key and value
|
22
|
-
# @raise [
|
33
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
23
34
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
24
35
|
# @return [Hash]
|
25
36
|
def dump_by_id(data)
|
@@ -41,9 +52,9 @@ class ZabbixManager
|
|
41
52
|
# Safely update Trigger object using Zabbix API by deleting and replacing trigger
|
42
53
|
#
|
43
54
|
# @param data [Hash] Needs to include description and hostid to properly identify Triggers via Zabbix API
|
44
|
-
# @raise [
|
55
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
45
56
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
46
|
-
# @return [Integer] Zabbix object id
|
57
|
+
# @return [Integer, TrueClass, FalseClass, NilClass] Zabbix object id
|
47
58
|
def safe_update(data)
|
48
59
|
log "[DEBUG] Call safe_update with parameters: #{data.inspect}"
|
49
60
|
|
@@ -83,94 +94,41 @@ class ZabbixManager
|
|
83
94
|
# Get or Create Trigger object using Zabbix API
|
84
95
|
#
|
85
96
|
# @param data [Hash] Needs to include description and hostid to properly identify Triggers via Zabbix API
|
86
|
-
# @raise [
|
97
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
87
98
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
88
|
-
# @return [Integer] Zabbix object id
|
99
|
+
# @return [Integer, TrueClass, FalseClass, NilClass] Zabbix object id
|
89
100
|
def get_or_create(data)
|
90
|
-
log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
|
101
|
+
log "[DEBUG] Call #{method_name}.get_or_create with parameters: #{data.inspect}"
|
91
102
|
|
92
|
-
|
93
|
-
id
|
103
|
+
if (id = get_id(description: data[:description], hostid: data[:hostid]))
|
104
|
+
id
|
105
|
+
else
|
106
|
+
create(data)
|
94
107
|
end
|
95
|
-
id
|
96
108
|
end
|
97
109
|
|
98
110
|
# Create or update Trigger object using Zabbix API
|
99
111
|
#
|
100
112
|
# @param data [Hash] Needs to include description and hostid to properly identify Triggers via Zabbix API
|
101
|
-
# @raise [
|
113
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
102
114
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
103
|
-
# @return [Integer] Zabbix object id
|
115
|
+
# @return [Integer, NilClass, TrueClass, FalseClass] Zabbix object id
|
104
116
|
def create_or_update(data)
|
105
117
|
triggerid = get_id(description: data[:description], hostid: data[:hostid])
|
106
|
-
|
107
118
|
triggerid ? update(data.merge(triggerid: triggerid)) : create(data)
|
108
119
|
end
|
109
120
|
|
110
|
-
# 测试数据
|
111
|
-
def mojo_data
|
112
|
-
data = {
|
113
|
-
comments: "MOJO1",
|
114
|
-
opdata: "MOJO_OPDATA",
|
115
|
-
priority: 1,
|
116
|
-
description: "MOJO1",
|
117
|
-
expression: "{SZX1-ISP-SW7:net.if.in[ifHCInOctets.1].avg(15m)}>=450000000 or {SZX1-ISP-SW7:net.if.out[ifHCOutOctets.1].avg(15m)}>=450000000",
|
118
|
-
recovery_expression: "{SZX1-ISP-SW7:net.if.in[ifHCInOctets.1].avg(15m)}<=350000000 or {SZX1-ISP-SW7:net.if.out[ifHCOutOctets.1].avg(15m)}<=350000000"
|
119
|
-
}
|
120
|
-
|
121
|
-
create_trigger data.stringify_keys!
|
122
|
-
end
|
123
121
|
|
124
|
-
#
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
comments: data["comments"],
|
132
|
-
priority: data["priority"],
|
133
|
-
description: data["description"],
|
134
|
-
expression: data["expression"],
|
135
|
-
recovery_expression: data["recovery_expression"],
|
136
|
-
opdata: data["opdata"],
|
137
|
-
recovery_mode: 1,
|
138
|
-
type: 0,
|
139
|
-
manual_close: 1
|
140
|
-
}
|
141
|
-
)
|
142
|
-
# 检查是是否存在
|
143
|
-
result.empty? ? nil : result["triggerids"]
|
144
|
-
end
|
145
|
-
|
146
|
-
# 更新触发器
|
147
|
-
def update_trigger(triggerid, data = {})
|
148
|
-
data = data.with_indifferent_access
|
149
|
-
# 请求生成触发器
|
150
|
-
result = @client.api_request(
|
151
|
-
method: "trigger.update",
|
152
|
-
params: {
|
153
|
-
triggerid: triggerid,
|
154
|
-
comments: data["comments"],
|
155
|
-
priority: data["priority"],
|
156
|
-
description: data["description"],
|
157
|
-
expression: data["expression"],
|
158
|
-
recovery_expression: data["recovery_expression"],
|
159
|
-
opdata: data["opdata"],
|
160
|
-
recovery_mode: 1,
|
161
|
-
type: 0,
|
162
|
-
manual_close: 1
|
163
|
-
}
|
164
|
-
)
|
165
|
-
# ap result
|
166
|
-
# 检查是是否存在
|
167
|
-
result.empty? ? nil : result["triggerids"]
|
168
|
-
end
|
169
|
-
|
170
|
-
# 添加触发器依赖项
|
122
|
+
# Add dependsOnTrigger using Zabbix API
|
123
|
+
#
|
124
|
+
# @param triggerid [Integer] identify for trigger via Zabbix API
|
125
|
+
# @param depend_on_trigger_id [Integer] identify for dependsOnTrigger via Zabbix API
|
126
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
127
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
128
|
+
# @return [Integer, NilClass] Zabbix object id
|
171
129
|
def add_trigger_dependency(triggerid, depend_on_trigger_id)
|
172
130
|
log "[DEBUG] Call add_trigger_dependency with parameters: #{triggerid} #{depend_on_trigger_id}"
|
173
|
-
|
131
|
+
|
174
132
|
result = @client.api_request(
|
175
133
|
method: "trigger.adddependencies",
|
176
134
|
params: {
|
@@ -26,9 +26,9 @@ class ZabbixManager
|
|
26
26
|
# Set permissions for usergroup using Zabbix API
|
27
27
|
#
|
28
28
|
# @param data [Hash] Needs to include usrgrpids and hostgroupids along with permissions to set
|
29
|
-
# @raise [
|
29
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
30
30
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
31
|
-
# @return [Integer] Zabbix object id (usergroup)
|
31
|
+
# @return [Integer, NilClass] Zabbix object id (usergroup)
|
32
32
|
def permissions(data)
|
33
33
|
permission = data[:permission] || 2
|
34
34
|
result = @client.api_request(
|
@@ -45,9 +45,9 @@ class ZabbixManager
|
|
45
45
|
#
|
46
46
|
# @deprecated Zabbix has removed massAdd in favor of update.
|
47
47
|
# @param data [Hash] Needs to include userids and usrgrpids to mass add users to groups
|
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 (usergroup)
|
50
|
+
# @return [Integer, NilClass] Zabbix object id (usergroup)
|
51
51
|
def add_user(data)
|
52
52
|
update_users(data)
|
53
53
|
end
|
@@ -55,9 +55,9 @@ class ZabbixManager
|
|
55
55
|
# Update users in usergroups using Zabbix API
|
56
56
|
#
|
57
57
|
# @param data [Hash] Needs to include userids and usrgrpids to mass update users in groups
|
58
|
-
# @raise [
|
58
|
+
# @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
|
59
59
|
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
60
|
-
# @return [Integer] Zabbix object id (usergroup)
|
60
|
+
# @return [Integer, NilClass] Zabbix object id (usergroup)
|
61
61
|
def update_users(data)
|
62
62
|
user_groups = data[:usrgrpids].map do |t|
|
63
63
|
{
|