iteh-zabbixapi 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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