vmstat 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Vmstat
1
+ # Vmstat [![Build Status](https://secure.travis-ci.org/threez/ruby-vmstat.png)](http://travis-ci.org/threez/ruby-vmstat) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/threez/ruby-vmstat)
2
2
 
3
3
  This is a focused and fast library to get system information like:
4
4
 
@@ -7,8 +7,8 @@ This is a focused and fast library to get system information like:
7
7
  * _CPU_ (user, system, nice, idle)
8
8
  * _Load_ Average
9
9
  * _Disk_ (type, disk path, free bytes, total bytes, ...)
10
- * _Boot time_
11
- * _Current Task_ (used bytes and usage time *MAC OS X ONLY*)
10
+ * _Boot Time_
11
+ * _Current Task_ (used bytes and usage time *MAC OS X / Linux ONLY*)
12
12
 
13
13
  *It currently supports:*
14
14
 
@@ -45,7 +45,7 @@ Just require the library and make a snapshot or use the distinct methods to just
45
45
  Vmstat.snapshot # => #<Vmstat::Snapshot:0x007fe5f22df660
46
46
  # @at=2012-10-09 21:48:57 +0200,
47
47
  # @boot_time=2012-10-09 18:42:37 +0200,
48
- # @cpu=
48
+ # @cpus=
49
49
  # [#<struct Vmstat::Cpu
50
50
  # num=0,
51
51
  # user=187167,
@@ -81,15 +81,7 @@ Just require the library and make a snapshot or use the distinct methods to just
81
81
  # inactive=484694,
82
82
  # free=470582,
83
83
  # pageins=102438,
84
- # pageouts=0,
85
- # zero_filled=930821373,
86
- # reactivated=33,
87
- # purgeable=88184,
88
- # purged=0,
89
- # faults=90277275,
90
- # copy_on_write_faults=668693,
91
- # lookups=516021,
92
- # hits=17>,
84
+ # pageouts=0>,
93
85
  # @network_interfaces=
94
86
  # [#<struct Vmstat::NetworkInterface
95
87
  # name=:lo0,
@@ -142,9 +134,8 @@ Just require the library and make a snapshot or use the distinct methods to just
142
134
  ## Todo
143
135
 
144
136
  * Swap information
145
- * Reduce the number of memory information gatherd
146
137
  * Support more platforms (hp ux, aix, solaris, ...)
147
- * Server performance information (open file handles, cache sizes, ...)
138
+ * Server performance/system information (open file handles, cache sizes, number of inodes ...)
148
139
 
149
140
  ## Contributing
150
141
 
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ Rake::ExtensionTask.new(:vmstat) do |ext|
8
8
  end
9
9
 
10
10
  desc "Run specs"
11
- RSpec::Core::RakeTask.new(:spec)
11
+ RSpec::Core::RakeTask.new(:spec => :compile)
12
12
 
13
13
  desc "Open an irb session preloaded with smartstat"
14
14
  task :console do
@@ -43,37 +43,29 @@ VALUE vmstat_cpu(VALUE self) {
43
43
 
44
44
  return cpus;
45
45
  }
46
+
47
+ int system_int(const char * name) {
48
+ int number;
49
+ size_t number_size = sizeof(number);
50
+ sysctlbyname(name, &number, &number_size, NULL, 0);
51
+ return number;
52
+ }
46
53
  #endif
47
54
 
48
55
  #ifndef VMSTAT_MEMORY
49
56
  #define VMSTAT_MEMORY
50
57
  VALUE vmstat_memory(VALUE self) {
51
58
  VALUE memory = rb_funcall(rb_path2class("Vmstat::Memory"),
52
- rb_intern("new"), 15, ULL2NUM(system_ull("vm.stats.vm.v_page_size")),
53
- ULL2NUM(system_ull("vm.stats.vm.v_active_count")),
54
- ULL2NUM(system_ull("vm.stats.vm.v_wire_count")),
55
- ULL2NUM(system_ull("vm.stats.vm.v_inactive_count")),
56
- ULL2NUM(system_ull("vm.stats.vm.v_free_count")),
57
- ULL2NUM(Qnil),
58
- ULL2NUM(Qnil),
59
- ULL2NUM(system_ull("vm.stats.misc.zero_page_count")),
60
- ULL2NUM(system_ull("vm.stats.vm.v_reactivated")),
61
- ULL2NUM(Qnil),
62
- ULL2NUM(Qnil),
63
- ULL2NUM(system_ull("vm.stats.vm.v_vm_faults")),
64
- ULL2NUM(system_ull("vm.stats.vm.v_cow_faults")),
65
- ULL2NUM(Qnil),
66
- ULL2NUM(Qnil));
59
+ rb_intern("new"), 7, ULL2NUM(system_ull("vm.stats.vm.v_page_size")),
60
+ ULL2NUM(system_ull("vm.stats.vm.v_active_count")),
61
+ ULL2NUM(system_ull("vm.stats.vm.v_wire_count")),
62
+ ULL2NUM(system_ull("vm.stats.vm.v_inactive_count")),
63
+ ULL2NUM(system_ull("vm.stats.vm.v_free_count")),
64
+ ULL2NUM(system_ull("vm.stats.vm.v_vnodepgsin")),
65
+ ULL2NUM(system_ull("vm.stats.vm.v_vnodepgsout")));
67
66
  return memory;
