device_space_left 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ 0.1.0 (September 09, 2010)
2
+
3
+ * First release
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Guillaume Luccisano - g-mai|: guillaume.luccisano
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,15 @@
1
+ = DeviceSpaceLeft
2
+
3
+ Small ruby gem/plugin giving you the ability to retrieve easily the space available on your devices.
4
+
5
+ == Usage
6
+
7
+ * DeviseSpaceLeft.percent_used('/home')
8
+ * DeviseSpaceLeft.percent_free('/dev/md2')
9
+ * DeviseSpaceLeft.space_available('/dev/md2')
10
+ * DeviseSpaceLeft.space_used('/dev/md2')
11
+ * DeviseSpaceLeft.size('/dev/md2')
12
+
13
+ Tested on Ubuntu and OsX
14
+
15
+ Copyright (c) 2010 Guillaume Luccisano - g-mai|: guillaume.luccisano, released under the MIT license
@@ -0,0 +1,16 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'spec/rake/spectask'
4
+
5
+ spec_files = Rake::FileList["spec/**/*_spec.rb"]
6
+
7
+
8
+ desc "Run specs for current Rails version"
9
+ Spec::Rake::SpecTask.new do |t|
10
+ t.spec_files = spec_files
11
+ t.spec_opts = lambda {
12
+ ["-c --format specdoc"]
13
+ }
14
+ end
15
+
16
+ task :default => :spec
data/init.rb ADDED
@@ -0,0 +1,2 @@
1
+ # encoding: utf-8
2
+ require 'device_space_left'
@@ -0,0 +1,112 @@
1
+ module DeviceSpaceLeft
2
+
3
+ private
4
+
5
+ # Return the df linux command output
6
+ def self.df
7
+ `df`
8
+ end
9
+
10
+ def self.parse_df_size(size)
11
+ return size if !(String === size)
12
+
13
+ return (size.to_f * 1024 * 1024 * 1024 * 1024).to_i if size.index('T')
14
+ return (size.to_f * 1024 * 1024 * 1024).to_i if size.index('G')
15
+ return (size.to_f * 1024 * 1024).to_i if size.index('M')
16
+ return (size.to_f * 1024).to_i if size.index('K')
17
+ return (size.to_i) if size.index('B')
18
+
19
+ size.to_i
20
+ end
21
+
22
+ # Return a df infos line corresponding to the filesystem name or to the mount point
23
+ def self.find_df_infos(mount_name)
24
+ h = df_hashed
25
+ return h[mount_name.to_sym] if h[mount_name.to_sym]
26
+
27
+ h.each_value do |v|
28
+ return v if v[:filesystem] == mount_name.to_s
29
+ end
30
+
31
+ return nil
32
+ end
33
+
34
+ # Return a value or a max looking through the df hash
35
+ def self.find_value_or_max(value_name, mount_name = nil, max_meth = :max)
36
+ h = df_hashed
37
+
38
+ if mount_name
39
+ t = find_df_infos(mount_name)
40
+ return t[value_name] if t
41
+ end
42
+
43
+ max = []
44
+ h.each_value do |v|
45
+ max << v[value_name]
46
+ end
47
+
48
+ if max_meth == :sum and max
49
+ total = 0
50
+ max.each { |v| total += v }
51
+ return total
52
+ end
53
+
54
+ max.send(max_meth) || 0
55
+ end
56
+
57
+ public
58
+
59
+ # Return the df output in a ruby hash
60
+ def self.df_hashed
61
+ h = {}
62
+
63
+ df.strip.split("\n").each do |l|
64
+ if l.size > 10
65
+ tab = l.strip.split(/ +/)
66
+ if tab.first != 'Filesystem'
67
+ size = parse_df_size(tab[1])
68
+ used = parse_df_size(tab[2])
69
+ available = parse_df_size(tab[3])
70
+ percent_used = tab[4].gsub('%', '').to_i
71
+
72
+ h[tab.last.to_sym] = {:filesystem => tab[0], :size => size, :used => used, :available => available, :percent_used => percent_used, :mount_on => tab.last}
73
+ end
74
+ end
75
+ end
76
+
77
+ return h
78
+ end
79
+
80
+ # Return the percentage of used space on the device named "mount_name"
81
+ # If mount_name is nil => Return the maximum
82
+ def self.percent_used(mount_name = nil)
83
+ find_value_or_max(:percent_used, mount_name)
84
+ end
85
+
86
+ # Return the percentage of free space on "mount_name"
87
+ # If mount_name is nil => Return the minimum
88
+ def self.percent_free(mount_name = nil)
89
+ 100 - find_value_or_max(:percent_used, mount_name)
90
+ end
91
+
92
+ # Return the space available on "mount_name"
93
+ # If mount_name is nil => Return the minimum
94
+ def self.space_available(mount_name = nil)
95
+ find_value_or_max(:available, mount_name, :min)
96
+ end
97
+
98
+ # Return the space used on "mount_name"
99
+ # If mount_name is nil => Return the maximum
100
+ def self.space_used(mount_name = nil)
101
+ find_value_or_max(:used, mount_name)
102
+ end
103
+
104
+ # Return the size of "mount_name"
105
+ # If mount_name is nil => Return the total
106
+ def self.size(mount_name = nil)
107
+ find_value_or_max(:size, mount_name, :sum)
108
+ end
109
+
110
+
111
+
112
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe :device_space_left do
4
+
5
+ let(:dsl) { DeviceSpaceLeft }
6
+
7
+ it "check if df return something" do
8
+ dsl.df.should_not be nil
9
+ dsl.df.size.should > 10
10
+ end
11
+
12
+ context "with stubbed df" do
13
+
14
+ before do
15
+
16
+ fake_df = <<-EOF
17
+
18
+ Filesystem Size Used Avail Use% Mounted on
19
+ /dev/md1 5.0G 2.0G 2.8G 42% /
20
+ none 987M 200K 986M 1% /dev
21
+ none 987M 0 987M 0% /dev/shm
22
+ none 987M 84K 986M 1% /var/run
23
+ none 987M 0 987M 0% /var/lock
24
+ none 987M 0 987M 0% /lib/init/rw
25
+ /dev/md2 4.1T 882G 3.0T 23% /home
26
+ EOF
27
+
28
+ dsl.stub!(:df).and_return(fake_df)
29
+ end
30
+
31
+ it "should return correct percent used when device given" do
32
+ dsl.percent_used('/home').should == 23
33
+ dsl.percent_used('/dev/md2').should == 23
34
+ end
35
+
36
+ it "should return max percent used when no device given" do
37
+ dsl.percent_used(nil).should == 42
38
+ end
39
+
40
+ it "should return free percent" do
41
+ dsl.percent_free('/home').should == 77
42
+ dsl.percent_free('/dev/md2').should == 77
43
+ dsl.percent_free(nil).should == 58
44
+ end
45
+
46
+ it "should return correct space available" do
47
+ dsl.space_available('/home').should == 3.0 * 1024 * 1024 * 1024 * 1024
48
+ dsl.space_available(nil).should == 986 * 1024 * 1024
49
+ end
50
+
51
+ it "should return correct space used" do
52
+ dsl.space_used('/home').should == 882 * 1024 * 1024 * 1024
53
+ dsl.space_used(nil).should == 882 * 1024 * 1024 * 1024
54
+ end
55
+
56
+ it "should return correct total size" do
57
+ dsl.size('/home').should == (4.1 * 1024 * 1024 * 1024 * 1024).to_i
58
+ dsl.size(nil).should == 4518541105561
59
+ end
60
+
61
+
62
+ end
63
+
64
+ end
@@ -0,0 +1,4 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+
4
+ require File.dirname(__FILE__) + '/../init.rb'
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: device_space_left
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Guillaume Luccisano
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-09-09 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: device_space_left is a small plugin giving you the ability to retrieve easily the space available on your devices
22
+ email: guillaume.luccisano@gmail.com
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - lib/device_space_left.rb
31
+ - spec/device_space_left/device_space_left_spec.rb
32
+ - spec/spec_helper.rb
33
+ - CHANGELOG.rdoc
34
+ - MIT-LICENSE
35
+ - Rakefile
36
+ - README.rdoc
37
+ - init.rb
38
+ has_rdoc: true
39
+ homepage: http://github.com/kwi/device_space_left
40
+ licenses: []
41
+
42
+ post_install_message:
43
+ rdoc_options: []
44
+
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ segments:
52
+ - 0
53
+ version: "0"
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ segments:
59
+ - 1
60
+ - 3
61
+ - 4
62
+ version: 1.3.4
63
+ requirements: []
64
+
65
+ rubyforge_project: device_space_left
66
+ rubygems_version: 1.3.6
67
+ signing_key:
68
+ specification_version: 3
69
+ summary: Small ruby gem/plugin giving you the ability to retrieve easily the space available on your devices
70
+ test_files: []
71
+