vmstat 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -0
- data/Guardfile +8 -0
- data/README.md +12 -2
- data/ext/vmstat/extconf.rb +57 -0
- data/ext/vmstat/hw/bsd.h +88 -0
- data/ext/vmstat/hw/mach.h +107 -0
- data/ext/vmstat/hw/posix.h +29 -0
- data/ext/vmstat/hw/statfs.h +41 -0
- data/ext/vmstat/hw/sysctl.h +72 -0
- data/ext/vmstat/vmstat.c +40 -260
- data/ext/vmstat/vmstat.h +6 -4
- data/lib/vmstat.rb +35 -35
- data/lib/vmstat/linux_disk.rb +33 -0
- data/lib/vmstat/procfs.rb +126 -0
- data/lib/vmstat/snapshot.rb +1 -1
- data/lib/vmstat/stub.rb +69 -0
- data/lib/vmstat/version.rb +1 -1
- data/spec/procfs/loadavg +1 -0
- data/spec/procfs/meminfo +46 -0
- data/spec/procfs/net/dev +5 -0
- data/spec/procfs/stat +12 -0
- data/spec/procfs/uptime +1 -0
- data/spec/procfs/vmstat +89 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/vmstat/procfs_spec.rb +62 -0
- data/vmstat.gemspec +2 -0
- metadata +59 -4
@@ -0,0 +1,33 @@
|
|
1
|
+
module Vmstat
|
2
|
+
# Since on linux the type and mount information are note available in the
|
3
|
+
# statfs library, we have to use constants to find out the file system type.
|
4
|
+
# The mount point and the path will allways be the same, because we don't have
|
5
|
+
# the mount information. But one can still either use the device or mountpoint
|
6
|
+
# to get the information.
|
7
|
+
class LinuxDisk < Disk
|
8
|
+
# Mapping of file system type codes to file system names.
|
9
|
+
FS_CODES = {
|
10
|
+
44533=>:adfs, 44543=>:affs, 1111905073=>:befs, 464386766=>:bfs,
|
11
|
+
4283649346=>:cifs_number, 1937076805=>:coda, 19920823=>:coh,
|
12
|
+
684539205=>:cramfs, 4979=>:devfs, 4278867=>:efs, 4989=>:ext,
|
13
|
+
61265=>:ext2_old, 61267=>:ext4, 16964=>:hfs, 4187351113=>:hpfs,
|
14
|
+
2508478710=>:hugetlbfs, 38496=>:isofs, 29366=>:jffs2,
|
15
|
+
827541066=>:jfs, 4991=>:minix, 9320=>:minix2, 9336=>:minix22,
|
16
|
+
19780=>:msdos, 22092=>:ncp, 26985=>:nfs, 1397118030=>:ntfs_sb,
|
17
|
+
40865=>:openprom, 40864=>:proc, 47=>:qnx4, 1382369651=>:reiserfs,
|
18
|
+
29301=>:romfs, 20859=>:smb, 19920822=>:sysv2, 19920821=>:sysv4,
|
19
|
+
16914836=>:tmpfs, 352400198=>:udf, 72020=>:ufs, 7377 => :devpts,
|
20
|
+
40866=>:usbdevice, 2768370933=>:vxfs, 19920820=>:xenix, 1481003842=>:xfs,
|
21
|
+
19911021=>:xiafs, 1448756819=>:reiserfs, 1650812274 => :sysfs
|
22
|
+
}.freeze
|
23
|
+
|
24
|
+
# Mainly a wrapper for the {Vmstat::Disk} class constructor. This constructor
|
25
|
+
# handles the file system type mapping.
|
26
|
+
def initialize(fs = nil, path = nil, block_size = nil,
|
27
|
+
free_blocks = nil, available_blocks = nil, total_blocks = nil)
|
28
|
+
@fs = fs
|
29
|
+
super FS_CODES[@fs], path, path, block_size,
|
30
|
+
free_blocks, available_blocks, total_blocks
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
module Vmstat
|
2
|
+
module ProcFS
|
3
|
+
# Grep from the man procfs about cpu data in stat file:
|
4
|
+
# @example Format
|
5
|
+
# (num) user nice system idle iowait irq softirq steal
|
6
|
+
# @example manpage
|
7
|
+
# iowait - time waiting for I/O to complete (since 2.5.41)
|
8
|
+
# irq - time servicing interrupts (since 2.6.0-test4)
|
9
|
+
# softirq - time servicing softirqs (since 2.6.0-test4)
|
10
|
+
# Since Linux 2.6.11:
|
11
|
+
# steal - stolen time, which is the time spent in other operating
|
12
|
+
# systems when running in a virtualized environment
|
13
|
+
# Since Linux 2.6.24:
|
14
|
+
# guest - which is the time spent running a virtual CPU for guest
|
15
|
+
# operating systems under the control of the Linux kernel.
|
16
|
+
CPU_DATA = /cpu(\d)#{'\s+(\d+)' * 4}/.freeze
|
17
|
+
|
18
|
+
# Grep the network stats from the procfs.
|
19
|
+
# @example Format (from /proc/net/dev)
|
20
|
+
# Inter-| Receive | Transmit
|
21
|
+
# face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
|
22
|
+
# @example Data
|
23
|
+
# eth0: 33660 227 0 0 0 0 0 0 36584 167 0 0 0 0 0 0
|
24
|
+
NET_DATA = /(\w+):#{'\s*(\d+)' * 16}/
|
25
|
+
|
26
|
+
# Fetches the cpu statistics (usage counter for user, nice, system and idle)
|
27
|
+
# @return [Array<Vmstat::Cpu>] the array of cpu counter
|
28
|
+
# @example
|
29
|
+
# Vmstat.cpu # => [#<struct Vmstat::Cpu ...>, #<struct Vmstat::Cpu ...>]
|
30
|
+
def cpu
|
31
|
+
cpus = []
|
32
|
+
procfs_file("stat") do |file|
|
33
|
+
file.read.scan(CPU_DATA) do |i, user, nice, system, idle|
|
34
|
+
cpus << Cpu.new(i.to_i, user.to_i, system.to_i, nice.to_i, idle.to_i)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
cpus
|
38
|
+
end
|
39
|
+
|
40
|
+
# Fetches the memory usage information.
|
41
|
+
# @return [Vmstat::Memory] the memory data like free, used und total.
|
42
|
+
# @example
|
43
|
+
# Vmstat.memory # => #<struct Vmstat::Memory ...>
|
44
|
+
def memory
|
45
|
+
@pagesize ||= Vmstat.pagesize
|
46
|
+
|
47
|
+
total = free = active = inactive = pageins = pageouts = 0
|
48
|
+
procfs_file("meminfo") do |file|
|
49
|
+
content = file.read(2048) # the requested information is in the first bytes
|
50
|
+
|
51
|
+
content.scan(/(\w+):\s+(\d+) kB/) do |name, kbytes|
|
52
|
+
pages = (kbytes.to_i * 1024) / @pagesize
|
53
|
+
|
54
|
+
case name
|
55
|
+
when "MemTotal" then total = pages
|
56
|
+
when "MemFree" then free = pages
|
57
|
+
when "Active" then active = pages
|
58
|
+
when "Inactive" then inactive = pages
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
procfs_file("vmstat") do |file|
|
64
|
+
content = file.read
|
65
|
+
|
66
|
+
if content =~ /pgpgin\s+(\d+)/
|
67
|
+
pageins = $1.to_i
|
68
|
+
end
|
69
|
+
|
70
|
+
if content =~ /pgpgout\s+(\d+)/
|
71
|
+
pageouts = $1.to_i
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
Memory.new @pagesize, total-free-active-inactive, active, inactive, free,
|
76
|
+
pageins, pageouts
|
77
|
+
end
|
78
|
+
|
79
|
+
# Fetches the information for all available network devices.
|
80
|
+
# @return [Array<Vmstat::NetworkInterface>] the network device information
|
81
|
+
# @example
|
82
|
+
# Vmstat.network_interfaces # => [#<struct Vmstat::NetworkInterface ...>, ...]
|
83
|
+
def network_interfaces
|
84
|
+
netifcs = []
|
85
|
+
procfs_file("net", "dev") do |file|
|
86
|
+
file.read.scan(NET_DATA) do |columns|
|
87
|
+
netifcs << NetworkInterface.new(columns[0].to_sym, columns[1].to_i,
|
88
|
+
columns[3].to_i, columns[4].to_i,
|
89
|
+
columns[9].to_i, columns[11].to_i)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
netifcs
|
93
|
+
end
|
94
|
+
|
95
|
+
# Fetches the boot time of the system.
|
96
|
+
# @return [Time] the boot time as regular time object.
|
97
|
+
# @example
|
98
|
+
# Vmstat.boot_time # => 2012-10-09 18:42:37 +0200
|
99
|
+
def boot_time
|
100
|
+
raw = procfs_file("uptime") { |file| file.read }
|
101
|
+
Time.now - raw.split(/\s/).first.to_f
|
102
|
+
end
|
103
|
+
|
104
|
+
# @return [String] the path to the proc file system
|
105
|
+
# @example
|
106
|
+
# procfs_path # => "/proc"
|
107
|
+
# @api private
|
108
|
+
def procfs_path
|
109
|
+
"/proc".freeze
|
110
|
+
end
|
111
|
+
|
112
|
+
# Opens a proc file system file handle and returns the handle in the
|
113
|
+
# passed block. Closes the file handle.
|
114
|
+
# @see File#open
|
115
|
+
# @param [Array<String>] names parts of the path to the procfs file
|
116
|
+
# @example
|
117
|
+
# procfs_file("net", "dev") { |file| }
|
118
|
+
# procfs_file("stat") { |file| }
|
119
|
+
# @yieldparam [IO] file the file handle
|
120
|
+
# @api private
|
121
|
+
def procfs_file(*names, &block)
|
122
|
+
path = File.join(procfs_path, *names)
|
123
|
+
File.open(path, "r", &block)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
data/lib/vmstat/snapshot.rb
CHANGED
data/lib/vmstat/stub.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
module Vmstat
|
2
|
+
module Stub
|
3
|
+
# Fetches the boot time of the system.
|
4
|
+
# @return [Time] the boot time as regular time object.
|
5
|
+
# @example
|
6
|
+
# Vmstat.boot_time # => 2012-10-09 18:42:37 +0200
|
7
|
+
def self.boot_time
|
8
|
+
nil
|
9
|
+
end
|
10
|
+
|
11
|
+
# Fetches the cpu statistics (usage counter for user, nice, system and idle)
|
12
|
+
# @return [Array<Vmstat::Cpu>] the array of cpu counter
|
13
|
+
# @example
|
14
|
+
# Vmstat.cpu # => [#<struct Vmstat::Cpu ...>, #<struct Vmstat::Cpu ...>]
|
15
|
+
def self.cpu
|
16
|
+
[]
|
17
|
+
end
|
18
|
+
|
19
|
+
# Fetches the usage data and other useful disk information for the given path.
|
20
|
+
# @param [String] path the path (mount point or device path) to the disk
|
21
|
+
# @return [Vmstat::Disk] the disk information
|
22
|
+
# @example
|
23
|
+
# Vmstat.disk("/") # => #<struct Vmstat::Disk type=:hfs, ...>
|
24
|
+
def self.disk(path)
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
|
28
|
+
# Fetches the load average for the current system.
|
29
|
+
# @return [Vmstat::LoadAverage] the load average data
|
30
|
+
# @example
|
31
|
+
# Vmstat.load_average # => #<struct Vmstat::LoadAverage one_minute=...>
|
32
|
+
def self.load_average
|
33
|
+
nil
|
34
|
+
end
|
35
|
+
|
36
|
+
# Fetches the memory usage information.
|
37
|
+
# @return [Vmstat::Memory] the memory data like free, used und total.
|
38
|
+
# @example
|
39
|
+
# Vmstat.memory # => #<struct Vmstat::Memory ...>
|
40
|
+
def self.memory
|
41
|
+
nil
|
42
|
+
end
|
43
|
+
|
44
|
+
# Fetches the information for all available network devices.
|
45
|
+
# @return [Array<Vmstat::NetworkInterface>] the network device information
|
46
|
+
# @example
|
47
|
+
# Vmstat.network_interfaces # => [#<struct Vmstat::NetworkInterface ...>, ...]
|
48
|
+
def self.network_interfaces
|
49
|
+
[]
|
50
|
+
end
|
51
|
+
|
52
|
+
# Fetches pagesize of the current system.
|
53
|
+
# @return [Fixnum] the pagesize of the current system in bytes.
|
54
|
+
# @example
|
55
|
+
# Vmstat.pagesize # => 4096
|
56
|
+
def self.pagesize
|
57
|
+
4096
|
58
|
+
end
|
59
|
+
|
60
|
+
# Fetches time and memory usage for the current process.
|
61
|
+
# @note Currently only on Mac OS X
|
62
|
+
# @return [Array<Vmstat::Task>] the network device information
|
63
|
+
# @example
|
64
|
+
# Vmstat.task # => #<struct Vmstat::Task ...>
|
65
|
+
def self.task
|
66
|
+
nil
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/lib/vmstat/version.rb
CHANGED
data/spec/procfs/loadavg
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.24 0.32 0.21 1/79 2621
|
data/spec/procfs/meminfo
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
MemTotal: 507344 kB
|
2
|
+
MemFree: 428068 kB
|
3
|
+
Buffers: 13104 kB
|
4
|
+
Cached: 40296 kB
|
5
|
+
SwapCached: 0 kB
|
6
|
+
Active: 26032 kB
|
7
|
+
Inactive: 33620 kB
|
8
|
+
Active(anon): 6276 kB
|
9
|
+
Inactive(anon): 240 kB
|
10
|
+
Active(file): 19756 kB
|
11
|
+
Inactive(file): 33380 kB
|
12
|
+
Unevictable: 0 kB
|
13
|
+
Mlocked: 0 kB
|
14
|
+
HighTotal: 0 kB
|
15
|
+
HighFree: 0 kB
|
16
|
+
LowTotal: 507344 kB
|
17
|
+
LowFree: 428068 kB
|
18
|
+
SwapTotal: 521212 kB
|
19
|
+
SwapFree: 521212 kB
|
20
|
+
Dirty: 8 kB
|
21
|
+
Writeback: 0 kB
|
22
|
+
AnonPages: 6240 kB
|
23
|
+
Mapped: 5844 kB
|
24
|
+
Shmem: 268 kB
|
25
|
+
Slab: 14012 kB
|
26
|
+
SReclaimable: 6476 kB
|
27
|
+
SUnreclaim: 7536 kB
|
28
|
+
KernelStack: 688 kB
|
29
|
+
PageTables: 468 kB
|
30
|
+
NFS_Unstable: 0 kB
|
31
|
+
Bounce: 0 kB
|
32
|
+
WritebackTmp: 0 kB
|
33
|
+
CommitLimit: 774884 kB
|
34
|
+
Committed_AS: 48400 kB
|
35
|
+
VmallocTotal: 512056 kB
|
36
|
+
VmallocUsed: 2228 kB
|
37
|
+
VmallocChunk: 509236 kB
|
38
|
+
HardwareCorrupted: 0 kB
|
39
|
+
AnonHugePages: 0 kB
|
40
|
+
HugePages_Total: 0
|
41
|
+
HugePages_Free: 0
|
42
|
+
HugePages_Rsvd: 0
|
43
|
+
HugePages_Surp: 0
|
44
|
+
Hugepagesize: 2048 kB
|
45
|
+
DirectMap4k: 34752 kB
|
46
|
+
DirectMap2M: 489472 kB
|
data/spec/procfs/net/dev
ADDED
@@ -0,0 +1,5 @@
|
|
1
|
+
Inter-| Receive | Transmit
|
2
|
+
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
|
3
|
+
lo: 3224 40 0 0 0 0 0 0 3224 40 0 0 0 0 0 0
|
4
|
+
eth1: 0 0 1 2 0 0 0 0 0 0 3 4 0 0 0 0
|
5
|
+
eth0: 33660 227 0 0 0 0 0 0 36584 167 0 0 0 0 0 0
|
data/spec/procfs/stat
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
cpu 1312 0 3760 108331 788 0 169 0 0 0
|
2
|
+
cpu0 311 0 966 26788 520 0 109 0 0 0
|
3
|
+
cpu1 351 0 862 27263 162 0 15 0 0 0
|
4
|
+
cpu2 324 0 1092 26698 74 0 32 0 0 0
|
5
|
+
cpu3 326 0 838 27581 31 0 12 0 0 0
|
6
|
+
intr 39520 61 9 0 0 0 0 0 0 0 0 0 0 133 0 0 352 0 0 0 394 0 1864 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
7
|
+
ctxt 29527
|
8
|
+
btime 1349885697
|
9
|
+
processes 1560
|
10
|
+
procs_running 1
|
11
|
+
procs_blocked 0
|
12
|
+
softirq 52656 0 26117 54 429 2037 0 3 6623 75 17318
|
data/spec/procfs/uptime
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
355.63 1302.86
|
data/spec/procfs/vmstat
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
nr_free_pages 107062
|
2
|
+
nr_inactive_anon 60
|
3
|
+
nr_active_anon 1557
|
4
|
+
nr_inactive_file 8341
|
5
|
+
nr_active_file 4939
|
6
|
+
nr_unevictable 0
|
7
|
+
nr_mlock 0
|
8
|
+
nr_anon_pages 1579
|
9
|
+
nr_mapped 1461
|
10
|
+
nr_file_pages 13346
|
11
|
+
nr_dirty 1
|
12
|
+
nr_writeback 0
|
13
|
+
nr_slab_reclaimable 1628
|
14
|
+
nr_slab_unreclaimable 1885
|
15
|
+
nr_page_table_pages 101
|
16
|
+
nr_kernel_stack 88
|
17
|
+
nr_unstable 0
|
18
|
+
nr_bounce 0
|
19
|
+
nr_vmscan_write 0
|
20
|
+
nr_vmscan_immediate_reclaim 0
|
21
|
+
nr_writeback_temp 0
|
22
|
+
nr_isolated_anon 0
|
23
|
+
nr_isolated_file 0
|
24
|
+
nr_shmem 67
|
25
|
+
nr_dirtied 185
|
26
|
+
nr_written 182
|
27
|
+
nr_anon_transparent_hugepages 0
|
28
|
+
nr_dirty_threshold 24392
|
29
|
+
nr_dirty_background_threshold 12196
|
30
|
+
pgpgin 64599
|
31
|
+
pgpgout 1104
|
32
|
+
pswpin 0
|
33
|
+
pswpout 0
|
34
|
+
pgalloc_dma 2
|
35
|
+
pgalloc_normal 190973
|
36
|
+
pgalloc_high 0
|
37
|
+
pgalloc_movable 0
|
38
|
+
pgfree 298439
|
39
|
+
pgactivate 5802
|
40
|
+
pgdeactivate 0
|
41
|
+
pgfault 581461
|
42
|
+
pgmajfault 42
|
43
|
+
pgrefill_dma 0
|
44
|
+
pgrefill_normal 0
|
45
|
+
pgrefill_high 0
|
46
|
+
pgrefill_movable 0
|
47
|
+
pgsteal_dma 0
|
48
|
+
pgsteal_normal 0
|
49
|
+
pgsteal_high 0
|
50
|
+
pgsteal_movable 0
|
51
|
+
pgscan_kswapd_dma 0
|
52
|
+
pgscan_kswapd_normal 0
|
53
|
+
pgscan_kswapd_high 0
|
54
|
+
pgscan_kswapd_movable 0
|
55
|
+
pgscan_direct_dma 0
|
56
|
+
pgscan_direct_normal 0
|
57
|
+
pgscan_direct_high 0
|
58
|
+
pgscan_direct_movable 0
|
59
|
+
pginodesteal 0
|
60
|
+
slabs_scanned 0
|
61
|
+
kswapd_steal 0
|
62
|
+
kswapd_inodesteal 0
|
63
|
+
kswapd_low_wmark_hit_quickly 0
|
64
|
+
kswapd_high_wmark_hit_quickly 0
|
65
|
+
kswapd_skip_congestion_wait 0
|
66
|
+
pageoutrun 1
|
67
|
+
allocstall 0
|
68
|
+
pgrotated 0
|
69
|
+
compact_blocks_moved 0
|
70
|
+
compact_pages_moved 0
|
71
|
+
compact_pagemigrate_failed 0
|
72
|
+
compact_stall 0
|
73
|
+
compact_fail 0
|
74
|
+
compact_success 0
|
75
|
+
htlb_buddy_alloc_success 0
|
76
|
+
htlb_buddy_alloc_fail 0
|
77
|
+
unevictable_pgs_culled 0
|
78
|
+
unevictable_pgs_scanned 0
|
79
|
+
unevictable_pgs_rescued 0
|
80
|
+
unevictable_pgs_mlocked 0
|
81
|
+
unevictable_pgs_munlocked 0
|
82
|
+
unevictable_pgs_cleared 0
|
83
|
+
unevictable_pgs_stranded 0
|
84
|
+
unevictable_pgs_mlockfreed 0
|
85
|
+
thp_fault_alloc 0
|
86
|
+
thp_fault_fallback 0
|
87
|
+
thp_collapse_alloc 0
|
88
|
+
thp_collapse_alloc_failed 0
|
89
|
+
thp_split 0
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Vmstat::ProcFS do
|
4
|
+
let(:procfs) do
|
5
|
+
Class.new do
|
6
|
+
extend Vmstat::ProcFS
|
7
|
+
|
8
|
+
def self.procfs_path
|
9
|
+
File.expand_path("../../procfs", __FILE__)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
subject { procfs }
|
14
|
+
|
15
|
+
context "#cpu" do
|
16
|
+
subject { procfs.cpu }
|
17
|
+
|
18
|
+
it { should be_a(Array)}
|
19
|
+
it do
|
20
|
+
should == [
|
21
|
+
Vmstat::Cpu.new(0, 311, 966, 0, 26788),
|
22
|
+
Vmstat::Cpu.new(1, 351, 862, 0, 27263),
|
23
|
+
Vmstat::Cpu.new(2, 324, 1092, 0, 26698),
|
24
|
+
Vmstat::Cpu.new(3, 326, 838, 0, 27581)
|
25
|
+
]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "#memory" do
|
30
|
+
subject { procfs.memory }
|
31
|
+
|
32
|
+
it { should be_a(Vmstat::Memory) }
|
33
|
+
it do
|
34
|
+
should == Vmstat::Memory.new(4096, 4906, 6508, 8405, 107017, 64599, 1104)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should have the right total" do
|
38
|
+
(subject.wired_bytes + subject.active_bytes +
|
39
|
+
subject.inactive_bytes + subject.free_bytes).should == 507344 * 1024
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "#boot_time" do
|
44
|
+
subject { procfs.boot_time }
|
45
|
+
|
46
|
+
it { should be_a(Time) }
|
47
|
+
it { Timecop.freeze(Time.now) { should == Time.now - 355.63 } }
|
48
|
+
end
|
49
|
+
|
50
|
+
context "#network_interfaces" do
|
51
|
+
subject { procfs.network_interfaces }
|
52
|
+
|
53
|
+
it { should be_a(Array) }
|
54
|
+
it do
|
55
|
+
should == [
|
56
|
+
Vmstat::NetworkInterface.new(:lo, 3224, 0, 0, 3224, 0),
|
57
|
+
Vmstat::NetworkInterface.new(:eth1, 0, 1, 2, 0, 3),
|
58
|
+
Vmstat::NetworkInterface.new(:eth0, 33660, 0, 0, 36584, 0)
|
59
|
+
]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|