storcs 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f3dad4d085753517c22a3026d8a0d8a44959dbe5
4
- data.tar.gz: 190d894f84584c5d151084256e2554f0fbef7fe3
3
+ metadata.gz: 01ab35a82f0d0635bbda3aa181da50e8ab1e9db7
4
+ data.tar.gz: 0061cc673f990135149034ac9da979e791893823
5
5
  SHA512:
6
- metadata.gz: e4ebfb6321245cf8b17af2731c9da161c4806f169e6f26afaaeec735b9d40ad70ea6238bdfce144f921ff93204cbe5291524b43bc13b92f35f6b5a9bafec5486
7
- data.tar.gz: 1d6781e41e887180006a4c8885a584feda51e817647b474a06e9ec412d30d7ed9e34a1122b00e61592287679886c20ee0328e25ea24c5eb72861e2209638ce1c
6
+ metadata.gz: f86093087262680ab08ec14bf47ec442e5c9e1e758ed400df35098042577cba5825b4c5c1c7c81858911452ecd739baa9f7bc5cfadd5ce1b00b053612c640b75
7
+ data.tar.gz: 5c98cdd60f875508951313bd8b5741b672a1395e5f7aa03f963114112351dbc260d211ac014a65b3e1339af0522063e8bbe864f0b84af5e433ece0f9863434bd
@@ -115,6 +115,20 @@ h3. Equalogic PS5000 and PS6000
115
115
 
116
116
  It parses the output of a 'show' command in the shell. Unfortunately, I wasn't able to run it remotely since my network administrator didn't allow me. So I have a script based on the "expect" tool with the @show@ command inside.
117
117
 
118
+ h3. Falconstor NSS
119
+
120
+ Tested against NSS 6.15 and 7.70
121
+ It ignores physical devices not assigned to a storage pool
122
+
123
+ bc. iscli getpdevinfo -s server -L >file.txt
124
+
125
+ h3. NetApp
126
+
127
+ Tested against NetApp release 8.1.3 (7-mode)
128
+ A pseudo volume is added in each aggregate in order to see snapshot space.
129
+
130
+ bc. ssh aaa@netapp1 aggr show_space >file.txt
131
+
118
132
  h3. Yours!
119
133
 
120
134
  If you have a storage device you'd like to see in this list, feel free to open an issue here with at least an example 'profile' file (this can be the output of a command, a plain text or structured file) and the result I should find (used size/total size at least). Maybe somebody else (or me) will be interested in building a parser for your device.
@@ -3,6 +3,7 @@ require 'storcs/parsers/df_nas'
3
3
  require 'storcs/parsers/ibm'
4
4
  require 'storcs/parsers/equalogic'
5
5
  require 'storcs/parsers/nss'
6
+ require 'storcs/parsers/netapp'
6
7
 
7
8
  module Storcs
8
9
  module Parsers