68
67
  }
69
68
 
70
- int system_int(const char * name) {
71
- int number;
72
- size_t number_size = sizeof(number);
73
- sysctlbyname(name, &number, &number_size, NULL, 0);
74
- return number;
75
- }
76
-
77
69
  unsigned long long system_ull(const char * name) {
78
70
  long number;
79
71
  size_t number_size = sizeof(number);
@@ -53,21 +53,13 @@ VALUE vmstat_memory(VALUE self) {
53
53
  (host_info_t)&vm_stat, &host_count);
54
54
  if (err == KERN_SUCCESS) {
55
55
  memory = rb_funcall(rb_path2class("Vmstat::Memory"),
56
- rb_intern("new"), 15, ULL2NUM(pagesize),
57
- ULL2NUM(vm_stat.active_count),
58
- ULL2NUM(vm_stat.inactive_count),
59
- ULL2NUM(vm_stat.wire_count),
60
- ULL2NUM(vm_stat.free_count),
61
- ULL2NUM(vm_stat.pageins),
62
- ULL2NUM(vm_stat.pageouts),
63
- ULL2NUM(vm_stat.zero_fill_count),
64
- ULL2NUM(vm_stat.reactivations),
65
- ULL2NUM(vm_stat.purgeable_count),
66
- ULL2NUM(vm_stat.purges),
67
- ULL2NUM(vm_stat.faults),
68
- ULL2NUM(vm_stat.cow_faults),
69
- ULL2NUM(vm_stat.lookups),
70
- ULL2NUM(vm_stat.hits));
56
+ rb_intern("new"), 7, ULL2NUM(pagesize),
57
+ ULL2NUM(vm_stat.active_count),
58
+ ULL2NUM(vm_stat.inactive_count),
59
+ ULL2NUM(vm_stat.wire_count),
60
+ ULL2NUM(vm_stat.free_count),
61
+ ULL2NUM(vm_stat.pageins),
62
+ ULL2NUM(vm_stat.pageouts));
71
63
  }
72
64
 
73
65
  err = vm_deallocate(mach_task_self(), (vm_address_t)pagesize,
@@ -92,8 +84,7 @@ VALUE vmstat_task(VALUE self) {
92
84
  err = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&info, &size);
93
85
  if (err == KERN_SUCCESS) {
94
86
  task = rb_funcall(rb_path2class("Vmstat::Task"),
95
- rb_intern("new"), 5, LONG2NUM(info.suspend_count),
96
- LONG2NUM(info.virtual_size),
87
+ rb_intern("new"), 4, LONG2NUM(info.virtual_size),
97
88
  LONG2NUM(info.resident_size),
98
89
  LONG2NUM(info.user_time.seconds * 1000 + info.user_time.microseconds),
99
90
  LONG2NUM(info.system_time.seconds * 1000 + info.system_time.microseconds));
@@ -1,5 +1,14 @@
1
1
  require "vmstat/version"
2
2
 
3
+ # This is a focused and fast library to get system information like:
4
+ #
5
+ # * _Memory_ (free, active, ...)
6
+ # * _Network_ _Interfaces_ (name, in bytes, out bytes, ...)
7
+ # * _CPU_ (user, system, nice, idle)
8
+ # * _Load_ Average
9
+ # * _Disk_ (type, disk path, free bytes, total bytes, ...)
10
+ # * _Boot_ _Time_
11
+ # * _Current_ _Task_ (used bytes and usage time *MACOSX* or *LINUX* *ONLY*)
3
12
  module Vmstat
4
13
  autoload :Cpu, "vmstat/cpu"
5
14
  autoload :NetworkInterface, "vmstat/network_interface"
@@ -11,7 +20,7 @@ module Vmstat
11
20
  autoload :ProcFS, "vmstat/procfs"
12
21
  autoload :Stub, "vmstat/stub"
13
22
  autoload :Snapshot, "vmstat/snapshot"
14
- extend Stub # the default null implementation
23
+ extend Stub # the default empty implementation
15
24
 
16
25
  # @!method self.boot_time
17
26
  # Fetches the boot time of the system.
@@ -64,7 +73,7 @@ module Vmstat
64
73
  # Vmstat.task # => #<struct Vmstat::Task ...>
65
74
 
66
75
  # Creates a full snapshot of the systems hardware statistics.
67
- # @param [Array<String>] the paths to the disks to snapshot.
76
+ # @param [Array<String>] paths the paths to the disks to snapshot.
68
77
  # @return [Vmstat::Snapshot] a snapshot of all statistics.
69
78
  # @example
70
79
  # Vmstat.snapshot # => #<struct Vmstat::Snapshot ...>
@@ -1,4 +1,15 @@
1
1
  module Vmstat
2
+ # Gathered cpu performance statistics snapshot.
3
+ # @attr [Fixnum] num
4
+ # The number of the cpu starting at 0 for the first cpu.
5
+ # @attr [Fixnum] user
6
+ # Current counter of ticks spend in user. The counter can overflow.
7
+ # @attr [Fixnum] system
8
+ # Current counter of ticks spend in system. The counter can overflow.
9
+ # @attr [Fixnum] nice
10
+ # Current counter of ticks spend in nice. The counter can overflow.
11
+ # @attr [Fixnum] idle
12
+ # Current counter of ticks spend in idle. The counter can overflow.
2
13
  class Cpu < Struct.new(:num, :user, :system, :nice, :idle)
3
14
  end
4
15
  end
@@ -1,18 +1,42 @@
1
1
  module Vmstat
2
+ # Gathered disk statistics snapshot.
3
+ # @attr [Symbol] type
4
+ # The file system name e. g. *hfs*.
5
+ # @attr [String] origin
6
+ # The location of the device e.g. */dev/disk0*.
7
+ # @attr [String] mount
8
+ # The mount point of the device e.g. */mnt/store*.
9
+ # @attr [Fixnum] block_size
10
+ # Size of file system blocks in bytes.
11
+ # @attr [Fixnum] free_blocks
12
+ # Free blocks in the file system.
13
+ # @attr [Fixnum] available_blocks
14
+ # Available blocks in the file system.
15
+ # @attr [Fixnum] total_blocks
16
+ # Total number of blocks in the file system.
2
17
  class Disk < Struct.new(:type, :origin, :mount, :block_size,
3
18
  :free_blocks, :available_blocks, :total_blocks)
19
+ # Calculates the number of free bytes for the file system.
20
+ # @return [Fixnum] number of free bytes
4
21
  def free_bytes
5
22
  free_blocks * block_size
6
23
  end
7
24
 
25
+ # Calculates the number of available bytes for the file system.
26
+ # @return [Fixnum] number of available bytes
8
27
  def available_bytes
9
28
  available_blocks * block_size
10
29
  end
11
30
 
31
+ # Calculates the number of used bytes for the file system.
32
+ # @return [Fixnum] number of used bytes
12
33
  def used_bytes
13
34
  (total_blocks - free_blocks) * block_size
14
35
  end
15
36
 
37
+ # Calculates the number of total bytes for the file system. This is the max.
38
+ # number of bytes possible on the device.
39
+ # @return [Fixnum] number of total bytes
16
40
  def total_bytes
17
41
  total_blocks * block_size
18
42
  end
@@ -22,9 +22,16 @@ module Vmstat
22
22
  }.freeze
23
23
 
24
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)
25
+ # handles the file system type mapping (based on the magic codes defined in
26
+ # {LinuxDisk::FS_CODES}).
27
+ # @param [Fixnum] fs the type or magix number of the disk.
28
+ # @param [String] path the path to the disk
29
+ # @param [Fixnum] block_size size of a file system block
30
+ # @param [Fixnum] free_blocks the number of free blocks
31
+ # @param [Fixnum] available_blocks the number of available blocks
32
+ # @param [Fixnum] total_blocks the number of total blocks
33
+ def initialize(fs = nil, path = nil, block_size = nil, free_blocks = nil,
34
+ available_blocks = nil, total_blocks = nil)
28
35
  @fs = fs
