sys-proctable 0.7.6-powerpc-darwin

Sign up to get free protection for your applications and to get access to all the features.
data/ext/extconf.rb ADDED
@@ -0,0 +1,98 @@
1
+ #############################################################################
2
+ # Installation script for sys-proctable.
3
+ #
4
+ # By running this file, it is assumed that you want a C extension, and not
5
+ # a pure Ruby version. If you want a pure Ruby version (and you're on a
6
+ # platform for which it's supported), run install.rb instead.
7
+ #############################################################################
8
+ require 'mkmf'
9
+ require 'fileutils'
10
+
11
+ c_file = nil
12
+ h_file = nil
13
+ tc_file = nil
14
+
15
+ ########################################################################
16
+ # Ruby 1.8.3 and later mandates the use of rb_pid_t over pid_t because
17
+ # some libraries define their own pid_t. So, we check for that.
18
+ ########################################################################
19
+ have_type('rb_pid_t', 'ruby.h')
20
+
21
+ ##########################################################################
22
+ # Determine appropriate source files based on platform. Also, check for
23
+ # certain header files and/or libraries on some platforms.
24
+ #
25
+ # On FreeBSD a different source file is used if the /proc filesystem is
26
+ # not found (kvm is used instead). For OpenBSD or NetBSD, the kvm
27
+ # interface is always used for now.
28
+ ##########################################################################
29
+ case RUBY_PLATFORM
30
+ when /hpux/i
31
+ c_file = 'hpux/hpux.c'
32
+ h_file = 'hpux/hpux.h'
33
+ tc_file = 'tc_hpux'
34
+ when /freebsd/i
35
+ if File.exists?('/proc') && Dir['/proc/*'].length > 0
36
+ c_file = 'freebsd/freebsd.c'
37
+ h_file = 'freebsd/freebsd.h'
38
+ tc_file = 'tc_freebsd'
39
+ else
40
+ have_library('kvm')
41
+ have_struct_member('struct kinfo_proc', 'kp_proc', 'sys/user.h')
42
+ have_struct_member('struct kinfo_proc', 'kp_eproc', 'sys/user.h')
43
+ c_file = 'bsd/bsd.c'
44
+ tc_file = 'tc_kvm_bsd.rb'
45
+ end
46
+ when /openbsd|netbsd/
47
+ have_library('kvm')
48
+ c_file = 'bsd/bsd.c'
49
+ tc_file = 'tc_kvm_bsd.rb'
50
+ when /solaris|sunos/i
51
+ c_file = 'sunos/sunos.c'
52
+ h_file = 'sunos/sunos.h'
53
+ tc_file = 'tc_sunos'
54
+ have_header('procfs.h') # false means Solaris 2.5.x
55
+ when /linux/i
56
+ c_file = 'linux/linux.c'
57
+ h_file = 'linux/linux.h'
58
+ tc_file = 'tc_linux'
59
+ when /darwin/i
60
+ c_file = 'darwin/darwin.c'
61
+ tc_file = 'tc_darwin'
62
+ when /windows|win32|cygwin|mingw|dos/i
63
+ msg = 'Use the install_pure_ruby.rb script to install on MS Windows'
64
+ STDERR.puts msg
65
+ exit
66
+ else
67
+ puts 'This platform not currently supported. Exiting...'
68
+ exit
69
+ end
70
+
71
+ #####################################################################
72
+ # Move the 'windows.rb' file under 'lib/sys/' to '.orig' to prevent
73
+ # mkmf from installing it during the 'make install' phase.
74
+ #####################################################################
75
+ if File.exists?('../lib/sys/windows.rb')
76
+ File.rename('../lib/sys/windows.rb', '../lib/sys/windows.orig')
77
+ end
78
+
79
+ ###################
80
+ # build ts_all.rb
81
+ ###################
82
+ test_file = '../test/ts_all.rb'
83
+ File.open(test_file, 'w'){ |fh|
84
+ fh.puts "require 'tc_all'"
85
+ fh.puts "require '#{tc_file}'"
86
+ fh.puts "require 'tc_top'"
87
+ }
88
+
89
+ ########################################################################
90
+ # Copy or link files to current directory for create_makefile to work.
91
+ ########################################################################
92
+ File.delete('proctable.c') rescue nil
93
+ File.delete(File.basename(h_file)) rescue nil
94
+
95
+ FileUtils.cp(c_file, 'proctable.c')
96
+ FileUtils.cp(h_file, File.basename(h_file)) if h_file
97
+
98
+ create_makefile('sys/proctable')
data/ext/version.h ADDED
@@ -0,0 +1,2 @@
1
+ /* version.h - stores the version number for all platforms (that use C) */
2
+ #define SYS_PROCTABLE_VERSION "0.7.6"
data/lib/sys/top.rb ADDED
@@ -0,0 +1,23 @@
1
+ require "sys/proctable"
2
+ module Sys
3
+ class Top
4
+ VERSION = "1.0.1"
5
+ WINDOWS = PLATFORM.match("mswin")
6
+
7
+ def self.top(num=10, field="pctcpu")
8
+ # Sort by pid on Windows by default
9
+ if WINDOWS && field == "pctcpu"
10
+ field = "pid"
11
+ end
12
+
13
+ # Linux does not have a pctcpu field yet
14
+ if RUBY_PLATFORM =~ /linux/ && field == "pctcpu"
15
+ field = "pid"
16
+ end
17
+
18
+ Sys::ProcTable.ps.sort{ |a,b|
19
+ b.send(field) <=> a.send(field)
20
+ }[0..num-1]
21
+ end
22
+ end
23
+ end
data/test/tc_all.rb ADDED
@@ -0,0 +1,59 @@
1
+ #######################################################################
2
+ # tc_all.rb
3
+ #
4
+ # Test suite for methods common to all platforms. Generally speaking
5
+ # you should run this test case using the 'rake test' task.
6
+ #######################################################################
7
+ require 'socket'
8
+ require 'test/unit'
9
+ require 'sys/proctable'
10
+ include Sys
11
+
12
+ class TC_ProcTable_All < Test::Unit::TestCase
13
+ def setup
14
+ @host = Socket.gethostname
15
+ @pid = RUBY_PLATFORM.match('mswin') ? 0 : 1
16
+ end
17
+
18
+ def test_version
19
+ assert_equal('0.7.6', ProcTable::VERSION)
20
+ end
21
+
22
+ def test_fields
23
+ assert_respond_to(ProcTable, :fields)
24
+ assert_nothing_raised{ ProcTable.fields }
25
+ assert_kind_of(Array, ProcTable.fields)
26
+ assert_kind_of(String, ProcTable.fields.first)
27
+ end
28
+
29
+ def test_ps
30
+ assert_respond_to(ProcTable, :ps)
31
+ assert_nothing_raised{ ProcTable.ps }
32
+ assert_nothing_raised{ ProcTable.ps{} }
33
+ end
34
+
35
+ def test_ps_with_args
36
+ assert_nothing_raised{ ProcTable.ps(0) }
37
+ assert_nothing_raised{ ProcTable.ps(nil) }
38
+ assert_raises(TypeError){ ProcTable.ps('vim') }
39
+
40
+ if RUBY_PLATFORM.match('mswin')
41
+ assert_nothing_raised{ ProcTable.ps(0, @host) }
42
+ assert_raises(ArgumentError){ ProcTable.ps(0, @host, 1) }
43
+ else
44
+ assert_raises(ArgumentError){ ProcTable.ps(0, @host) }
45
+ end
46
+ end
47
+
48
+ def test_ps_return_values
49
+ assert_kind_of(Array, ProcTable.ps)
50
+ assert_kind_of(Struct::ProcTableStruct, ProcTable.ps(@pid))
51
+ assert_equal(nil, ProcTable.ps(999999999))
52
+ assert_equal(nil, ProcTable.ps{})
53
+ end
54
+
55
+ def teardown
56
+ @host = nil
57
+ @pid = nil
58
+ end
59
+ end
@@ -0,0 +1,45 @@
1
+ ############################################
2
+ # tc_freebsd.rb
3
+ #
4
+ # Test suite for sys-proctable for FreeBSD.
5
+ ############################################
6
+ require "sys/proctable"
7
+ require "test/unit"
8
+ require "test/tc_all"
9
+ include Sys
10
+
11
+ class TC_ProcTable_FreeBSD < Test::Unit::TestCase
12
+ def setup
13
+ @fields = %w/
14
+ comm pid ppid pgid sid tdev_maj tdev_min flags start
15
+ utime stime wchan euid ruid rgid egid groups cmdline
16
+ /
17
+ @pt = ProcTable.ps.first
18
+ end
19
+
20
+ def test_field_members
21
+ msg = "Struct members don't match expected fields"
22
+ assert_equal(@fields.length, @pt.length, "Bad length")
23
+ assert_equal(@fields, ProcTable.fields, "Bad fields")
24
+ assert_equal(@fields, @pt.members, msg)
25
+ end
26
+
27
+ def test_struct_member_types
28
+ @fields.each{ |f|
29
+ if %w/comm cmdline groups wchan flags/.include?(f)
30
+ assert_kind_of(String, @pt.send(f), "Bad #{f} type")
31
+ elsif %w/utime stime/.include?(f)
32
+ assert_kind_of(Float, @pt.send(f), "Bad #{f} type")
33
+ elsif %w/start/.include?(f)
34
+ assert_kind_of(Time, @pt.send(f), "Bad #{f} type")
35
+ else
36
+ assert_kind_of(Fixnum, @pt.send(f), "Bad #{f} type")
37
+ end
38
+ }
39
+ end
40
+
41
+ def teardown
42
+ @fields = nil
43
+ @pt = nil
44
+ end
45
+ end
data/test/tc_hpux.rb ADDED
@@ -0,0 +1,49 @@
1
+ ##################################################
2
+ # tc_hpux.rb
3
+ #
4
+ # Test case for sys-proctable for HP-UX.
5
+ ##################################################
6
+ require "sys/proctable"
7
+ require "test/unit"
8
+ require "test/tc_all"
9
+ include Sys
10
+
11
+ class TC_ProcTable_HPUX < Test::Unit::TestCase
12
+ def setup
13
+ @fields = %w/
14
+ comm uid pid ppid dsize tsize ssize nice ttydev pgrp pri addr
15
+ cpu utime stime start flag stat wchan procnum cmd cmdline time
16
+ cpticks cptickstotal fss pctcpu rssize suid shmsize mmsize usize
17
+ iosize vtsize vdsize vssize vshmsize vmmsize vusize viosize
18
+ minorfaults majorfaults nswap nsignals msgrcv msgsnd maxrss
19
+ sid schedpolicy ticksleft euid egid gid sgid
20
+ /
21
+ @pt = ProcTable.ps.first
22
+ end
23
+
24
+ def test_expected_fields
25
+ msg = "Struct members don't match expected fields"
26
+ assert_equal(@fields.length, @pt.length,"Bad length")
27
+ assert_equal(@fields, ProcTable.fields,"Bad fields")
28
+ assert_equal(@fields, @pt.members,msg)
29
+ end
30
+
31
+ def test_struct_member_types
32
+ @fields.each{ |f|
33
+ if %w/comm stat cmd cmdline ttydev/.include?(f)
34
+ assert_kind_of(String,@pt.send(f),"Bad #{f} type")
35
+ elsif %w/pctcpu/.include?(f)
36
+ assert_kind_of(Float,@pt.send(f),"Bad #{f} type")
37
+ elsif %w/start/.include(f)
38
+ assert_kind_of(Time,@pt.send(f),"Bad #{f} type")
39
+ else
40
+ assert_kind_of(Fixnum,@pt.send(f),"Bad #{f} type")
41
+ end
42
+ }
43
+ end
44
+
45
+ def teardown
46
+ @fields = nil
47
+ @pt = nil
48
+ end
49
+ end
@@ -0,0 +1,31 @@
1
+ ################################################################
2
+ # tc_kvm_bsd.rb
3
+ #
4
+ # Test suite for the BSD specific version of the kvm interface.
5
+ ################################################################
6
+ require "test/unit"
7
+ require "sys/proctable"
8
+ include Sys
9
+
10
+ class TC_KVM_BSD < Test::Unit::TestCase
11
+ def setup
12
+ @fields = %w/
13
+ pid ppid pgid ruid rgid comm state pctcpu cpu_num tty_num
14
+ tty_dev wchan time priority usr_priority nice cmdline start_time
15
+ max_rss ix_rss id_rss is_rss minflt maxflt nswap inblock oublock
16
+ msgsnd msgrcv nsignals nvcsw nivcsw user_time system_time
17
+ /
18
+ @pt = ProcTable.ps.first
19
+ end
20
+
21
+ def test_field_members
22
+ msg = "Struct members don't match expected fields"
23
+ assert_equal(@fields.length, @pt.length, "Bad number of fields")
24
+ assert_equal(@fields, ProcTable.fields, "Bad field members")
25
+ assert_equal(@fields, @pt.members, msg)
26
+ end
27
+
28
+ def teardown
29
+ @fields = nil
30
+ end
31
+ end
data/test/tc_linux.rb ADDED
@@ -0,0 +1,45 @@
1
+ ##########################################
2
+ # tc_linux.rb
3
+ #
4
+ # Test suite for sys-proctable for Linux.
5
+ ##########################################
6
+ require "sys/proctable"
7
+ require "test/unit"
8
+ require "test/tc_all"
9
+
10
+ class TC_ProcTable_Linux < Test::Unit::TestCase
11
+
12
+ def setup
13
+ @fields = %w/
14
+ cmdline cwd exe pid name uid euid gid egid comm state ppid pgrp
15
+ session tty_num tpgid flags minflt cminflt majflt cmajflt utime
16
+ stime cutime cstime priority nice itrealvalue starttime vsize
17
+ rss rlim startcode endcode startstack kstkesp kstkeip signal blocked
18
+ sigignore sigcatch wchan nswap cnswap exit_signal processor environ
19
+ /
20
+ @pt = ProcTable.ps.first
21
+ end
22
+
23
+ def test_field_members
24
+ msg = "Struct members don't match expected fields"
25
+ assert_equal(@fields.length, @pt.length, "Bad length")
26
+ assert_equal(@fields, ProcTable.fields, "Bad fields")
27
+ assert_equal(@fields, @pt.members,msg)
28
+ end
29
+
30
+ def test_struct_member_types
31
+ @fields.each{ |f|
32
+ if %w/cmdline cwd exe name comm state/.include?(f)
33
+ assert_kind_of(String,@pt.send(f),"Bad #{f} type")
34
+ elsif f == "environ"
35
+ assert_kind_of(Hash,@pt.environ,"Bad environ type")
36
+ else
37
+ assert_kind_of(Integer,@pt.send(f),"Bad #{f} type")
38
+ end
39
+ }
40
+ end
41
+
42
+ def teardown
43
+ @pt = nil
44
+ end
45
+ end
data/test/tc_sunos.rb ADDED
@@ -0,0 +1,52 @@
1
+ ##################################################
2
+ # tc_sunos.rb
3
+ #
4
+ # Test suite for sys-proctable for SunOS/Solaris.
5
+ ##################################################
6
+ require "sys/proctable"
7
+ require "test/unit"
8
+ require "test/tc_all"
9
+ include Sys
10
+
11
+ class TC_ProcTable_SunOS < Test::Unit::TestCase
12
+ def setup
13
+ @fields = %w/
14
+ flag nlwp pid ppid pgid sid uid euid gid egid priority
15
+ nice ttydev time ctime size rss wchan pctcpu pctmem
16
+ state fname cmdline start processor comm num_args
17
+ cmd_args lwpid count tstamp create term rtime utime
18
+ stime ttime tftime dftime kftime ltime slptime wtime
19
+ stoptime minf majf nswap inblk oublk msnd mrcv sigs
20
+ vctx ictx sysc ioch
21
+ /
22
+ @pt = ProcTable.ps.first
23
+ end
24
+
25
+ def test_field_members
26
+ msg = "Struct members don't match expected fields"
27
+ assert_equal(@fields.length, @pt.length, "Bad number of fields")
28
+ assert_equal(@fields, ProcTable.fields, "Bad field members")
29
+ assert_equal(@fields, @pt.members, msg)
30
+ end
31
+
32
+ def test_struct_member_types
33
+ @fields.each{ |f|
34
+ if %w/comm state fname cmdline/.include?(f)
35
+ assert_kind_of(String,@pt.send(f),"Bad #{f} type")
36
+ elsif %w/pctcpu pctmem/.include?(f)
37
+ assert_kind_of(Float,@pt.send(f),"Bad #{f} type")
38
+ elsif %w/cmd_args/.include?(f)
39
+ assert_kind_of(Array,@pt.send(f),"Bad #{f} type")
40
+ elsif %w/start/.include?(f)
41
+ assert_kind_of(Time,@pt.send(f),"Bad #{f} type")
42
+ else
43
+ assert_kind_of(Fixnum,@pt.send(f),"Bad #{f} type")
44
+ end
45
+ }
46
+ end
47
+
48
+ def teardown
49
+ @pt = nil
50
+ @fields = nil
51
+ end
52
+ end
data/test/tc_top.rb ADDED
@@ -0,0 +1,26 @@
1
+ ##############################################################################
2
+ # tc_top.rb
3
+ #
4
+ # Test suite for the sys-top package that is included with this distribution.
5
+ ##############################################################################
6
+ require 'test/unit'
7
+ require 'sys/top'
8
+ include Sys
9
+
10
+ class TC_Top < Test::Unit::TestCase
11
+ def test_version
12
+ assert_equal('1.0.1', Top::VERSION)
13
+ end
14
+
15
+ def test_top
16
+ assert_respond_to(Top,:top)
17
+ assert_nothing_raised{ Top.top }
18
+ assert_nothing_raised{ Top.top(5) }
19
+ assert_nothing_raised{ Top.top(5, 'cmdline') }
20
+ assert_raises(ArgumentError){ Top.top(1,'foo',2) }
21
+ assert_kind_of(Array, Top.top)
22
+ assert_equal(10, Top.top.length)
23
+ assert_equal(5, Top.top(5).length)
24
+ assert_kind_of(Struct::ProcTableStruct, Top.top.first)
25
+ end
26
+ end