zabbixapi 0.1.6 → 0.1.6.1
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.
- data/README.rdoc +20 -6
- data/examples/zabbix_filesystem +1 -1
- data/lib/zabbixapi/application.rb +14 -31
- data/lib/zabbixapi/base.rb +24 -25
- data/lib/zabbixapi/graph.rb +19 -33
- data/lib/zabbixapi/group.rb +31 -51
- data/lib/zabbixapi/host.rb +43 -61
- data/lib/zabbixapi/item.rb +56 -97
- data/lib/zabbixapi/screen.rb +65 -112
- data/lib/zabbixapi/template.rb +42 -98
- data/lib/zabbixapi/trigger.rb +28 -59
- data/lib/zabbixapi/usermacro.rb +27 -42
- data/spec/item.rb +38 -42
- data/zabbixapi.gemspec +1 -1
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -3,21 +3,35 @@
|
|
3
3
|
Simple and lightweight ruby module for work with zabbix api version 1.8.x
|
4
4
|
|
5
5
|
You can:
|
6
|
-
* Create host/template/application/items/triggers and screens;
|
6
|
+
* Create and delete host/template/application/items/triggers and screens;
|
7
7
|
* Get info about all zabbix essences;
|
8
8
|
|
9
9
|
== Installation
|
10
10
|
|
11
11
|
gem install zabbixapi
|
12
12
|
|
13
|
-
== Get Start
|
13
|
+
== Get Start
|
14
14
|
|
15
|
-
*
|
15
|
+
* Create host and get hostid from zabbix api:
|
16
16
|
|
17
|
-
zbx
|
18
|
-
|
17
|
+
zbx = Zabbix::ZabbixApi.new('https://zabbix.example.com', 'login', 'password')
|
18
|
+
host_options = {
|
19
|
+
"ip" => '127.0.0.1',
|
20
|
+
"dns" => 'my.example.com',
|
21
|
+
"host" => 'my.example.com',
|
22
|
+
"useip" => 1,
|
23
|
+
"groups" => ['some_group']
|
24
|
+
}
|
25
|
+
if zbx.create_host(host_options)
|
26
|
+
puts zbx.get_host_id('my.example.com')
|
27
|
+
end
|
19
28
|
|
20
|
-
|
29
|
+
* Create hostgroup and get hostgroupid from zabbix api:
|
30
|
+
|
31
|
+
zbx = Zabbix::ZabbixApi.new('https://zabbix.example.com', 'login', 'password')
|
32
|
+
if zbx.add_group('some_group')
|
33
|
+
puts zbx.get_group_id('some_group')
|
34
|
+
end
|
21
35
|
|
22
36
|
== Dependencies
|
23
37
|
|
data/examples/zabbix_filesystem
CHANGED
@@ -1,50 +1,33 @@
|
|
1
1
|
module Zabbix
|
2
|
+
|
2
3
|
class ZabbixApi
|
3
4
|
def add_application(app_options)
|
4
|
-
|
5
5
|
app_options_default = {
|
6
|
-
|
7
|
-
|
6
|
+
'hostid' => nil,
|
7
|
+
'name' => nil
|
8
8
|
}
|
9
|
-
|
10
9
|
application = merge_opt(app_options_default, app_options)
|
11
10
|
message = {
|
12
|
-
|
13
|
-
|
11
|
+
'method' => 'application.create',
|
12
|
+
'params' => application
|
14
13
|
}
|
15
|
-
|
16
14
|
responce = send_request(message)
|
17
|
-
|
18
|
-
unless responce.empty? then
|
19
|
-
result = responce['applicationids'][0].to_i
|
20
|
-
else
|
21
|
-
result = nil
|
22
|
-
end
|
23
|
-
|
24
|
-
return result
|
15
|
+
responce.empty? ? nil : responce['applicationids'][0].to_i
|
25
16
|
end
|
26
17
|
end
|
27
18
|
|
28
19
|
def get_app_id(host_id, app_name)
|
29
|
-
|
30
20
|
message = {
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
21
|
+
'method' => 'application.get',
|
22
|
+
'params' => {
|
23
|
+
'filter' => {
|
24
|
+
'name' => app_name,
|
25
|
+
'hostid' => host_id
|
26
|
+
}
|
36
27
|
}
|
37
|
-
}
|
38
28
|
}
|
39
|
-
|
40
29
|
responce = send_request(message)
|
30
|
+
responce.empty? ? nil : responce[0]['applicationid']
|
31
|
+
end
|
41
32
|
|
42
|
-
unless responce.empty? then
|
43
|
-
result = responce[0]['applicationid']
|
44
|
-
else
|
45
|
-
result = nil
|
46
|
-
end
|
47
|
-
|
48
|
-
return result
|
49
|
-
end
|
50
33
|
end
|
data/lib/zabbixapi/base.rb
CHANGED
@@ -25,7 +25,7 @@ module Zabbix
|
|
25
25
|
|
26
26
|
attr_accessor :debug
|
27
27
|
|
28
|
-
def initialize (
|
28
|
+
def initialize (api_url, api_user, api_password)
|
29
29
|
@api_url = api_url
|
30
30
|
@api_user = api_user
|
31
31
|
@api_password = api_password
|
@@ -45,7 +45,7 @@ module Zabbix
|
|
45
45
|
uri = URI.parse(@api_url)
|
46
46
|
http = Net::HTTP.new(uri.host, uri.port)
|
47
47
|
|
48
|
-
if
|
48
|
+
if uri.scheme == "https"
|
49
49
|
http.use_ssl = true
|
50
50
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
51
51
|
end
|
@@ -74,6 +74,11 @@ module Zabbix
|
|
74
74
|
|
75
75
|
response_body_hash = JSON.parse(response.body)
|
76
76
|
|
77
|
+
if @debug
|
78
|
+
puts "[ZBXAPI] : INFO : Response body"
|
79
|
+
puts response_body_hash.inspect
|
80
|
+
end
|
81
|
+
|
77
82
|
if error = response_body_hash['error']
|
78
83
|
error_message = error['message']
|
79
84
|
error_data = error['data']
|
@@ -82,17 +87,15 @@ module Zabbix
|
|
82
87
|
e_message = "Code: [" + error_code.to_s + "]. Message: [" + error_message +\
|
83
88
|
"]. Data: [" + error_data + "]."
|
84
89
|
|
85
|
-
case error_code.to_s
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
+
case error_code.to_s
|
91
|
+
when '-32602'
|
92
|
+
raise Zabbix::AlreadyExist.new(e_message)
|
93
|
+
else
|
94
|
+
raise Zabbix::ResponseError.new(e_message)
|
90
95
|
end
|
91
96
|
end
|
92
97
|
|
93
|
-
|
94
|
-
|
95
|
-
return result
|
98
|
+
return response_body_hash['result']
|
96
99
|
end
|
97
100
|
|
98
101
|
def send_request(message)
|
@@ -101,33 +104,29 @@ module Zabbix
|
|
101
104
|
end
|
102
105
|
|
103
106
|
def auth()
|
104
|
-
|
105
107
|
auth_message = {
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
108
|
+
'auth' => nil,
|
109
|
+
'method' => 'user.authenticate',
|
110
|
+
'params' => {
|
111
|
+
'user' => @api_user,
|
112
|
+
'password' => @api_password,
|
113
|
+
'0' => '0'
|
114
|
+
}
|
113
115
|
}
|
114
|
-
|
115
|
-
auth_id = do_request(auth_message)
|
116
|
-
|
117
|
-
return auth_id
|
116
|
+
do_request(auth_message)
|
118
117
|
end
|
119
118
|
|
120
119
|
# Utils.
|
120
|
+
|
121
121
|
def merge_opt(a, b)
|
122
122
|
c = {}
|
123
|
-
|
124
123
|
b.each_pair do |key, value|
|
125
124
|
if a.has_key?(key) then
|
126
125
|
c[key] = value
|
127
126
|
end
|
128
|
-
|
129
|
-
|
127
|
+
end
|
130
128
|
return a.merge(c)
|
131
129
|
end
|
130
|
+
|
132
131
|
end
|
133
132
|
end
|
data/lib/zabbixapi/graph.rb
CHANGED
@@ -3,64 +3,50 @@ module Zabbix
|
|
3
3
|
|
4
4
|
def add_graph(graph)
|
5
5
|
message = {
|
6
|
-
|
7
|
-
|
6
|
+
'method' => 'graph.create',
|
7
|
+
'params' => graph
|
8
8
|
}
|
9
|
-
|
10
9
|
response = send_request(message)
|
11
|
-
|
12
10
|
return 0
|
13
11
|
end
|
14
12
|
|
15
13
|
def get_graph_id(host_id, graph_name)
|
16
|
-
|
17
14
|
message = {
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
15
|
+
'method' => 'graph.get',
|
16
|
+
'params' => {
|
17
|
+
'filter' => {
|
18
|
+
'name' => graph_name,
|
19
|
+
'hostid' => host_id
|
20
|
+
}
|
23
21
|
}
|
24
|
-
}
|
25
22
|
}
|
26
|
-
|
27
23
|
response = send_request(message)
|
28
|
-
|
29
|
-
unless ( response.empty? ) then
|
30
|
-
result = response[0]['graphid']
|
31
|
-
else
|
32
|
-
result = nil
|
33
|
-
end
|
24
|
+
response.empty? ? nil : response[0]['graphid']
|
34
25
|
end
|
35
26
|
|
36
27
|
def get_graphs(host_id)
|
37
|
-
|
38
28
|
message = {
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
29
|
+
'method' => 'graph.get',
|
30
|
+
'params' => {
|
31
|
+
'extendoutput' => '1',
|
32
|
+
'filter' => {
|
33
|
+
'hostid' => host_id
|
34
|
+
}
|
44
35
|
}
|
45
|
-
}
|
46
36
|
}
|
47
|
-
|
48
37
|
response = send_request(message)
|
49
|
-
|
50
|
-
|
38
|
+
if response.empty?
|
39
|
+
result = nil
|
40
|
+
else
|
51
41
|
result = {}
|
52
|
-
|
53
42
|
response.each() do |graph|
|
54
43
|
graph_id = graph['graphid']
|
55
44
|
graph_name = graph['name']
|
56
|
-
|
57
45
|
result[graph_id] = graph_name
|
58
46
|
end
|
59
|
-
else
|
60
|
-
result = nil
|
61
47
|
end
|
62
|
-
|
63
48
|
return result
|
64
49
|
end
|
50
|
+
|
65
51
|
end
|
66
52
|
end
|
data/lib/zabbixapi/group.rb
CHANGED
@@ -1,78 +1,58 @@
|
|
1
1
|
module Zabbix
|
2
|
-
|
3
2
|
class ZabbixApi
|
4
|
-
def get_group_id(pattern)
|
5
3
|
|
4
|
+
def get_group_id(pattern)
|
6
5
|
message = {
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
'method' => 'hostgroup.get',
|
7
|
+
'params' => {
|
8
|
+
'filter' => {
|
9
|
+
'name' => pattern
|
10
|
+
}
|
11
11
|
}
|
12
|
-
}
|
13
12
|
}
|
14
|
-
|
15
13
|
response = send_request(message)
|
16
|
-
|
17
|
-
if not ( response.empty? ) then
|
18
|
-
result = response[0]['groupid']
|
19
|
-
else
|
20
|
-
result = nil
|
21
|
-
end
|
22
|
-
|
23
|
-
return result
|
14
|
+
response.empty? ? nil : response[0]['groupid']
|
24
15
|
end
|
25
16
|
|
26
17
|
def group_exist?(pattern)
|
27
|
-
|
28
18
|
group_id = get_groups_id(pattern)
|
29
|
-
|
30
|
-
if ( group_id ) then
|
31
|
-
return true
|
32
|
-
else
|
33
|
-
return false
|
34
|
-
end
|
19
|
+
group_id ? true : false
|
35
20
|
end
|
36
21
|
|
37
22
|
def add_group(groupname)
|
38
|
-
|
39
23
|
message = {
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
24
|
+
'method' => 'hostgroup.create',
|
25
|
+
'params' => {
|
26
|
+
'name' => groupname
|
27
|
+
}
|
44
28
|
}
|
45
|
-
|
46
29
|
response = send_request(message)
|
30
|
+
response ? response['groupids'][0].to_i : nil
|
31
|
+
end
|
47
32
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
33
|
+
def delete_group(groupname)
|
34
|
+
group_id = get_group_id(groupname)
|
35
|
+
message = {
|
36
|
+
'method' => 'hostgroup.delete',
|
37
|
+
'params' => {
|
38
|
+
'groupid' => group_id
|
39
|
+
}
|
40
|
+
}
|
41
|
+
response = send_request(message)
|
42
|
+
response ? response['groupids'][0].to_i : nil
|
55
43
|
end
|
56
44
|
|
57
45
|
def add_host_to_group(host_id, group_id)
|
58
|
-
|
59
46
|
message = {
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
47
|
+
'method' => 'hostgroup.massAdd',
|
48
|
+
'params' => {
|
49
|
+
'groups' => [group_id],
|
50
|
+
'hosts' => [host_id]
|
51
|
+
}
|
65
52
|
}
|
66
|
-
|
67
53
|
response = send_request(message)
|
68
|
-
|
69
|
-
if not ( response.empty? ) then
|
70
|
-
result = true
|
71
|
-
else
|
72
|
-
result = false
|
73
|
-
end
|
74
|
-
|
75
|
-
return result
|
54
|
+
response.empty? ? false : true
|
76
55
|
end
|
56
|
+
|
77
57
|
end
|
78
58
|
end
|
data/lib/zabbixapi/host.rb
CHANGED
@@ -1,86 +1,68 @@
|
|
1
1
|
module Zabbix
|
2
|
-
|
3
2
|
class ZabbixApi
|
3
|
+
|
4
4
|
def update_host(host_id, host_options)
|
5
5
|
host = host_options
|
6
6
|
host['hostid'] = host_id
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
}
|
12
|
-
|
7
|
+
message = {
|
8
|
+
'method' => 'host.update',
|
9
|
+
'params' => host
|
10
|
+
}
|
13
11
|
responce = send_request(message)
|
14
|
-
|
15
|
-
|
16
|
-
result = responce['hostids'][0].to_i
|
17
|
-
else
|
18
|
-
result = nil
|
19
|
-
end
|
20
|
-
|
21
|
-
return result
|
22
|
-
end
|
12
|
+
responce.empty? ? nil : responce['hostids'][0].to_i
|
13
|
+
end
|
23
14
|
|
24
15
|
def add_host(host_options)
|
25
|
-
|
26
16
|
host_default = {
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
17
|
+
'host' => nil,
|
18
|
+
'port' => 10050,
|
19
|
+
'status' => 0,
|
20
|
+
'useip' => 0,
|
21
|
+
'dns' => '',
|
22
|
+
'ip' => '0.0.0.0',
|
23
|
+
'proxy_hostid' => 0,
|
24
|
+
'groups' => [],
|
25
|
+
'useipmi' => 0,
|
26
|
+
'ipmi_ip' => '',
|
27
|
+
'ipmi_port' => 623,
|
28
|
+
'ipmi_authtype' => 0,
|
29
|
+
'ipmi_privilege' => 0,
|
30
|
+
'ipmi_username' => '',
|
31
|
+
'ipmi_password' => ''
|
42
32
|
}
|
43
|
-
|
44
|
-
host_options['groups'].map! { |group_id| {'groupid' => group_id} }
|
45
|
-
|
33
|
+
host_options['groups'].nil? || host_options['groups'].map! { |group_id| {'groupid' => get_group_id(group_id)} }
|
46
34
|
host = merge_opt(host_default, host_options)
|
47
|
-
|
48
35
|
message = {
|
49
|
-
|
50
|
-
|
36
|
+
'method' => 'host.create',
|
37
|
+
'params' => host
|
51
38
|
}
|
52
|
-
|
53
39
|
response = send_request(message)
|
54
|
-
|
55
|
-
unless response.empty? then
|
56
|
-
result = response['hostids'][0].to_i
|
57
|
-
else
|
58
|
-
result = nil
|
59
|
-
end
|
60
|
-
|
61
|
-
return result
|
40
|
+
response.empty? ? nil : response['hostids'][0].to_i
|
62
41
|
end
|
63
42
|
|
64
43
|
def get_host_id(hostname)
|
65
|
-
|
66
44
|
message = {
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
45
|
+
'method' => 'host.get',
|
46
|
+
'params' => {
|
47
|
+
'filter' => {
|
48
|
+
'host' => hostname
|
49
|
+
}
|
71
50
|
}
|
72
|
-
}
|
73
51
|
}
|
74
|
-
|
75
52
|
response = send_request(message)
|
53
|
+
response.empty? ? nil : response[0]['hostid'].to_i
|
54
|
+
end
|
76
55
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
56
|
+
def delete_host(hostname)
|
57
|
+
host_id = get_host_id(hostname)
|
58
|
+
message = {
|
59
|
+
'method' => 'host.delete',
|
60
|
+
'params' => {
|
61
|
+
'hostid' => host_id
|
62
|
+
}
|
63
|
+
}
|
64
|
+
send_request(message)
|
84
65
|
end
|
66
|
+
|
85
67
|
end
|
86
68
|
end
|