29
36
  super FS_CODES[@fs], path, path, block_size,
30
37
  free_blocks, available_blocks, total_blocks
@@ -1,4 +1,11 @@
1
1
  module Vmstat
2
+ # In UNIX computing, the system load is a measure of the amount of
3
+ # computational work that a computer system performs. The load average
4
+ # represents the average system load over a period of time.
5
+ # Source: wikipedia(en).
6
+ # @attr [Float] one_minute The load for the last minute.
7
+ # @attr [Float] five_minutes The load for the last five minutes.
8
+ # @attr [Float] fifteen_minutes The load for the last fifteen minutes.
2
9
  class LoadAverage < Struct.new(:one_minute, :five_minutes, :fifteen_minutes)
3
10
  end
4
11
  end
@@ -1,22 +1,41 @@
1
1
  module Vmstat
2
- class Memory < Struct.new(:pagesize,
3
- :wired, :active, :inactive, :free,
4
- :pageins, :pageouts,
5
- :zero_filled, :reactivated, :purgeable,
6
- :purged, :faults,
7
- :copy_on_write_faults, :lookups, :hits)
2
+ # Gathered memory data snapshot.
3
+ # @attr [Fixnum] pagesize
4
+ # The page size of the memory in bytes.
5
+ # @attr [Fixnum] wired
6
+ # The number of wired pages in the system.
7
+ # @attr [Fixnum] active
8
+ # The number of active pages in the system.
9
+ # @attr [Fixnum] inactive
10
+ # The number of inactive pages in the system.
11
+ # @attr [Fixnum] free
12
+ # The number of free pages in the system.
13
+ # @attr [Fixnum] pageins
14
+ # The number of pageins.
15
+ # @attr [Fixnum] pageouts
16
+ # The number of pageouts.
17
+ class Memory < Struct.new(:pagesize, :wired, :active, :inactive, :free,
18
+ :pageins, :pageouts)
19
+ # Calculate the wired bytes based of the wired pages.
20
+ # @return [Fixnum] wired bytes
8
21
  def wired_bytes
9
22
  wired * pagesize
10
23
  end
11
24
 
25
+ # Calculate the active bytes based of the active pages.
26
+ # @return [Fixnum] active bytes
12
27
  def active_bytes
13
28
  active * pagesize
14
29
  end
15
30
 
31
+ # Calculate the inactive bytes based of the inactive pages.
32
+ # @return [Fixnum] inactive bytes
16
33
  def inactive_bytes
17
34
  inactive * pagesize
18
35
  end
19
36
 
37
+ # Calculate the free bytes based of the free pages.
38
+ # @return [Fixnum] free bytes
20
39
  def free_bytes
21
40
  free * pagesize
22
41
  end
@@ -1,4 +1,12 @@
1
1
  module Vmstat
2
+ # Gathered the network interface information.
3
+ # @attr [Symbol] name the system name for the network interface.
4
+ # @attr [Fixnum] in_bytes the number od bytes that where received inbound.
5
+ # @attr [Fixnum] in_errors the number of errors that where received inbound.
6
+ # @attr [Fixnum] in_drops the number of drops that where received inbound.
7
+ # @attr [Fixnum] out_bytes the number od bytes that where send outbound.
8
+ # @attr [Fixnum] out_errors the number od errors that where send outbound.
9
+ # @attr [Fixnum] type the type of the interface (bsd numbers)
2
10
  class NetworkInterface < Struct.new(:name, :in_bytes, :in_errors, :in_drops,
3
11
  :out_bytes, :out_errors, :type)
4
12
 
@@ -8,10 +16,16 @@ module Vmstat
8
16
  # The type of loopback devices on freebsd/mac os x
9
17
  LOOPBACK_TYPE = 0x18
10
18
 
19
+ # Checks if this network interface is a loopback device.
20
+ # @return [TrueClass, FalseClass] true if it is a loopback device, false
21
+ # otherwise.
11
22
  def loopback?
12
23
  type == LOOPBACK_TYPE
13
24
  end
14
25
 
26
+ # Checks if this network interface is a ethernet device.
27
+ # @return [TrueClass, FalseClass] true if it is a ethernet device, false
28
+ # otherwise.
15
29
  def ethernet?
16
30
  type == ETHERNET_TYPE
17
31
  end
@@ -1,4 +1,6 @@
1
1
  module Vmstat
2
+ # Implementation of performance metrics gathering for linux and other os with
3
+ # the proc file system.
2
4
  module ProcFS
3
5
  # Grep from the man procfs about cpu data in stat file:
