vmstator 2.0.4 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d7f7a43819a1849279655e1056a3be2b802ae83c
4
- data.tar.gz: 928c84ecd16c33addd20d1fdac5b7ed3c9becc2c
3
+ metadata.gz: b85df90cea71304f1d1425813adf72f828fda9ad
4
+ data.tar.gz: 1e3611b676d28290bc3adde06b0e05f66c4f5b7c
5
5
  SHA512:
6
- metadata.gz: faaa1554c57651f0efebfbcbdfd951e506803a0cd99ce9cd40a7baeb081d8f90b792a914f666cde5688c309fb267aff3a10c646effee35eedec76164b9227e65
7
- data.tar.gz: afe1fc90504fda4b1c77d4167e14b9f133082e6c4dd508eb10572c00f0bae453e996e811007d76231b4738ea1ed3ba53588406dd36c380dc0443ca52fd05acb6
6
+ metadata.gz: 238ecaa11790d77c4c208a5b26b6ffefd3698903362c31c3a59ef66ae298e474999bd6970727beb50dfe8e48d5763a37a2244c4cfda1d4f06390b928399bf009
7
+ data.tar.gz: 8d5b8f87992b861901f1d1ca88476c5e03d531b8dbef238cb8191596ba8698720cb86a164ba75b8180abe025a79d4cdb61ba453563442d7f899f95e2596974e4
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- vmstator (2.0.4)
4
+ vmstator (2.1.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -32,4 +32,4 @@ DEPENDENCIES
32
32
  vmstator!
33
33
 
34
34
  BUNDLED WITH
35
- 1.12.5
35
+ 1.13.6
data/README.md CHANGED
@@ -2,9 +2,13 @@
2
2
 
3
3
  Vmstator is a Ruby API for [vmstat](https://en.wikipedia.org/wiki/Vmstat). It provides an [OO](https://www.tutorialspoint.com/ruby/ruby_object_oriented.htm) interface to be able to parse the contents of the output of vmstat and access that infromation intuitively.
4
4
 
5
+ #### Supported Platforms
6
+
7
+ Currently working on / testing on Debian GNU/Linux 8
8
+
5
9
  ## Screen Shot
6
10
 
7
- ![screenshot](http://i.imgur.com/RKs36Pa.png "Screen Shot")
11
+ ![screenshot](http://i.imgur.com/q5WkVhQ.png "Screen Shot")
8
12
 
9
13
  ## Installation
10
14
 
@@ -0,0 +1,32 @@
1
+ # Path setting slight of hand:
2
+ $: << File.expand_path("../../lib", __FILE__)
3
+ require 'vmstator'
4
+
5
+ parser = Vmstator::Parser.new
6
+
7
+ parser.active
8
+ # => Vmstator::DiskSummary
9
+
10
+ parser.average
11
+ # => Vmstator::DiskSummary
12
+
13
+ parser.disk_statistics
14
+ # => Vmstator::DiskStatistics
15
+
16
+ parser.disk_summary
17
+ # => Vmstator::DiskSummary
18
+
19
+ parser.event_counter_statistics
20
+ # => Vmstator::EventCounterStatistics
21
+
22
+ parser.slab_info
23
+ # => Vmstator::SlabInfo
24
+
25
+ parser.forks
26
+ # => Integer
27
+
28
+ parser.parse("-a -S m")
29
+ # => Whatever the flags were will determine output.
30
+
31
+ parser.version
32
+ # => String containing vmstat's version number.
@@ -0,0 +1,29 @@
1
+ # Path setting slight of hand:
2
+ $: << File.expand_path("../../lib", __FILE__)
3
+ require 'vmstator'
4
+ require 'pry'
5
+
6
+ parser = Vmstator::Parser.new
7
+ macos_pages = parser.parse
8
+
9
+ puts " Active: " + macos_pages.active.to_s
10
+ puts " Anonymous: " + macos_pages.anonymous.to_s
11
+ puts " Compressions: " + macos_pages.compressions.to_s
12
+ puts " Copy on Write: " + macos_pages.copy_on_write.to_s
13
+ puts " Decompressions: " + macos_pages.decompressions.to_s
14
+ puts " File Backed: " + macos_pages.file_backed.to_s
15
+ puts " Pages Free: " + macos_pages.free.to_s
16
+ puts " Inactive: " + macos_pages.inactive.to_s
17
+ puts " Ins: " + macos_pages.ins.to_s
18
+ puts "Occupied by Compressor: " + macos_pages.occupied_by_compressor.to_s
19
+ puts " Outs: " + macos_pages.outs.to_s
20
+ puts " Purgeable: " + macos_pages.purgeable.to_s
21
+ puts " Reactivated: " + macos_pages.reactivated.to_s
22
+ puts " Stored in Compressor: " + macos_pages.stored_in_compressor.to_s
23
+ puts " Swap Ins: " + macos_pages.swapins.to_s
24
+ puts " Swap Outs: " + macos_pages.swapouts.to_s
25
+ puts " Throttled: " + macos_pages.throttled.to_s
26
+ puts " Translation Faults: " + macos_pages.translation_faults.to_s
27
+ puts " Wired Down: " + macos_pages.wired_down.to_s
28
+ puts " Zero Filled: " + macos_pages.zero_filled.to_s
29
+
@@ -1,17 +1,16 @@
1
1
  require "vmstator/errors"
2
2
  require "vmstator/version"
3
3
  require "vmstator/stats"
4
- require "vmstator/memory"
5
- require "vmstator/active"
6
- require "vmstator/average"
7
- require "vmstator/cache"
8
- require "vmstator/disk"
9
- require "vmstator/disk_statistics"
10
- require "vmstator/disk_summary"
11
- require "vmstator/errors"
12
- require "vmstator/event_counter_statistics"
13
- require "vmstator/slab_info"
14
- require "vmstator/version"
4
+ require "vmstator/macos/pages"
5
+ require "vmstator/linux/memory"
6
+ require "vmstator/linux/active"
7
+ require "vmstator/linux/average"
8
+ require "vmstator/linux/cache"
9
+ require "vmstator/linux/disk"
10
+ require "vmstator/linux/disk_statistics"
11
+ require "vmstator/linux/disk_summary"
12
+ require "vmstator/linux/event_counter_statistics"
13
+ require "vmstator/linux/slab_info"
15
14
 
16
15
  module Vmstator
17
16
 
@@ -21,35 +20,54 @@ module Vmstator
21
20
  # with optional vmstat command-line flags
22
21
  # which is passed in as a string
23
22
  def parse(flags=false)
24
- if flags
25
- if flags =~ /(-d|--disk)/
26
- # parse instances of disk_statistics
27
- return disk_statistics(flags)
28
- elsif flags =~ /(-D|--disk-sum)/
29
- # parse instances of disk summary
30
- return disk_summary(flags)
31
- elsif flags =~ /(-a|--active)/
32
- # parse instances of active memory
33
- return active(flags)
34
- elsif flags =~ /(-m|--slabs)/
35
- # parse instances of slab info
36
- return slab_info(flags)
37
- elsif flags =~ /(-f|--forks)/
38
- # parse instances of forks
39
- return forks
40
- elsif flags =~ /(-s|--stats)/
41
- # parse instances of event counter statistics
42
- return event_counter_statistics(flags)
43
- elsif flags =~ /(-V|--version)/
44
- # parse instances of version
45
- return version
46
- else
47
- # parse instances of the typical, average things
48
- return average(flags)
49
- end
23
+ if RUBY_PLATFORM =~ /darwin/i
24
+ return parse_macos
25
+ elsif RUBY_PLATFORM =~ /linux/i
26
+ return parse_linux(flags)
27
+ elsif RUBY_PLATFORM =~ /win32|win64|\.NET|windows|cygwin|mingw32/i
28
+ raise Vmstator::VmstatError.new("This platform is not supported. Yet!?")
29
+ else
30
+ raise Vmstator::VmstatError.new("Unable to parse vmstat on this platform!")
31
+ end
32
+ end
33
+
34
+ def parse_linux(flags=false)
35
+ if flags =~ /(-d|--disk)/
36
+ # parse instances of disk_statistics
37
+ return disk_statistics(flags)
38
+ elsif flags =~ /(-D|--disk-sum)/
39
+ # parse instances of disk summary
40
+ return disk_summary(flags)
41
+ elsif flags =~ /(-a|--active)/
42
+ # parse instances of active memory
43
+ return active(flags)
44
+ elsif flags =~ /(-m|--slabs)/
45
+ # parse instances of slab info
46
+ return slab_info(flags)
47
+ elsif flags =~ /(-f|--forks)/
48
+ # parse instances of forks
49
+ return forks
50
+ elsif flags =~ /(-s|--stats)/
51
+ # parse instances of event counter statistics
52
+ return event_counter_statistics(flags)
53
+ elsif flags =~ /(-V|--version)/
54
+ # parse instances of version
55
+ return version
50
56
  else
51
- return average
57
+ flags ? average(flags) : average
58
+ end
59
+ end
60
+
61
+ def parse_macos
62
+ output = `vm_stat`.split("\n")
63
+ output.shift
64
+ data = {}
65
+ output.each do |line|
66
+ key, value = line.split(':').map(&:strip)
67
+ key = key.downcase.gsub(" ", "_").gsub("-", "_").gsub('"', '').to_sym
68
+ data[key] = value.to_i
52
69
  end
70
+ Vmstator::MacOSPages.new(data)
53
71
  end
54
72
 
55
73
  def version
@@ -94,7 +112,7 @@ module Vmstator
94
112
  flags = "-D" unless flags
95
113
  output = `vmstat #{flags}`
96
114
  values = output.split(/[A-z]/).compact.join.split("\n").map(&:strip).map(&:to_i)
97
- keys = output.split(/\d/).compact.join.split("\n").map(&:strip)
115
+ kecys = output.split(/\d/).compact.join.split("\n").map(&:strip)
98
116
  keys = keys.map(&:downcase).map {|s| s.gsub(" ", "_")}.map(&:to_sym)
99
117
  data = Hash[keys.zip values]
100
118
  Vmstator::DiskSummary.new(data)
@@ -129,7 +147,7 @@ module Vmstator
129
147
 
130
148
  # slab_info() will run the -m flag and return that data
131
149
  def slab_info(flags=false)
132
- raise VmstatError("This must be run with root privileges!") unless Process.uid == 0
150
+ raise Vmstator::VmstatError.new("This must be run with root privileges!") unless Process.uid == 0
133
151
  flags = "-m" unless flags
134
152
  slab_info = Vmstator::SlabInfo.new
135
153
  `sudo vmstat #{flags}`.split("\n").each do |info|
File without changes
@@ -0,0 +1,58 @@
1
+ module Vmstator
2
+
3
+ class MacOSPages < Stats
4
+ attr_reader :free # total number of free pages in the system
5
+ attr_reader :active # total number of pages currently in use and pageable
6
+ attr_reader :inactive # total number of pages on the inactive list
7
+ attr_reader :speculative # total number of pages on the speculative list
8
+ attr_reader :throttled # total number of pages on the throttled list (not wired but not pageable)
9
+ attr_reader :wired_down # total number of pages wired down. that is, pages that cannot be paged out
10
+ attr_reader :purgeable # total number of purgeable pages
11
+ attr_reader :translation_faults # number of times the "vm_fault" routine has been called
12
+ attr_reader :copy_on_write # number of faults that caused a page to be copied (generally caused by copy-on-write faults)
13
+ attr_reader :zero_filled # total number of pages that have been zero-filled on demand
14
+ attr_reader :reactivated # total number of pages that have been moved from the inactive list to the active list (reactivated)
15
+ attr_reader :purged # total number of pages that have been purged
16
+ attr_reader :file_backed # total number of pages that are file-backed (non-swap)
17
+ attr_reader :anonymous # total number of pages that are anonymous
18
+ attr_reader :stored_in_compressor # total number of pages (uncompressed) held within the compressor
19
+ attr_reader :occupied_by_compressor # number of pages used to store compressed VM pages
20
+ attr_reader :decompressions # total number of pages that have been decompressed by the VM compressor
21
+ attr_reader :compressions # total number of pages that have been compressed by the VM compressor
22
+ attr_reader :ins # total number of requests for pages from a pager (such as the inode pager)
23
+ attr_reader :outs # total number of pages that have been paged out
24
+ attr_reader :swapins # total number of compressed pages that have been swapped out to disk
25
+ attr_reader :swapouts # total number of compressed pages that have been swapped back in from disk
26
+
27
+ def update(data)
28
+ if data
29
+ @free = data[:pages_free]
30
+ @active = data[:pages_active]
31
+ @inactive = data[:pages_inactive]
32
+ @speculative = data[:pages_speculative]
33
+ @throttled = data[:pages_throttled]
34
+ @wired_down = data[:pages_wired_down]
35
+ @purgeable = data[:pages_purgeable]
36
+ @translation_faults = data[:translation_faults]
37
+ @copy_on_write = data[:pages_copy_on_write]
38
+ @zero_filled = data[:pages_zero_filled]
39
+ @reactivated = data[:pages_reactivated]
40
+ @purged = data[:pages_purged]
41
+ @file_backed = data[:file_backed_pages]
42
+ @anonymous = data[:anonymous_pages]
43
+ @stored_in_compressor = data[:pages_stored_in_compressor]
44
+ @occupied_by_compressor = data[:pages_occupied_by_compressor]
45
+ @decompressions = data[:decompressions]
46
+ @compressions = data[:compressions]
47
+ @ins = data[:pageins]
48
+ @outs = data[:pageouts]
49
+ @swapins = data[:swapins]
50
+ @swapouts = data[:swapouts]
51
+ else
52
+ return false
53
+ end
54
+ true
55
+ end
56
+
57
+ end
58
+ end
@@ -1,3 +1,3 @@
1
1
  module Vmstator
2
- VERSION = "2.0.4"
2
+ VERSION = "2.1.0"
3
3
  end
Binary file
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vmstator
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kent 'picat' Gruber
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-11-10 00:00:00.000000000 Z
11
+ date: 2016-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -70,18 +70,21 @@ files:
70
70
  - bin/console
71
71
  - bin/setup
72
72
  - examples/basic_example.rb
73
+ - examples/linux_example.rb
74
+ - examples/macOS_example.rb
73
75
  - lib/vmstator.rb
74
- - lib/vmstator/active.rb
75
- - lib/vmstator/average.rb
76
- - lib/vmstator/cache.rb
77
- - lib/vmstator/disk.rb
78
- - lib/vmstator/disk_statistics.rb
79
- - lib/vmstator/disk_summary.rb
80
76
  - lib/vmstator/errors.rb
81
- - lib/vmstator/event_counter_statistics.rb
82
- - lib/vmstator/memory.rb
83
- - lib/vmstator/parser.rb
84
- - lib/vmstator/slab_info.rb
77
+ - lib/vmstator/linux/active.rb
78
+ - lib/vmstator/linux/average.rb
79
+ - lib/vmstator/linux/cache.rb
80
+ - lib/vmstator/linux/disk.rb
81
+ - lib/vmstator/linux/disk_statistics.rb
82
+ - lib/vmstator/linux/disk_summary.rb
83
+ - lib/vmstator/linux/event_counter_statistics.rb
84
+ - lib/vmstator/linux/memory.rb
85
+ - lib/vmstator/linux/parser.rb
86
+ - lib/vmstator/linux/slab_info.rb
87
+ - lib/vmstator/macos/pages.rb
85
88
  - lib/vmstator/stats.rb
86
89
  - lib/vmstator/version.rb
87
90
  - pkg/vmstator-0.1.0.gem
@@ -91,6 +94,8 @@ files:
91
94
  - pkg/vmstator-2.0.1.gem
92
95
  - pkg/vmstator-2.0.2.gem
93
96
  - pkg/vmstator-2.0.3.gem
97
+ - pkg/vmstator-2.0.4.gem
98
+ - pkg/vmstator-2.1.0.gem
94
99
  - vmstator.gemspec
95
100
  homepage: https://github.com/picatz/Vmstator
96
101
  licenses: