iteh-zabbixapi 0.2.2

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.
@@ -0,0 +1,50 @@
1
+ module Zabbix
2
+ class ZabbixApi
3
+ def add_application(app_options)
4
+
5
+ app_options_default = {
6
+ 'hostid' => nil,
7
+ 'name' => nil
8
+ }
9
+
10
+ application = merge_opt(app_options_default, app_options)
11
+ message = {
12
+ 'method' => 'application.create',
13
+ 'params' => application
14
+ }
15
+
16
+ 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
25
+ end
26
+ end
27
+
28
+ def get_app_id(host_id, app_name)
29
+
30
+ message = {
31
+ 'method' => 'application.get',
32
+ 'params' => {
33
+ 'filter' => {
34
+ 'name' => app_name,
35
+ 'hostid' => host_id
36
+ }
37
+ }
38
+ }
39
+
40
+ responce = send_request(message)
41
+
42
+ unless responce.empty? then
43
+ result = responce[0]['applicationid']
44
+ else
45
+ result = nil
46
+ end
47
+
48
+ return result
49
+ end
50
+ end
@@ -0,0 +1,139 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'json'
4
+ require 'net/http'
5
+ require 'net/https'
6
+
7
+ module Zabbix
8
+
9
+ class SocketError < RuntimeError
10
+ end
11
+
12
+ class ResponseCodeError < RuntimeError
13
+ end
14
+
15
+ class ResponseError < RuntimeError
16
+ end
17
+
18
+ class AlreadyExist < RuntimeError
19
+ end
20
+
21
+ class AuthError < RuntimeError
22
+ end
23
+
24
+ class ZabbixApi
25
+
26
+ attr_accessor :debug
27
+
28
+ def initialize ( api_url, api_user, api_password )
29
+ @api_url = api_url
30
+ @api_user = api_user
31
+ @api_password = api_password
32
+ @auth_id = nil
33
+
34
+ @debug = false # Disable debug by default
35
+ end
36
+
37
+ def do_request(message)
38
+
39
+ id = rand 100_000
40
+
41
+ message['id'] = id
42
+ message['jsonrpc'] = '2.0'
43
+
44
+ message_json = JSON.generate(message)
45
+
46
+ uri = URI.parse(@api_url)
47
+ http = Net::HTTP.new(uri.host, uri.port)
48
+
49
+ if ( uri.scheme == "https" ) then
50
+ http.use_ssl = true
51
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
52
+ end
53
+
54
+ request = Net::HTTP::Post.new(uri.request_uri)
55
+ request.add_field('Content-Type', 'application/json-rpc')
56
+ request.body=(message_json)
57
+
58
+ begin
59
+ puts "[ZBXAPI] : INFO : Do request. Body => #{request.body}" if @debug
60
+ response = http.request(request)
61
+ rescue ::SocketError => e
62
+ puts "[ZBXAPI] : ERROR : SocketError => #{e.message}" if @debug
63
+ raise Zabbix::SocketError.new(e.message)
64
+ end
65
+
66
+ if @debug
67
+ puts "[ZBXAPI] : INFO : Response start"
68
+ response.each_header do |key,value|
69
+ puts "#{key}:#{value}"
70
+ end
71
+ puts response
72
+ puts "[ZBXAPI] : INFO : Response end"
73
+ end
74
+
75
+ if response.code != "200"
76
+ raise Zabbix::ResponseCodeError.new("Responce code from [" + @api_url + "] is #{response.code}")
77
+ end
78
+
79
+ response_body_hash = JSON.parse(response.body)
80
+
81
+ if error = response_body_hash['error']
82
+ error_message = error['message']
83
+ error_data = error['data']
84
+ error_code = error['code']
85
+
86
+ e_message = "Code: [" + error_code.to_s + "]. Message: [" + error_message + "]. Data: [" + error_data + "]."
87
+
88
+ case error_code.to_s
89
+ when '-32602'
90
+ raise Zabbix::AlreadyExist.new(e_message)
91
+ else
92
+ raise Zabbix::ResponseError.new(e_message)
93
+ end
94
+ end
95
+
96
+ result = response_body_hash['result']
97
+ result
98
+ end
99
+
100
+ def send_request(message)
101
+ message['auth'] = auth()
102
+ do_request(message)
103
+ end
104
+
105
+ def auth()
106
+
107
+ return @auth_id if @auth_id
108
+
109
+ auth_message = {
110
+ 'auth' => nil,
111
+ 'method' => 'user.authenticate',
112
+ 'params' => {
113
+ 'user' => @api_user,
114
+ 'password' => @api_password,
115
+ '0' => '0'
116
+ }
117
+ }
118
+
119
+ begin
120
+ @auth_id = do_request(auth_message)
121
+ rescue RuntimeError => e
122
+ raise AuthError.new(e.message)
123
+ end
124
+ end
125
+
126
+ # Utils.
127
+ def merge_opt(a, b)
128
+ c = {}
129
+
130
+ b.each_pair do |key, value|
131
+ if a.has_key?(key) then
132
+ c[key] = value
133
+ end
134
+ end
135
+
136
+ return a.merge(c)
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,66 @@
1
+ module Zabbix
2
+ class ZabbixApi
3
+
4
+ def add_graph(graph)
5
+ message = {
6
+ 'method' => 'graph.create',
7
+ 'params' => graph
8
+ }
9
+
10
+ response = send_request(message)
11
+
12
+ return 0
13
+ end
14
+
15
+ def get_graph_id(host_id, graph_name)
16
+
17
+ message = {
18
+ 'method' => 'graph.get',
19
+ 'params' => {
20
+ 'filter' => {
21
+ 'name' => graph_name,
22
+ 'hostid' => host_id
23
+ }
24
+ }
25
+ }
26
+
27
+ response = send_request(message)
28
+
29
+ unless ( response.empty? ) then
30
+ result = response[0]['graphid']
31
+ else
32
+ result = nil
33
+ end
34
+ end
35
+
36
+ def get_graphs(host_id)
37
+
38
+ message = {
39
+ 'method' => 'graph.get',
40
+ 'params' => {
41
+ 'extendoutput' => '1',
42
+ 'filter' => {
43
+ 'hostid' => host_id
44
+ }
45
+ }
46
+ }
47
+
48
+ response = send_request(message)
49
+
50
+ unless ( response.empty? ) then
51
+ result = {}
52
+
53
+ response.each() do |graph|
54
+ graph_id = graph['graphid']
55
+ graph_name = graph['name']
56
+
57
+ result[graph_id] = graph_name
58
+ end
59
+ else
60
+ result = nil
61
+ end
62
+
63
+ return result
64
+ end
65
+ end
66
+ end
@@ -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
+ 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
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
+ response = send_request(message)
47
+
48
+ if ( response ) then
49
+ result = response['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
+ 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
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,85 @@
1
+ module Zabbix
2
+
3
+ class ZabbixApi
4
+ def add_host(host_options)
5
+
6
+ host_default = {
7
+ 'host' => nil,
8
+ 'port' => 10050,
9
+ 'status' => 0,
10
+ 'useip' => 0,
11
+ 'dns' => '',
12
+ 'ip' => '0.0.0.0',
13
+ 'proxy_hostid' => 0,
14
+ 'groups' => [],
15
+ 'useipmi' => 0,
16
+ 'ipmi_ip' => '',
17
+ 'ipmi_port' => 623,
18
+ 'ipmi_authtype' => 0,
19
+ 'ipmi_privilege' => 0,
20
+ 'ipmi_username' => '',
21
+ 'ipmi_password' => ''
22
+ }
23
+
24
+ host_options['groups'].map! { |group_id| {'groupid' => group_id} }
25
+
26
+ host = merge_opt(host_default, host_options)
27
+
28
+ message = {
29
+ 'method' => 'host.create',
30
+ 'params' => host
31
+ }
32
+
33
+ response = send_request(message)
34
+
35
+ unless response.empty? then
36
+ result = response['hostids'][0].to_i
37
+ else
38
+ result = nil
39
+ end
40
+
41
+ result
42
+ end
43
+
44
+ def get_host_id(hostname)
45
+
46
+ message = {
47
+ 'method' => 'host.get',
48
+ 'params' => {
49
+ 'filter' => {
50
+ 'host' => hostname
51
+ }
52
+ }
53
+ }
54
+
55
+ response = send_request(message)
56
+
57
+ unless response.empty? then
58
+ result = response[0]['hostid'].to_i
59
+ else
60
+ result = nil
61
+ end
62
+
63
+ result
64
+ end
65
+
66
+ def get_host(params)
67
+
68
+ message = {
69
+ 'method' => 'host.get',
70
+ 'params' => params
71
+ }
72
+
73
+ response = send_request(message)
74
+
75
+ unless response.empty? then
76
+ result = response[0]
77
+ else
78
+ result = nil
79
+ end
80
+
81
+ result
82
+ end
83
+
84
+ end
85
+ end
@@ -0,0 +1,145 @@
1
+ module Zabbix
2
+ ## Item types (see ./frontends/php/include/defines.inc.php in zabbix source)
3
+ ITEM_TYPE_ZABBIX = 0
4
+ ITEM_TYPE_SNMPV1 = 1
5
+ ITEM_TYPE_TRAPPER = 2
6
+ ITEM_TYPE_SIMPLE = 3
7
+ ITEM_TYPE_SNMPV2C = 4
8
+ ITEM_TYPE_INTERNAL = 5
9
+ ITEM_TYPE_SNMPV3 = 6
10
+ ITEM_TYPE_ZABBIX_ACTIVE = 7
11
+ ITEM_TYPE_AGGREGATE = 8
12
+ ITEM_TYPE_HTTPTEST = 9
13
+ ITEM_TYPE_EXTERNAL = 10
14
+ ITEM_TYPE_DB_MONITOR = 11
15
+ ITEM_TYPE_IPMI = 12
16
+ ITEM_TYPE_SSH = 13
17
+ ITEM_TYPE_TELNET = 14
18
+ ITEM_TYPE_CALCULATED = 15
19
+
20
+ class ZabbixApi
21
+
22
+ def add_item(item)
23
+
24
+ # Default item options
25
+ # See: http://www.zabbix.com/documentation/1.8/api/item
26
+
27
+ item_options = {
28
+ 'description' => nil,
29
+ 'key_' => nil,
30
+ 'hostid' => nil,
31
+ 'delay' => 60,
32
+ 'history' => 60,
33
+ 'status' => 0,
34
+ 'type' => 7,
35
+ 'snmp_community' => '',
36
+ 'snmp_oid' => '',
37
+ 'value_type' => 3,
38
+ 'data_type' => 0,
39
+ 'trapper_hosts' => 'localhost',
40
+ 'snmp_port' => 161,
41
+ 'units' => '',
42
+ 'multiplier' => 0,
43
+ 'delta' => 0,
44
+ 'snmpv3_securityname' => '',
45
+ 'snmpv3_securitylevel' => 0,
46
+ 'snmpv3_authpassphrase' => '',
47
+ 'snmpv3_privpassphrase' => '',
48
+ 'formula' => 0,
49
+ 'trends' => 365,
50
+ 'logtimefmt' => '',
51
+ 'valuemapid' => 0,
52
+ 'delay_flex' => '',
53
+ 'authtype' => 0,
54
+ 'username' => '',
55
+ 'password' => '',
56
+ 'publickey' => '',
57
+ 'privatekey' => '',
58
+ 'params' => '',
59
+ 'ipmi_sensor' => '',
60
+ 'applications' => '',
61
+ 'templateid' => 0
62
+ }
63
+
64
+
65
+ item_options.merge!(item)
66
+
67
+ message = {
68
+ 'method' => 'item.create',
69
+ 'params' => [ item_options ]
70
+ }
71
+
72
+ response = send_request(message)
73
+
74
+ unless response.empty? then
75
+ result = response['itemids'][0]
76
+ else
77
+ result = nil
78
+ end
79
+
80
+ return result
81
+
82
+ end
83
+
84
+ def get_webitem_id(host_id, item_name)
85
+ message = {
86
+ 'method' => 'item.get',
87
+ 'params' => {
88
+ 'filter' => {
89
+ 'hostid' => host_id,
90
+ 'type' => 9,
91
+ 'key_' => "web.test.time[eva.ru,Get main page,resp]"
92
+ },
93
+ 'webitems' => 1
94
+ }
95
+ }
96
+
97
+ response = send_request(message)
98
+
99
+ unless ( response.empty? ) then
100
+ result = response[0]['itemid']
101
+ else
102
+ result = nil
103
+ end
104
+
105
+ return result
106
+ end
107
+
108
+ def get_item_id(host_id, item_name)
109
+ message = {
110
+ 'method' => 'item.get',
111
+ 'params' => {
112
+ 'filter' => {
113
+ 'hostid' => host_id,
114
+ 'description' => item_name
115
+ }
116
+ }
117
+ }
118
+
119
+ response = send_request(message)
120
+
121
+ unless ( response.empty? ) then
122
+ result = response[0]['itemid']
123
+ else
124
+ result = nil
125
+ end
126
+
127
+ return result
128
+
129
+ end
130
+
131
+ def update_item(item_id)
132
+
133
+ message = {
134
+ 'method' => 'item.update',
135
+ 'params' => {
136
+ 'itemid' => item_id,
137
+ 'status' => 0
138
+ }
139
+ }
140
+
141
+ response = send_request(message)
142
+
143
+ end
144
+ end
145
+ end