4
6
  # @example Format
@@ -84,14 +86,32 @@ module Vmstat
84
86
  netifcs = []
85
87
  procfs_file("net", "dev") do |file|
86
88
  file.read.scan(NET_DATA) do |columns|
89
+ type = case columns[0]
90
+ when /^eth/ then NetworkInterface::ETHERNET_TYPE
91
+ when /^lo/ then NetworkInterface::LOOPBACK_TYPE
92
+ end
93
+
87
94
  netifcs << NetworkInterface.new(columns[0].to_sym, columns[1].to_i,
88
95
  columns[3].to_i, columns[4].to_i,
89
- columns[9].to_i, columns[11].to_i)
96
+ columns[9].to_i, columns[11].to_i,
97
+ type)
90
98
  end
91
99
  end
92
100
  netifcs
93
101
  end
94
102
 
103
+ # Fetches the current process cpu and memory data.
104
+ # @return [Vmstat::Task] the task data for the current process
105
+ def task
106
+ @pagesize ||= Vmstat.pagesize
107
+
108
+ procfs_file("self", "stat") do |file|
109
+ data = file.read.split(/ /)
110
+ Task.new(data[22].to_i / @pagesize, data[23].to_i,
111
+ data[13].to_i * 1000, data[14].to_i * 1000)
112
+ end
113
+ end
114
+
95
115
  # Fetches the boot time of the system.
96
116
  # @return [Time] the boot time as regular time object.
97
117
  # @example
@@ -1,12 +1,28 @@
1
1
  module Vmstat
2
+ # Snapshots help to gather information about the whole system quickly.
3
+ # @attr [Time] at the timestamp, when the snapshot was created.
4
+ # @attr [Time] boot_time the timestamp, when the system booted.
5
+ # @attr [Array<Vmstat::Cpu>] cpus the data of each and every cpu.
6
+ # @attr [Array<Vmstat::Disk>] disks the disks that are part of the snapshot.
7
+ # @attr [Vmstat::LoadAverage] load_average current load average at the time
8
+ # when the snapshot toke place.
9
+ # @attr [Vmstat::Memory] memory the memory data snapshot.
10
+ # @attr [Array<Vmstat::NetworkInterface>] network_interfaces the network
11
+ # interface data snapshots per network interface.
12
+ # @attr [Vmstat::Task] task optionally the information for the current task
13
+ # @example Creating a snapshot
14
+ # snapshop = Vmstat::Snapshop.new(["/dev/disk0", "/dev/disk1"])
2
15
  class Snapshot
3
- attr_reader :at, :boot_time, :cpu, :disks, :load_average,
16
+ attr_reader :at, :boot_time, :cpus, :disks, :load_average,
4
17
  :memory, :network_interfaces, :task
5
18
 
19
+ # Create a new snapshot for system informations. The passed paths array,
20
+ # should contain the disk paths to create a snapshot for.
21
+ # @param [Array<String>] paths the paths to create snapshots for
6
22
  def initialize(paths = [])
7
23
  @at = Time.now
8
24
  @boot_time = Vmstat.boot_time
9
- @cpu = Vmstat.cpu
25
+ @cpus = Vmstat.cpu
10
26
  @disks = paths.map { |path| Vmstat.disk(path) }
11
27
  @load_average = Vmstat.load_average
12
28
  @memory = Vmstat.memory
@@ -1,4 +1,7 @@
1
1
  module Vmstat
2
+ # This is a stub module that should be replaced by system specific
3
+ # implementations of the different functions. This can either be native or
4
+ # with other modules like {ProcFS}.
2
5
  module Stub
3
6
  # Fetches the boot time of the system.
4
7
  # @return [Time] the boot time as regular time object.
@@ -1,6 +1,14 @@
1
1
  module Vmstat
