Class: MoolDisk

Inherits:
Object
  • Object
show all
Defined in:
lib/mool/disk.rb

Constant Summary collapse

PATH_DEV_BLOCK =
Dir.glob('/sys/dev/block/*')

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dev_name) ⇒ MoolDisk

Returns a new instance of MoolDisk.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/mool/disk.rb', line 6

def initialize(dev_name)
  @path = PATH_DEV_BLOCK.select{ |entry| ( File.read("#{entry}/dev").include?(dev_name)) ||
                                         ( File.read("#{entry}/uevent").include?(dev_name)) ||
                                         ( File.exist?("#{entry}/dm/name") &&
                                           File.read("#{entry}/dm/name").include?(dev_name)) }.first
  raise "Does't exist #{dev_name}!" if @path.nil?
  read_uevent
  logical_name
  swap
  capacity
  @unity = Mool::BYTES
  mounting_point
  file_system
end

Instance Attribute Details

#block_freeObject

Returns the value of attribute block_free.



4
5
6
# File 'lib/mool/disk.rb', line 4

def block_free
  @block_free
end

#block_usedObject

Returns the value of attribute block_used.



4
5
6
# File 'lib/mool/disk.rb', line 4

def block_used
  @block_used
end

#devnameObject

Returns the value of attribute devname.



4
5
6
# File 'lib/mool/disk.rb', line 4

def devname
  @devname
end

#devtypeObject

Returns the value of attribute devtype.



4
5
6
# File 'lib/mool/disk.rb', line 4

def devtype
  @devtype
end

#file_systemObject

Returns the value of attribute file_system.



4
5
6
# File 'lib/mool/disk.rb', line 4

def file_system
  @file_system
end

#majorObject

Returns the value of attribute major.



4
5
6
# File 'lib/mool/disk.rb', line 4

def major
  @major
end

#minorObject

Returns the value of attribute minor.



4
5
6
# File 'lib/mool/disk.rb', line 4

def minor
  @minor
end

#mount_pointObject

Returns the value of attribute mount_point.



4
5
6
# File 'lib/mool/disk.rb', line 4

def mount_point
  @mount_point
end

#partitionsObject

Returns the value of attribute partitions.



4
5
6
# File 'lib/mool/disk.rb', line 4

def partitions
  @partitions
end

#pathObject

Returns the value of attribute path.



4
5
6
# File 'lib/mool/disk.rb', line 4

def path
  @path
end

#sizeObject

Returns the value of attribute size.



4
5
6
# File 'lib/mool/disk.rb', line 4

def size
  @size
end

#slavesObject

Returns the value of attribute slaves.



4
5
6
# File 'lib/mool/disk.rb', line 4

def slaves
  @slaves
end

#swapObject

Returns the value of attribute swap.



4
5
6
# File 'lib/mool/disk.rb', line 4

def swap
  @swap
end

#total_blockObject

Returns the value of attribute total_block.



4
5
6
# File 'lib/mool/disk.rb', line 4

def total_block
  @total_block
end

#unityObject

Returns the value of attribute unity.



4
5
6
# File 'lib/mool/disk.rb', line 4

def unity
  @unity
end

Class Method Details

.allObject



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/mool/disk.rb', line 84

def self.all
  disks = []

  PATH_DEV_BLOCK.each do |entry|
    real_path = `readlink -f #{entry}`.chomp
    disks << MoolDisk.new(entry.split("/").last) if (not real_path.include?("virtual")) &&
                                                    (not real_path.include?("/sr")) &&
                                                    (not File.exist?("#{real_path}/partition")) &&
                                                    Dir.glob("#{real_path}/slaves/*").empty?
  end

  disks.each{ |disk| disk.partitions.each { |part| part.partitions and part.slaves }}
  disks.each{ |disk| disk.slaves.each { |part| part.partitions and part.slaves }}
  disks
end

.all_usableObject



110
111
112
113
114
115
116
# File 'lib/mool/disk.rb', line 110

def self.all_usable
  result = MoolDisk.all
  result.each do |disk|
    result += (disk.partitions + disk.slaves + (disk.partitions + disk.slaves).collect{|p| p.partitions + p.slaves }.flatten)
  end
  result.reject(&:blank?).select{|d| (d.partitions + d.slaves).blank? }
end

.swapObject



105
106
107
108
# File 'lib/mool/disk.rb', line 105

def self.swap
  result = File.read("/proc/swaps").scan(/.*\n\/dev\/(\S+)/).flatten.first
  MoolDisk.new(result) unless result.nil?
end

Instance Method Details

#capacityObject



45
46
47
48
49
50
51
52
# File 'lib/mool/disk.rb', line 45

def capacity
  unless (defined?(@total_block) && defined?(@block_used) && defined?(@block_free))
    result = `df`.scan(/(#{@logical_name}|#{@devname})\s+(\d+)\s+(\d+)\s+(\d+)\s+(\S+)/).flatten
    @total_block = File.read("#{@path}/size").chomp.to_f * Mool::BLOCK_SIZE
    @block_used  = result[2].to_f * Mool::BLOCK_SIZE
    @block_free  = @total_block - @block_used
  end
end

#devObject



37
# File 'lib/mool/disk.rb', line 37

def dev; @major + @minor; end

#free_percentObject



80
81
82
# File 'lib/mool/disk.rb', line 80

def free_percent
  @block_free / @total_block
end

#is_disk?Boolean

Returns:

  • (Boolean)


39
# File 'lib/mool/disk.rb', line 39

def is_disk?; @devtype == "disk"; end

#is_partition?Boolean

Returns:

  • (Boolean)


41
# File 'lib/mool/disk.rb', line 41

def is_partition?; @devtype == "partition"; end

#logical_nameObject



29
30
31
# File 'lib/mool/disk.rb', line 29

def logical_name
  @logical_name ||= File.exists?("#{@path}/dm/name")? File.read("#{@path}/dm/name").chomp : @devname
end

#mounting_pointObject



21
22
23
# File 'lib/mool/disk.rb', line 21

def mounting_point
  @mount_point ||= File.read("/proc/mounts").scan(/#{@logical_name} (\S+)/).flatten.first if File.read("/proc/mounts").include?(@logical_name)
end

#read_ueventObject



33
34
35
# File 'lib/mool/disk.rb', line 33

def read_uevent
  @major, @minor, @devname, @devtype = File.read("#{@path}/uevent").scan(/.*=(\d+)\n.*=(\d+)\n.*=(\S+)\n.*=(\w+)\n/).flatten
end

#to_bObject



100
# File 'lib/mool/disk.rb', line 100

def to_b;  Mool.parse_to(self, ["@total_block", "@block_used", "@block_free"], Mool::BYTES);  end

#to_gbObject



103
# File 'lib/mool/disk.rb', line 103

def to_gb; Mool.parse_to(self, ["@total_block", "@block_used", "@block_free"], Mool::GBYTES); end

#to_kbObject



101
# File 'lib/mool/disk.rb', line 101

def to_kb; Mool.parse_to(self, ["@total_block", "@block_used", "@block_free"], Mool::KBYTES); end

#to_mbObject



102
# File 'lib/mool/disk.rb', line 102

def to_mb; Mool.parse_to(self, ["@total_block", "@block_used", "@block_free"], Mool::MBYTES); end

#used_percentObject



76
77
78
# File 'lib/mool/disk.rb', line 76

def used_percent
  @block_used / @total_block
end