-
Notifications
You must be signed in to change notification settings - Fork 0
/
netapp_volumes.rb
executable file
·55 lines (49 loc) · 1.77 KB
/
netapp_volumes.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/home/deploy/.rvm/rubies/ruby-1.9.3-p194/bin/ruby
#
# Requires:
# - The "snmp" gem
# - the imported "netapp.mib" MIB module (NETAPP-MIB.yaml)
# If you want to import the netapp module yourself (generate the YAML equivalent):
# - libsmi (brew install libsmi).
# - the actual import goes like this: SNMP::MIB.import_module('mibs/netapp.mib', '.')
# Returned values are in KB
require 'snmp'
require 'timeout'
MaxTime = 20
ZabbixSender = File.join(File.dirname(__FILE__), 'zabbix_sender')
ZabbixSenderCmdLine = "#{ZabbixSender} -z 10.1.2.3 -s 'Zabbix Server' -i -"
ZabbixKeys = {
'head1:/vol/vol1/' => 'san.netapp.vol1',
'head1:/vol/vol2/' => 'san.netapp.vol2',
'head2:/vol/vol3/' => 'san.netapp.vol3',
'head2:/vol/vol4/' => 'san.netapp.vol4'
}
data = {}
Timeout::timeout(MaxTime) do
['head1','head2'].each do |head|
SNMP::Manager.open(:host => head,
:mib_dir => File.dirname(__FILE__),
:mib_modules => ['NETAPP-MIB']) do |manager|
dfNumber = manager.get_value('dfNumber.0');
response = manager.get_bulk(0, dfNumber.to_i, ['dfFileSys','df64AvailKBytes'])
list = response.varbind_list
until list.empty?
dfFileSys = list.shift
df64AvailKBytes = list.shift
data[head + ':'+ dfFileSys.value.to_s] = df64AvailKBytes.value.to_i
end
end
end
end
zabbix_data = ''
data.each do |k,v|
if ZabbixKeys.has_key? k
zabbix_data << "- #{ZabbixKeys[k]} #{v}\n"
end
end
exit if zabbix_data.empty?
Timeout::timeout(MaxTime) do
IO.popen(ZabbixSenderCmdLine, :mode => 'w+', :external_encoding => Encoding::ASCII_8BIT) do |file|
file.write zabbix_data
end
end