2
- class Task < Struct.new(:suspend_count, :virtual_size, :resident_size,
2
+ # Per task performance metrics snapshot.
3
+ # @attr [Fixnum] virtual_size
4
+ # The number of virtual pages for the task.
5
+ # @attr [Fixnum] resident_size
6
+ # The number of resident pages for the task
7
+ # @attr [Fixnum] user_time_ms
8
+ # The total user run time for terminated threads within the task.
9
+ # @attr [Fixnum] system_time_ms
10
+ # The total system run time for terminated threads within the task.
11
+ class Task < Struct.new(:virtual_size, :resident_size,
3
12
  :user_time_ms, :system_time_ms)
4
13
  end
5
14
  end
6
-
@@ -1,3 +1,3 @@
1
1
  module Vmstat
2
- VERSION = "1.1.0"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -0,0 +1 @@
1
+ 1587 (bash) S 1586 1587 1492 34816 1662 4202496 1405 6289 0 2 2 0 0 7 20 0 1 0 7017 19689472 515 18446744073709551615 4194304 5082140 140736936765952 140736936764896 139925747992062 0 65536 3686404 1266761467 0 0 0 17 0 0 0 0 0 0
@@ -13,7 +13,7 @@ describe Vmstat::Cpu do
13
13
  subject { first_cpu }
14
14
 
15
15
  it "should return a vmstat cpu object" do
16
- should be_a(Vmstat::Cpu)
16
+ should be_a(described_class)
17
17
  end
18
18
 
19
19
  context "methods" do
@@ -1,12 +1,32 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Vmstat::Disk do
4
+ context "sample" do
5
+ let(:disk) { described_class.new :hfs, "/dev/disk0", "/mnt/test",
6
+ 4096, 100, 200, 600 }
7
+ subject { disk }
8
+
9
+ its(:type) { should == :hfs }
10
+ its(:origin) { should == "/dev/disk0" }
11
+ its(:mount) { should == "/mnt/test" }
12
+
13
+ its(:block_size) { should == 4096 }
14
+ its(:free_blocks) { should == 100 }
15
+ its(:available_blocks) { should == 200 }
16
+ its(:total_blocks) { should == 600 }
17
+
18
+ its(:free_bytes) { should == 409600 }
19
+ its(:available_bytes) { should == 819200 }
20
+ its(:used_bytes) { should == 2048000 }
21
+ its(:total_bytes) { should == 2457600 }
22
+ end
23
+
4
24
  context "Vmstat#disk" do
5
25
  let(:disk) { Vmstat.disk("/") }
6
26
  subject { disk }
7
27
 
8
28
  it "should be a vmstat disk object" do
9
- should be_a(Vmstat::Disk)
29
+ should be_a(described_class)
10
30
  end
11
31
 
12
32
  context "methods" do
@@ -5,7 +5,7 @@ describe Vmstat::LoadAverage do
5
5
  subject { Vmstat.load_average }
6
6
 
7
7
  it "should be an vmstat load average object" do
8
- should be_a(Vmstat::LoadAverage)
8
+ should be_a(described_class)
9
9
  end
10
10
 
11
11
  context "methods" do
@@ -1,12 +1,33 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Vmstat::Memory do
4
+ context "sample" do
5
+ let(:disk) { described_class.new 4096, 775581, 196146, 437495, 685599,
6
+ 1560532, 0 }
7
+ subject { disk }
8
+
9
+ its(:pagesize) { should == 4096 }
10
+
11
+ its(:wired) { should == 775581 }
12
+ its(:active) { should == 196146 }
13
+ its(:inactive) { should == 437495 }
14
+ its(:free) { should == 685599 }
15
+
16
+ its(:wired_bytes) { should == 3176779776 }
17
+ its(:active_bytes) { should == 803414016 }
18
+ its(:inactive_bytes) { should == 1791979520 }
19
+ its(:free_bytes) { should == 2808213504 }
20
+
21
+ its(:pageins) { should == 1560532 }
22
+ its(:pageouts) { should == 0 }
23
+ end
24
+
4
25
  context "Vmstat#memory" do
5
26
  let(:memory) { Vmstat.memory }
6
27
  subject { memory }
7
28
 
8
29
  it "should be a vmstat memory object" do
9
- should be_a(Vmstat::Memory)
30
+ should be_a(described_class)
10
31
  end
11
32
 
12
33
  context "methods" do
@@ -15,14 +36,13 @@ describe Vmstat::Memory do
15
36
  it { should respond_to(:active) }
16
37
  it { should respond_to(:inactive) }
17
38
  it { should respond_to(:free) }
39
+ it { should respond_to(:pageins) }
40
+ it { should respond_to(:pageouts) }
41
+
18
42
  it { should respond_to(:wired_bytes) }
19
43
  it { should respond_to(:active_bytes) }
20
44
  it { should respond_to(:inactive_bytes) }
21
45
  it { should respond_to(:free_bytes) }
22
- it { should respond_to(:zero_filled) }
23
- it { should respond_to(:reactivated) }
24
- it { should respond_to(:faults) }
25
- it { should respond_to(:copy_on_write_faults) }
26
46
  end
27
47
 
28
48
  context "content" do
@@ -31,14 +51,13 @@ describe Vmstat::Memory do
31
51
  its(:active) { should be_a_kind_of(Numeric) }
32
52
  its(:inactive) { should be_a_kind_of(Numeric) }
33
53
  its(:free) { should be_a_kind_of(Numeric) }
54
+ its(:pageins) { should be_a_kind_of(Numeric) }
55
+ its(:pageouts) { should be_a_kind_of(Numeric) }
56
+
34
57
  its(:wired_bytes) { should be_a_kind_of(Numeric) }
35
58
  its(:active_bytes) { should be_a_kind_of(Numeric) }
36
59
  its(:inactive_bytes) { should be_a_kind_of(Numeric) }
37
60
  its(:free_bytes) { should be_a_kind_of(Numeric) }
38
- its(:zero_filled) { should be_a_kind_of(Numeric) }
39
- its(:reactivated) { should be_a_kind_of(Numeric) }
40
- its(:faults) { should be_a_kind_of(Numeric) }
41
- its(:copy_on_write_faults) { should be_a_kind_of(Numeric) }
42
61
  end
43
62
  end
44
- end
63
+ end
@@ -13,7 +13,7 @@ describe Vmstat::NetworkInterface do
13
13
  subject { loopback }
14
14
 
15
15
  it "should be a vmstat network interface object" do
16
- should be_a(Vmstat::NetworkInterface)
16
+ should be_a(described_class)
17
17
  end
18
18
 
19
19
  context "methods" do
@@ -53,10 +53,20 @@ describe Vmstat::ProcFS do
53
53
  it { should be_a(Array) }
54
54
  it do
55
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)
56
+ Vmstat::NetworkInterface.new(:lo, 3224, 0, 0, 3224, 0,
57
+ Vmstat::NetworkInterface::LOOPBACK_TYPE),
58
+ Vmstat::NetworkInterface.new(:eth1, 0, 1, 2, 0, 3,
59
+ Vmstat::NetworkInterface::ETHERNET_TYPE),
60
+ Vmstat::NetworkInterface.new(:eth0, 33660, 0, 0, 36584, 0,
61
+ Vmstat::NetworkInterface::ETHERNET_TYPE)
59
62
  ]
