linux-kstat 0.1.1-universal-linux
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +5 -0
- data/MANIFEST +7 -0
- data/README +43 -0
- data/Rakefile +27 -0
- data/lib/linux/kstat.rb +76 -0
- data/linux-kstat.gemspec +25 -0
- data/test/test_linux_kstat.rb +34 -0
- metadata +90 -0
data/CHANGES
ADDED
data/MANIFEST
ADDED
data/README
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
= Description
|
2
|
+
A Ruby library for gathering Linux kernel statistics out of /proc/stat.
|
3
|
+
|
4
|
+
= Installation
|
5
|
+
gem install linux-kstat
|
6
|
+
|
7
|
+
= Synopsis
|
8
|
+
require 'linux/kstat'
|
9
|
+
|
10
|
+
kstat = Linux::Kstat.new
|
11
|
+
|
12
|
+
p kstat[:cpu]
|
13
|
+
p kstat[:procs_running]
|
14
|
+
|
15
|
+
= Details
|
16
|
+
The values for most of the keys are a single numeric value. However, in the
|
17
|
+
case of "cpu" keys, the result is a 7 element hash of numeric values. In
|
18
|
+
the case of the "intr" key, the value is an array containing the list of
|
19
|
+
interrupts.
|
20
|
+
|
21
|
+
= Information about /proc/stat
|
22
|
+
See http://www.linuxhowtos.org/System/procstat.htm for more information
|
23
|
+
about the meaning of each of the fields.
|
24
|
+
|
25
|
+
= Known Bugs
|
26
|
+
None known. Please report any bugs on the github project page.
|
27
|
+
|
28
|
+
http://www.github.com/djberg96/linux-kstat
|
29
|
+
|
30
|
+
= License
|
31
|
+
Artistic 2.0
|
32
|
+
|
33
|
+
= Copyright
|
34
|
+
(C) 2003-2011 Daniel J. Berger
|
35
|
+
All Rights Reserved.`
|
36
|
+
|
37
|
+
= Warranty
|
38
|
+
This package is provided "as is" and without any express or
|
39
|
+
implied warranties, including, without limitation, the implied
|
40
|
+
warranties of merchantability and fitness for a particular purpose.
|
41
|
+
|
42
|
+
= Author
|
43
|
+
Daniel J. Berger
|
data/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/clean'
|
3
|
+
require 'rake/testtask'
|
4
|
+
|
5
|
+
CLEAN.include('**/*.gem', '**/*.rbc')
|
6
|
+
|
7
|
+
namespace :gem do
|
8
|
+
desc 'Build the linux-kstat gem'
|
9
|
+
task :create => [:clean] do
|
10
|
+
spec = eval(IO.read('linux-kstat.gemspec'))
|
11
|
+
Gem::Builder.new(spec).build
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "Install the linux-kstat gem"
|
15
|
+
task :install => [:create] do
|
16
|
+
file = Dir["*.gem"].first
|
17
|
+
sh "gem install #{file}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
Rake::TestTask.new do |t|
|
22
|
+
task :test => :clean
|
23
|
+
t.warning = true
|
24
|
+
t.verbose = true
|
25
|
+
end
|
26
|
+
|
27
|
+
task :default => :test
|
data/lib/linux/kstat.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
# The Linux module serves as a namespace only.
|
4
|
+
module Linux
|
5
|
+
# The Kstat class encapsulates Linux kernel statistics derived from /proc/stat.
|
6
|
+
class Kstat
|
7
|
+
extend Forwardable
|
8
|
+
|
9
|
+
# The version of the linux-kstat library
|
10
|
+
VERSION = '0.1.1'
|
11
|
+
|
12
|
+
# :stopdoc:
|
13
|
+
|
14
|
+
# Delegate the the [] and inspect methods to the @hash variable
|
15
|
+
def_delegator(:@hash, :[])
|
16
|
+
def_delegator(:@hash, :inspect)
|
17
|
+
|
18
|
+
# :startdoc:
|
19
|
+
|
20
|
+
# Create a new Linux::Kstat instance. You can access the information
|
21
|
+
# stored in this object the same way you would access a hash key. Note
|
22
|
+
# that all keys are symbols.
|
23
|
+
#
|
24
|
+
# Example:
|
25
|
+
#
|
26
|
+
# kstat = Linux::Kstat.new
|
27
|
+
#
|
28
|
+
# kstat[:cpu] => {
|
29
|
+
# :idle => 250713454,
|
30
|
+
# :iowait => 2745691,
|
31
|
+
# :irq => 39717,
|
32
|
+
# :softirq => 31323,
|
33
|
+
# :system => 1881655,
|
34
|
+
# :nice => 117158,
|
35
|
+
# :user => 7137418
|
36
|
+
# }
|
37
|
+
#
|
38
|
+
# kstat[:processes] # => 1299560
|
39
|
+
#
|
40
|
+
def initialize
|
41
|
+
@hash = get_proc_stat_info
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
# Parse the information out of /proc/stat and assign keys and values to
|
47
|
+
# a hash that can be accessed via the Forwardable module.
|
48
|
+
#
|
49
|
+
def get_proc_stat_info
|
50
|
+
hash = {}
|
51
|
+
|
52
|
+
IO.readlines('/proc/stat').each{ |line|
|
53
|
+
info = line.split
|
54
|
+
if info.first =~ /^cpu/i
|
55
|
+
hash[info.first.to_sym] = {
|
56
|
+
:user => info[1].to_i,
|
57
|
+
:nice => info[2].to_i,
|
58
|
+
:system => info[3].to_i,
|
59
|
+
:idle => info[4].to_i,
|
60
|
+
:iowait => info[5].to_i,
|
61
|
+
:irq => info[6].to_i,
|
62
|
+
:softirq => info[7].to_i
|
63
|
+
}
|
64
|
+
else
|
65
|
+
if info.size > 2
|
66
|
+
hash[info.first.to_sym] = info[1..-1].map{ |e| e.to_i }
|
67
|
+
else
|
68
|
+
hash[info.first.to_sym] = info[1].to_i
|
69
|
+
end
|
70
|
+
end
|
71
|
+
}
|
72
|
+
|
73
|
+
hash
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/linux-kstat.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rbconfig'
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.name = 'linux-kstat'
|
6
|
+
gem.version = '0.1.1'
|
7
|
+
gem.license = 'Artistic 2.0'
|
8
|
+
gem.author = 'Daniel J. Berger'
|
9
|
+
gem.email = 'djberg96@gmail.com'
|
10
|
+
gem.platform = Gem::Platform.new('universal-linux')
|
11
|
+
gem.homepage = 'http://www.rubyforge.org/projects/shards'
|
12
|
+
gem.summary = 'Ruby interface for Linux kernel stats in /proc/stat'
|
13
|
+
gem.test_files = Dir['test/test*']
|
14
|
+
gem.files = Dir['**/*'].reject{ |f| f.include?('git') }
|
15
|
+
|
16
|
+
gem.rubyforge_project = 'shards'
|
17
|
+
gem.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
|
18
|
+
|
19
|
+
gem.description = <<-EOF
|
20
|
+
The linux-kstat library provides a hash style interface for reading
|
21
|
+
Linux kernel statistics read out of /proc/stat.
|
22
|
+
EOF
|
23
|
+
|
24
|
+
gem.add_development_dependency('test-unit', '>= 2.1.2')
|
25
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
gem 'test-unit'
|
3
|
+
|
4
|
+
require 'test/unit'
|
5
|
+
require 'linux/kstat'
|
6
|
+
|
7
|
+
class TC_Linux_Kstat < Test::Unit::TestCase
|
8
|
+
def setup
|
9
|
+
@kstat = Linux::Kstat.new
|
10
|
+
end
|
11
|
+
|
12
|
+
test "version constant is set to the expected value" do
|
13
|
+
assert_equal('0.1.1', Linux::Kstat::VERSION)
|
14
|
+
end
|
15
|
+
|
16
|
+
test "kstat object can be accessed like a hash" do
|
17
|
+
assert_respond_to(@kstat, :[])
|
18
|
+
assert_nothing_raised{ @kstat[:cpu] }
|
19
|
+
end
|
20
|
+
|
21
|
+
test "kstat object contains expected keys" do
|
22
|
+
assert_kind_of(Hash, @kstat[:cpu])
|
23
|
+
assert_kind_of(Numeric, @kstat[:btime])
|
24
|
+
assert_kind_of(Array, @kstat[:intr])
|
25
|
+
end
|
26
|
+
|
27
|
+
test "values cannot be assigned to keys" do
|
28
|
+
assert_raise(NoMethodError){ @kstat[:cpu] = 'test' }
|
29
|
+
end
|
30
|
+
|
31
|
+
def teardown
|
32
|
+
@kstat = nil
|
33
|
+
end
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: linux-kstat
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 25
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
|
+
platform: universal-linux
|
12
|
+
authors:
|
13
|
+
- Daniel J. Berger
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-05-20 00:00:00 -06:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: test-unit
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 15
|
30
|
+
segments:
|
31
|
+
- 2
|
32
|
+
- 1
|
33
|
+
- 2
|
34
|
+
version: 2.1.2
|
35
|
+
type: :development
|
36
|
+
version_requirements: *id001
|
37
|
+
description: " The linux-kstat library provides a hash style interface for reading\n Linux kernel statistics read out of /proc/stat.\n"
|
38
|
+
email: djberg96@gmail.com
|
39
|
+
executables: []
|
40
|
+
|
41
|
+
extensions: []
|
42
|
+
|
43
|
+
extra_rdoc_files:
|
44
|
+
- README
|
45
|
+
- CHANGES
|
46
|
+
- MANIFEST
|
47
|
+
files:
|
48
|
+
- Rakefile
|
49
|
+
- README
|
50
|
+
- lib/linux/kstat.rb
|
51
|
+
- CHANGES
|
52
|
+
- test/test_linux_kstat.rb
|
53
|
+
- MANIFEST
|
54
|
+
- linux-kstat.gemspec
|
55
|
+
has_rdoc: true
|
56
|
+
homepage: http://www.rubyforge.org/projects/shards
|
57
|
+
licenses:
|
58
|
+
- Artistic 2.0
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options: []
|
61
|
+
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
hash: 3
|
70
|
+
segments:
|
71
|
+
- 0
|
72
|
+
version: "0"
|
73
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
hash: 3
|
79
|
+
segments:
|
80
|
+
- 0
|
81
|
+
version: "0"
|
82
|
+
requirements: []
|
83
|
+
|
84
|
+
rubyforge_project: shards
|
85
|
+
rubygems_version: 1.6.2
|
86
|
+
signing_key:
|
87
|
+
specification_version: 3
|
88
|
+
summary: Ruby interface for Linux kernel stats in /proc/stat
|
89
|
+
test_files:
|
90
|
+
- test/test_linux_kstat.rb
|