informo 1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +644 -0
- data/README.md +31 -0
- data/Rakefile +8 -0
- data/informo.gemspec +12 -0
- data/lib/informo.rb +31 -0
- data/lib/informo/bios.rb +30 -0
- data/lib/informo/dpkg.rb +81 -0
- data/lib/informo/memory.rb +77 -0
- data/lib/informo/network.rb +73 -0
- data/lib/informo/processor.rb +45 -0
- data/lib/informo/rpm.rb +85 -0
- data/lib/informo/storage.rb +88 -0
- data/lib/informo/system.rb +50 -0
- data/lib/informo/version.rb +5 -0
- data/test/test_bios.rb +27 -0
- data/test/test_dpkg.rb +70 -0
- data/test/test_memory.rb +32 -0
- data/test/test_network.rb +25 -0
- data/test/test_processor.rb +18 -0
- data/test/test_rpm.rb +70 -0
- data/test/test_storage.rb +28 -0
- data/test/test_system.rb +37 -0
- metadata +64 -0
@@ -0,0 +1,88 @@
|
|
1
|
+
module Informo
|
2
|
+
##
|
3
|
+
# This class is used to get info for the available and configured storage. For
|
4
|
+
# example: number of disks, partition info, etc...
|
5
|
+
class Storage
|
6
|
+
##
|
7
|
+
# returns the total number of disks
|
8
|
+
def drive_count
|
9
|
+
count = 0
|
10
|
+
`fdisk -l 2>/dev/null`.each_line do |line|
|
11
|
+
if line =~ /^Disk \/dev\/[^mapper]/
|
12
|
+
count += 1
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
return count
|
17
|
+
end
|
18
|
+
##
|
19
|
+
# returns the details for a given disk
|
20
|
+
#
|
21
|
+
# - size
|
22
|
+
# - model
|
23
|
+
# - interface (scsi, sas, ide)
|
24
|
+
def drive_details(disk)
|
25
|
+
details = Hash.new
|
26
|
+
|
27
|
+
`fdisk -l #{disk} 2>/dev/null`.each_line do |i|
|
28
|
+
details["size"] = $1 if i =~ /^Disk \/\w+\/\w+\:\s+(\d+.+\w+)\,/
|
29
|
+
end
|
30
|
+
|
31
|
+
`hdparm -i #{disk} 2>/dev/null`.each_line do |i|
|
32
|
+
details["model"] = $1 if i =~ /Model=(.+?)\,/
|
33
|
+
end
|
34
|
+
|
35
|
+
File.exists?("/sbin/udevadm") ? cmd = "udevadm info" : cmd = "udevinfo"
|
36
|
+
|
37
|
+
`#{cmd} -q symlink -n #{disk}`.each_line do |i|
|
38
|
+
details["interface"] = $1 if i =~ /disk\/by-path\/\w+-\d+:\d+:\d+\.\d+-(\w+)-\d+:\d+/
|
39
|
+
end
|
40
|
+
|
41
|
+
return details
|
42
|
+
end
|
43
|
+
##
|
44
|
+
# returns an array of disks present
|
45
|
+
def drives
|
46
|
+
drives = Array.new
|
47
|
+
`fdisk -l 2>/dev/null`.each_line do |line|
|
48
|
+
if line =~ /^Disk (\/\w+\/\w+)\:/
|
49
|
+
drives.push($1)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
return drives
|
54
|
+
end
|
55
|
+
##
|
56
|
+
# returns a hash of details for a given mount
|
57
|
+
#
|
58
|
+
# - device (/dev/sda? etc)
|
59
|
+
# - mount (/foo)
|
60
|
+
# - fstype (ext4)
|
61
|
+
# - options (mount options; eg: ro)
|
62
|
+
def mount_details(mountpoint)
|
63
|
+
details = Hash.new
|
64
|
+
File.open("/proc/mounts").each_line do |line|
|
65
|
+
entry = line.split(/\s/)
|
66
|
+
if line != /rootfs/ and entry[1] == mountpoint
|
67
|
+
details["device"] = entry[0]
|
68
|
+
details["mount"] = entry[1]
|
69
|
+
details["fstype"] = entry[2]
|
70
|
+
details["options"] = entry[3]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
return details
|
75
|
+
end
|
76
|
+
##
|
77
|
+
# returns an array of mounts that are mounted
|
78
|
+
def mounts(type=".+")
|
79
|
+
mounts = Array.new
|
80
|
+
File.open("/proc/mounts").each_line do |line|
|
81
|
+
mounts.push(line.split(/\s/)[1]) if line != /rootfs/ and line.split(/\s/)[2] =~ /#{type}/
|
82
|
+
end
|
83
|
+
|
84
|
+
return mounts
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'socket'
|
2
|
+
|
3
|
+
module Informo
|
4
|
+
##
|
5
|
+
# This class is used to get some generic information of the
|
6
|
+
# host in question; ie: distro name, version, etc
|
7
|
+
class System
|
8
|
+
##
|
9
|
+
# returns the linux distro
|
10
|
+
def distro
|
11
|
+
`lsb_release -i`.each_line do |line|
|
12
|
+
distro = $1 if line =~ /.+:\s(.+)$/
|
13
|
+
return distro
|
14
|
+
end
|
15
|
+
end
|
16
|
+
##
|
17
|
+
# returns the version of the linux distro
|
18
|
+
def version
|
19
|
+
`lsb_release -r`.each_line do |line|
|
20
|
+
version = $1 if line =~ /.+:\s(.+)$/
|
21
|
+
return version
|
22
|
+
end
|
23
|
+
end
|
24
|
+
##
|
25
|
+
# returns a boolean for wether or not numa is being used
|
26
|
+
def numa?
|
27
|
+
enabled = system("numactl","-s") ? true : false
|
28
|
+
return enabled
|
29
|
+
end
|
30
|
+
##
|
31
|
+
# returns the running kernel version
|
32
|
+
def kernel
|
33
|
+
File.open("/proc/version").each_line do |line|
|
34
|
+
kernel = $1 if line =~ /version (.+?) /
|
35
|
+
return kernel
|
36
|
+
end
|
37
|
+
end
|
38
|
+
##
|
39
|
+
# returns the architecture of the system (i386, x86_64, etc)
|
40
|
+
def arch
|
41
|
+
arch = `uname -m`.chomp
|
42
|
+
return arch
|
43
|
+
end
|
44
|
+
##
|
45
|
+
# returns the hostname of the system
|
46
|
+
def hostname
|
47
|
+
return Socket.gethostname
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/test/test_bios.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.join(File.dirname(__FILE__),"../lib/informo/bios") if RUBY_VERSION.to_f < 1.9
|
3
|
+
require 'informo/bios' if RUBY_VERSION.to_f >= 1.9
|
4
|
+
|
5
|
+
class BiosTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_version
|
8
|
+
b = Informo::Bios.new
|
9
|
+
assert_match /^\d/, b.version
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_serial
|
13
|
+
b = Informo::Bios.new
|
14
|
+
assert_match /.+?/, b.serial
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_vendor
|
18
|
+
b = Informo::Bios.new
|
19
|
+
assert_match /.+?/, b.vendor
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_date
|
23
|
+
b = Informo::Bios.new
|
24
|
+
assert_match /\d+\/\d+\/\d+/, b.date
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
data/test/test_dpkg.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.join(File.dirname(__FILE__),"../lib/informo/dpkg") if RUBY_VERSION.to_f < 1.9
|
3
|
+
require 'informo/dpkg' if RUBY_VERSION.to_f >= 1.9
|
4
|
+
|
5
|
+
class DpkgTest < Test::Unit::TestCase
|
6
|
+
##
|
7
|
+
# required package for test. this package is requried on every debian/ubuntu system
|
8
|
+
R_PKG = 'glibc'
|
9
|
+
|
10
|
+
def test_get_packages
|
11
|
+
dpkg = Informo::Dpkg.new
|
12
|
+
packages = dpkg.get_packages
|
13
|
+
assert_not_nil packages[0]
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_get_version
|
17
|
+
dpkg = Informo::Dpkg.new
|
18
|
+
version = dpkg.get_version(R_PKG)
|
19
|
+
assert_match '/^\d/', version
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_get_architecture
|
23
|
+
dpkg = Informo::Dpkg.new
|
24
|
+
arch = dpkg.get_architecture(R_PKG)
|
25
|
+
assert_match '/\w+(\d*)?/', arch
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_get_maintainer
|
29
|
+
dpkg = Informo::Dpkg.new
|
30
|
+
maintainer = dpkg.get_maintainer(R_PKG)
|
31
|
+
assert_match '/\w+/', maintainer
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_get_short_desc
|
35
|
+
dpkg = Informo::Dpkg.new
|
36
|
+
desc = dpkg.get_short_description(R_PKG)
|
37
|
+
assert_match '/\w+/', desc
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_get_desc
|
41
|
+
dpkg = Informo::Dpkg.new
|
42
|
+
desc = dpkg.get_description(R_PKG)
|
43
|
+
assert_match '/\w+/', desc
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_get_status
|
47
|
+
dpkg = Informo::Dpkg.new
|
48
|
+
status = dpkg.get_status(R_PKG)
|
49
|
+
assert_match 'ii', status
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_get_installdate
|
53
|
+
dpkg = Informo::Dpkg.new
|
54
|
+
installdate = dpkg.get_installdate(R_PKG)
|
55
|
+
assert_match '/\d+/', installdate
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_get_all
|
59
|
+
dpkg = Informo::Dpkg.new
|
60
|
+
pkg_details = dpkg.get_all(R_PKG)
|
61
|
+
assert_kind_of Hash, pkg_details
|
62
|
+
assert_match '/\w+/', pkg_details['name']
|
63
|
+
assert_match '/^\d/', pkg_details['version']
|
64
|
+
assert_match '/\w+(\d*)?/', pkg_details['achitecture']
|
65
|
+
assert_match '/\w+/', pkg_details['maintainer']
|
66
|
+
assert_match '/\w+/', pkg_details['description']
|
67
|
+
assert_match 'ii', pkg_details['status']
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
data/test/test_memory.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.join(File.dirname(__FILE__),"../lib/informo/memory") if RUBY_VERSION.to_f < 1.9
|
3
|
+
require 'informo/memory' if RUBY_VERSION.to_f >= 1.9
|
4
|
+
|
5
|
+
class MemoryTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_max_module_size
|
8
|
+
m = Informo::Memory.new
|
9
|
+
assert_match /\d+/, m.max_module_size
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_max_modules
|
13
|
+
m = Informo::Memory.new
|
14
|
+
assert_match /\d+/, m.max_modules
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_max_capacity
|
18
|
+
m = Informo::Memory.new
|
19
|
+
assert_match /\d+/, m.max_capacity
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_installed
|
23
|
+
m = Informo::Memory.new
|
24
|
+
assert_match /\d+/, m.installed
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_slots
|
28
|
+
m = Informo::Memory.new
|
29
|
+
assert_match /\d+/, m.slots[0]['speed']
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.join(File.dirname(__FILE__),"../lib/informo/network") if RUBY_VERSION.to_f < 1.9
|
3
|
+
require 'informo/network' if RUBY_VERSION.to_f >= 1.9
|
4
|
+
|
5
|
+
class NetworkTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_interfaces
|
8
|
+
n = Informo::Network.new
|
9
|
+
interfaces = n.interfaces
|
10
|
+
assert_match /\w+\d+/, interfaces[0]
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_inteface_details
|
14
|
+
n = Informo::Network.new
|
15
|
+
details = n.interface_details('lo')
|
16
|
+
assert_equal '127.0.0.1', details['addr']
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_host_bus_adapters
|
20
|
+
n = Informo::Network.new
|
21
|
+
hbas = n.host_bus_adapters
|
22
|
+
assert_not_nil hbas
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.join(File.dirname(__FILE__),"../lib/informo/processor") if RUBY_VERSION.to_f < 1.9
|
3
|
+
require 'informo/processor' if RUBY_VERSION.to_f >= 1.9
|
4
|
+
|
5
|
+
class ProcessorTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_count
|
8
|
+
p = Informo::Processor.new
|
9
|
+
assert_match /\d+/, p.count
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_details
|
13
|
+
p = Informo::Processor.new
|
14
|
+
details = p.details
|
15
|
+
assert_match /\d+\.\d+/, details[0]['cpu_MHz']
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
data/test/test_rpm.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.join(File.dirname(__FILE__),"../lib/informo/processor") if RUBY_VERSION.to_f < 1.9
|
3
|
+
require 'informo/processor' if RUBY_VERSION.to_f >= 1.9
|
4
|
+
|
5
|
+
class RPMTest < Test::Unit::TestCase
|
6
|
+
##
|
7
|
+
## required package for test.
|
8
|
+
R_PKG = 'glibc'
|
9
|
+
|
10
|
+
def test_get_packages
|
11
|
+
rpm = Informo::Rpm.new
|
12
|
+
packages = rpm_obj.get_packages
|
13
|
+
assert_not_nil packages[0]
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_get_version
|
17
|
+
rpm = Informo::Rpm.new
|
18
|
+
version = rpm.get_version(R_PKG)
|
19
|
+
assert_match '/^\d/', version
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_get_architecture
|
23
|
+
rpm = Informo::Rpm.new
|
24
|
+
arch = rpm.get_architecture(R_PKG)
|
25
|
+
assert_match '/\w+(\d*)?/', arch
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_get_maintainer
|
29
|
+
rpm = Informo::Rpm.new
|
30
|
+
maintainer = rpm.get_maintainer(R_PKG)
|
31
|
+
assert_match '/\w+/', maintainer
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_get_short_desc
|
35
|
+
rpm = Informo::Rpm.new
|
36
|
+
desc = rpm.get_short_description(R_PKG)
|
37
|
+
assert_match '/\w+/', desc
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_get_desc
|
41
|
+
rpm = Informo::Rpm.new
|
42
|
+
desc = rpm.get_description(R_PKG)
|
43
|
+
assert_match '/\w+/', desc
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_get_status
|
47
|
+
rpm = Informo::Rpm.new
|
48
|
+
status = rpm.get_status(R_PKG)
|
49
|
+
assert_match 'ii', status
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_get_installdate
|
53
|
+
rpm = Informo::Rpm.new
|
54
|
+
installdate = rpm.get_installdate(R_PKG)
|
55
|
+
assert_match '/\d+/', installdate
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_get_all
|
59
|
+
rpm = Informo::Rpm.new
|
60
|
+
pkg_details = rpm.get_all(R_PKG)
|
61
|
+
assert_kind_of Hash, pkg_details
|
62
|
+
assert_match '/\w+/', pkg_details['name']
|
63
|
+
assert_match '/^\d/', pkg_details['version']
|
64
|
+
assert_match '/\w+(\d*)?/', pkg_details['achitecture']
|
65
|
+
assert_match '/\w+/', pkg_details['maintainer']
|
66
|
+
assert_match '/\w+/', pkg_details['description']
|
67
|
+
assert_match 'ii', pkg_details['status']
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.join(File.dirname(__FILE__),"../lib/informo/storage") if RUBY_VERSION.to_f < 1.9
|
3
|
+
require 'informo/storage' if RUBY_VERSION.to_f >= 1.9
|
4
|
+
|
5
|
+
class StorageTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_drive_count
|
8
|
+
s = Informo::Storage.new
|
9
|
+
assert_kind_of Integer s.drive_count
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_drive_details
|
13
|
+
s = Informo::Storage.new
|
14
|
+
drives = s.drives
|
15
|
+
assert_match /^\d/, s.drive_details(drives[0]['size'])
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_mount_details
|
19
|
+
s = Informo::Storage.new
|
20
|
+
assert_not_nil s.mount_details('/')
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_mounts
|
24
|
+
s = Informo::Storage.new
|
25
|
+
assert_not_nil s.mounts
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
data/test/test_system.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.join(File.dirname(__FILE__),"../lib/informo/system") if RUBY_VERSION.to_f < 1.9
|
3
|
+
require 'informo/system' if RUBY_VERSION.to_f >= 1.9
|
4
|
+
|
5
|
+
class SystemTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_distro
|
8
|
+
s = Informo::System.new
|
9
|
+
assert_not_nil s.distro
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_version
|
13
|
+
s = Informo::System.new
|
14
|
+
assert_match /^\d/, s.version
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_numa
|
18
|
+
s = Informo::System.new
|
19
|
+
assert_instance_of TrueClass s.numa?
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_kernel
|
23
|
+
s = Informo::System.new
|
24
|
+
assert_not_nil s.kernel
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_arch
|
28
|
+
s = Informo::System.new
|
29
|
+
assert_not_nil s.arch
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_hostname
|
33
|
+
s = Informo::System.new
|
34
|
+
assert_not_nil s.hostname
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|