60
63
  end
61
64
  end
65
+
66
+ context "#task" do
67
+ subject { procfs.task }
68
+
69
+ it { should be_a(Vmstat::Task) }
70
+ it { should == Vmstat::Task.new(4807, 515, 2000, 0) }
71
+ end
62
72
  end
@@ -6,13 +6,13 @@ describe Vmstat::Snapshot do
6
6
  subject { snapshot }
7
7
 
8
8
  it "should be an vmstat load snapshot object" do
9
- should be_a(Vmstat::Snapshot)
9
+ should be_a(described_class)
10
10
  end
11
11
 
12
12
  context "methods" do
13
13
  it { should respond_to(:at) }
14
14
  it { should respond_to(:boot_time) }
15
- it { should respond_to(:cpu) }
15
+ it { should respond_to(:cpus) }
16
16
  it { should respond_to(:disks) }
17
17
  it { should respond_to(:load_average) }
18
18
  it { should respond_to(:memory) }
@@ -23,7 +23,7 @@ describe Vmstat::Snapshot do
23
23
  context "content" do
24
24
  its(:at) { should be_a(Time) }
25
25
  its(:boot_time) { should be_a(Time) }
26
- its(:cpu) { should be_a(Array) }
26
+ its(:cpus) { should be_a(Array) }
27
27
  its(:disks) { should be_a(Array) }
28
28
  its(:load_average) { should be_a(Vmstat::LoadAverage) }
29
29
  its(:memory) { should be_a(Vmstat::Memory) }
@@ -31,7 +31,7 @@ describe Vmstat::Snapshot do
31
31
  its(:task) { should be_a(Vmstat::Task) }
32
32
 
33
33
  context "first of cpu" do
34
- subject { snapshot.cpu.first }
34
+ subject { snapshot.cpus.first }
35
35
  it { should be_a(Vmstat::Cpu) }
36
36
  end
37
37
 
@@ -6,11 +6,10 @@ describe Vmstat::Task do
6
6
  subject { task }
7
7
 
8
8
  it "should be a vmstat task object" do
9
- should be_a(Vmstat::Task)
9
+ should be_a(described_class)
10
10
  end
11
11
 
12
12
  context "methods" do
13
- it { should respond_to(:suspend_count) }
14
13
  it { should respond_to(:virtual_size) }
