zabbix_manager 5.0.1 → 5.0.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/.idea/workspace.xml +69 -0
- data/lib/zabbix_manager/basic/basic_alias.rb +37 -0
- data/lib/zabbix_manager/basic/basic_extend.rb +38 -0
- data/lib/zabbix_manager/basic/basic_func.rb +103 -0
- data/lib/zabbix_manager/basic/basic_init.rb +46 -0
- data/lib/zabbix_manager/basic/basic_logic.rb +227 -0
- data/lib/zabbix_manager/classes/actions.rb +41 -0
- data/lib/zabbix_manager/classes/applications.rb +43 -0
- data/lib/zabbix_manager/classes/configurations.rb +42 -0
- data/lib/zabbix_manager/classes/drules.rb +55 -0
- data/lib/zabbix_manager/classes/errors.rb +28 -0
- data/lib/zabbix_manager/classes/events.rb +18 -0
- data/lib/zabbix_manager/classes/graphs.rb +111 -0
- data/lib/zabbix_manager/classes/hostgroups.rb +58 -0
- data/lib/zabbix_manager/classes/hosts.rb +218 -0
- data/lib/zabbix_manager/classes/httptests.rb +54 -0
- data/lib/zabbix_manager/classes/items.rb +146 -0
- data/lib/zabbix_manager/classes/maintenance.rb +17 -0
- data/lib/zabbix_manager/classes/mediatypes.rb +109 -0
- data/lib/zabbix_manager/classes/problems.rb +133 -0
- data/lib/zabbix_manager/classes/proxies.rb +68 -0
- data/lib/zabbix_manager/classes/roles.rb +114 -0
- data/lib/zabbix_manager/classes/screens.rb +94 -0
- data/lib/zabbix_manager/classes/scripts.rb +35 -0
- data/lib/zabbix_manager/classes/server.rb +16 -0
- data/lib/zabbix_manager/classes/templates.rb +123 -0
- data/lib/zabbix_manager/classes/triggers.rb +166 -0
- data/lib/zabbix_manager/classes/unusable.rb +8 -0
- data/lib/zabbix_manager/classes/usergroups.rb +73 -0
- data/lib/zabbix_manager/classes/usermacros.rb +228 -0
- data/lib/zabbix_manager/classes/users.rb +64 -0
- data/lib/zabbix_manager/classes/valuemaps.rb +50 -0
- data/lib/zabbix_manager/client.rb +158 -0
- data/lib/zabbix_manager/version.rb +1 -1
- data/zabbix_manager-5.0.1.gem +0 -0
- data/zabbix_manager-5.0.2.gem +0 -0
- metadata +81 -4
@@ -0,0 +1,123 @@
|
|
1
|
+
class ZabbixManager
|
2
|
+
class Templates < Basic
|
3
|
+
# The method name used for interacting with Templates via Zabbix API
|
4
|
+
#
|
5
|
+
# @return [String]
|
6
|
+
def method_name
|
7
|
+
'template'
|
8
|
+
end
|
9
|
+
|
10
|
+
# The id field name used for identifying specific Template objects via Zabbix API
|
11
|
+
#
|
12
|
+
# @return [String]
|
13
|
+
def identify
|
14
|
+
'host'
|
15
|
+
end
|
16
|
+
|
17
|
+
# Delete Template object using Zabbix API
|
18
|
+
#
|
19
|
+
# @param data [Array] Should include array of templateid's
|
20
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
21
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
22
|
+
# @return [Integer] The Template object id that was deleted
|
23
|
+
def delete(data)
|
24
|
+
result = @client.api_request(method: 'template.delete', params: [data])
|
25
|
+
result.empty? ? nil : result['templateids'][0].to_i
|
26
|
+
end
|
27
|
+
|
28
|
+
# Get Template ids for Host from Zabbix API
|
29
|
+
#
|
30
|
+
# @param data [Hash] Should include host value to query for matching templates
|
31
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
32
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
33
|
+
# @return [Array] Returns array of Template ids
|
34
|
+
def get_ids_by_host(data)
|
35
|
+
@client.api_request(method: 'template.get', params: data).map do |tmpl|
|
36
|
+
tmpl['templateid']
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Get or Create Template object using Zabbix API
|
41
|
+
#
|
42
|
+
# @param data [Hash] Needs to include host to properly identify Templates via Zabbix API
|
43
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
44
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
45
|
+
# @return [Integer] Zabbix object id
|
46
|
+
def get_or_create(data)
|
47
|
+
unless (templateid = get_id(host: data[:host]))
|
48
|
+
templateid = create(data)
|
49
|
+
end
|
50
|
+
templateid
|
51
|
+
end
|
52
|
+
|
53
|
+
# Mass update Templates for Hosts using Zabbix API
|
54
|
+
#
|
55
|
+
# @param data [Hash] Should include hosts_id array and templates_id array
|
56
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
57
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
58
|
+
# @return [Boolean]
|
59
|
+
def mass_update(data)
|
60
|
+
result = @client.api_request(
|
61
|
+
method: 'template.massUpdate',
|
62
|
+
params: {
|
63
|
+
hosts: data[:hosts_id].map { |t| { hostid: t } },
|
64
|
+
templates: data[:templates_id].map { |t| { templateid: t } }
|
65
|
+
}
|
66
|
+
)
|
67
|
+
result.empty? ? false : true
|
68
|
+
end
|
69
|
+
|
70
|
+
# Mass add Templates to Hosts using Zabbix API
|
71
|
+
#
|
72
|
+
# @param data [Hash] Should include hosts_id array and templates_id array
|
73
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
74
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
75
|
+
# @return [Boolean]
|
76
|
+
def mass_add(data)
|
77
|
+
result = @client.api_request(
|
78
|
+
method: 'template.massAdd',
|
79
|
+
params: {
|
80
|
+
hosts: data[:hosts_id].map { |t| { hostid: t } },
|
81
|
+
templates: data[:templates_id].map { |t| { templateid: t } }
|
82
|
+
}
|
83
|
+
)
|
84
|
+
result.empty? ? false : true
|
85
|
+
end
|
86
|
+
|
87
|
+
# Mass remove Templates to Hosts using Zabbix API
|
88
|
+
#
|
89
|
+
# @param data [Hash] Should include hosts_id array and templates_id array
|
90
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
91
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
92
|
+
# @return [Boolean]
|
93
|
+
def mass_remove(data)
|
94
|
+
result = @client.api_request(
|
95
|
+
method: 'template.massRemove',
|
96
|
+
params: {
|
97
|
+
hostids: data[:hosts_id],
|
98
|
+
templateids: data[:templates_id],
|
99
|
+
groupids: data[:group_id],
|
100
|
+
force: 1
|
101
|
+
}
|
102
|
+
)
|
103
|
+
result.empty? ? false : true
|
104
|
+
end
|
105
|
+
|
106
|
+
# 新增 get_template_id 方法,使用列表 flatten 功能拉平数组对象
|
107
|
+
def get_template_ids(data)
|
108
|
+
# 直接调后端接口
|
109
|
+
result = @client.api_request(
|
110
|
+
method: 'template.get',
|
111
|
+
params: {
|
112
|
+
output: "extend",
|
113
|
+
filter: {
|
114
|
+
host: [data].flatten
|
115
|
+
}
|
116
|
+
}
|
117
|
+
).map { |temp| [templateid: temp['templateid']]}
|
118
|
+
|
119
|
+
# 返回 template 模板数组对象
|
120
|
+
result.empty? ? nil : result.flatten
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,166 @@
|
|
1
|
+
class ZabbixManager
|
2
|
+
class Triggers < Basic
|
3
|
+
# The method name used for interacting with Triggers via Zabbix API
|
4
|
+
#
|
5
|
+
# @return [String]
|
6
|
+
def method_name
|
7
|
+
'trigger'
|
8
|
+
end
|
9
|
+
|
10
|
+
# The id field name used for identifying specific Trigger objects via Zabbix API
|
11
|
+
#
|
12
|
+
# @return [String]
|
13
|
+
def identify
|
14
|
+
'description'
|
15
|
+
end
|
16
|
+
|
17
|
+
# Dump Trigger object data by key from Zabbix API
|
18
|
+
#
|
19
|
+
# @param data [Hash] Should include desired object's key and value
|
20
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
21
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
22
|
+
# @return [Hash]
|
23
|
+
def dump_by_id(data)
|
24
|
+
log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
|
25
|
+
|
26
|
+
@client.api_request(
|
27
|
+
method: 'trigger.get',
|
28
|
+
params: {
|
29
|
+
filter: {
|
30
|
+
keys.to_sym => data[keys.to_sym]
|
31
|
+
},
|
32
|
+
output: 'extend',
|
33
|
+
select_items: 'extend',
|
34
|
+
select_functions: 'extend'
|
35
|
+
}
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Safely update Trigger object using Zabbix API by deleting and replacing trigger
|
40
|
+
#
|
41
|
+
# @param data [Hash] Needs to include description and hostid to properly identify Triggers via Zabbix API
|
42
|
+
# @raise [ManagerError] 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 [Integer] Zabbix object id
|
45
|
+
def safe_update(data)
|
46
|
+
log "[DEBUG] Call safe_update with parameters: #{data.inspect}"
|
47
|
+
|
48
|
+
dump = {}
|
49
|
+
item_id = data[key.to_sym].to_i
|
50
|
+
dump_by_id(key.to_sym => data[key.to_sym]).each do |item|
|
51
|
+
dump = symbolize_keys(item) if item[key].to_i == data[key.to_sym].to_i
|
52
|
+
end
|
53
|
+
|
54
|
+
expression = dump[:items][0][:key_] + '.' + dump[:functions][0][:function] + '(' + dump[:functions][0][:parameter] + ')'
|
55
|
+
dump[:expression] = dump[:expression].gsub(/\{(\d*)\}/, "{#{expression}}") # TODO: ugly regexp
|
56
|
+
dump.delete(:functions)
|
57
|
+
dump.delete(:items)
|
58
|
+
|
59
|
+
old_expression = data[:expression]
|
60
|
+
data[:expression] = data[:expression].gsub(/\{.*\:/, '{') # TODO: ugly regexp
|
61
|
+
data.delete(:templateid)
|
62
|
+
|
63
|
+
log "[DEBUG] expression: #{dump[:expression]}\n data: #{data[:expression]}"
|
64
|
+
|
65
|
+
if hash_equals?(dump, data)
|
66
|
+
log "[DEBUG] Equal keys #{dump} and #{data}, skip safe_update"
|
67
|
+
item_id
|
68
|
+
else
|
69
|
+
data[:expression] = old_expression
|
70
|
+
# disable old trigger
|
71
|
+
log '[DEBUG] disable :' + @client.api_request(method: "#{method_name}.update", params: [{ triggerid: data[:triggerid], status: '1' }]).inspect
|
72
|
+
# create new trigger
|
73
|
+
data.delete(:triggerid)
|
74
|
+
create(data)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# Get or Create Trigger object using Zabbix API
|
79
|
+
#
|
80
|
+
# @param data [Hash] Needs to include description and hostid to properly identify Triggers via Zabbix API
|
81
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
82
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
83
|
+
# @return [Integer] Zabbix object id
|
84
|
+
def get_or_create(data)
|
85
|
+
log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
|
86
|
+
|
87
|
+
unless (id = get_id(description: data[:description], hostid: data[:hostid]))
|
88
|
+
id = create(data)
|
89
|
+
end
|
90
|
+
id
|
91
|
+
end
|
92
|
+
|
93
|
+
# Create or update Trigger object using Zabbix API
|
94
|
+
#
|
95
|
+
# @param data [Hash] Needs to include description and hostid to properly identify Triggers via Zabbix API
|
96
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
97
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
98
|
+
# @return [Integer] Zabbix object id
|
99
|
+
def create_or_update(data)
|
100
|
+
triggerid = get_id(description: data[:description], hostid: data[:hostid])
|
101
|
+
|
102
|
+
triggerid ? update(data.merge(triggerid: triggerid)) : create(data)
|
103
|
+
end
|
104
|
+
|
105
|
+
# 测试数据
|
106
|
+
def mojo_data
|
107
|
+
data = {
|
108
|
+
comments: "MOJO1",
|
109
|
+
opdata: "MOJO_OPDATA",
|
110
|
+
priority: 1,
|
111
|
+
description: "MOJO1",
|
112
|
+
expression: "{SZX1-ISP-SW7:net.if.in[ifHCInOctets.1].avg(15m)}>=450000000 or {SZX1-ISP-SW7:net.if.out[ifHCOutOctets.1].avg(15m)}>=450000000",
|
113
|
+
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",
|
114
|
+
}
|
115
|
+
|
116
|
+
create_trigger data.stringify_keys!
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
# 设置触发器
|
121
|
+
def create_trigger(data = {})
|
122
|
+
data = data.with_indifferent_access
|
123
|
+
# 请求生成触发器
|
124
|
+
result = @client.api_request(
|
125
|
+
method: 'trigger.create',
|
126
|
+
params: {
|
127
|
+
comments: data["comments"],
|
128
|
+
priority: data["priority"],
|
129
|
+
description: data["description"],
|
130
|
+
expression: data["expression"],
|
131
|
+
recovery_expression: data["recovery_expression"],
|
132
|
+
opdata: data["opdata"],
|
133
|
+
recovery_mode: 1,
|
134
|
+
type: 0,
|
135
|
+
manual_close: 1,
|
136
|
+
}
|
137
|
+
)
|
138
|
+
# 检查是是否存在
|
139
|
+
result.empty? ? nil : result["triggerids"]
|
140
|
+
end
|
141
|
+
|
142
|
+
# 更新触发器
|
143
|
+
def update_trigger(triggerid, data = {})
|
144
|
+
data = data.with_indifferent_access
|
145
|
+
# 请求生成触发器
|
146
|
+
result = @client.api_request(
|
147
|
+
method: 'trigger.update',
|
148
|
+
params: {
|
149
|
+
triggerid: triggerid.to_i,
|
150
|
+
comments: data["comments"],
|
151
|
+
priority: data["priority"],
|
152
|
+
description: data["description"],
|
153
|
+
expression: data["expression"],
|
154
|
+
recovery_expression: data["recovery_expression"],
|
155
|
+
opdata: data["opdata"],
|
156
|
+
recovery_mode: 1,
|
157
|
+
type: 1,
|
158
|
+
manual_close: 1,
|
159
|
+
}
|
160
|
+
)
|
161
|
+
ap result
|
162
|
+
# 检查是是否存在
|
163
|
+
result.empty? ? nil : result["triggerids"]
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
class ZabbixManager
|
2
|
+
class Usergroups < Basic
|
3
|
+
# The method name used for interacting with Usergroups via Zabbix API
|
4
|
+
#
|
5
|
+
# @return [String]
|
6
|
+
def method_name
|
7
|
+
'usergroup'
|
8
|
+
end
|
9
|
+
|
10
|
+
# The key field name used for Usergroup objects via Zabbix API
|
11
|
+
#
|
12
|
+
# @return [String]
|
13
|
+
def key
|
14
|
+
'usrgrpid'
|
15
|
+
end
|
16
|
+
|
17
|
+
# The id field name used for identifying specific Usergroup objects via Zabbix API
|
18
|
+
#
|
19
|
+
# @return [String]
|
20
|
+
def identify
|
21
|
+
'name'
|
22
|
+
end
|
23
|
+
|
24
|
+
# Set permissions for usergroup using Zabbix API
|
25
|
+
#
|
26
|
+
# @param data [Hash] Needs to include usrgrpids and hostgroupids along with permissions to set
|
27
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
28
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
29
|
+
# @return [Integer] Zabbix object id (usergroup)
|
30
|
+
def permissions(data)
|
31
|
+
permission = data[:permission] || 2
|
32
|
+
result = @client.api_request(
|
33
|
+
method: 'usergroup.update',
|
34
|
+
params: {
|
35
|
+
usrgrpid: data[:usrgrpid],
|
36
|
+
rights: data[:hostgroupids].map { |t| { permission: permission, id: t } }
|
37
|
+
}
|
38
|
+
)
|
39
|
+
result ? result['usrgrpids'][0].to_i : nil
|
40
|
+
end
|
41
|
+
|
42
|
+
# Add users to usergroup using Zabbix API
|
43
|
+
#
|
44
|
+
# @deprecated Zabbix has removed massAdd in favor of update.
|
45
|
+
# @param data [Hash] Needs to include userids and usrgrpids to mass add users to groups
|
46
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
47
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
48
|
+
# @return [Integer] Zabbix object id (usergroup)
|
49
|
+
def add_user(data)
|
50
|
+
update_users(data)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Update users in usergroups using Zabbix API
|
54
|
+
#
|
55
|
+
# @param data [Hash] Needs to include userids and usrgrpids to mass update users in groups
|
56
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
57
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
58
|
+
# @return [Integer] Zabbix object id (usergroup)
|
59
|
+
def update_users(data)
|
60
|
+
user_groups = data[:usrgrpids].map do |t|
|
61
|
+
{
|
62
|
+
usrgrpid: t,
|
63
|
+
userids: data[:userids],
|
64
|
+
}
|
65
|
+
end
|
66
|
+
result = @client.api_request(
|
67
|
+
method: 'usergroup.update',
|
68
|
+
params: user_groups,
|
69
|
+
)
|
70
|
+
result ? result['usrgrpids'][0].to_i : nil
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,228 @@
|
|
1
|
+
class ZabbixManager
|
2
|
+
class Usermacros < Basic
|
3
|
+
# The id field name used for identifying specific User macro objects via Zabbix API
|
4
|
+
#
|
5
|
+
# @return [String]
|
6
|
+
def identify
|
7
|
+
'macro'
|
8
|
+
end
|
9
|
+
|
10
|
+
# The method name used for interacting with User macros via Zabbix API
|
11
|
+
#
|
12
|
+
# @return [String]
|
13
|
+
def method_name
|
14
|
+
'usermacro'
|
15
|
+
end
|
16
|
+
|
17
|
+
# Get User macro object id from Zabbix API based on provided data
|
18
|
+
#
|
19
|
+
# @param data [Hash] Needs to include macro to properly identify user macros via Zabbix API
|
20
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
|
21
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
22
|
+
# @return [Integer] Zabbix object id
|
23
|
+
def get_id(data)
|
24
|
+
log "[DEBUG] Call get_id with parameters: #{data.inspect}"
|
25
|
+
|
26
|
+
# symbolize keys if the user used string keys instead of symbols
|
27
|
+
data = symbolize_keys(data) if data.key?(identify)
|
28
|
+
# raise an error if identify name was not supplied
|
29
|
+
name = data[identify.to_sym]
|
30
|
+
raise ManagerError.new("#{identify} not supplied in call to get_id") if name.nil?
|
31
|
+
|
32
|
+
result = request(data, 'usermacro.get', 'hostmacroid')
|
33
|
+
|
34
|
+
!result.empty? && result[0].key?('hostmacroid') ? result[0]['hostmacroid'].to_i : nil
|
35
|
+
end
|
36
|
+
|
37
|
+
# Get Global macro object id from Zabbix API based on provided data
|
38
|
+
#
|
39
|
+
# @param data [Hash] Needs to include macro to properly identify global macros via Zabbix API
|
40
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
|
41
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
42
|
+
# @return [Integer] Zabbix object id
|
43
|
+
def get_id_global(data)
|
44
|
+
log "[DEBUG] Call get_id_global with parameters: #{data.inspect}"
|
45
|
+
|
46
|
+
# symbolize keys if the user used string keys instead of symbols
|
47
|
+
data = symbolize_keys(data) if data.key?(identify)
|
48
|
+
# raise an error if identify name was not supplied
|
49
|
+
name = data[identify.to_sym]
|
50
|
+
raise ManagerError.new("#{identify} not supplied in call to get_id_global") if name.nil?
|
51
|
+
|
52
|
+
result = request(data, 'usermacro.get', 'globalmacroid')
|
53
|
+
|
54
|
+
!result.empty? && result[0].key?('globalmacroid') ? result[0]['globalmacroid'].to_i : nil
|
55
|
+
end
|
56
|
+
|
57
|
+
# Get full/extended User macro data from Zabbix API
|
58
|
+
#
|
59
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
60
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
61
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
62
|
+
# @return [Hash]
|
63
|
+
def get_full_data(data)
|
64
|
+
log "[DEBUG] Call get_full_data with parameters: #{data.inspect}"
|
65
|
+
|
66
|
+
request(data, 'usermacro.get', 'hostmacroid')
|
67
|
+
end
|
68
|
+
|
69
|
+
# Get full/extended Global macro data from Zabbix API
|
70
|
+
#
|
71
|
+
# @param data [Hash] Should include object's id field name (identify) and id value
|
72
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
73
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
74
|
+
# @return [Hash]
|
75
|
+
def get_full_data_global(data)
|
76
|
+
log "[DEBUG] Call get_full_data_global with parameters: #{data.inspect}"
|
77
|
+
|
78
|
+
request(data, 'usermacro.get', 'globalmacroid')
|
79
|
+
end
|
80
|
+
|
81
|
+
# Create new User macro object using Zabbix API (with defaults)
|
82
|
+
#
|
83
|
+
# @param data [Hash] Needs to include hostid, macro, and value to create User macro via Zabbix API
|
84
|
+
# @raise [ManagerError] 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] The object id if a single object is created
|
87
|
+
# @return [Boolean] True/False if multiple objects are created
|
88
|
+
def create(data)
|
89
|
+
request(data, 'usermacro.create', 'hostmacroids')
|
90
|
+
end
|
91
|
+
|
92
|
+
# Create new Global macro object using Zabbix API (with defaults)
|
93
|
+
#
|
94
|
+
# @param data [Hash] Needs to include hostid, macro, and value to create Global macro via Zabbix API
|
95
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
96
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
97
|
+
# @return [Integer] The object id if a single object is created
|
98
|
+
# @return [Boolean] True/False if multiple objects are created
|
99
|
+
def create_global(data)
|
100
|
+
request(data, 'usermacro.createglobal', 'globalmacroids')
|
101
|
+
end
|
102
|
+
|
103
|
+
# Delete User macro object using Zabbix API
|
104
|
+
#
|
105
|
+
# @param data [Hash] Should include hostmacroid's of User macros to delete
|
106
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
107
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
108
|
+
# @return [Integer] The object id if a single object is deleted
|
109
|
+
# @return [Boolean] True/False if multiple objects are deleted
|
110
|
+
def delete(data)
|
111
|
+
data_delete = [data]
|
112
|
+
request(data_delete, 'usermacro.delete', 'hostmacroids')
|
113
|
+
end
|
114
|
+
|
115
|
+
# Delete Global macro object using Zabbix API
|
116
|
+
#
|
117
|
+
# @param data [Hash] Should include hostmacroid's of Global macros to delete
|
118
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
119
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
120
|
+
# @return [Integer] The object id if a single object is deleted
|
121
|
+
# @return [Boolean] True/False if multiple objects are deleted
|
122
|
+
def delete_global(data)
|
123
|
+
data_delete = [data]
|
124
|
+
request(data_delete, 'usermacro.deleteglobal', 'globalmacroids')
|
125
|
+
end
|
126
|
+
|
127
|
+
# Update User macro object using Zabbix API
|
128
|
+
#
|
129
|
+
# @param data [Hash] Should include object's id field name (identify), id value, and fields to update
|
130
|
+
# @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
|
131
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
132
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
133
|
+
# @return [Integer] The object id if a single object is created
|
134
|
+
# @return [Boolean] True/False if multiple objects are created
|
135
|
+
def update(data)
|
136
|
+
request(data, 'usermacro.update', 'hostmacroids')
|
137
|
+
end
|
138
|
+
|
139
|
+
# Update Global macro object using Zabbix API
|
140
|
+
#
|
141
|
+
# @param data [Hash] Should include object's id field name (identify), id value, and fields to update
|
142
|
+
# @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
|
143
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
144
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
145
|
+
# @return [Integer] The object id if a single object is created
|
146
|
+
# @return [Boolean] True/False if multiple objects are created
|
147
|
+
def update_global(data)
|
148
|
+
request(data, 'usermacro.updateglobal', 'globalmacroids')
|
149
|
+
end
|
150
|
+
|
151
|
+
# Get or Create User macro object using Zabbix API
|
152
|
+
#
|
153
|
+
# @param data [Hash] Needs to include macro and hostid to properly identify User macros via Zabbix API
|
154
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
155
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
156
|
+
# @return [Integer] Zabbix object id
|
157
|
+
def get_or_create(data)
|
158
|
+
log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
|
159
|
+
|
160
|
+
unless (id = get_id(macro: data[:macro], hostid: data[:hostid]))
|
161
|
+
id = create(data)
|
162
|
+
end
|
163
|
+
id
|
164
|
+
end
|
165
|
+
|
166
|
+
# Get or Create Global macro object using Zabbix API
|
167
|
+
#
|
168
|
+
# @param data [Hash] Needs to include macro and hostid to properly identify Global macros via Zabbix API
|
169
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
170
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
171
|
+
# @return [Integer] Zabbix object id
|
172
|
+
def get_or_create_global(data)
|
173
|
+
log "[DEBUG] Call get_or_create_global with parameters: #{data.inspect}"
|
174
|
+
|
175
|
+
unless (id = get_id_global(macro: data[:macro], hostid: data[:hostid]))
|
176
|
+
id = create_global(data)
|
177
|
+
end
|
178
|
+
id
|
179
|
+
end
|
180
|
+
|
181
|
+
# Create or update User macro object using Zabbix API
|
182
|
+
#
|
183
|
+
# @param data [Hash] Needs to include macro and hostid to properly identify User macros via Zabbix API
|
184
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
185
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
186
|
+
# @return [Integer] Zabbix object id
|
187
|
+
def create_or_update(data)
|
188
|
+
hostmacroid = get_id(macro: data[:macro], hostid: data[:hostid])
|
189
|
+
hostmacroid ? update(data.merge(hostmacroid: hostmacroid)) : create(data)
|
190
|
+
end
|
191
|
+
|
192
|
+
# Create or update Global macro object using Zabbix API
|
193
|
+
#
|
194
|
+
# @param data [Hash] Needs to include macro and hostid to properly identify Global macros via Zabbix API
|
195
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
196
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
197
|
+
# @return [Integer] Zabbix object id
|
198
|
+
def create_or_update_global(data)
|
199
|
+
globalmacroid = get_id_global(macro: data[:macro], hostid: data[:hostid])
|
200
|
+
globalmacroid ? update_global(data.merge(globalmacroid: globalmacroid)) : create_global(data)
|
201
|
+
end
|
202
|
+
|
203
|
+
private
|
204
|
+
|
205
|
+
# Custom request method to handle both User and Global macros in one
|
206
|
+
#
|
207
|
+
# @param data [Hash] Needs to include macro and hostid to properly identify Global macros via Zabbix API
|
208
|
+
# @param method [String] Zabbix API method to use for the request
|
209
|
+
# @param result_key [String] Which key to use for parsing results based on User vs Global macros
|
210
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
211
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
212
|
+
# @return [Integer] Zabbix object id
|
213
|
+
def request(data, method, result_key)
|
214
|
+
# Zabbix has different result formats for gets vs updates
|
215
|
+
if method.include?('.get')
|
216
|
+
if result_key.include?('global')
|
217
|
+
@client.api_request(method: method, params: { globalmacro: true, filter: data })
|
218
|
+
else
|
219
|
+
@client.api_request(method: method, params: { filter: data })
|
220
|
+
end
|
221
|
+
else
|
222
|
+
result = @client.api_request(method: method, params: data)
|
223
|
+
|
224
|
+
result.key?(result_key) && !result[result_key].empty? ? result[result_key][0].to_i : nil
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
class ZabbixManager
|
2
|
+
class Users < Basic
|
3
|
+
# The method name used for interacting with Users via Zabbix API
|
4
|
+
#
|
5
|
+
# @return [String]
|
6
|
+
def method_name
|
7
|
+
'user'
|
8
|
+
end
|
9
|
+
|
10
|
+
# The keys field name used for User objects via Zabbix API
|
11
|
+
#
|
12
|
+
# @return [String]
|
13
|
+
def keys
|
14
|
+
'userids'
|
15
|
+
end
|
16
|
+
|
17
|
+
# The key field name used for User objects via Zabbix API
|
18
|
+
#
|
19
|
+
# @return [String]
|
20
|
+
def key
|
21
|
+
'userid'
|
22
|
+
end
|
23
|
+
|
24
|
+
# The id field name used for identifying specific User objects via Zabbix API
|
25
|
+
#
|
26
|
+
# @return [String]
|
27
|
+
def identify
|
28
|
+
'alias'
|
29
|
+
end
|
30
|
+
|
31
|
+
def medias_helper(data, action)
|
32
|
+
result = @client.api_request(
|
33
|
+
method: "user.#{action}",
|
34
|
+
params: data[:userids].map do |t|
|
35
|
+
{
|
36
|
+
userid: t,
|
37
|
+
user_medias: data[:media],
|
38
|
+
}
|
39
|
+
end,
|
40
|
+
)
|
41
|
+
result ? result['userids'][0].to_i : nil
|
42
|
+
end
|
43
|
+
|
44
|
+
# Add media to users using Zabbix API
|
45
|
+
#
|
46
|
+
# @param data [Hash] Needs to include userids and media to mass add media to users
|
47
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
48
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
49
|
+
# @return [Integer] Zabbix object id (media)
|
50
|
+
def add_medias(data)
|
51
|
+
medias_helper(data, 'update')
|
52
|
+
end
|
53
|
+
|
54
|
+
# Update media for users using Zabbix API
|
55
|
+
#
|
56
|
+
# @param data [Hash] Needs to include userids and media to mass update media for users
|
57
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
58
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
59
|
+
# @return [Integer] Zabbix object id (user)
|
60
|
+
def update_medias(data)
|
61
|
+
medias_helper(data, 'update')
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|