@@ -0,0 +1,81 @@
1
+ module Storcs::Parsers
2
+ class Netapp
3
+ include Storcs::Parsers::Utils
4
+
5
+ attr_accessor :device
6
+
7
+ def initialize(name, file)
8
+ @device = Storcs::Device.new(name)
9
+ @lines = File.readlines(file)
10
+ parse!
11
+ end
12
+
13
+ def parse!
14
+ @device.children = aggregates
15
+ end
16
+
17
+ def aggregates
18
+ return @aggregates if @aggregates
19
+ @aggregates = []
20
+
21
+ state = nil
22
+ current_aggr = nil
23
+ current_aggr_usable_size = 0
24
+
25
+ @lines.each do |line|
26
+ # Aggregate 'aggr0'
27
+ if line =~ /^Aggregate '([^']*)'/
28
+ name = Regexp.last_match[1]
29
+ current_aggr = Storcs::Device.new(name)
30
+ current_aggr.children = []
31
+ state = :aggr
32
+ elsif state == :aggr
33
+ case line
34
+ # Volume Allocated Used Guarantee
35
+ when /^Volume.+Allocated/
36
+ state = :volume
37
+ # Total space 492030416KB 12922692KB 23052692KB
38
+ when /^Total space\s+(.*)$/
39
+ data = Regexp.last_match[1]
40
+ alloc = parse_size(data.split(/\s+/).first)
41
+ current_aggr.real_unassigned = current_aggr_usable_size - alloc
42
+ current_aggr_usable_size = 0
43
+ # Snap reserve 0KB 1406504KB 0KB
44
+ when /^Snap reserve\s+(.*)$/
45
+ data = Regexp.last_match[1]
46
+ vol = Storcs::Device.new('Snapshots')
47
+ size = parse_size(data.split(/\s+/)[1])
48
+ vol.real_size = vol.real_used = size
49
+ current_aggr.children << vol
50
+ current_aggr.real_unassigned -= size
51
+ @aggregates << current_aggr
52
+ current_aggr = nil
53
+ # Total space WAFL reserve Snap reserve ...
54
+ when /^\s+Total space/
55
+ state = :aggr_total
56
+ end
57
+ # 573419008KB 57341880KB 0KB 516077128KB 0KB 0KB 0KB
58
+ elsif state == :aggr_total
59
+ usable_size = line.split(/\s+/)[4]
60
+ current_aggr_usable_size = parse_size(usable_size)
61
+ state = :aggr
62
+ elsif state == :volume
63
+ case line
64
+ when /^\s*$/
65
+ state = :aggr
66
+ # vol0 492030416KB 12922692KB volume
67
+ else
68
+ name, alloc, used = line.split(/\s+/)
69
+ vol = Storcs::Device.new(name)
70
+ vol.real_size = parse_size(alloc)
71
+ vol.real_used = parse_size(used)
72
+
73
+ current_aggr.children << vol
74
+ end
75
+ end
76
+ end
77
+
78
+ @aggregates
79
+ end
80
+ end
81
+ end
@@ -20,12 +20,13 @@ module Storcs::Parsers
20
20
 
21
21
  current_allocated = nil
22
22
  @lines.each do |line|
23
- if line =~ /^Total (Available|Allocated) Space in "([^"]*)" \(ID: \d+\): (.* MB)/
23
+ if line =~ /^Total (Available|Allocated) Space in "([^"]*)" \(ID: \d+\): (.*) MB/
24
+ size = $3.tr(',', '').to_i * 1024 * 1024
24
25
  case $1
25
26
  when 'Allocated'
26
- current_allocated = parse_size($3)
27
+ current_allocated = size
27
28
  when 'Available'
28
- current_available = parse_size($3)
29
+ current_available = size
29
30
  @pools << Storcs::Device.new($2)
30
31
  @pools.last.real_size = current_allocated + current_available
31
32
  @pools.last.real_used = current_allocated
@@ -1,3 +1,3 @@
1
1
  module Storcs
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -0,0 +1,33 @@
1
+ Aggregate 'aggr0'
2
+
3
+ Total space WAFL reserve Snap reserve Usable space BSR NVLOG A-SIS Smtape
4
+ 573419008KB 57341880KB 0KB 516077128KB 0KB 0KB 0KB
5
+
6
+ Space allocated to volumes in the aggregate
7
+
8
+ Volume Allocated Used Guarantee
9
+ vol0 492030416KB 12922692KB volume
10
+
11
+ Aggregate Allocated Used Avail
12
+ Total space 492030416KB 12922692KB 23052692KB
13
+ Snap reserve 0KB 962896KB 0KB
14
+ WAFL reserve 57341880KB 4693232KB 52648648KB
15
+
16
+
17
+ Aggregate 'aggr_SAS_data'
18
+
19
+ Total space WAFL reserve Snap reserve Usable space BSR NVLOG A-SIS Smtape
20
+ 15482313216KB 1548231320KB 0KB 13934081896KB 0KB 0KB 0KB
21
+
22
+ Space allocated to volumes in the aggregate
23
+
24
+ Volume Allocated Used Guarantee
25
+ a 4318828224KB 2018428164KB volume
26
+ b 6484207568KB 4366182720KB volume
27
+
28
+ Aggregate Allocated Used Avail
29
+ Total space 10803035792KB 6384610884KB 2713964636KB
30
+ Snap reserve 0KB 416122712KB 0KB
31
+ WAFL reserve 1548231320KB 165426212KB 1382805108KB
32
+
33
+
@@ -0,0 +1,26 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe Storcs::Parsers::Netapp do
4
+
5
+ it "parses the output of 'aggr show_space'" do
6
+ parsed = Storcs::Parsers::Netapp.new("netapp", "spec/data/netapp.txt")
7
+
8
+ device = parsed.device
9
+ device.size.should == 11993243459584 # total allocated + snapshots
10
+ device.unassigned.should == 2803719380992
11
+
12
+ device.children.size.should == 2
13
+ aggr_1 = device.children.last
14
+ aggr_1.name.should == "aggr_SAS_data"
15
+ aggr_1.size.should == 11488418308096
16
+ aggr_1.used.should == 6963951202304
17
+ aggr_1.free.should == 4524467105792
18
+
19
+ aggr_1.children.size.should == 3
20
+ vol_a = aggr_1.children.first
21
+ vol_a.name.should == "a"
22
+ vol_a.size.should == 4422480101376
23
+ vol_a.used.should == 2066870439936
24
+ vol_a.free.should == 2355609661440
25
+ end
26
+ end
@@ -7,16 +7,16 @@ describe Storcs::Parsers::Nss do
7
7
 
