zabbixapi 0.1.4 → 0.1.5a1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +16 -3
- data/examples/config.yml +4 -0
- data/examples/zabbix_availability +73 -0
- data/examples/zabbix_disk_io +152 -0
- data/examples/zabbix_filesystem +249 -0
- data/examples/zabbix_la +101 -0
- data/examples/zabbix_memory +276 -0
- data/examples/zabbix_net +82 -0
- data/lib/{application.rb → zabbixapi/application.rb} +25 -4
- data/lib/zabbixapi/base.rb +133 -0
- data/lib/{graph.rb → zabbixapi/graph.rb} +8 -10
- data/lib/zabbixapi/group.rb +78 -0
- data/lib/zabbixapi/host.rb +86 -0
- data/lib/zabbixapi/item.rb +169 -0
- data/lib/zabbixapi/screen.rb +166 -0
- data/lib/{template.rb → zabbixapi/template.rb} +22 -26
- data/lib/zabbixapi/trigger.rb +95 -0
- data/lib/zabbixapi/usermacro.rb +74 -0
- data/lib/zabbixapi.rb +10 -10
- data/spec/item.rb +60 -0
- data/zabbixapi.gemspec +4 -5
- metadata +39 -49
- data/lib/base.rb +0 -126
- data/lib/group.rb +0 -78
- data/lib/host.rb +0 -98
- data/lib/item.rb +0 -128
- data/lib/screen.rb +0 -169
- data/lib/trigger.rb +0 -98
- data/lib/usermacro.rb +0 -75
@@ -0,0 +1,86 @@
|
|
1
|
+
module Zabbix
|
2
|
+
|
3
|
+
class ZabbixApi
|
4
|
+
def update_host(host_id, host_options)
|
5
|
+
host = host_options
|
6
|
+
host['hostid'] = host_id
|
7
|
+
|
8
|
+
message = {
|
9
|
+
'method' => 'host.update',
|
10
|
+
'params' => host
|
11
|
+
}
|
12
|
+
|
13
|
+
responce = send_request(message)
|
14
|
+
|
15
|
+
if not ( responce.empty? ) then
|
16
|
+
result = responce['hostids'][0].to_i
|
17
|
+
else
|
18
|
+
result = nil
|
19
|
+
end
|
20
|
+
|
21
|
+
return result
|
22
|
+
end
|
23
|
+
|
24
|
+
def add_host(host_options)
|
25
|
+
|
26
|
+
host_default = {
|
27
|
+
'host' => nil,
|
28
|
+
'port' => 10050,
|
29
|
+
'status' => 0,
|
30
|
+
'useip' => 0,
|
31
|
+
'dns' => '',
|
32
|
+
'ip' => '0.0.0.0',
|
33
|
+
'proxy_hostid' => 0,
|
34
|
+
'groups' => [],
|
35
|
+
'useipmi' => 0,
|
36
|
+
'ipmi_ip' => '',
|
37
|
+
'ipmi_port' => 623,
|
38
|
+
'ipmi_authtype' => 0,
|
39
|
+
'ipmi_privilege' => 0,
|
40
|
+
'ipmi_username' => '',
|
41
|
+
'ipmi_password' => ''
|
42
|
+
}
|
43
|
+
|
44
|
+
host_options['groups'].map! { |group_id| {'groupid' => group_id} }
|
45
|
+
|
46
|
+
host = merge_opt(host_default, host_options)
|
47
|
+
|
48
|
+
message = {
|
49
|
+
'method' => 'host.create',
|
50
|
+
'params' => host
|
51
|
+
}
|
52
|
+
|
53
|
+
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
|
62
|
+
end
|
63
|
+
|
64
|
+
def get_host_id(hostname)
|
65
|
+
|
66
|
+
message = {
|
67
|
+
'method' => 'host.get',
|
68
|
+
'params' => {
|
69
|
+
'filter' => {
|
70
|
+
'host' => hostname
|
71
|
+
}
|
72
|
+
}
|
73
|
+
}
|
74
|
+
|
75
|
+
response = send_request(message)
|
76
|
+
|
77
|
+
unless response.empty? then
|
78
|
+
result = response[0]['hostid'].to_i
|
79
|
+
else
|
80
|
+
result = nil
|
81
|
+
end
|
82
|
+
|
83
|
+
return result
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,169 @@
|
|
1
|
+
module Zabbix
|
2
|
+
class ZabbixApi
|
3
|
+
def add_item(item)
|
4
|
+
|
5
|
+
# Default item options
|
6
|
+
# See: http://www.zabbix.com/documentation/1.8/api/item
|
7
|
+
|
8
|
+
## Item types (see ./frontends/php/include/defines.inc.php in zabbix source)
|
9
|
+
# ITEM_TYPE_ZABBIX 0
|
10
|
+
# ITEM_TYPE_SNMPV1 1
|
11
|
+
# ITEM_TYPE_TRAPPER 2
|
12
|
+
# ITEM_TYPE_SIMPLE 3
|
13
|
+
# ITEM_TYPE_SNMPV2C 4
|
14
|
+
# ITEM_TYPE_INTERNAL 5
|
15
|
+
# ITEM_TYPE_SNMPV3 6
|
16
|
+
# ITEM_TYPE_ZABBIX_ACTIVE 7
|
17
|
+
# ITEM_TYPE_AGGREGATE 8
|
18
|
+
# ITEM_TYPE_HTTPTEST 9
|
19
|
+
# ITEM_TYPE_EXTERNAL 10
|
20
|
+
# ITEM_TYPE_DB_MONITOR 11
|
21
|
+
# ITEM_TYPE_IPMI 12
|
22
|
+
# ITEM_TYPE_SSH 13
|
23
|
+
# ITEM_TYPE_TELNET 14
|
24
|
+
# ITEM_TYPE_CALCULATED 15
|
25
|
+
|
26
|
+
item_options = {
|
27
|
+
'description' => nil,
|
28
|
+
'key_' => nil,
|
29
|
+
'hostid' => nil,
|
30
|
+
'delay' => 60,
|
31
|
+
'history' => 60,
|
32
|
+
'status' => 0,
|
33
|
+
'type' => 7,
|
34
|
+
'snmp_community' => '',
|
35
|
+
'snmp_oid' => '',
|
36
|
+
'value_type' => 3,
|
37
|
+
'data_type' => 0,
|
38
|
+
'trapper_hosts' => 'localhost',
|
39
|
+
'snmp_port' => 161,
|
40
|
+
'units' => '',
|
41
|
+
'multiplier' => 0,
|
42
|
+
'delta' => 0,
|
43
|
+
'snmpv3_securityname' => '',
|
44
|
+
'snmpv3_securitylevel' => 0,
|
45
|
+
'snmpv3_authpassphrase' => '',
|
46
|
+
'snmpv3_privpassphrase' => '',
|
47
|
+
'formula' => 0,
|
48
|
+
'trends' => 365,
|
49
|
+
'logtimefmt' => '',
|
50
|
+
'valuemapid' => 0,
|
51
|
+
'delay_flex' => '',
|
52
|
+
'authtype' => 0,
|
53
|
+
'username' => '',
|
54
|
+
'password' => '',
|
55
|
+
'publickey' => '',
|
56
|
+
'privatekey' => '',
|
57
|
+
'params' => '',
|
58
|
+
'ipmi_sensor' => '',
|
59
|
+
'applications' => '',
|
60
|
+
'templateid' => 0
|
61
|
+
}
|
62
|
+
|
63
|
+
|
64
|
+
item_options.merge!(item)
|
65
|
+
|
66
|
+
message = {
|
67
|
+
'method' => 'item.create',
|
68
|
+
'params' => [ item_options ]
|
69
|
+
}
|
70
|
+
|
71
|
+
response = send_request(message)
|
72
|
+
|
73
|
+
unless response.empty? then
|
74
|
+
result = response['itemids'][0]
|
75
|
+
else
|
76
|
+
result = nil
|
77
|
+
end
|
78
|
+
|
79
|
+
return result
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
def get_item_id(host_id, item_name)
|
84
|
+
message = {
|
85
|
+
'method' => 'item.get',
|
86
|
+
'params' => {
|
87
|
+
'filter' => {
|
88
|
+
'hostid' => host_id,
|
89
|
+
'description' => item_name
|
90
|
+
}
|
91
|
+
}
|
92
|
+
}
|
93
|
+
|
94
|
+
response = send_request(message)
|
95
|
+
|
96
|
+
unless response.empty?
|
97
|
+
result = response[0]['itemid']
|
98
|
+
else
|
99
|
+
result = nil
|
100
|
+
end
|
101
|
+
|
102
|
+
return result
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
def item_exist?(host_id, item_name)
|
107
|
+
item_id = get_item_id(host_id, item_name)
|
108
|
+
if item_id
|
109
|
+
result = true
|
110
|
+
else
|
111
|
+
result = false
|
112
|
+
end
|
113
|
+
|
114
|
+
return result
|
115
|
+
end
|
116
|
+
|
117
|
+
def update_item(item_id, options)
|
118
|
+
|
119
|
+
options["item_id"]
|
120
|
+
|
121
|
+
message = {
|
122
|
+
'method' => 'item.update',
|
123
|
+
'params' => options
|
124
|
+
}
|
125
|
+
|
126
|
+
response = send_request(message)
|
127
|
+
|
128
|
+
unless response.empty?
|
129
|
+
result = response['itemids'][0]
|
130
|
+
else
|
131
|
+
result = nil
|
132
|
+
end
|
133
|
+
|
134
|
+
return result
|
135
|
+
end
|
136
|
+
|
137
|
+
# Don't work with api < 1.8.4
|
138
|
+
def delete_item(item_ids)
|
139
|
+
|
140
|
+
if item_ids.kind_of? Array
|
141
|
+
message = {
|
142
|
+
'method' => 'item.delete',
|
143
|
+
'params' => item_ids
|
144
|
+
}
|
145
|
+
elsif item_ids.kind_of? Fixnum or item_ids.kind_of? String
|
146
|
+
message = {
|
147
|
+
'method' => 'item.delete',
|
148
|
+
'params' => [ item_ids ]
|
149
|
+
}
|
150
|
+
else
|
151
|
+
raise Zabbix::ArgumentError.new("Zabbix::ZabbixApi.delete_item() argument error. item_ids => #{item_ids.inspect}")
|
152
|
+
end
|
153
|
+
|
154
|
+
response = send_request(message)
|
155
|
+
|
156
|
+
unless response.empty?
|
157
|
+
if response['itemids'].count == 1
|
158
|
+
result = response['itemids'][0]
|
159
|
+
else
|
160
|
+
result = response['itemids']
|
161
|
+
end
|
162
|
+
else
|
163
|
+
result = nil
|
164
|
+
end
|
165
|
+
|
166
|
+
return result
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
@@ -0,0 +1,166 @@
|
|
1
|
+
module Zabbix
|
2
|
+
|
3
|
+
class ZabbixApi
|
4
|
+
def get_screen_id(screen_name)
|
5
|
+
|
6
|
+
message = {
|
7
|
+
'method' => 'screen.get',
|
8
|
+
'params' => {
|
9
|
+
'filter' => {
|
10
|
+
'name' => screen_name
|
11
|
+
}
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
response = send_request(message)
|
16
|
+
|
17
|
+
unless response.empty? then
|
18
|
+
result = response[0]['screenid']
|
19
|
+
else
|
20
|
+
result = nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_screen_parameter(screen_name, param_name)
|
25
|
+
|
26
|
+
message = {
|
27
|
+
'method' => 'screen.get',
|
28
|
+
'params' => {
|
29
|
+
'extendoutput' => '1',
|
30
|
+
'filter' => {
|
31
|
+
'name' => screen_name
|
32
|
+
}
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
response = send_request(message)
|
37
|
+
|
38
|
+
unless response.empty? then
|
39
|
+
result = response[0][param_name]
|
40
|
+
else
|
41
|
+
result nil
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_screen_graph_ids(screen_id)
|
46
|
+
|
47
|
+
message = {
|
48
|
+
'method' => 'screen.get',
|
49
|
+
'params' => {
|
50
|
+
'extendoutput' => '1',
|
51
|
+
'select_screenitems' => '1',
|
52
|
+
'screenids' => [ screen_id ]
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
response = send_request(message)
|
57
|
+
|
58
|
+
unless ( response.empty?) then
|
59
|
+
result = []
|
60
|
+
screenitems = response[0]['screenitems']
|
61
|
+
screenitems.each() do |item|
|
62
|
+
if ( item['resourcetype'].to_i == 0 ) then
|
63
|
+
result << item['resourceid']
|
64
|
+
end
|
65
|
+
end
|
66
|
+
else
|
67
|
+
result = nil
|
68
|
+
end
|
69
|
+
|
70
|
+
return result
|
71
|
+
end
|
72
|
+
|
73
|
+
def set_screen_parameter(screen_id, param_name, param_value)
|
74
|
+
|
75
|
+
message = {
|
76
|
+
'method' => 'screen.update',
|
77
|
+
'params' => {
|
78
|
+
param_name => param_value,
|
79
|
+
'screenid' => screen_id
|
80
|
+
}
|
81
|
+
}
|
82
|
+
|
83
|
+
response = send_request(message)
|
84
|
+
|
85
|
+
if not ( response.empty? ) then
|
86
|
+
result = true
|
87
|
+
else
|
88
|
+
result = false
|
89
|
+
end
|
90
|
+
|
91
|
+
return result
|
92
|
+
end
|
93
|
+
|
94
|
+
def del_all_graphs_from_screen(screen_id)
|
95
|
+
|
96
|
+
message = {
|
97
|
+
'method' => 'screen.deleteItems',
|
98
|
+
'params' => {
|
99
|
+
'screenids' => [ screen_id ],
|
100
|
+
}
|
101
|
+
}
|
102
|
+
|
103
|
+
response = send_request(message)
|
104
|
+
|
105
|
+
if ( response ) then
|
106
|
+
return response
|
107
|
+
else
|
108
|
+
return nil
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def add_graph_to_screen(screen_id, graph_id, x, y)
|
113
|
+
|
114
|
+
message = {
|
115
|
+
'method' => 'screen.addItems',
|
116
|
+
'params' => {
|
117
|
+
'screenids' => [ screen_id ],
|
118
|
+
'screenitems' => [
|
119
|
+
{
|
120
|
+
'resourcetype' => 'graph',
|
121
|
+
'resourceid' => graph_id,
|
122
|
+
'width' => '800',
|
123
|
+
'height' => '200',
|
124
|
+
'x' => x,
|
125
|
+
'y' => y,
|
126
|
+
'valign' => 'Middle',
|
127
|
+
'halign' => 'Centre',
|
128
|
+
'colspan' => '0',
|
129
|
+
'rowspan' => '0',
|
130
|
+
'elements' => '0',
|
131
|
+
'dynamic' => '0',
|
132
|
+
'url' => '0',
|
133
|
+
'style' => '0'
|
134
|
+
}
|
135
|
+
]
|
136
|
+
}
|
137
|
+
}
|
138
|
+
|
139
|
+
response = send_request(message)
|
140
|
+
|
141
|
+
return response
|
142
|
+
end
|
143
|
+
|
144
|
+
def add_screen(screen_name, hsize, vsize)
|
145
|
+
|
146
|
+
message = {
|
147
|
+
'method' => 'screen.create',
|
148
|
+
'params' => {
|
149
|
+
'name' => screen_name,
|
150
|
+
'hsize' => hsize,
|
151
|
+
'vsize' => vsize
|
152
|
+
}
|
153
|
+
}
|
154
|
+
|
155
|
+
response = send_request(message)
|
156
|
+
|
157
|
+
unless response.empty? then
|
158
|
+
result = response['screenids'][0]
|
159
|
+
else
|
160
|
+
result = nil
|
161
|
+
end
|
162
|
+
|
163
|
+
return result
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module Zabbix
|
2
2
|
|
3
3
|
class ZabbixApi
|
4
|
-
|
5
4
|
def add_template(template_options)
|
6
5
|
|
7
6
|
template_default = {
|
@@ -18,10 +17,10 @@ module Zabbix
|
|
18
17
|
'params' => template
|
19
18
|
}
|
20
19
|
|
21
|
-
|
20
|
+
response = send_request(message)
|
22
21
|
|
23
|
-
if not (
|
24
|
-
result =
|
22
|
+
if not ( response.empty? ) then
|
23
|
+
result = response['templateids'][0].to_i
|
25
24
|
else
|
26
25
|
result = nil
|
27
26
|
end
|
@@ -38,11 +37,11 @@ module Zabbix
|
|
38
37
|
}
|
39
38
|
}
|
40
39
|
|
41
|
-
|
40
|
+
response = send_request(message)
|
42
41
|
|
43
|
-
unless (
|
42
|
+
unless ( response.empty? ) then
|
44
43
|
result = []
|
45
|
-
|
44
|
+
response.each_key() do |template_id|
|
46
45
|
result << template_id
|
47
46
|
end
|
48
47
|
else
|
@@ -53,7 +52,7 @@ module Zabbix
|
|
53
52
|
end
|
54
53
|
|
55
54
|
def get_templates()
|
56
|
-
|
55
|
+
|
57
56
|
message = {
|
58
57
|
'method' => 'template.get',
|
59
58
|
'params' => {
|
@@ -61,17 +60,14 @@ module Zabbix
|
|
61
60
|
}
|
62
61
|
}
|
63
62
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
unless ( responce.empty? ) then
|
68
|
-
|
69
|
-
template_ids = responce.keys()
|
63
|
+
response = send_request(message)
|
70
64
|
|
65
|
+
unless response.empty? then
|
66
|
+
template_ids = response.keys()
|
71
67
|
result = {}
|
72
68
|
|
73
69
|
template_ids.each() do |template_id|
|
74
|
-
template_name =
|
70
|
+
template_name = response[template_id]['host']
|
75
71
|
result[template_id] = template_name
|
76
72
|
end
|
77
73
|
else
|
@@ -92,10 +88,10 @@ module Zabbix
|
|
92
88
|
}
|
93
89
|
}
|
94
90
|
|
95
|
-
|
91
|
+
response = send_request(message)
|
96
92
|
|
97
|
-
|
98
|
-
result =
|
93
|
+
unless response.empty? then
|
94
|
+
result = response.keys[0]
|
99
95
|
else
|
100
96
|
result = nil
|
101
97
|
end
|
@@ -106,13 +102,13 @@ module Zabbix
|
|
106
102
|
|
107
103
|
def link_templates_with_hosts(templates_id, hosts_id)
|
108
104
|
|
109
|
-
if
|
105
|
+
if templates_id.class == Array then
|
110
106
|
message_templates_id = templates_id
|
111
107
|
else
|
112
108
|
message_templates_id = [ templates_id ]
|
113
109
|
end
|
114
110
|
|
115
|
-
if
|
111
|
+
if hosts_id == Array then
|
116
112
|
message_hosts_id = hosts_id
|
117
113
|
else
|
118
114
|
message_hosts_id = [ hosts_id ]
|
@@ -126,20 +122,20 @@ module Zabbix
|
|
126
122
|
}
|
127
123
|
}
|
128
124
|
|
129
|
-
|
125
|
+
response = send_request(message)
|
130
126
|
|
131
|
-
return
|
127
|
+
return response
|
132
128
|
end
|
133
129
|
|
134
130
|
def unlink_templates_from_hosts(templates_id, hosts_id)
|
135
131
|
|
136
|
-
if
|
132
|
+
if templates_id.class == Array then
|
137
133
|
message_templates_id = templates_id
|
138
134
|
else
|
139
135
|
message_templates_id = [ templates_id ]
|
140
136
|
end
|
141
137
|
|
142
|
-
if
|
138
|
+
if hosts_id == Array then
|
143
139
|
message_hosts_id = hosts_id
|
144
140
|
else
|
145
141
|
message_hosts_id = [ hosts_id ]
|
@@ -154,9 +150,9 @@ module Zabbix
|
|
154
150
|
}
|
155
151
|
}
|
156
152
|
|
157
|
-
|
153
|
+
response = send_request(message)
|
158
154
|
|
159
|
-
return
|
155
|
+
return response
|
160
156
|
end
|
161
157
|
end
|
162
158
|
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module Zabbix
|
2
|
+
|
3
|
+
class ZabbixApi
|
4
|
+
def add_trigger(trigger)
|
5
|
+
|
6
|
+
message = {
|
7
|
+
'method' => 'trigger.create',
|
8
|
+
'params' => [ trigger ]
|
9
|
+
}
|
10
|
+
|
11
|
+
response = send_request(message)
|
12
|
+
|
13
|
+
unless response.empty? then
|
14
|
+
result = response['triggerids'][0]
|
15
|
+
else
|
16
|
+
result = nil
|
17
|
+
end
|
18
|
+
|
19
|
+
return result
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_trigger_id(host_id, trigger_name)
|
24
|
+
|
25
|
+
message = {
|
26
|
+
'method' => 'trigger.get',
|
27
|
+
'params' => {
|
28
|
+
'filter' => {
|
29
|
+
'hostid' => host_id,
|
30
|
+
'description' => trigger_name
|
31
|
+
}
|
32
|
+
}
|
33
|
+
}
|
34
|
+
|
35
|
+
response = send_request(message)
|
36
|
+
|
37
|
+
unless response.empty? then
|
38
|
+
result = response[0]['triggerid']
|
39
|
+
else
|
40
|
+
result = nil
|
41
|
+
end
|
42
|
+
|
43
|
+
return result
|
44
|
+
end
|
45
|
+
|
46
|
+
def get_triggers_by_host(host_id)
|
47
|
+
|
48
|
+
message = {
|
49
|
+
'method' => 'trigger.get',
|
50
|
+
'params' => {
|
51
|
+
'filter' => {
|
52
|
+
'hostid' => host_id,
|
53
|
+
},
|
54
|
+
'extendoutput' => '1'
|
55
|
+
}
|
56
|
+
}
|
57
|
+
|
58
|
+
response = send_request(message)
|
59
|
+
|
60
|
+
unless response.empty? then
|
61
|
+
result = {}
|
62
|
+
response.each do |trigger|
|
63
|
+
trigger_id = trigger['triggerid']
|
64
|
+
description = trigger['description']
|
65
|
+
result[trigger_id] = description
|
66
|
+
end
|
67
|
+
else
|
68
|
+
result = {}
|
69
|
+
end
|
70
|
+
|
71
|
+
return result
|
72
|
+
end
|
73
|
+
|
74
|
+
def update_trigger_status(trigger_id, status)
|
75
|
+
|
76
|
+
message = {
|
77
|
+
'method' => 'trigger.update_status',
|
78
|
+
'params' => {
|
79
|
+
'triggerid' => trigger_id,
|
80
|
+
'status' => status
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
84
|
+
response = send_request(message)
|
85
|
+
|
86
|
+
unless response.empty? then
|
87
|
+
result = response['triggerids'][0]
|
88
|
+
else
|
89
|
+
result = nil
|
90
|
+
end
|
91
|
+
|
92
|
+
return result
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|