zabbixapi 0.5.0 → 0.5.1a
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/.travis.yml +1 -1
- data/Gemfile +2 -1
- data/Gemfile.lock +2 -0
- data/README.md +8 -0
- data/lib/zabbixapi.rb +6 -12
- data/lib/zabbixapi/basic/basic_alias.rb +17 -0
- data/lib/zabbixapi/basic/basic_func.rb +41 -0
- data/lib/zabbixapi/basic/basic_init.rb +33 -0
- data/lib/zabbixapi/basic/basic_logic.rb +70 -0
- data/lib/zabbixapi/{applications.rb → classes/applications.rb} +0 -0
- data/lib/zabbixapi/{errors.rb → classes/errors.rb} +0 -0
- data/lib/zabbixapi/classes/graphs.rb +40 -0
- data/lib/zabbixapi/classes/hostgroups.rb +26 -0
- data/lib/zabbixapi/classes/hosts.rb +58 -0
- data/lib/zabbixapi/classes/items.rb +54 -0
- data/lib/zabbixapi/classes/mediatypes.rb +31 -0
- data/lib/zabbixapi/classes/screens.rb +68 -0
- data/lib/zabbixapi/{server.rb → classes/server.rb} +0 -0
- data/lib/zabbixapi/{templates.rb → classes/templates.rb} +8 -70
- data/lib/zabbixapi/classes/triggers.rb +17 -0
- data/lib/zabbixapi/{usergroups.rb → classes/usergroups.rb} +11 -54
- data/lib/zabbixapi/classes/users.rb +32 -0
- data/lib/zabbixapi/client.rb +4 -2
- data/lib/zabbixapi/version.rb +1 -1
- data/spec/localhost.rb +1 -1
- metadata +23 -19
- data/lib/zabbixapi/graphs.rb +0 -83
- data/lib/zabbixapi/hostgroups.rb +0 -72
- data/lib/zabbixapi/hosts.rb +0 -86
- data/lib/zabbixapi/items.rb +0 -87
- data/lib/zabbixapi/mediatypes.rb +0 -109
- data/lib/zabbixapi/screens.rb +0 -132
- data/lib/zabbixapi/triggers.rb +0 -48
- data/lib/zabbixapi/users.rb +0 -67
data/.travis.yml
CHANGED
@@ -3,7 +3,7 @@ language:
|
|
3
3
|
rvm:
|
4
4
|
- 1.9.3
|
5
5
|
before_script:
|
6
|
-
- sudo apt-get install mysql-server zabbix-server-mysql zabbix-frontend-php
|
6
|
+
- sudo apt-get update; sudo apt-get install mysql-server zabbix-server-mysql zabbix-frontend-php
|
7
7
|
- mysql -u root -e "use zabbix; insert into users_groups(usrgrpid, userid) values(10,1);"
|
8
8
|
- echo "$(curl -fsSL https://raw.github.com/gist/8f0df0d1824ea25a3827/zabbix.php)" | sudo tee /usr/share/zabbix/conf/zabbix.conf.php
|
9
9
|
script: "bundle exec rspec spec/run.rb"
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -24,6 +24,14 @@ zbx = ZabbixApi.connect(
|
|
24
24
|
:user => 'Admin',
|
25
25
|
:password => 'zabbix'
|
26
26
|
)
|
27
|
+
# use basic_auth
|
28
|
+
zbx = ZabbixApi.connect(
|
29
|
+
:url => 'http://localhost/zabbix/api_jsonrpc.php',
|
30
|
+
:user => 'Admin',
|
31
|
+
:password => 'zabbix',
|
32
|
+
:http_password => 'bla-bla',
|
33
|
+
:http_user => 'bla-bla'
|
34
|
+
)
|
27
35
|
```
|
28
36
|
### Create Hostgroup
|
29
37
|
```ruby
|
data/lib/zabbixapi.rb
CHANGED
@@ -1,17 +1,10 @@
|
|
1
1
|
require "zabbixapi/version"
|
2
2
|
require "zabbixapi/client"
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
require "zabbixapi/hosts"
|
9
|
-
require "zabbixapi/triggers"
|
10
|
-
require "zabbixapi/items"
|
11
|
-
require "zabbixapi/graphs"
|
12
|
-
require "zabbixapi/screens"
|
13
|
-
require "zabbixapi/usergroups"
|
14
|
-
require "zabbixapi/mediatypes"
|
3
|
+
|
4
|
+
|
5
|
+
Dir["#{File.dirname(__FILE__)}/zabbixapi/basic/*.rb"].each { |f| load(f) }
|
6
|
+
Dir["#{File.dirname(__FILE__)}/zabbixapi/classes/*.rb"].each { |f| load(f) }
|
7
|
+
|
15
8
|
|
16
9
|
class ZabbixApi
|
17
10
|
|
@@ -57,6 +50,7 @@ class ZabbixApi
|
|
57
50
|
@screens = Screens.new(@client)
|
58
51
|
@usergroups = Usergroups.new(@client)
|
59
52
|
@mediatypes = Mediatypes.new(@client)
|
53
|
+
|
60
54
|
end
|
61
55
|
|
62
56
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class Hash
|
2
|
+
def deep_include?(sub_hash)
|
3
|
+
sub_hash.keys.all? do |key|
|
4
|
+
self.has_key?(key) && if sub_hash[key].is_a?(Hash)
|
5
|
+
self[key].is_a?(Hash) && self[key].deep_include?(sub_hash[key])
|
6
|
+
else
|
7
|
+
self[key] == sub_hash[key]
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class ZabbixApi
|
14
|
+
class Basic
|
15
|
+
|
16
|
+
def symbolize_keys(obj)
|
17
|
+
return obj.inject({}){|memo,(k,v)| memo[k.to_sym] = symbolize_keys(v); memo} if obj.is_a? Hash
|
18
|
+
return obj.inject([]){|memo,v | memo << symbolize_keys(v); memo} if obj.is_a? Array
|
19
|
+
return obj
|
20
|
+
end
|
21
|
+
|
22
|
+
def parse_keys(data)
|
23
|
+
case data
|
24
|
+
when Hash
|
25
|
+
data.empty? ? nil : data[keys][0].to_i
|
26
|
+
when TrueClass
|
27
|
+
true
|
28
|
+
when FalseClass
|
29
|
+
false
|
30
|
+
else
|
31
|
+
nil
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def merge_params(params)
|
36
|
+
result = JSON.generate(default_options).to_s + "," + JSON.generate(params).to_s
|
37
|
+
JSON.parse(result.gsub('},{', ','))
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
class ZabbixApi
|
2
|
+
class Basic
|
3
|
+
|
4
|
+
def initialize(client)
|
5
|
+
@client = client
|
6
|
+
end
|
7
|
+
|
8
|
+
def method_name
|
9
|
+
raise "Can't call method_name here"
|
10
|
+
end
|
11
|
+
|
12
|
+
def default_options
|
13
|
+
{}
|
14
|
+
end
|
15
|
+
|
16
|
+
def keys
|
17
|
+
key + "s"
|
18
|
+
end
|
19
|
+
|
20
|
+
def key
|
21
|
+
method_name + "id"
|
22
|
+
end
|
23
|
+
|
24
|
+
def indentify
|
25
|
+
raise "Can't call indentify here"
|
26
|
+
end
|
27
|
+
|
28
|
+
def array_flag
|
29
|
+
false
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
class ZabbixApi
|
2
|
+
class Basic
|
3
|
+
|
4
|
+
def create(data)
|
5
|
+
data_with_default = default_options.empty? ? data : merge_params(data)
|
6
|
+
data_create = array_flag ? [data_with_default] : data_with_default
|
7
|
+
result = @client.api_request(:method => "#{method_name}.create", :params => data_create)
|
8
|
+
parse_keys result
|
9
|
+
end
|
10
|
+
|
11
|
+
def delete(data)
|
12
|
+
data_delete = array_flag ? [data] : [key.to_sym => data]
|
13
|
+
result = @client.api_request(:method => "#{method_name}.delete", :params => data_delete)
|
14
|
+
parse_keys result
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_or_update(data)
|
18
|
+
id = get_id(indentify.to_sym => data[indentify.to_sym])
|
19
|
+
id ? update(data.merge(key.to_sym => id.to_s)) : create(data)
|
20
|
+
end
|
21
|
+
|
22
|
+
def update(data)
|
23
|
+
dump = {}
|
24
|
+
get_full_data(data).each do |item|
|
25
|
+
dump = symbolize_keys(item) if item[key].to_i == data[key.to_sym].to_i
|
26
|
+
end
|
27
|
+
unless dump.deep_include?(data)
|
28
|
+
result = @client.api_request(:method => "#{method_name}.update", :params => data)
|
29
|
+
parse_keys result
|
30
|
+
else
|
31
|
+
data[key.to_sym].to_i
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def get_full_data(data)
|
36
|
+
@client.api_request(
|
37
|
+
:method => "#{method_name}.get",
|
38
|
+
:params => {
|
39
|
+
:filter => {
|
40
|
+
indentify.to_sym => data[indentify.to_sym]
|
41
|
+
},
|
42
|
+
:output => "extend"
|
43
|
+
}
|
44
|
+
)
|
45
|
+
end
|
46
|
+
|
47
|
+
def all
|
48
|
+
result = {}
|
49
|
+
@client.api_request(:method => "#{method_name}.get", :params => {:output => "extend"}).each do |item|
|
50
|
+
result[item[indentify]] = item[key]
|
51
|
+
end
|
52
|
+
result
|
53
|
+
end
|
54
|
+
|
55
|
+
def get_id(data)
|
56
|
+
result = get_full_data(data)
|
57
|
+
id = nil
|
58
|
+
result.each { |item| id = item[key].to_i if item[indentify] == data[indentify.to_sym] }
|
59
|
+
id
|
60
|
+
end
|
61
|
+
|
62
|
+
def get_or_create(data)
|
63
|
+
unless id = get_id(data)
|
64
|
+
id = create(data)
|
65
|
+
end
|
66
|
+
id
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
File without changes
|
File without changes
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class ZabbixApi
|
2
|
+
class Graphs < Basic
|
3
|
+
|
4
|
+
def array_flag
|
5
|
+
true
|
6
|
+
end
|
7
|
+
|
8
|
+
def method_name
|
9
|
+
"graph"
|
10
|
+
end
|
11
|
+
|
12
|
+
def indentify
|
13
|
+
"name"
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_ids_by_host(data)
|
17
|
+
ids = []
|
18
|
+
result = @client.api_request(:method => "graph.get", :params => {:filter => {:host => data[:host]}, :output => "extend"})
|
19
|
+
result.each do |graph|
|
20
|
+
ids << graph['graphid']
|
21
|
+
end
|
22
|
+
ids
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_items(data)
|
26
|
+
@client.api_request(:method => "graphitem.get", :params => { :graphids => [data], :output => "extend" } )
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_or_update(data)
|
30
|
+
graphid = get_id(:name => data[:name], :templateid => data[:templateid])
|
31
|
+
graphid ? _update(data.merge(:graphid => graphid)) : create(data)
|
32
|
+
end
|
33
|
+
|
34
|
+
def _update(data)
|
35
|
+
data.delete(:name)
|
36
|
+
update(data)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class ZabbixApi
|
2
|
+
class HostGroups < Basic
|
3
|
+
|
4
|
+
def array_flag
|
5
|
+
true
|
6
|
+
end
|
7
|
+
|
8
|
+
def method_name
|
9
|
+
"hostgroup"
|
10
|
+
end
|
11
|
+
|
12
|
+
def indentify
|
13
|
+
"name"
|
14
|
+
end
|
15
|
+
|
16
|
+
def key
|
17
|
+
"groupid"
|
18
|
+
end
|
19
|
+
|
20
|
+
def delete(data)
|
21
|
+
result = @client.api_request(:method => "hostgroup.delete", :params => [:groupid => data])
|
22
|
+
result.empty? ? nil : result['groupids'][0].to_i
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
class ZabbixApi
|
2
|
+
class Hosts < Basic
|
3
|
+
|
4
|
+
def array_flag
|
5
|
+
true
|
6
|
+
end
|
7
|
+
|
8
|
+
def method_name
|
9
|
+
"host"
|
10
|
+
end
|
11
|
+
|
12
|
+
def indentify
|
13
|
+
"host"
|
14
|
+
end
|
15
|
+
|
16
|
+
def default_options
|
17
|
+
{
|
18
|
+
:host => nil,
|
19
|
+
:port => 10050,
|
20
|
+
:status => 1,
|
21
|
+
:useip => 1,
|
22
|
+
:dns => '',
|
23
|
+
:ip => '0.0.0.0',
|
24
|
+
:proxy_hostid => 0,
|
25
|
+
:groups => [],
|
26
|
+
:useipmi => 0,
|
27
|
+
:ipmi_ip => '',
|
28
|
+
:ipmi_port => 623,
|
29
|
+
:ipmi_authtype => 0,
|
30
|
+
:ipmi_privilege => 0,
|
31
|
+
:ipmi_username => '',
|
32
|
+
:ipmi_password => ''
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
def unlink_templates(data)
|
37
|
+
result = @client.api_request(
|
38
|
+
:method => "host.massRemove",
|
39
|
+
:params => {
|
40
|
+
:hostids => data[:hosts_id],
|
41
|
+
:templates => data[:templates_id]
|
42
|
+
}
|
43
|
+
)
|
44
|
+
case @client.api_version
|
45
|
+
when "1.2"
|
46
|
+
result ? true : false
|
47
|
+
else
|
48
|
+
result.empty? ? false : true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def create_or_update(data)
|
53
|
+
hostid = get_id(:host => data[:host])
|
54
|
+
hostid ? update(data.merge(:hostid => hostid)) : create(data)
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
class ZabbixApi
|
2
|
+
class Items < Basic
|
3
|
+
|
4
|
+
def array_flag
|
5
|
+
true
|
6
|
+
end
|
7
|
+
|
8
|
+
def method_name
|
9
|
+
"item"
|
10
|
+
end
|
11
|
+
|
12
|
+
def indentify
|
13
|
+
"name"
|
14
|
+
end
|
15
|
+
|
16
|
+
def default_options
|
17
|
+
{
|
18
|
+
:description => nil,
|
19
|
+
:key_ => nil,
|
20
|
+
:hostid => nil,
|
21
|
+
:delay => 60,
|
22
|
+
:history => 60,
|
23
|
+
:status => 0,
|
24
|
+
:type => 7,
|
25
|
+
:snmp_community => '',
|
26
|
+
:snmp_oid => '',
|
27
|
+
:value_type => 3,
|
28
|
+
:data_type => 0,
|
29
|
+
:trapper_hosts => 'localhost',
|
30
|
+
:snmp_port => 161,
|
31
|
+
:units => '',
|
32
|
+
:multiplier => 0,
|
33
|
+
:delta => 0,
|
34
|
+
:snmpv3_securityname => '',
|
35
|
+
:snmpv3_securitylevel => 0,
|
36
|
+
:snmpv3_authpassphrase => '',
|
37
|
+
:snmpv3_privpassphrase => '',
|
38
|
+
:formula => 0,
|
39
|
+
:trends => 365,
|
40
|
+
:logtimefmt => '',
|
41
|
+
:valuemapid => 0,
|
42
|
+
:delay_flex => '',
|
43
|
+
:authtype => 0,
|
44
|
+
:username => '',
|
45
|
+
:password => '',
|
46
|
+
:publickey => '',
|
47
|
+
:privatekey => '',
|
48
|
+
:params => '',
|
49
|
+
:ipmi_sensor => ''
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class ZabbixApi
|
2
|
+
class Mediatypes < Basic
|
3
|
+
|
4
|
+
def array_flag
|
5
|
+
true
|
6
|
+
end
|
7
|
+
|
8
|
+
def method_name
|
9
|
+
"mediatype"
|
10
|
+
end
|
11
|
+
|
12
|
+
def indentify
|
13
|
+
"description"
|
14
|
+
end
|
15
|
+
|
16
|
+
def default_options
|
17
|
+
{
|
18
|
+
:description => "", #Name
|
19
|
+
:type => 0, #0 - Email, 1 - External script, 2 - SMS, 3 - Jabber, 100 - EzTexting
|
20
|
+
:smtp_server => "",
|
21
|
+
:smtp_helo => "",
|
22
|
+
:smtp_email => "", #Email address of Zabbix server
|
23
|
+
:exec_path => "", #Name of external script
|
24
|
+
:gsm_modem => "", #Serial device name of GSM modem
|
25
|
+
:username => "", #Jabber user name used by Zabbix server
|
26
|
+
:passwd => "" #Jabber password used by Zabbix server
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|