8
8
  device = parsed.device
9
9
 
10
- device.size.should == 17165189
11
- device.used.should == 3230663
12
- device.free.should == 13934526
10
+ device.size.should == 17165189120
11
+ device.used.should == 3230662656
12
+ device.free.should == 13934526464
13
13
 
14
14
  device.children.size.should == 2
15
15
 
16
16
  pool_a = device.children.first
17
17
  pool_a.name.should == "pool-a"
18
- pool_a.size.should == 8582594
19
- pool_a.used.should == 2153775
20
- pool_a.free.should == 6428819
18
+ pool_a.size.should == 8582594560
19
+ pool_a.used.should == 2153775104
20
+ pool_a.free.should == 6428819456
21
21
  end
22
22
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: storcs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jean-Baptiste Barth
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-25 00:00:00.000000000 Z
11
+ date: 2014-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -60,6 +60,7 @@ files:
60
60
  - lib/storcs/parsers/df_nas.rb
61
61
  - lib/storcs/parsers/equalogic.rb
62
62
  - lib/storcs/parsers/ibm.rb
63
+ - lib/storcs/parsers/netapp.rb
63
64
  - lib/storcs/parsers/nss.rb
64
65
  - lib/storcs/parsers/utils.rb
65
66
  - lib/storcs/summable_sizes.rb
@@ -68,12 +69,14 @@ files:
68
69
  - spec/data/equalogic_PS5000XV.txt
69
70
  - spec/data/ibm_DS3400.txt
70
71
  - spec/data/ibm_DS4500.txt
72
+ - spec/data/netapp.txt
71
73
  - spec/data/nss.txt
72
74
  - spec/device_spec.rb
73
75
  - spec/formatter_spec.rb
74
76
  - spec/parsers/df_nas_spec.rb
75
77
  - spec/parsers/equalogic_spec.rb
76
78
  - spec/parsers/ibm_spec.rb
79
+ - spec/parsers/netapp_spec.rb
77
80
  - spec/parsers/nss_spec.rb
78
81
  - spec/parsers/utils_spec.rb
79
82
  - spec/spec_helper.rb
@@ -106,12 +109,14 @@ test_files:
106
109
  - spec/data/equalogic_PS5000XV.txt
107
110
  - spec/data/ibm_DS3400.txt
108
111
  - spec/data/ibm_DS4500.txt
112
+ - spec/data/netapp.txt
109
113
  - spec/data/nss.txt
110
114
  - spec/device_spec.rb
111
115
  - spec/formatter_spec.rb
112
116
  - spec/parsers/df_nas_spec.rb
113
117
  - spec/parsers/equalogic_spec.rb
114
118
  - spec/parsers/ibm_spec.rb
119
+ - spec/parsers/netapp_spec.rb
115
120
  - spec/parsers/nss_spec.rb
116
121
  - spec/parsers/utils_spec.rb
117
122
  - spec/spec_helper.rb