15
14
  it { should respond_to(:resident_size) }
16
15
  it { should respond_to(:user_time_ms) }
@@ -18,7 +17,6 @@ describe Vmstat::Task do
18
17
  end
19
18
 
20
19
  context "content" do
21
- its(:suspend_count) { should be_a_kind_of(Numeric) }
22
20
  its(:virtual_size) { should be_a_kind_of(Numeric) }
23
21
  its(:resident_size) { should be_a_kind_of(Numeric) }
24
22
  its(:user_time_ms) { should be_a_kind_of(Numeric) }
@@ -15,7 +15,7 @@ describe Vmstat do
15
15
 
16
16
  context "Vmstat#filter_devices" do
17
17
  it "should filter ethernet devices" do
18
- Vmstat.ethernet_devices.size.should == 2
18
+ Vmstat.ethernet_devices.size.should >= 1
19
19
  end
20
20
 
21
21
  it "should filter loopback devices" do
@@ -9,10 +9,10 @@ Gem::Specification.new do |gem|
9
9
  gem.authors = ["Vincent Landgraf"]
10
10
  gem.email = ["vilandgr@googlemail.com"]
11
11
  gem.description = %q{
12
- A focused and fast library t gather memory,
12
+ A focused and fast library to gather memory,
13
13
  cpu, network, load avg and disk information
14
14
  }
15
- gem.summary = %q{A focused and fast library t gather system information}
15
+ gem.summary = %q{A focused and fast library to gather system information}
16
16
  gem.homepage = "http://threez.github.com/ruby-vmstat/"
17
17
 
18
18
  gem.files = `git ls-files`.split($/)
@@ -21,6 +21,7 @@ Gem::Specification.new do |gem|
21
21
  gem.require_paths = ["lib"]
22
22
  gem.extensions = ["ext/vmstat/extconf.rb"]
23
23
 
24
+ gem.add_development_dependency('rake')
24
25
  gem.add_development_dependency('rspec')
25
26
  gem.add_development_dependency('rake-compiler')
26
27
  gem.add_development_dependency('guard-rspec')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vmstat
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,24 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-14 00:00:00.000000000 Z
12
+ date: 2012-10-27 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
14
30
  - !ruby/object:Gem::Dependency
15
31
  name: rspec
16
32
  requirement: !ruby/object:Gem::Requirement
@@ -75,7 +91,7 @@ dependencies:
75
91
  - - ! '>='
76
92
  - !ruby/object:Gem::Version
77
93
  version: '0'
78
- description: ! "\n A focused and fast library t gather memory, \n cpu, network,
94
+ description: ! "\n A focused and fast library to gather memory, \n cpu, network,
79
95
  load avg and disk information\n "
80
96
  email:
81
97
  - vilandgr@googlemail.com
@@ -87,6 +103,7 @@ files:
87
103
  - .gitignore
88
104
  - .rspec
89
105
  - .rvmrc
106
+ - .travis.yml
90
107
  - Gemfile
91
108
  - Guardfile
92
109
  - LICENSE.txt
@@ -115,6 +132,7 @@ files:
115
132
  - spec/procfs/loadavg
116
133
  - spec/procfs/meminfo
117
134
  - spec/procfs/net/dev
135
+ - spec/procfs/self/stat
118
136
  - spec/procfs/stat
119
137
  - spec/procfs/uptime
120
138
  - spec/procfs/vmstat
@@ -143,7 +161,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
143
161
  version: '0'
144
162
  segments:
145
163
  - 0
146
- hash: -3233054199977223520
164
+ hash: -3973347779729246928
147
165
  required_rubygems_version: !ruby/object:Gem::Requirement
148
166
  none: false
149
167
  requirements:
@@ -152,17 +170,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
170
  version: '0'
153
171
  segments:
154
172
  - 0
155
- hash: -3233054199977223520
173
+ hash: -3973347779729246928
156
174
  requirements: []
157
175
  rubyforge_project:
158
176
  rubygems_version: 1.8.24
159
177
  signing_key:
160
178
  specification_version: 3
161
- summary: A focused and fast library t gather system information
179
+ summary: A focused and fast library to gather system information
162
180
  test_files:
163
181
  - spec/procfs/loadavg
164
182
  - spec/procfs/meminfo
165
183
  - spec/procfs/net/dev
184
+ - spec/procfs/self/stat
166
185
  - spec/procfs/stat
167
186
  - spec/procfs/uptime
168
187
  - spec/procfs/vmstat