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.
@@ -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: []