netapp 0.0.1
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/lib/netapp.rb +83 -0
- data/lib/netapp/monkey_patches/integer.rb +23 -0
- data/lib/netapp/query.rb +47 -0
- data/lib/netapp/volume.rb +16 -0
- metadata +64 -0
data/lib/netapp.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'snmp'
|
2
|
+
|
3
|
+
require_relative 'netapp/volume'
|
4
|
+
require_relative 'netapp/monkey_patches/integer'
|
5
|
+
require_relative 'netapp/query'
|
6
|
+
|
7
|
+
class NetApp
|
8
|
+
include NetApp::Query
|
9
|
+
attr_accessor :host, :community, :options
|
10
|
+
def initialize(host, community = "public", options = {})
|
11
|
+
@host = host
|
12
|
+
@community = community
|
13
|
+
@options = options
|
14
|
+
end
|
15
|
+
|
16
|
+
def volume(vol)
|
17
|
+
recieved = fetch_vol(vol)
|
18
|
+
NetApp::Volume.new(recieved[:name], recieved[:used], recieved[:free], recieved[:total])
|
19
|
+
end
|
20
|
+
|
21
|
+
def volumes
|
22
|
+
fetch_vols.values
|
23
|
+
end
|
24
|
+
|
25
|
+
def failed_disks?
|
26
|
+
if failed_disks == 0
|
27
|
+
false
|
28
|
+
else
|
29
|
+
true
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def failed_disks
|
34
|
+
fetch(["1.3.6.1.4.1.789.1.6.4.7.0"]).pop.to_i
|
35
|
+
end
|
36
|
+
|
37
|
+
def failed_power_supplies
|
38
|
+
fetch(["1.3.6.1.4.1.789.1.2.4.4.0"]).pop.to_i
|
39
|
+
end
|
40
|
+
|
41
|
+
def failed_power_supply?
|
42
|
+
if failed_power_supplies == 0
|
43
|
+
false
|
44
|
+
else
|
45
|
+
true
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def cache_age
|
50
|
+
fetch(["1.3.6.1.4.1.789.1.2.2.23.0"]).pop.to_i
|
51
|
+
end
|
52
|
+
|
53
|
+
def uptime
|
54
|
+
fetch(["1.3.6.1.2.1.1.3.0"]).pop[/[0-9]+ days/]
|
55
|
+
end
|
56
|
+
|
57
|
+
def over_temperature?
|
58
|
+
if fetch(["1.3.6.1.4.1.789.1.2.4.1.0"]).pop.to_i == 1
|
59
|
+
false
|
60
|
+
else
|
61
|
+
true
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def nvram_battery_status
|
66
|
+
case fetch(["1.3.6.1.4.1.789.1.2.5.1.0"]).pop.to_i
|
67
|
+
when 1
|
68
|
+
"ok"
|
69
|
+
when 2
|
70
|
+
"partially discharged"
|
71
|
+
when 3
|
72
|
+
"fully discharged"
|
73
|
+
when 4
|
74
|
+
"not present"
|
75
|
+
when 5
|
76
|
+
"near end of life"
|
77
|
+
when 6
|
78
|
+
"at end of life"
|
79
|
+
else
|
80
|
+
"unknown"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class ::Integer
|
2
|
+
|
3
|
+
def to_u(unit = :GB, num = self)
|
4
|
+
case unit
|
5
|
+
when :MB
|
6
|
+
num /= 1024
|
7
|
+
when :GB
|
8
|
+
2.times do
|
9
|
+
num /= 1024
|
10
|
+
end
|
11
|
+
num
|
12
|
+
when :TB
|
13
|
+
3.times do
|
14
|
+
num /= 1024
|
15
|
+
end
|
16
|
+
num
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_h(unit = :GB, num = self)
|
21
|
+
"#{self.to_u(unit, num)} #{unit.to_s}"
|
22
|
+
end
|
23
|
+
end
|
data/lib/netapp/query.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'snmp'
|
2
|
+
|
3
|
+
class NetApp
|
4
|
+
module Query
|
5
|
+
|
6
|
+
BASE_VOL_OID = "1.3.6.1.4.1.789.1.5.4.1"
|
7
|
+
|
8
|
+
def fetch_vol(name)
|
9
|
+
results = Hash.new
|
10
|
+
|
11
|
+
self.fetch_vols.each do |vol_num, vol_name|
|
12
|
+
if vol_name.include? name
|
13
|
+
results.merge!({ :name => name })
|
14
|
+
|
15
|
+
details = [ BASE_VOL_OID + ".30" +".#{vol_num}",
|
16
|
+
BASE_VOL_OID + ".31" +".#{vol_num}",
|
17
|
+
BASE_VOL_OID + ".29" +".#{vol_num}" ]
|
18
|
+
|
19
|
+
results.merge!({ :used => self.fetch(details)[0].to_i })
|
20
|
+
results.merge!({ :free => self.fetch(details)[1].to_i })
|
21
|
+
results.merge!({ :total => self.fetch(details)[2].to_i })
|
22
|
+
break
|
23
|
+
end
|
24
|
+
end
|
25
|
+
results
|
26
|
+
end
|
27
|
+
|
28
|
+
def fetch_vols
|
29
|
+
vols = Hash.new
|
30
|
+
i = 1
|
31
|
+
SNMP::Manager.open(:host => self.host) do |manager|
|
32
|
+
manager.walk(BASE_VOL_OID + ".2") do |name|
|
33
|
+
vols.merge!({ i => name.value})
|
34
|
+
i += 1
|
35
|
+
end
|
36
|
+
end
|
37
|
+
vols
|
38
|
+
end
|
39
|
+
|
40
|
+
def fetch(oids)
|
41
|
+
reply = Array.new
|
42
|
+
SNMP::Manager.open(:host => self.host) do |manager|
|
43
|
+
reply = manager.get(oids).each_varbind.map { |vb| vb.value.to_s }
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class NetApp
|
2
|
+
class Volume
|
3
|
+
attr_accessor :name, :used, :free, :total
|
4
|
+
|
5
|
+
def initialize(name, used, free, total)
|
6
|
+
@name = name
|
7
|
+
@used = used
|
8
|
+
@free = free
|
9
|
+
@total = total
|
10
|
+
end
|
11
|
+
|
12
|
+
def percentage_used
|
13
|
+
(@used.to_f / @total.to_f * 100).round(3)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
metadata
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: netapp
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jim Rosser
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-07-16 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: snmp
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
description: Gem to query netapp information
|
31
|
+
email: jarosser06@gmail.com
|
32
|
+
executables: []
|
33
|
+
extensions: []
|
34
|
+
extra_rdoc_files: []
|
35
|
+
files:
|
36
|
+
- lib/netapp.rb
|
37
|
+
- lib/netapp/monkey_patches/integer.rb
|
38
|
+
- lib/netapp/query.rb
|
39
|
+
- lib/netapp/volume.rb
|
40
|
+
homepage: https://github.com/jarosser06
|
41
|
+
licenses: []
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options: []
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
48
|
+
requirements:
|
49
|
+
- - ! '>='
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ! '>='
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
58
|
+
requirements: []
|
59
|
+
rubyforge_project:
|
60
|
+
rubygems_version: 1.8.25
|
61
|
+
signing_key:
|
62
|
+
specification_version: 3
|
63
|
+
summary: Netapp query Tool
|
64
|
+
test_files: []
|