ruby-libgtop2 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.txt +30 -0
- data/History.txt +6 -0
- data/INSTALL.txt +19 -0
- data/Manifest.txt +53 -0
- data/README.txt +21 -0
- data/Rakefile +59 -0
- data/TODO +4 -0
- data/TUTORIAL.txt +28 -0
- data/examples/README +1 -0
- data/examples/first.rb +220 -0
- data/examples/mountlist.rb +30 -0
- data/examples/netload.rb +50 -0
- data/examples/procmap.rb +41 -0
- data/examples/second.rb +207 -0
- data/examples/smp.rb +76 -0
- data/examples/sysdeps.rb +86 -0
- data/ext/libgtop/MANIFEST +30 -0
- data/ext/libgtop/Makefile +149 -0
- data/ext/libgtop/extconf.rb +9 -0
- data/ext/libgtop/mkmf.log +27 -0
- data/ext/libgtop/rb_glibtop.c +61 -0
- data/ext/libgtop/rb_glibtop.h +15 -0
- data/ext/libgtop/rb_glibtop_cpu.c +69 -0
- data/ext/libgtop/rb_glibtop_fsusage.c +43 -0
- data/ext/libgtop/rb_glibtop_init.c +25 -0
- data/ext/libgtop/rb_glibtop_loadavg.c +42 -0
- data/ext/libgtop/rb_glibtop_mem.c +39 -0
- data/ext/libgtop/rb_glibtop_mountlist.c +53 -0
- data/ext/libgtop/rb_glibtop_msg_limits.c +37 -0
- data/ext/libgtop/rb_glibtop_netlist.c +36 -0
- data/ext/libgtop/rb_glibtop_netload.c +82 -0
- data/ext/libgtop/rb_glibtop_ppp.c +39 -0
- data/ext/libgtop/rb_glibtop_proc_args.c +39 -0
- data/ext/libgtop/rb_glibtop_proc_kernel.c +50 -0
- data/ext/libgtop/rb_glibtop_proc_map.c +69 -0
- data/ext/libgtop/rb_glibtop_proc_mem.c +37 -0
- data/ext/libgtop/rb_glibtop_proc_open_files.c +65 -0
- data/ext/libgtop/rb_glibtop_proc_segment.c +39 -0
- data/ext/libgtop/rb_glibtop_proc_signal.c +48 -0
- data/ext/libgtop/rb_glibtop_proc_state.c +46 -0
- data/ext/libgtop/rb_glibtop_proc_time.c +54 -0
- data/ext/libgtop/rb_glibtop_proc_uid.c +58 -0
- data/ext/libgtop/rb_glibtop_proclist.c +56 -0
- data/ext/libgtop/rb_glibtop_sem_limits.c +40 -0
- data/ext/libgtop/rb_glibtop_shm_limits.c +35 -0
- data/ext/libgtop/rb_glibtop_swap.c +36 -0
- data/ext/libgtop/rb_glibtop_sysdeps.c +78 -0
- data/ext/libgtop/rb_glibtop_uptime.c +36 -0
- data/lib/libgtop.rb +3 -0
- data/lib/libgtop/version.rb +9 -0
- data/setup.rb +1585 -0
- data/test/ruby-libgtop2_test.rb +11 -0
- data/test/test_helper.rb +4 -0
- metadata +98 -0
@@ -0,0 +1,39 @@
|
|
1
|
+
/*
|
2
|
+
* GLibTop is a wrapper library of a libgtop-2.x
|
3
|
+
*
|
4
|
+
* @author DATE Ken <itacchi@gmail.com>
|
5
|
+
* @see http://rubyforge.org/projects/ruby-libgtop2/
|
6
|
+
*/
|
7
|
+
|
8
|
+
#include <ruby.h>
|
9
|
+
#include <rb_glibtop.h>
|
10
|
+
#include <glibtop/mem.h>
|
11
|
+
|
12
|
+
|
13
|
+
static VALUE rb_glibtop_mem(VALUE self)
|
14
|
+
{
|
15
|
+
glibtop_mem buf;
|
16
|
+
VALUE hash;
|
17
|
+
|
18
|
+
glibtop_get_mem(&buf);
|
19
|
+
|
20
|
+
hash = rb_hash_new();
|
21
|
+
|
22
|
+
rb_hash_aset(hash, rb_str_new2("flags"), rb_uint2inum(buf.flags));
|
23
|
+
rb_hash_aset(hash, rb_str_new2("total"), rb_uint2inum(buf.total));
|
24
|
+
rb_hash_aset(hash, rb_str_new2("used"), rb_uint2inum(buf.used));
|
25
|
+
rb_hash_aset(hash, rb_str_new2("free"), rb_uint2inum(buf.free));
|
26
|
+
rb_hash_aset(hash, rb_str_new2("shared"), rb_uint2inum(buf.shared));
|
27
|
+
rb_hash_aset(hash, rb_str_new2("buffer"), rb_uint2inum(buf.buffer));
|
28
|
+
rb_hash_aset(hash, rb_str_new2("cached"), rb_uint2inum(buf.cached));
|
29
|
+
rb_hash_aset(hash, rb_str_new2("user"), rb_uint2inum(buf.user));
|
30
|
+
rb_hash_aset(hash, rb_str_new2("locked"), rb_uint2inum(buf.locked));
|
31
|
+
|
32
|
+
return hash;
|
33
|
+
}
|
34
|
+
|
35
|
+
|
36
|
+
void Init_glibtop_mem()
|
37
|
+
{
|
38
|
+
rb_define_method(cLibGTop, "mem", rb_glibtop_mem, 0);
|
39
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
/*
|
2
|
+
* GLibTop is a wrapper library of a libgtop-2.x
|
3
|
+
*
|
4
|
+
* @author DATE Ken <itacchi@gmail.com>
|
5
|
+
* @see http://rubyforge.org/projects/ruby-libgtop2/
|
6
|
+
*/
|
7
|
+
|
8
|
+
#include <ruby.h>
|
9
|
+
#include <rb_glibtop.h>
|
10
|
+
#include <glibtop/mountlist.h>
|
11
|
+
|
12
|
+
|
13
|
+
static VALUE rb_glibtop_mountlist(VALUE self, VALUE all_fs)
|
14
|
+
{
|
15
|
+
glibtop_mountlist buf;
|
16
|
+
glibtop_mountentry* mount_entries_buf;
|
17
|
+
VALUE hash, mount_entries, mount;
|
18
|
+
int i;
|
19
|
+
|
20
|
+
Check_Type(all_fs, T_FIXNUM);
|
21
|
+
mount_entries_buf = glibtop_get_mountlist(&buf, FIX2INT(all_fs));
|
22
|
+
|
23
|
+
hash = rb_hash_new();
|
24
|
+
|
25
|
+
rb_hash_aset(hash, rb_str_new2("flags"), rb_uint2inum(buf.flags));
|
26
|
+
rb_hash_aset(hash, rb_str_new2("number"), rb_uint2inum(buf.number));
|
27
|
+
rb_hash_aset(hash, rb_str_new2("total"), rb_uint2inum(buf.total));
|
28
|
+
rb_hash_aset(hash, rb_str_new2("size"), rb_uint2inum(buf.size));
|
29
|
+
|
30
|
+
mount_entries = rb_ary_new2(buf.number);
|
31
|
+
for (i = 0; i < buf.number; i++){
|
32
|
+
mount = rb_hash_new();
|
33
|
+
|
34
|
+
rb_hash_aset(mount, rb_str_new2("dev"), rb_uint2inum(mount_entries_buf[i].dev));
|
35
|
+
rb_hash_aset(mount, rb_str_new2("devname"), rb_str_new2(mount_entries_buf[i].devname));
|
36
|
+
rb_hash_aset(mount, rb_str_new2("mountdir"), rb_str_new2(mount_entries_buf[i].mountdir));
|
37
|
+
rb_hash_aset(mount, rb_str_new2("type"), rb_str_new2(mount_entries_buf[i].type));
|
38
|
+
|
39
|
+
rb_ary_push(mount_entries, mount);
|
40
|
+
}
|
41
|
+
|
42
|
+
rb_hash_aset(hash, rb_str_new2("mount_entries"), mount_entries);
|
43
|
+
|
44
|
+
g_free(mount_entries_buf);
|
45
|
+
|
46
|
+
return hash;
|
47
|
+
}
|
48
|
+
|
49
|
+
|
50
|
+
void Init_glibtop_mountlist()
|
51
|
+
{
|
52
|
+
rb_define_method(cLibGTop, "mountlist", rb_glibtop_mountlist, 1);
|
53
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
/*
|
2
|
+
* GLibTop is a wrapper library of a libgtop-2.x
|
3
|
+
*
|
4
|
+
* @author DATE Ken <itacchi@gmail.com>
|
5
|
+
* @see http://rubyforge.org/projects/ruby-libgtop2/
|
6
|
+
*/
|
7
|
+
|
8
|
+
#include <ruby.h>
|
9
|
+
#include <rb_glibtop.h>
|
10
|
+
|
11
|
+
|
12
|
+
static VALUE rb_glibtop_msg_limits(VALUE self)
|
13
|
+
{
|
14
|
+
glibtop_msg_limits buf;
|
15
|
+
VALUE hash;
|
16
|
+
|
17
|
+
glibtop_get_msg_limits(&buf);
|
18
|
+
|
19
|
+
hash = rb_hash_new();
|
20
|
+
|
21
|
+
rb_hash_aset(hash, rb_str_new2("flags"), rb_uint2inum(buf.flags));
|
22
|
+
rb_hash_aset(hash, rb_str_new2("msgpool"), rb_uint2inum(buf.msgpool));
|
23
|
+
rb_hash_aset(hash, rb_str_new2("msgmap"), rb_uint2inum(buf.msgmap));
|
24
|
+
rb_hash_aset(hash, rb_str_new2("msgmax"), rb_uint2inum(buf.msgmax));
|
25
|
+
rb_hash_aset(hash, rb_str_new2("msgmnb"), rb_uint2inum(buf.msgmnb));
|
26
|
+
rb_hash_aset(hash, rb_str_new2("msgmni"), rb_uint2inum(buf.msgmni));
|
27
|
+
rb_hash_aset(hash, rb_str_new2("msgssz"), rb_uint2inum(buf.msgssz));
|
28
|
+
rb_hash_aset(hash, rb_str_new2("msgtql"), rb_uint2inum(buf.msgtql));
|
29
|
+
|
30
|
+
return hash;
|
31
|
+
}
|
32
|
+
|
33
|
+
|
34
|
+
void Init_glibtop_msg_limits()
|
35
|
+
{
|
36
|
+
rb_define_method(cLibGTop, "msg_limits", rb_glibtop_msg_limits, 0);
|
37
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
/*
|
2
|
+
* GLibTop is a wrapper library of a libgtop-2.x
|
3
|
+
*
|
4
|
+
* @author DATE Ken <itacchi@gmail.com>
|
5
|
+
* @see http://rubyforge.org/projects/ruby-libgtop2/
|
6
|
+
*/
|
7
|
+
|
8
|
+
#include <ruby.h>
|
9
|
+
#include <rb_glibtop.h>
|
10
|
+
#if (LIBGTOP_CHECK_VERSION(2, 9, 0))
|
11
|
+
#include <glibtop/netlist.h>
|
12
|
+
|
13
|
+
static VALUE rb_glibtop_netlist(VALUE self)
|
14
|
+
{
|
15
|
+
glibtop_netlist buf;
|
16
|
+
char** devices;
|
17
|
+
VALUE array;
|
18
|
+
guint32 i;
|
19
|
+
|
20
|
+
array = rb_ary_new();
|
21
|
+
|
22
|
+
devices = glibtop_get_netlist(&buf);
|
23
|
+
for ( i = 0; i < buf.number; ++i) {
|
24
|
+
rb_ary_push(array, rb_str_new2(devices[i]));
|
25
|
+
}
|
26
|
+
|
27
|
+
g_free(devices);
|
28
|
+
|
29
|
+
return array;
|
30
|
+
}
|
31
|
+
|
32
|
+
void Init_glibtop_netlist()
|
33
|
+
{
|
34
|
+
rb_define_method(cLibGTop, "netlist", rb_glibtop_netlist, 0);
|
35
|
+
}
|
36
|
+
#endif
|
@@ -0,0 +1,82 @@
|
|
1
|
+
/*
|
2
|
+
* GLibTop is a wrapper library of a libgtop-2.x
|
3
|
+
*
|
4
|
+
* @author DATE Ken <itacchi@gmail.com>
|
5
|
+
* @see http://rubyforge.org/projects/ruby-libgtop2/
|
6
|
+
*/
|
7
|
+
|
8
|
+
#include <ruby.h>
|
9
|
+
#include <rb_glibtop.h>
|
10
|
+
#include <glibtop/netload.h>
|
11
|
+
|
12
|
+
|
13
|
+
static VALUE rb_glibtop_netload(VALUE self, VALUE interface)
|
14
|
+
{
|
15
|
+
glibtop_netload buf;
|
16
|
+
pid_t _pid;
|
17
|
+
VALUE hash, ary;
|
18
|
+
int i;
|
19
|
+
|
20
|
+
glibtop_get_netload(&buf, StringValuePtr(interface));
|
21
|
+
|
22
|
+
hash = rb_hash_new();
|
23
|
+
|
24
|
+
rb_hash_aset(hash, rb_str_new2("flags"), rb_uint2inum(buf.flags));
|
25
|
+
rb_hash_aset(hash, rb_str_new2("if_flags"), rb_uint2inum(buf.if_flags));
|
26
|
+
rb_hash_aset(hash, rb_str_new2("mtu"), rb_uint2inum(buf.mtu));
|
27
|
+
rb_hash_aset(hash, rb_str_new2("subnet"), rb_uint2inum(buf.subnet));
|
28
|
+
rb_hash_aset(hash, rb_str_new2("address"), rb_uint2inum(buf.address));
|
29
|
+
rb_hash_aset(hash, rb_str_new2("packets_in"), rb_uint2inum(buf.packets_in));
|
30
|
+
rb_hash_aset(hash, rb_str_new2("packets_out"), rb_uint2inum(buf.packets_out));
|
31
|
+
rb_hash_aset(hash, rb_str_new2("packets_total"), rb_uint2inum(buf.packets_total));
|
32
|
+
rb_hash_aset(hash, rb_str_new2("bytes_in"), rb_uint2inum(buf.bytes_in));
|
33
|
+
rb_hash_aset(hash, rb_str_new2("bytes_out"), rb_uint2inum(buf.bytes_out));
|
34
|
+
rb_hash_aset(hash, rb_str_new2("bytes_total"), rb_uint2inum(buf.bytes_total));
|
35
|
+
rb_hash_aset(hash, rb_str_new2("errors_in"), rb_uint2inum(buf.errors_in));
|
36
|
+
rb_hash_aset(hash, rb_str_new2("errors_out"), rb_uint2inum(buf.errors_out));
|
37
|
+
rb_hash_aset(hash, rb_str_new2("errors_total"), rb_uint2inum(buf.errors_total));
|
38
|
+
rb_hash_aset(hash, rb_str_new2("collisions"), rb_uint2inum(buf.collisions));
|
39
|
+
#if (LIBGTOP_CHECK_VERSION(2, 7, 4))
|
40
|
+
ary = rb_ary_new();
|
41
|
+
for (i = 0; i < sizeof(buf.address6); i++) {
|
42
|
+
rb_ary_push(ary, INT2FIX(buf.address6[i]));
|
43
|
+
}
|
44
|
+
rb_hash_aset(hash, rb_str_new2("address6"), ary);
|
45
|
+
ary = rb_ary_new();
|
46
|
+
for (i = 0; i < sizeof(buf.prefix6); i++) {
|
47
|
+
rb_ary_push(ary, INT2FIX(buf.prefix6[i]));
|
48
|
+
}
|
49
|
+
rb_hash_aset(hash, rb_str_new2("prefix6"), ary);
|
50
|
+
rb_hash_aset(hash, rb_str_new2("scope6"), rb_uint2inum(buf.scope6));
|
51
|
+
ary = rb_ary_new();
|
52
|
+
for (i = 0; i < sizeof(buf.hwaddress); i++) {
|
53
|
+
rb_ary_push(ary, INT2FIX(buf.hwaddress[i]));
|
54
|
+
}
|
55
|
+
rb_hash_aset(hash, rb_str_new2("hwaddress"), ary);
|
56
|
+
#endif
|
57
|
+
|
58
|
+
return hash;
|
59
|
+
}
|
60
|
+
|
61
|
+
|
62
|
+
void Init_glibtop_netload()
|
63
|
+
{
|
64
|
+
rb_define_const(cLibGTop, "IF_FLAGS_UP", INT2FIX(GLIBTOP_IF_FLAGS_UP));
|
65
|
+
rb_define_const(cLibGTop, "IF_FLAGS_BROADCAS", INT2FIX(GLIBTOP_IF_FLAGS_BROADCAST));
|
66
|
+
rb_define_const(cLibGTop, "IF_FLAGS_DEBUG", INT2FIX(GLIBTOP_IF_FLAGS_DEBUG));
|
67
|
+
rb_define_const(cLibGTop, "IF_FLAGS_LOOPBACK", INT2FIX(GLIBTOP_IF_FLAGS_LOOPBACK));
|
68
|
+
rb_define_const(cLibGTop, "IF_FLAGS_POINTOPOINT", INT2FIX(GLIBTOP_IF_FLAGS_POINTOPOINT));
|
69
|
+
rb_define_const(cLibGTop, "IF_FLAGS_RUNNING", INT2FIX(GLIBTOP_IF_FLAGS_RUNNING));
|
70
|
+
rb_define_const(cLibGTop, "IF_FLAGS_NOARP", INT2FIX(GLIBTOP_IF_FLAGS_NOARP));
|
71
|
+
rb_define_const(cLibGTop, "IF_FLAGS_PROMISC", INT2FIX(GLIBTOP_IF_FLAGS_PROMISC));
|
72
|
+
rb_define_const(cLibGTop, "IF_FLAGS_ALLMULTI", INT2FIX(GLIBTOP_IF_FLAGS_ALLMULTI));
|
73
|
+
rb_define_const(cLibGTop, "IF_FLAGS_OACTIVE", INT2FIX(GLIBTOP_IF_FLAGS_OACTIVE));
|
74
|
+
rb_define_const(cLibGTop, "IF_FLAGS_SIMPLEX", INT2FIX(GLIBTOP_IF_FLAGS_SIMPLEX));
|
75
|
+
rb_define_const(cLibGTop, "IF_FLAGS_LINK0", INT2FIX(GLIBTOP_IF_FLAGS_LINK0));
|
76
|
+
rb_define_const(cLibGTop, "IF_FLAGS_LINK1", INT2FIX(GLIBTOP_IF_FLAGS_LINK1));
|
77
|
+
rb_define_const(cLibGTop, "IF_FLAGS_LINK2", INT2FIX(GLIBTOP_IF_FLAGS_LINK2));
|
78
|
+
rb_define_const(cLibGTop, "IF_FLAGS_ALTPHYS", INT2FIX(GLIBTOP_IF_FLAGS_ALTPHYS));
|
79
|
+
rb_define_const(cLibGTop, "IF_FLAGS_MULTICAST", INT2FIX(GLIBTOP_IF_FLAGS_MULTICAST));
|
80
|
+
|
81
|
+
rb_define_method(cLibGTop, "netload", rb_glibtop_netload, 1);
|
82
|
+
}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
/*
|
2
|
+
* GLibTop is a wrapper library of a libgtop-2.x
|
3
|
+
*
|
4
|
+
* @author DATE Ken <itacchi@gmail.com>
|
5
|
+
* @see http://rubyforge.org/projects/ruby-libgtop2/
|
6
|
+
*/
|
7
|
+
|
8
|
+
#include <ruby.h>
|
9
|
+
#include <rb_glibtop.h>
|
10
|
+
#include <glibtop/ppp.h>
|
11
|
+
|
12
|
+
|
13
|
+
static VALUE rb_glibtop_ppp(VALUE self, VALUE device)
|
14
|
+
{
|
15
|
+
glibtop_ppp buf;
|
16
|
+
VALUE hash;
|
17
|
+
|
18
|
+
Check_Type(device, T_FIXNUM);
|
19
|
+
glibtop_get_ppp(&buf, FIX2INT(device));
|
20
|
+
|
21
|
+
hash = rb_hash_new();
|
22
|
+
|
23
|
+
rb_hash_aset(hash, rb_str_new2("flags"), rb_uint2inum(buf.flags));
|
24
|
+
rb_hash_aset(hash, rb_str_new2("state"), rb_uint2inum(buf.state));
|
25
|
+
rb_hash_aset(hash, rb_str_new2("bytes_in"), rb_uint2inum(buf.bytes_in));
|
26
|
+
rb_hash_aset(hash, rb_str_new2("bytes_out"), rb_uint2inum(buf.bytes_out));
|
27
|
+
|
28
|
+
return hash;
|
29
|
+
}
|
30
|
+
|
31
|
+
|
32
|
+
void Init_glibtop_ppp()
|
33
|
+
{
|
34
|
+
rb_define_const(cLibGTop, "PPP_STATE_UNKNOWN", INT2FIX(GLIBTOP_PPP_STATE_UNKNOWN));
|
35
|
+
rb_define_const(cLibGTop, "PPP_STATE_HANGUP", INT2FIX(GLIBTOP_PPP_STATE_HANGUP));
|
36
|
+
rb_define_const(cLibGTop, "PPP_STATE_ONLINE", INT2FIX(GLIBTOP_PPP_STATE_ONLINE));
|
37
|
+
|
38
|
+
rb_define_method(cLibGTop, "ppp", rb_glibtop_ppp, 1);
|
39
|
+
}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
/*
|
2
|
+
* GLibTop is a wrapper library of a libgtop-2.x
|
3
|
+
*
|
4
|
+
* @author DATE Ken <itacchi@gmail.com>
|
5
|
+
* @see http://rubyforge.org/projects/ruby-libgtop2/
|
6
|
+
*/
|
7
|
+
|
8
|
+
#include <ruby.h>
|
9
|
+
#include <rb_glibtop.h>
|
10
|
+
#include <glibtop/procargs.h>
|
11
|
+
|
12
|
+
|
13
|
+
static VALUE rb_glibtop_proc_args(VALUE self, VALUE pid)
|
14
|
+
{
|
15
|
+
glibtop_proc_args buf;
|
16
|
+
VALUE hash, str;
|
17
|
+
char *args;
|
18
|
+
int size;
|
19
|
+
|
20
|
+
args = glibtop_get_proc_args(&buf, NUM2LONG(pid), 0);
|
21
|
+
|
22
|
+
hash = rb_hash_new();
|
23
|
+
rb_hash_aset(hash, rb_str_new2("flags"), rb_uint2inum(buf.flags));
|
24
|
+
rb_hash_aset(hash, rb_str_new2("size"), rb_uint2inum(buf.size));
|
25
|
+
|
26
|
+
size = buf.size;
|
27
|
+
str = rb_str_new(args, size);
|
28
|
+
rb_hash_aset(hash, rb_str_new2("args"), str);
|
29
|
+
|
30
|
+
g_free(args);
|
31
|
+
|
32
|
+
return hash;
|
33
|
+
}
|
34
|
+
|
35
|
+
|
36
|
+
void Init_glibtop_proc_args()
|
37
|
+
{
|
38
|
+
rb_define_method(cLibGTop, "proc_args", rb_glibtop_proc_args, 1);
|
39
|
+
}
|
@@ -0,0 +1,50 @@
|
|
1
|
+
/*
|
2
|
+
* GLibTop is a wrapper library of a libgtop-2.x
|
3
|
+
*
|
4
|
+
* @author DATE Ken <itacchi@gmail.com>
|
5
|
+
* @see http://rubyforge.org/projects/ruby-libgtop2/
|
6
|
+
*/
|
7
|
+
|
8
|
+
#include <ruby.h>
|
9
|
+
#include <rb_glibtop.h>
|
10
|
+
#include <glibtop/prockernel.h>
|
11
|
+
|
12
|
+
|
13
|
+
static VALUE rb_glibtop_proc_kernel(VALUE self, VALUE pid)
|
14
|
+
{
|
15
|
+
glibtop_proc_kernel buf;
|
16
|
+
VALUE hash;
|
17
|
+
|
18
|
+
glibtop_get_proc_kernel(&buf, NUM2LONG(pid));
|
19
|
+
|
20
|
+
hash = rb_hash_new();
|
21
|
+
|
22
|
+
rb_hash_aset(hash, rb_str_new2("flags"), rb_uint2inum(buf.flags));
|
23
|
+
rb_hash_aset(hash, rb_str_new2("k_flags"), rb_uint2inum(buf.k_flags));
|
24
|
+
rb_hash_aset(hash, rb_str_new2("min_flt"), rb_uint2inum(buf.min_flt));
|
25
|
+
rb_hash_aset(hash, rb_str_new2("maj_flt"), rb_uint2inum(buf.maj_flt));
|
26
|
+
rb_hash_aset(hash, rb_str_new2("cmin_flt"), rb_uint2inum(buf.cmin_flt));
|
27
|
+
rb_hash_aset(hash, rb_str_new2("cmaj_flt"), rb_uint2inum(buf.cmaj_flt));
|
28
|
+
rb_hash_aset(hash, rb_str_new2("kstk_esp"), rb_uint2inum(buf.kstk_esp));
|
29
|
+
rb_hash_aset(hash, rb_str_new2("kstk_eip"), rb_uint2inum(buf.kstk_eip));
|
30
|
+
rb_hash_aset(hash, rb_str_new2("nwchan"), rb_uint2inum(buf.nwchan));
|
31
|
+
rb_hash_aset(hash, rb_str_new2("wchan"), rb_str_new2(buf.wchan));
|
32
|
+
|
33
|
+
return hash;
|
34
|
+
}
|
35
|
+
|
36
|
+
|
37
|
+
void Init_glibtop_proc_kernel()
|
38
|
+
{
|
39
|
+
/* mumumu, these constants were not found under the include/libgtop-2.0/ */
|
40
|
+
rb_define_const(cLibGTop, "KFLAGS_STARTING", INT2FIX(1));
|
41
|
+
rb_define_const(cLibGTop, "KFLAGS_EXITING", INT2FIX(2));
|
42
|
+
rb_define_const(cLibGTop, "KFLAGS_PTRACED", INT2FIX(4));
|
43
|
+
rb_define_const(cLibGTop, "KFLAGS_TRACESYS", INT2FIX(8));
|
44
|
+
rb_define_const(cLibGTop, "KFLAGS_FORKNOEXEC", INT2FIX(16));
|
45
|
+
rb_define_const(cLibGTop, "KFLAGS_SUPERPRIV", INT2FIX(32));
|
46
|
+
rb_define_const(cLibGTop, "KFLAGS_DUMPEDCORE", INT2FIX(64));
|
47
|
+
rb_define_const(cLibGTop, "KFLAGS_SIGNALED", INT2FIX(128));
|
48
|
+
|
49
|
+
rb_define_method(cLibGTop, "proc_kernel", rb_glibtop_proc_kernel, 1);
|
50
|
+
}
|
@@ -0,0 +1,69 @@
|
|
1
|
+
/*
|
2
|
+
* GLibTop is a wrapper library of a libgtop-2.x
|
3
|
+
*
|
4
|
+
* @author DATE Ken <itacchi@gmail.com>
|
5
|
+
* @see http://rubyforge.org/projects/ruby-libgtop2/
|
6
|
+
*/
|
7
|
+
|
8
|
+
#include <ruby.h>
|
9
|
+
#include <rb_glibtop.h>
|
10
|
+
#include <glibtop/procmap.h>
|
11
|
+
|
12
|
+
|
13
|
+
static VALUE rb_glibtop_proc_map(VALUE self, VALUE pid)
|
14
|
+
{
|
15
|
+
glibtop_proc_map buf;
|
16
|
+
glibtop_map_entry* map_entries_buf;
|
17
|
+
VALUE hash, map_entries, map_entry;
|
18
|
+
int i;
|
19
|
+
|
20
|
+
map_entries_buf = glibtop_get_proc_map(&buf, NUM2LONG(pid));
|
21
|
+
|
22
|
+
hash = rb_hash_new();
|
23
|
+
|
24
|
+
rb_hash_aset(hash, rb_str_new2("flags"), rb_uint2inum(buf.flags));
|
25
|
+
rb_hash_aset(hash, rb_str_new2("number"), rb_uint2inum(buf.number));
|
26
|
+
rb_hash_aset(hash, rb_str_new2("total"), rb_uint2inum(buf.total));
|
27
|
+
rb_hash_aset(hash, rb_str_new2("size"), rb_uint2inum(buf.size));
|
28
|
+
|
29
|
+
map_entries = rb_ary_new2(buf.number);
|
30
|
+
for (i = 0; i < buf.number; i++){
|
31
|
+
map_entry = rb_hash_new();
|
32
|
+
|
33
|
+
rb_hash_aset(map_entry, rb_str_new2("flags"), rb_uint2inum(map_entries_buf[i].flags));
|
34
|
+
rb_hash_aset(map_entry, rb_str_new2("start"), rb_uint2inum(map_entries_buf[i].start));
|
35
|
+
rb_hash_aset(map_entry, rb_str_new2("end"), rb_uint2inum(map_entries_buf[i].end));
|
36
|
+
rb_hash_aset(map_entry, rb_str_new2("offset"), rb_uint2inum(map_entries_buf[i].offset));
|
37
|
+
rb_hash_aset(map_entry, rb_str_new2("perm"), rb_uint2inum(map_entries_buf[i].perm));
|
38
|
+
rb_hash_aset(map_entry, rb_str_new2("inode"), rb_uint2inum(map_entries_buf[i].inode));
|
39
|
+
rb_hash_aset(map_entry, rb_str_new2("device"), rb_uint2inum(map_entries_buf[i].device));
|
40
|
+
rb_hash_aset(map_entry, rb_str_new2("filename"), rb_str_new2(map_entries_buf[i].filename));
|
41
|
+
|
42
|
+
rb_ary_push(map_entries, map_entry);
|
43
|
+
}
|
44
|
+
rb_hash_aset(hash, rb_str_new2("map_entries"), map_entries);
|
45
|
+
|
46
|
+
g_free(map_entries_buf);
|
47
|
+
|
48
|
+
return hash;
|
49
|
+
}
|
50
|
+
|
51
|
+
|
52
|
+
void Init_glibtop_proc_map()
|
53
|
+
{
|
54
|
+
rb_define_const(cLibGTop, "MAP_ENTRY_START", INT2FIX(GLIBTOP_MAP_ENTRY_START));
|
55
|
+
rb_define_const(cLibGTop, "MAP_ENTRY_END", INT2FIX(GLIBTOP_MAP_ENTRY_END));
|
56
|
+
rb_define_const(cLibGTop, "MAP_ENTRY_OFFSET", INT2FIX(GLIBTOP_MAP_ENTRY_OFFSET));
|
57
|
+
rb_define_const(cLibGTop, "MAP_ENTRY_PERM", INT2FIX(GLIBTOP_MAP_ENTRY_PERM));
|
58
|
+
rb_define_const(cLibGTop, "MAP_ENTRY_INODE", INT2FIX(GLIBTOP_MAP_ENTRY_INODE));
|
59
|
+
rb_define_const(cLibGTop, "MAP_ENTRY_DEVICE", INT2FIX(GLIBTOP_MAP_ENTRY_DEVICE));
|
60
|
+
rb_define_const(cLibGTop, "MAP_ENTRY_FILENAME", INT2FIX(GLIBTOP_MAP_ENTRY_FILENAME));
|
61
|
+
|
62
|
+
rb_define_const(cLibGTop, "MAP_PERM_READ", INT2FIX(GLIBTOP_MAP_PERM_READ));
|
63
|
+
rb_define_const(cLibGTop, "MAP_PERM_WRITE", INT2FIX(GLIBTOP_MAP_PERM_WRITE));
|
64
|
+
rb_define_const(cLibGTop, "MAP_PERM_EXECUTE", INT2FIX(GLIBTOP_MAP_PERM_EXECUTE));
|
65
|
+
rb_define_const(cLibGTop, "MAP_PERM_SHARED", INT2FIX(GLIBTOP_MAP_PERM_SHARED));
|
66
|
+
rb_define_const(cLibGTop, "MAP_PERM_PRIVATE", INT2FIX(GLIBTOP_MAP_PERM_PRIVATE));
|
67
|
+
|
68
|
+
rb_define_method(cLibGTop, "proc_map", rb_glibtop_proc_map, 1);
|
69
|
+
}
|