zabbixapi 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc ADDED
@@ -0,0 +1,28 @@
1
+ = Ruby Zabbix Api Module.
2
+
3
+ Simple and lightweight ruby module for work with zabbix api version 1.8.2
4
+
5
+ You can:
6
+ * Create host/template/application/items/triggers and screens;
7
+ * Get info about all zabbix essences;
8
+
9
+ == Get Start.
10
+
11
+ * Get hostid from zabbix api:
12
+
13
+ zbx = Zabbix::ZabbixApi.new('https://zabbix.example.com', 'login', 'password')
14
+ hostid = zbx.get_host_id('my.example.com')
15
+
16
+ p hostid
17
+
18
+ == Dependencies
19
+
20
+ * net/http
21
+ * net/https
22
+ * json
23
+
24
+ == Zabbix documentation
25
+
26
+ * Zabbix Project Homepage -> http://zabbix.com/
27
+ * Zabbix Api Draft docs -> http://www.zabbix.com/documentation/1.8/api
28
+
data/lib/1.rb ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'rubygems'
4
+ require './base'
5
+ require './host'
6
+
7
+
8
+ zbx = ZabbixApi.new('', '', '')
data/lib/base.rb ADDED
@@ -0,0 +1,119 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'json'
4
+ require 'net/http'
5
+ require 'net/https'
6
+
7
+ module ZabbixApi
8
+
9
+ class JsonMessage < RuntimeError
10
+ end
11
+
12
+ class ResponceCodeError < RuntimeError
13
+ end
14
+
15
+ class ResponceBodyHash < RuntimeError
16
+ end
17
+
18
+ class InvalidAnswerId < RuntimeError
19
+ end
20
+
21
+ class Error < RuntimeError
22
+ end
23
+
24
+ def initialize ( api_url, api_user, api_password )
25
+ @api_url = api_url
26
+ @api_user = api_user
27
+ @api_password = api_password
28
+ end
29
+
30
+ def do_request(message)
31
+
32
+ id = rand 100_000
33
+
34
+ message['id'] = id
35
+ message['jsonrpc'] = '2.0'
36
+
37
+ message_json = JSON.generate(message)
38
+
39
+ uri = URI.parse(@api_url)
40
+ http = Net::HTTP.new(uri.host, uri.port)
41
+
42
+ if ( uri.scheme == "https" ) then
43
+ http.use_ssl = true
44
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
45
+ end
46
+
47
+ request = Net::HTTP::Post.new(uri.request_uri)
48
+ request.add_field('Content-Type', 'application/json-rpc')
49
+ request.body=(message_json)
50
+
51
+ # TODO сделать проверку невозможности подключения.
52
+ responce = http.request(request)
53
+
54
+ if ( responce.code != "200" ) then
55
+ raise Zabbix::ResponceCodeError.new("Responce code from [" + @api_url + "] is " + responce.code)
56
+ end
57
+
58
+ responce_body_hash = JSON.parse(responce.body)
59
+
60
+ #if not ( responce_body_hash['id'] == id ) then
61
+ # raise Zabbix::InvalidAnswerId.new("Wrong ID in zabbix answer")
62
+ #end
63
+
64
+
65
+ # Check errors in zabbix answer. If error exist - raise exception Zabbix::Error
66
+ if ( error = responce_body_hash['error'] ) then
67
+ error_message = error['message']
68
+ error_data = error['data']
69
+ error_code = error['code']
70
+
71
+ e_message = "Code: [" + error_code.to_s + "]. Message: [" + error_message +\
72
+ "]. Data: [" + error_data + "]."
73
+
74
+ raise Zabbix::Error.new(e_message)
75
+ end
76
+
77
+ result = responce_body_hash['result']
78
+
79
+ return result
80
+ end
81
+
82
+ def send_request(message)
83
+ message['auth'] = auth()
84
+ do_request(message)
85
+ end
86
+
87
+ def auth()
88
+
89
+ auth_message = {
90
+ 'auth' => nil,
91
+ 'method' => 'user.authenticate',
92
+ 'params' => {
93
+ 'user' => @api_user,
94
+ 'password' => @api_password,
95
+ '0' => '0'
96
+ }
97
+ }
98
+
99
+ auth_id = do_request(auth_message)
100
+
101
+ return auth_id
102
+ end
103
+
104
+ def merge_opt(a, b)
105
+
106
+ c = {}
107
+
108
+ b.each_pair do |key, value|
109
+
110
+ if ( a.has_key?(key) ) then
111
+ c[key] = value
112
+ end
113
+
114
+ end
115
+
116
+ return a.merge(c)
117
+ end
118
+
119
+ end
data/lib/graph.rb ADDED
@@ -0,0 +1,55 @@
1
+ module Zabbix
2
+ class ZabbixApi
3
+
4
+ def get_graph_id(host_id, graph_name)
5
+
6
+ message = {
7
+ 'method' => 'graph.get',
8
+ 'params' => {
9
+ 'filter' => {
10
+ 'name' => graph_name,
11
+ 'hostid' => host_id
12
+ }
13
+ }
14
+ }
15
+
16
+ responce = send_request(message)
17
+
18
+ unless ( responce.empty? ) then
19
+ result = responce[0]['graphid']
20
+ else
21
+ result = nil
22
+ end
23
+ end
24
+
25
+ def get_graphs(host_id)
26
+
27
+ message = {
28
+ 'method' => 'graph.get',
29
+ 'params' => {
30
+ 'extendoutput' => '1',
31
+ 'filter' => {
32
+ 'hostid' => host_id
33
+ }
34
+ }
35
+ }
36
+
37
+ responce = send_request(message)
38
+
39
+ unless ( responce.empty? ) then
40
+ result = {}
41
+
42
+ responce.each() do |graph|
43
+ graph_id = graph['graphid']
44
+ graph_name = graph['name']
45
+
46
+ result[graph_id] = graph_name
47
+ end
48
+ else
49
+ result = nil
50
+ end
51
+
52
+ return result
53
+ end
54
+ end
55
+ end
data/lib/group.rb ADDED
@@ -0,0 +1,78 @@
1
+ module Zabbix
2
+
3
+ class ZabbixApi
4
+ def get_group_id(pattern)
5
+
6
+ message = {
7
+ 'method' => 'hostgroup.get',
8
+ 'params' => {
9
+ 'filter' => {
10
+ 'name' => pattern
11
+ }
12
+ }
13
+ }
14
+
15
+ responce = send_request(message)
16
+
17
+ if not ( responce.empty? ) then
18
+ result = responce[0]['groupid']
19
+ else
20
+ result = nil
21
+ end
22
+
23
+ return result
24
+ end
25
+
26
+ def group_exist?(pattern)
27
+
28
+ group_id = get_groups_id(pattern)
29
+
30
+ if ( group_id ) then
31
+ return true
32
+ else
33
+ return false
34
+ end
35
+ end
36
+
37
+ def add_group(groupname)
38
+
39
+ message = {
40
+ 'method' => 'hostgroup.create',
41
+ 'params' => {
42
+ 'name' => groupname
43
+ }
44
+ }
45
+
46
+ responce = send_request(message)
47
+
48
+ if ( responce ) then
49
+ result = responce['groupids']
50
+ else
51
+ result = nil
52
+ end
53
+
54
+ return result
55
+ end
56
+
57
+ def add_host_to_group(host_id, group_id)
58
+
59
+ message = {
60
+ 'method' => 'hostgroup.massAdd',
61
+ 'params' => {
62
+ 'groups' => [ group_id ],
63
+ 'hosts' => [ host_id ]
64
+ }
65
+ }
66
+
67
+ responce = send_request(message)
68
+
69
+ if not ( responce.empty? ) then
70
+ result = true
71
+ else
72
+ result = false
73
+ end
74
+
75
+ return result
76
+ end
77
+ end
78
+ end
data/lib/host.rb ADDED
@@ -0,0 +1,96 @@
1
+ module Zabbix
2
+
3
+ # Examples:
4
+ # * Create host in zabbix
5
+ #
6
+ # zbx = Zabbix::ZabbixApi.new(url, user, password)
7
+ # host_options => {
8
+ # host => 'host.example.org',
9
+ # ip => '127.0.0.1',
10
+ # groups => [10001, 10002],
11
+ # }
12
+ # host_id = zbx.add_host(host_options)
13
+
14
+ # Method for creation host in zabbix.
15
+ # * Input parameter - hash <tt>host_options</tt>. Available keys in hash:
16
+ # - host - hostname. Type: string. Default: nil;
17
+ # - port - zabbix agent pont. Type: int. Default: 10050;
18
+ # - status - host status. Type: int. Possible values: 0 - monitored, 1 - not monitored. Default: 0;
19
+ # - useip - use ip or dns name for monitoring host. Possible values: 0 - don't use ip (use dns name), 1 - use ip (don't use dns name);
20
+ # - ip - host's ip address. Used for monitoring host if useip set to 1. Default: '0.0.0.0';
21
+ # - proxy_hostid - host_id of zabbix proxy (if necessary). See <tt>get_host_id</tt>. Default: 0 (don't use proxy server);
22
+ # - groups - array of groups that belong host. Default: [].
23
+ # - useipmi - Use or not ipmi. Default: 0 (don't use ipmi);
24
+ # - ipmi_ip - Default: '';
25
+ # - ipmi_port - Default: 623;
26
+ # - ipmi_authtype - Default: 0;
27
+ # - ipmi_privilege - Default: 0;
28
+ # - ipmi_username - Default: '';
29
+ # - ipmi_password - Default: '';
30
+ def add_host(host_options)
31
+
32
+ host_default = {
33
+ 'host' => nil,
34
+ 'port' => 10050,
35
+ 'status' => 0,
36
+ 'useip' => 0,
37
+ 'dns' => '',
38
+ 'ip' => '0.0.0.0',
39
+ 'proxy_hostid' => 0,
40
+ 'groups' => [],
41
+ 'useipmi' => 0,
42
+ 'ipmi_ip' => '',
43
+ 'ipmi_port' => 623,
44
+ 'ipmi_authtype' => 0,
45
+ 'ipmi_privilege' => 0,
46
+ 'ipmi_username' => '',
47
+ 'ipmi_password' => ''
48
+ }
49
+
50
+ host_options['groups'].map! { |group_id| {'groupid' => group_id} }
51
+
52
+ host = merge_opt(host_default, host_options)
53
+
54
+ message = {
55
+ 'method' => 'host.create',
56
+ 'params' => host
57
+ }
58
+
59
+ responce = send_request(message)
60
+
61
+ if not ( responce.empty? ) then
62
+ result = responce['hostids'][0].to_i
63
+ else
64
+ result = nil
65
+ end
66
+
67
+ return result
68
+ end
69
+
70
+ # Method for retrieving host id from zabbix by hostname.
71
+ # * Non optional input parameters:
72
+ # - hostname - Type: String.
73
+ # * Return:
74
+ # - host_id - Return finded host_id for passed hostname. If host not found in zabbix - return nil
75
+ def get_host_id(hostname)
76
+
77
+ message = {
78
+ 'method' => 'host.get',
79
+ 'params' => {
80
+ 'filter' => {
81
+ 'host' => hostname
82
+ }
83
+ }
84
+ }
85
+
86
+ responce = send_request(message)
87
+
88
+ if not ( responce.empty? ) then
89
+ result = responce[0]['hostid'].to_i
90
+ else
91
+ result = nil
92
+ end
93
+
94
+ return result
95
+ end
96
+ end
data/lib/item.rb ADDED
@@ -0,0 +1,127 @@
1
+ module Zabbix
2
+ class ZabbixApi
3
+ def add_item(item)
4
+
5
+ item_options = {
6
+ 'description' => nil,
7
+ 'key_' => nil,
8
+ 'hostid' => nil,
9
+ 'delay' => 60,
10
+ 'history' => 60,
11
+ 'status' => 0,
12
+ 'type' => 7,
13
+ 'snmp_community' => '',
14
+ 'snmp_oid' => '',
15
+ 'value_type' => 3,
16
+ 'data_type' => 0,
17
+ 'trapper_hosts' => 'localhost',
18
+ 'snmp_port' => 161,
19
+ 'units' => '',
20
+ 'multiplier' => 0,
21
+ 'delta' => 0,
22
+ 'snmpv3_securityname' => '',
23
+ 'snmpv3_securitylevel' => 0,
24
+ 'snmpv3_authpassphrase' => '',
25
+ 'snmpv3_privpassphrase' => '',
26
+ 'formula' => 0,
27
+ 'trends' => 365,
28
+ 'logtimefmt' => '',
29
+ 'valuemapid' => 0,
30
+ 'delay_flex' => '',
31
+ 'authtype' => 0,
32
+ 'username' => '',
33
+ 'password' => '',
34
+ 'publickey' => '',
35
+ 'privatekey' => '',
36
+ 'params' => '',
37
+ 'ipmi_sensor' => '',
38
+ 'applications' => '',
39
+ 'templateid' => 0
40
+ }
41
+
42
+
43
+ item_options.merge!(item)
44
+
45
+ message = {
46
+ 'method' => 'item.create',
47
+ 'params' => [ item_options ]
48
+ }
49
+
50
+ responce = send_request(message)
51
+
52
+ unless ( responce.empty? ) then
53
+ result = responce['itemids'][0]
54
+ else
55
+ result = nil
56
+ end
57
+
58
+ return result
59
+ end
60
+
61
+
62
+ def get_webitem_id(host_id, item_name)
63
+ message = {
64
+ 'method' => 'item.get',
65
+ 'params' => {
66
+ 'filter' => {
67
+ 'hostid' => host_id,
68
+ 'type' => 9,
69
+ 'key_' => "web.test.time[eva.ru,Get main page,resp]"
70
+ },
71
+ 'webitems' => 1
72
+ }
73
+ }
74
+
75
+ responce = send_request(message)
76
+
77
+ p responce
78
+
79
+ unless ( responce.empty? ) then
80
+ result = responce[0]['itemid']
81
+ else
82
+ result = nil
83
+ end
84
+
85
+ return result
86
+
87
+ end
88
+
89
+ def get_item_id(host_id, item_name)
90
+ message = {
91
+ 'method' => 'item.get',
92
+ 'params' => {
93
+ 'filter' => {
94
+ 'hostid' => host_id,
95
+ 'description' => item_name
96
+ }
97
+ }
98
+ }
99
+
100
+ responce = send_request(message)
101
+
102
+ unless ( responce.empty? ) then
103
+ result = responce[0]['itemid']
104
+ else
105
+ result = nil
106
+ end
107
+
108
+ return result
109
+
110
+ end
111
+
112
+ def update_item(item_id)
113
+
114
+ message = {
115
+ 'method' => 'item.update',
116
+ 'params' => {
117
+ 'itemid' => item_id,
118
+ 'status' => 0
119
+ }
120
+ }
121
+
122
+ responce = send_request(message)
123
+
124
+ p responce
125
+ end
126
+ end
127
+ end
data/lib/screen.rb ADDED
@@ -0,0 +1,169 @@
1
+ module Zabbix
2
+ class ZabbixApi
3
+
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
+ responce = send_request(message)
16
+
17
+ if not ( responce.empty? ) then
18
+ result = responce[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
+
37
+ responce = send_request(message)
38
+
39
+ if not ( responce.empty? ) then
40
+ result = responce[0][param_name]
41
+ else
42
+ result nil
43
+ end
44
+ end
45
+
46
+ def get_screen_graph_ids(screen_id)
47
+
48
+ message = {
49
+ 'method' => 'screen.get',
50
+ 'params' => {
51
+ 'extendoutput' => '1',
52
+ 'select_screenitems' => '1',
53
+ 'screenids' => [ screen_id ]
54
+ }
55
+ }
56
+
57
+ responce = send_request(message)
58
+
59
+ p responce
60
+
61
+ unless ( responce.empty?) then
62
+ result = []
63
+ screenitems = responce[0]['screenitems']
64
+ screenitems.each() do |item|
65
+ if ( item['resourcetype'].to_i == 0 ) then
66
+ result << item['resourceid']
67
+ end
68
+ end
69
+ else
70
+ result = nil
71
+ end
72
+
73
+ return result
74
+ end
75
+
76
+ def set_screen_parameter(screen_id, param_name, param_value)
77
+
78
+ message = {
79
+ 'method' => 'screen.update',
80
+ 'params' => {
81
+ param_name => param_value,
82
+ 'screenid' => screen_id
83
+ }
84
+ }
85
+
86
+ responce = send_request(message)
87
+
88
+ if not ( responce.empty? ) then
89
+ result = true
90
+ else
91
+ result = false
92
+ end
93
+
94
+ return result
95
+ end
96
+
97
+ def del_all_graphs_from_screen(screen_id)
98
+
99
+ message = {
100
+ 'method' => 'screen.deleteItems',
101
+ 'params' => {
102
+ 'screenids' => [ screen_id ],
103
+ }
104
+ }
105
+
106
+ responce = send_request(message)
107
+
108
+ if ( responce ) then
109
+ return responce
110
+ else
111
+ return nil
112
+ end
113
+ end
114
+
115
+ def add_graph_to_screen(screen_id, graph_id, x, y)
116
+
117
+ message = {
118
+ 'method' => 'screen.addItems',
119
+ 'params' => {
120
+ 'screenids' => [ screen_id ],
121
+ 'screenitems' => [
122
+ {
123
+ 'resourcetype' => 'graph',
124
+ 'resourceid' => graph_id,
125
+ 'width' => '800',
126
+ 'height' => '200',
127
+ 'x' => x,
128
+ 'y' => y,
129
+ 'valign' => 'Middle',
130
+ 'halign' => 'Centre',
131
+ 'colspan' => '0',
132
+ 'rowspan' => '0',
133
+ 'elements' => '0',
134
+ 'dynamic' => '0',
135
+ 'url' => '0',
136
+ 'style' => '0'
137
+ }
138
+ ]
139
+ }
140
+ }
141
+
142
+ responce = send_request(message)
143
+
144
+ return responce
145
+ end
146
+
147
+ def add_screen(screen_name, hsize, vsize)
148
+
149
+ message = {
150
+ 'method' => 'screen.create',
151
+ 'params' => {
152
+ 'name' => screen_name,
153
+ 'hsize' => hsize,
154
+ 'vsize' => vsize
155
+ }
156
+ }
157
+
158
+ responce = send_request(message)
159
+
160
+ if not ( responce.empty? ) then
161
+ result = responce['screenids'][0]
162
+ else
163
+ result = nil
164
+ end
165
+
166
+ return result
167
+ end
168
+ end
169
+ end
data/lib/template.rb ADDED
@@ -0,0 +1,162 @@
1
+ module Zabbix
2
+
3
+ class ZabbixApi
4
+
5
+ def add_template(template_options)
6
+
7
+ template_default = {
8
+ 'host' => nil,
9
+ 'groups' => [],
10
+ }
11
+
12
+ template_options['groups'].map! { |group_id| {'groupid' => group_id} }
13
+
14
+ template = merge_opt(template_default, template_options)
15
+
16
+ message = {
17
+ 'method' => 'template.create',
18
+ 'params' => template
19
+ }
20
+
21
+ responce = send_request(message)
22
+
23
+ if not ( responce.empty? ) then
24
+ result = responce['templateids'][0].to_i
25
+ else
26
+ result = nil
27
+ end
28
+
29
+ return result
30
+ end
31
+
32
+ def get_template_ids_by_host(host_id)
33
+
34
+ message = {
35
+ 'method' => 'template.get',
36
+ 'params' => {
37
+ 'hostids' => [ host_id ]
38
+ }
39
+ }
40
+
41
+ responce = send_request(message)
42
+
43
+ unless ( responce.empty? ) then
44
+ result = []
45
+ responce.each_key() do |template_id|
46
+ result << template_id
47
+ end
48
+ else
49
+ result = nil
50
+ end
51
+
52
+ return result
53
+ end
54
+
55
+ def get_templates()
56
+
57
+ message = {
58
+ 'method' => 'template.get',
59
+ 'params' => {
60
+ 'extendoutput' => '0'
61
+ }
62
+ }
63
+
64
+ responce = send_request(message)
65
+
66
+
67
+ unless ( responce.empty? ) then
68
+
69
+ template_ids = responce.keys()
70
+
71
+ result = {}
72
+
73
+ template_ids.each() do |template_id|
74
+ template_name = responce[template_id]['host']
75
+ result[template_id] = template_name
76
+ end
77
+ else
78
+ result = nil
79
+ end
80
+
81
+ return result
82
+ end
83
+
84
+ def get_template_id(template_name)
85
+
86
+ message = {
87
+ 'method' => 'template.get',
88
+ 'params' => {
89
+ 'filter' => {
90
+ 'host' => template_name
91
+ }
92
+ }
93
+ }
94
+
95
+ responce = send_request(message)
96
+
97
+ if not ( responce.empty? ) then
98
+ result = responce.keys[0]
99
+ else
100
+ result = nil
101
+ end
102
+
103
+ return result
104
+
105
+ end
106
+
107
+ def link_templates_with_hosts(templates_id, hosts_id)
108
+
109
+ if ( templates_id.class == Array ) then
110
+ message_templates_id = templates_id
111
+ else
112
+ message_templates_id = [ templates_id ]
113
+ end
114
+
115
+ if ( hosts_id == Array ) then
116
+ message_hosts_id = hosts_id
117
+ else
118
+ message_hosts_id = [ hosts_id ]
119
+ end
120
+
121
+ message = {
122
+ 'method' => 'template.massAdd',
123
+ 'params' => {
124
+ 'hosts' => message_hosts_id,
125
+ 'templates' => message_templates_id
126
+ }
127
+ }
128
+
129
+ responce = send_request(message)
130
+
131
+ return responce
132
+ end
133
+
134
+ def unlink_templates_from_hosts(templates_id, hosts_id)
135
+
136
+ if ( templates_id.class == Array ) then
137
+ message_templates_id = templates_id
138
+ else
139
+ message_templates_id = [ templates_id ]
140
+ end
141
+
142
+ if ( hosts_id == Array ) then
143
+ message_hosts_id = hosts_id
144
+ else
145
+ message_hosts_id = [ hosts_id ]
146
+ end
147
+
148
+ message = {
149
+ 'method' => 'template.massRemove',
150
+ 'params' => {
151
+ 'hosts' => message_hosts_id,
152
+ 'templates' => message_templates_id,
153
+ 'force' => '1'
154
+ }
155
+ }
156
+
157
+ responce = send_request(message)
158
+
159
+ return responce
160
+ end
161
+ end
162
+ end
data/lib/trigger.rb ADDED
@@ -0,0 +1,94 @@
1
+ module Zabbix
2
+ class ZabbixApi
3
+
4
+ def add_trigger(trigger)
5
+
6
+ message = {
7
+ 'method' => 'trigger.create',
8
+ 'params' => [ trigger ]
9
+ }
10
+
11
+ responce = send_request(message)
12
+
13
+ unless ( responce.empty? ) then
14
+ result = responce['triggerids'][0]
15
+ else
16
+ result = nil
17
+ end
18
+
19
+ return result
20
+ end
21
+
22
+ def get_trigger_id(host_id, trigger_name)
23
+
24
+ message = {
25
+ 'method' => 'trigger.get',
26
+ 'params' => {
27
+ 'filter' => {
28
+ 'hostid' => host_id,
29
+ 'description' => trigger_name
30
+ }
31
+ }
32
+ }
33
+
34
+ responce = send_request(message)
35
+
36
+ unless ( responce.empty? ) then
37
+ result = responce[0]['triggerid']
38
+ else
39
+ result = nil
40
+ end
41
+
42
+ return result
43
+ end
44
+
45
+ def get_triggers_by_host(host_id)
46
+
47
+ message = {
48
+ 'method' => 'trigger.get',
49
+ 'params' => {
50
+ 'filter' => {
51
+ 'hostid' => host_id,
52
+ },
53
+ 'extendoutput' => '1'
54
+ }
55
+ }
56
+
57
+ responce = send_request(message)
58
+
59
+ unless ( responce.empty? ) then
60
+ result = {}
61
+ responce.each do |trigger|
62
+ trigger_id = trigger['triggerid']
63
+ description = trigger['description']
64
+ result[trigger_id] = description
65
+ end
66
+ else
67
+ result = {}
68
+ end
69
+
70
+ return result
71
+ end
72
+
73
+ def update_trigger_status(trigger_id, status)
74
+
75
+ message = {
76
+ 'method' => 'trigger.update_status',
77
+ 'params' => {
78
+ 'triggerid' => trigger_id,
79
+ 'status' => status
80
+ }
81
+ }
82
+
83
+ responce = send_request(message)
84
+
85
+ unless ( responce.empty? ) then
86
+ result = responce['triggerids'][0]
87
+ else
88
+ result = nil
89
+ end
90
+
91
+ return result
92
+ end
93
+ end
94
+ end
data/lib/usermacro.rb ADDED
@@ -0,0 +1,75 @@
1
+ module Zabbix
2
+
3
+ class ZabbixApi
4
+ def add_macro(host_id, macro_name, macro_value)
5
+
6
+ message = {
7
+ 'method' => 'Usermacro.create',
8
+ 'params' => {
9
+ 'hostid' => host_id,
10
+ 'macro' => macro_name,
11
+ 'value'=> macro_value
12
+ }
13
+ }
14
+
15
+ responce = send_request(message)
16
+
17
+ if ( hostmacroids = responce['hostmacroids'] ) then
18
+ result = hostmacroids
19
+ else
20
+ result = nil
21
+ end
22
+
23
+ return result
24
+ end
25
+
26
+ def get_macro(host_id, macro_name)
27
+
28
+ message = {
29
+ 'method' => 'Usermacro.get',
30
+ 'params' => {
31
+ 'hostids' => host_id,
32
+ 'macros' => macro_name,
33
+ 'extendoutput' => '1'
34
+ }
35
+ }
36
+
37
+ responce = send_request(message)
38
+
39
+ if not ( responce.empty?) then
40
+ if ( hostmacroid = responce[0]['hostmacroid'] ) then
41
+ macro_id = hostmacroid
42
+ macro_value = responce[0]['value']
43
+
44
+ result = {
45
+ 'id' => macro_id,
46
+ 'value'=> macro_value
47
+ }
48
+ else
49
+ result = nil
50
+ end
51
+ else
52
+ result = nil
53
+ end
54
+
55
+ return result
56
+ end
57
+
58
+ def set_macro_value(host_id, macro_name, macro_value)
59
+
60
+ message = {
61
+ 'method' => 'usermacro.updateValue',
62
+ 'params' => {
63
+ 'hostid' => host_id,
64
+ 'macro' => macro_name,
65
+ 'value' => macro_value
66
+ }
67
+ }
68
+
69
+ responce = send_request(message)
70
+
71
+ # Проверять ответ бесполезно. В ответ всегда возвращается запрос.
72
+ return true
73
+ end
74
+ end
75
+ end
data/lib/zabbixapi.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'base'
2
+ require 'graph'
3
+ require 'group'
4
+ require 'host'
5
+ require 'item'
6
+ require 'screen'
7
+ require 'template'
8
+ require 'trigger'
9
+ require 'usermacro'
data/zabbixapi.gemspec ADDED
@@ -0,0 +1,21 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'echoe'
4
+
5
+ Gem::Specification.new do |spec|
6
+
7
+ spec.version = '0.1.1'
8
+ spec.name = 'zabbixapi'
9
+ spec.summary = 'Ruby module for work with zabbix api.'
10
+
11
+ spec.email = 'verm666@gmail.com'
12
+ spec.author = 'Eduard Snesarev'
13
+ spec.homepage = 'http://github.com/verm666/zabbixapi'
14
+ spec.description = 'Ruby module for work with zabbix api. '
15
+
16
+ spec.has_rdoc = true
17
+ spec.extra_rdoc_files = 'README.rdoc'
18
+
19
+
20
+ spec.files = FileList["lib/*.rb", "bin/*", "spec/*", 'zabbixapi.gemspec', 'README.rdoc'].to_a
21
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zabbixapi
3
+ version: !ruby/object:Gem::Version
4
+ hash: 25
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 1
10
+ version: 0.1.1
11
+ platform: ruby
12
+ authors:
13
+ - Eduard Snesarev
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-08-09 00:00:00 +04:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: "Ruby module for work with zabbix api. "
23
+ email: verm666@gmail.com
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files:
29
+ - README.rdoc
30
+ files:
31
+ - lib/trigger.rb
32
+ - lib/screen.rb
33
+ - lib/1.rb
34
+ - lib/host.rb
35
+ - lib/usermacro.rb
36
+ - lib/template.rb
37
+ - lib/item.rb
38
+ - lib/zabbixapi.rb
39
+ - lib/base.rb
40
+ - lib/group.rb
41
+ - lib/graph.rb
42
+ - zabbixapi.gemspec
43
+ - README.rdoc
44
+ has_rdoc: true
45
+ homepage: http://github.com/verm666/zabbixapi
46
+ licenses: []
47
+
48
+ post_install_message:
49
+ rdoc_options: []
50
+
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ hash: 3
68
+ segments:
69
+ - 0
70
+ version: "0"
71
+ requirements: []
72
+
73
+ rubyforge_project:
74
+ rubygems_version: 1.3.7
75
+ signing_key:
76
+ specification_version: 3
77
+ summary: Ruby module for work with zabbix api.
78
+ test_files: []
79
+