netapp 0.0.1

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