csigar 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/NOTICE +117 -0
  4. data/README +8 -0
  5. data/Rakefile +105 -0
  6. data/bindings/SigarBuild.pm +301 -0
  7. data/bindings/SigarWrapper.pm +2978 -0
  8. data/bindings/ruby/examples/arp.rb +24 -0
  9. data/bindings/ruby/examples/cpu_info.rb +35 -0
  10. data/bindings/ruby/examples/df.rb +49 -0
  11. data/bindings/ruby/examples/free.rb +36 -0
  12. data/bindings/ruby/examples/ifconfig.rb +101 -0
  13. data/bindings/ruby/examples/logging.rb +58 -0
  14. data/bindings/ruby/examples/net_info.rb +31 -0
  15. data/bindings/ruby/examples/netstat.rb +71 -0
  16. data/bindings/ruby/examples/pargs.rb +35 -0
  17. data/bindings/ruby/examples/penv.rb +31 -0
  18. data/bindings/ruby/examples/route.rb +48 -0
  19. data/bindings/ruby/examples/version.rb +40 -0
  20. data/bindings/ruby/examples/who.rb +30 -0
  21. data/bindings/ruby/extconf.rb +131 -0
  22. data/bindings/ruby/rbsigar.c +938 -0
  23. data/bindings/ruby/test/cpu_test.rb +40 -0
  24. data/bindings/ruby/test/file_system_test.rb +43 -0
  25. data/bindings/ruby/test/helper.rb +57 -0
  26. data/bindings/ruby/test/loadavg_test.rb +30 -0
  27. data/bindings/ruby/test/mem_test.rb +45 -0
  28. data/bindings/ruby/test/swap_test.rb +36 -0
  29. data/bindings/ruby/test/uptime_test.rb +26 -0
  30. data/include/sigar.h +943 -0
  31. data/include/sigar_fileinfo.h +157 -0
  32. data/include/sigar_format.h +65 -0
  33. data/include/sigar_getline.h +18 -0
  34. data/include/sigar_log.h +80 -0
  35. data/include/sigar_private.h +422 -0
  36. data/include/sigar_ptql.h +53 -0
  37. data/include/sigar_util.h +191 -0
  38. data/src/os/aix/aix_sigar.c +2151 -0
  39. data/src/os/aix/sigar_os.h +73 -0
  40. data/src/os/darwin/Info.plist.in +27 -0
  41. data/src/os/darwin/darwin_sigar.c +3711 -0
  42. data/src/os/darwin/sigar_os.h +80 -0
  43. data/src/os/hpux/hpux_sigar.c +1342 -0
  44. data/src/os/hpux/sigar_os.h +49 -0
  45. data/src/os/linux/linux_sigar.c +2782 -0
  46. data/src/os/linux/sigar_os.h +82 -0
  47. data/src/os/solaris/get_mib2.c +321 -0
  48. data/src/os/solaris/get_mib2.h +127 -0
  49. data/src/os/solaris/kstats.c +181 -0
  50. data/src/os/solaris/procfs.c +97 -0
  51. data/src/os/solaris/sigar_os.h +224 -0
  52. data/src/os/solaris/solaris_sigar.c +2717 -0
  53. data/src/os/win32/peb.c +212 -0
  54. data/src/os/win32/sigar.rc.in +40 -0
  55. data/src/os/win32/sigar_os.h +676 -0
  56. data/src/os/win32/sigar_pdh.h +47 -0
  57. data/src/os/win32/win32_sigar.c +3992 -0
  58. data/src/sigar.c +2428 -0
  59. data/src/sigar_cache.c +179 -0
  60. data/src/sigar_fileinfo.c +815 -0
  61. data/src/sigar_format.c +696 -0
  62. data/src/sigar_getline.c +1849 -0
  63. data/src/sigar_ptql.c +1967 -0
  64. data/src/sigar_signal.c +216 -0
  65. data/src/sigar_util.c +1060 -0
  66. data/src/sigar_version.c.in +22 -0
  67. data/src/sigar_version_autoconf.c.in +22 -0
  68. data/version.properties +11 -0
  69. metadata +112 -0
@@ -0,0 +1,31 @@
1
+ #
2
+ # Copyright (c) 2007, 2009 Hyperic, Inc.
3
+ # Copyright (c) 2010 VMware, Inc.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require 'sigar'
19
+
20
+ def output(sigar, pid)
21
+ env = sigar.proc_env(pid)
22
+ env.each do |key, val|
23
+ puts key + "=" + val
24
+ end
25
+ end
26
+
27
+ sigar = Sigar.new
28
+
29
+ ARGV.each do |pid|
30
+ output(sigar, pid)
31
+ end
@@ -0,0 +1,48 @@
1
+ #
2
+ # Copyright (c) 2009 SpringSource, Inc.
3
+ # Copyright (c) 2010 VMware, Inc.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require 'sigar'
19
+
20
+ def flags(flags)
21
+ f = ""
22
+ if (flags & Sigar::RTF_UP) != 0
23
+ f += "U"
24
+ end
25
+ if (flags & Sigar::RTF_GATEWAY) != 0
26
+ f += "G"
27
+ end
28
+ if (flags & Sigar::RTF_HOST) != 0
29
+ f += "H"
30
+ end
31
+ f
32
+ end
33
+
34
+ def gw(addr)
35
+ addr == "0.0.0.0" ? "*" : addr
36
+ end
37
+ def dest(addr)
38
+ addr == "0.0.0.0" ? "default" : addr
39
+ end
40
+
41
+ puts "Kernel IP routing table"
42
+ fmt = "%-15s %-15s %-15s %-5s %-6s %-3s %-s\n"
43
+ printf fmt, "Destination", "Gateway", "Genmask", "Flags", "Metric", "Ref", "Iface"
44
+
45
+ Sigar.new.net_route_list.each do |route|
46
+ printf fmt, dest(route.destination), gw(route.gateway), route.mask,
47
+ flags(route.flags), route.metric.to_s, route.refcnt.to_s, route.ifname
48
+ end
@@ -0,0 +1,40 @@
1
+ #
2
+ # Copyright (c) 2009 SpringSource, Inc.
3
+ # Copyright (c) 2010 VMware, Inc.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require 'sigar'
19
+ require 'rbconfig'
20
+
21
+ puts "Sigar version......." + Sigar::VERSION
22
+ puts "Build date.........." + Sigar::BUILD_DATE
23
+ puts "SCM rev............." + Sigar::SCM_REVISION
24
+
25
+ sys = Sigar.new.sys_info
26
+ puts "OS description......" + sys.description
27
+ puts "OS name............." + sys.name
28
+ puts "OS arch............." + sys.arch
29
+ puts "OS machine.........." + sys.machine
30
+ puts "OS version.........." + sys.version
31
+ puts "OS patch level......" + sys.patch_level
32
+ puts "OS vendor..........." + sys.vendor
33
+ puts "OS vendor version..." + sys.vendor_version
34
+ if (sys.vendor_code_name != nil)
35
+ puts "OS code name........" + sys.vendor_code_name
36
+ end
37
+
38
+ puts "Ruby version........" + RUBY_VERSION
39
+ puts "Ruby build vendor..." + ::Config::CONFIG['build_vendor']
40
+ puts "Ruby archdir........" + ::Config::CONFIG['archdir']
@@ -0,0 +1,30 @@
1
+ #
2
+ # Copyright (c) 2007 Hyperic, Inc.
3
+ # Copyright (c) 2010 VMware, Inc.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require 'sigar'
19
+
20
+ def format_time(who)
21
+ return Time.at(who.time).strftime("%b %e %H:%M")
22
+ end
23
+
24
+ sigar = Sigar.new
25
+
26
+ whos = sigar.who_list
27
+
28
+ whos.each do |who|
29
+ puts who.user + "\t" + who.device + "\t" + format_time(who) + who.host
30
+ end
@@ -0,0 +1,131 @@
1
+ #
2
+ # Copyright (c) 2007, 2009 Hyperic, Inc.
3
+ # Copyright (c) 2009 SpringSource, Inc.
4
+ # Copyright (c) 2010-2012 VMware, Inc.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'mkmf'
20
+ require 'rbconfig'
21
+
22
+ extension_name = 'csigar'
23
+
24
+ print 'Ruby platform=' + RUBY_PLATFORM + "\n"
25
+
26
+ case RUBY_PLATFORM
27
+ when /darwin/
28
+ os = 'darwin'
29
+ if File.file?("/usr/include/libproc.h")
30
+ $CPPFLAGS += ' -DDARWIN_HAS_LIBPROC_H'
31
+ end
32
+ $CPPFLAGS += ' -DDARWIN'
33
+ $LDFLAGS += ' -framework CoreServices -framework IOKit'
34
+ when /bsd/
35
+ os = 'darwin'
36
+ have_library("kvm")
37
+ when /mswin|mingw|cygwin|bccwin/
38
+ os = 'win32'
39
+ require 'ftools'
40
+ $CPPFLAGS += ' -DWIN32'
41
+ is_win32 = true
42
+ have_library("kernel32")
43
+ have_library("user32")
44
+ have_library("advapi32")
45
+ have_library("ws2_32")
46
+ have_library("netapi32")
47
+ have_library("shell32")
48
+ have_library("pdh")
49
+ have_library("version")
50
+ when /linux/
51
+ os = 'linux'
52
+ when /solaris|sun/
53
+ os = 'solaris'
54
+ have_library("nsl")
55
+ have_library("socket")
56
+ have_library("kstat")
57
+ when /hpux/
58
+ os = 'hpux'
59
+ #XXX have_libary no workie on hpux?
60
+ $LDFLAGS += ' -lnsl -lnm'
61
+ when /aix/
62
+ os = 'aix'
63
+ have_library("odm")
64
+ have_library("cfg")
65
+ have_library("perfstat")
66
+ else
67
+ os = RUBY_PLATFORM
68
+ end
69
+
70
+ osdir = "../../src/os/#{os}"
71
+ $CPPFLAGS += ' -I../../include' + ' -I' + osdir
72
+ $CPPFLAGS += ' -U_FILE_OFFSET_BITS' unless is_win32
73
+
74
+ if RUBY_VERSION > '1.8.4'
75
+ $CPPFLAGS += ' -DRB_HAS_RE_ERROR'
76
+ end
77
+ if RUBY_VERSION >= '1.9.0'
78
+ $CPPFLAGS += ' -DRB_RUBY_19'
79
+ end
80
+
81
+ #incase of nfs shared dir...
82
+ unless is_win32
83
+ if File.exist?('Makefile')
84
+ cmd = 'make distclean'
85
+ print cmd + "\n"
86
+ system(cmd)
87
+ end
88
+ Dir["./*.c"].each do |file|
89
+ if File.lstat(file).symlink?
90
+ print "unlink #{file}\n"
91
+ File.delete(file)
92
+ end
93
+ end
94
+ end
95
+
96
+ $distcleanfiles = ['rbsigar_generated.rx','sigar_version.c']
97
+
98
+ system('perl -Mlib=.. -MSigarWrapper -e generate Ruby .')
99
+ libname = extension_name + '.' + CONFIG['DLEXT']
100
+ filters =
101
+ 'ARCHNAME=' + RUBY_PLATFORM + ' ' +
102
+ 'ARCHLIB=' + libname + ' ' +
103
+ 'BINNAME=' + libname
104
+
105
+ system('perl -Mlib=.. -MSigarBuild -e version_file ' + filters)
106
+
107
+ if is_win32
108
+ system('perl -Mlib=.. -MSigarBuild -e resource_file ' + filters)
109
+ system('rc /r sigar.rc')
110
+ $LDFLAGS += ' sigar.res'
111
+ $distcleanfiles << ['sigar.rc', 'sigar.res']
112
+ #do not want dynamic runtime else "MSVCR80.dll was not found"
113
+ $CFLAGS = $CFLAGS.gsub('-MD', '')
114
+ end
115
+
116
+ #XXX seems mkmf forces basename on srcs
117
+ #XXX should be linking against libsigar anyhow
118
+ (Dir["../../src/*.c"] + Dir["#{osdir}/*.c"] + Dir["#{osdir}/*.cpp"]).each do |file|
119
+ cf = File.basename(file)
120
+ print file + ' -> ' + cf + "\n"
121
+ if is_win32
122
+ File.copy(file, cf)
123
+ else
124
+ File.symlink(file, cf) unless File.file?(cf)
125
+ end
126
+ $distcleanfiles.push(cf)
127
+ end
128
+
129
+ dir_config(extension_name)
130
+
131
+ create_makefile(extension_name)
@@ -0,0 +1,938 @@
1
+ /*
2
+ * Copyright (c) 2007-2009 Hyperic, Inc.
3
+ * Copyright (c) 2009 SpringSource, Inc.
4
+ * Copyright (c) 2009-2010 VMware, Inc.
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ #include <ruby.h>
20
+ #ifdef RB_RUBY_19
21
+ #include <ruby/re.h>
22
+ #else
23
+ #include <re.h>
24
+ #endif
25
+
26
+ #ifdef __linux__
27
+ #include <unistd.h>
28
+ #endif
29
+ #ifdef WIN32
30
+ #include <windows.h>
31
+ #endif
32
+
33
+ #include <errno.h>
34
+ #include "sigar.h"
35
+ #include "sigar_fileinfo.h"
36
+ #include "sigar_log.h"
37
+ #include "sigar_format.h"
38
+ #include "sigar_ptql.h"
39
+
40
+ #define RB_SIGAR_RAISE(msg) rb_raise(rb_eArgError, "%s", msg)
41
+ #define RB_SIGAR_CROAK RB_SIGAR_RAISE(sigar_strerror(sigar, status))
42
+ #define OBJ2PID(pid) rb_sigar_pid_get(rbsigar, pid)
43
+
44
+ #ifndef RSTRING_PTR
45
+ #define RSTRING_PTR(s) RSTRING(s)->ptr
46
+ #endif
47
+
48
+ #ifndef RSTRING_LEN
49
+ #define RSTRING_LEN(s) RSTRING(s)->len
50
+ #endif
51
+
52
+ #ifdef RB_HAS_RE_ERROR
53
+ # define RB_REGEX_ERROR rb_eRegexpError
54
+ #else
55
+ # define RB_REGEX_ERROR rb_eArgError
56
+ #endif
57
+
58
+ #define SIGAR \
59
+ sigar_t *sigar = rbsigar->sigar
60
+
61
+ #define SIGAR_GET \
62
+ rb_sigar_t *rbsigar = rb_sigar_get(obj); \
63
+ SIGAR
64
+
65
+ typedef struct {
66
+ sigar_t *sigar;
67
+ VALUE logger;
68
+ } rb_sigar_t;
69
+
70
+ static rb_sigar_t *rb_sigar_get(VALUE obj)
71
+ {
72
+ rb_sigar_t *rbsigar;
73
+ Data_Get_Struct(obj, rb_sigar_t, rbsigar);
74
+ return rbsigar;
75
+ }
76
+
77
+ static int rbsigar_ptql_re_impl(void *data,
78
+ char *haystack, char *needle)
79
+ {
80
+ #ifdef RB_RUBY_19
81
+ /* XXX no more regex.h */
82
+ return 0;
83
+ #else
84
+ struct re_pattern_buffer *regex;
85
+ int len = strlen(haystack);
86
+ int retval;
87
+ const char *err;
88
+
89
+ regex = ALLOC(struct re_pattern_buffer);
90
+ MEMZERO((char *)regex, struct re_pattern_buffer, 1);
91
+ /* XXX cache */
92
+ if ((err = re_compile_pattern(needle, strlen(needle), regex))) {
93
+ re_free_pattern(regex);
94
+ rb_raise(RB_REGEX_ERROR, "%s", err);
95
+ return 0;
96
+ }
97
+
98
+ retval = re_match(regex, haystack, len, 0, NULL);
99
+ re_free_pattern(regex);
100
+ return retval > 0;
101
+ #endif
102
+ }
103
+
104
+ #define sigar_isdigit(c) \
105
+ (isdigit(((unsigned char)(c))))
106
+
107
+ static sigar_pid_t rb_sigar_pid_get(rb_sigar_t *rbsigar, VALUE obj)
108
+ {
109
+ SIGAR;
110
+
111
+ if (TYPE(obj) == T_STRING) {
112
+ char *pid = StringValuePtr(obj);
113
+
114
+ if (sigar_isdigit(*pid)) {
115
+ obj = rb_str2inum(obj, 10);
116
+ /* fallthru */
117
+ }
118
+ else if ((RSTRING_LEN(obj) == 2) &&
119
+ (*pid == '$') && (*(pid + 1) == '$'))
120
+ {
121
+ return sigar_pid_get(sigar);
122
+ }
123
+ else {
124
+ /* XXX cache queries */
125
+ sigar_ptql_query_t *query;
126
+ sigar_ptql_error_t error;
127
+ int status =
128
+ sigar_ptql_query_create(&query, (char *)pid, &error);
129
+
130
+ if (status == SIGAR_OK) {
131
+ sigar_pid_t qpid;
132
+
133
+ sigar_ptql_re_impl_set(sigar, NULL, rbsigar_ptql_re_impl);
134
+ status = sigar_ptql_query_find_process(sigar, query, &qpid);
135
+ sigar_ptql_re_impl_set(sigar, NULL, NULL);
136
+ sigar_ptql_query_destroy(query);
137
+ if (status == SIGAR_OK) {
138
+ return qpid;
139
+ }
140
+ else {
141
+ RB_SIGAR_RAISE(sigar_strerror(sigar, status));
142
+ }
143
+ }
144
+ else {
145
+ RB_SIGAR_RAISE(error.message);
146
+ }
147
+ }
148
+ }
149
+ return NUM2UINT(obj);
150
+ }
151
+
152
+ static void rb_sigar_free(void *obj)
153
+ {
154
+ xfree(obj);
155
+ }
156
+
157
+ static void rb_sigar_close(rb_sigar_t *rbsigar)
158
+ {
159
+ sigar_close(rbsigar->sigar);
160
+ rb_sigar_free(rbsigar);
161
+ }
162
+
163
+ static void rb_sigar_mark(rb_sigar_t *rbsigar)
164
+ {
165
+ rb_gc_mark(rbsigar->logger);
166
+ }
167
+
168
+ static VALUE rb_sigar_new(VALUE module)
169
+ {
170
+ rb_sigar_t *rbsigar;
171
+ rbsigar = ALLOC(rb_sigar_t);
172
+ sigar_open(&(rbsigar->sigar));
173
+ return Data_Wrap_Struct(module, rb_sigar_mark, rb_sigar_close, rbsigar);
174
+ }
175
+
176
+ static VALUE rb_sigar_format_size(VALUE rclass, VALUE size)
177
+ {
178
+ char buffer[56];
179
+ return rb_str_new2(sigar_format_size(NUM2LL(size), buffer));
180
+ }
181
+
182
+ static VALUE rb_sigar_net_interface_flags_to_s(VALUE rclass, VALUE flags)
183
+ {
184
+ char buffer[1024];
185
+ return rb_str_new2(sigar_net_interface_flags_to_string(NUM2LL(flags), buffer));
186
+ }
187
+
188
+ static VALUE rb_sigar_net_connection_type_to_s(VALUE rclass, VALUE type)
189
+ {
190
+ return rb_str_new2(sigar_net_connection_type_get(NUM2INT(type)));
191
+ }
192
+
193
+ static VALUE rb_sigar_net_connection_state_to_s(VALUE rclass, VALUE state)
194
+ {
195
+ return rb_str_new2(sigar_net_connection_state_get(NUM2INT(state)));
196
+ }
197
+
198
+ static VALUE rb_sigar_net_address_to_string(sigar_net_address_t *address)
199
+ {
200
+ char addr_str[SIGAR_INET6_ADDRSTRLEN];
201
+ sigar_net_address_to_string(NULL, address, addr_str);
202
+ return rb_str_new2(addr_str);
203
+ }
204
+
205
+ static VALUE rb_sigar_net_scope_to_s(VALUE rclass, VALUE type)
206
+ {
207
+ return rb_str_new2(sigar_net_scope_to_string(NUM2INT(type)));
208
+ }
209
+
210
+ #define rb_sigar_net_address_to_s(a) rb_sigar_net_address_to_string(&a)
211
+
212
+ static VALUE rb_sigar_new_list(char *data, unsigned long number,
213
+ int size, VALUE rclass)
214
+ {
215
+ unsigned long i;
216
+ VALUE av = rb_ary_new2(number);
217
+
218
+ for (i=0; i<number; i++, data += size) {
219
+ void *ent = malloc(size);
220
+
221
+ memcpy(ent, data, size);
222
+ rb_ary_push(av, Data_Wrap_Struct(rclass, 0, free, ent));
223
+ }
224
+
225
+ return av;
226
+ }
227
+
228
+ static VALUE rb_sigar_new_strlist(char **data, unsigned long number)
229
+ {
230
+ unsigned long i;
231
+ VALUE av = rb_ary_new2(number);
232
+
233
+ for (i=0; i<number; i++) {
234
+ rb_ary_push(av, rb_str_new2(data[i]));
235
+ }
236
+
237
+ return av;
238
+ }
239
+
240
+ static VALUE rb_sigar_new_intlist(int *data, int number)
241
+ {
242
+ int i;
243
+ VALUE av = rb_ary_new2(number);
244
+
245
+ for (i=0; i<number; i++) {
246
+ rb_ary_push(av, rb_int2inum(data[i]));
247
+ }
248
+
249
+ return av;
250
+ }
251
+
252
+ static VALUE rb_sigar_new_doublelist(double *data, int number)
253
+ {
254
+ int i;
255
+ VALUE av = rb_ary_new2(number);
256
+
257
+ for (i=0; i<number; i++) {
258
+ rb_ary_push(av, rb_float_new(data[i]));
259
+ }
260
+
261
+ return av;
262
+ }
263
+
264
+ static VALUE rb_sigar_net_interface_list(VALUE obj)
265
+ {
266
+ SIGAR_GET;
267
+
268
+ int status;
269
+ sigar_net_interface_list_t iflist;
270
+ VALUE RETVAL;
271
+
272
+ status = sigar_net_interface_list_get(sigar, &iflist);
273
+ if (status != SIGAR_OK) {
274
+ RB_SIGAR_CROAK;
275
+ }
276
+
277
+ RETVAL = rb_sigar_new_strlist(iflist.data, iflist.number);
278
+
279
+ sigar_net_interface_list_destroy(sigar, &iflist);
280
+
281
+ return RETVAL;
282
+ }
283
+
284
+ static int rb_sigar_str2net_address(VALUE bytes, sigar_net_address_t *address)
285
+ {
286
+ long len = RSTRING_LEN(bytes);
287
+
288
+ switch (len) {
289
+ case 4:
290
+ address->family = SIGAR_AF_INET;
291
+ break;
292
+ case 4*4:
293
+ address->family = SIGAR_AF_INET6;
294
+ break;
295
+ default:
296
+ return EINVAL;
297
+ }
298
+
299
+ memcpy(RSTRING_PTR(bytes), &address->addr.in6, len);
300
+
301
+ return SIGAR_OK;
302
+ }
303
+
304
+ static VALUE rb_cSigarNetStat;
305
+
306
+ static VALUE rb_sigar_net_stat_get(VALUE obj, VALUE flags, VALUE bytes, int port)
307
+ {
308
+ SIGAR_GET;
309
+
310
+ int status;
311
+ int has_port = (port != -1);
312
+ sigar_net_stat_t *RETVAL = malloc(sizeof(*RETVAL));
313
+ sigar_net_address_t address;
314
+
315
+ if (has_port) {
316
+ status = rb_sigar_str2net_address(bytes, &address);
317
+ if (status == SIGAR_OK) {
318
+ status = sigar_net_stat_port_get(sigar, RETVAL, NUM2INT(flags),
319
+ &address, port);
320
+ }
321
+ }
322
+ else {
323
+ status = sigar_net_stat_get(sigar, RETVAL, NUM2INT(flags));
324
+ }
325
+
326
+ if (status != SIGAR_OK) {
327
+ free(RETVAL);
328
+ RB_SIGAR_CROAK;
329
+ }
330
+
331
+ return Data_Wrap_Struct(rb_cSigarNetStat, 0, rb_sigar_free, RETVAL);
332
+ }
333
+
334
+ static VALUE rb_sigar_net_stat(VALUE obj, VALUE flags)
335
+ {
336
+ return rb_sigar_net_stat_get(obj, flags, Qnil, -1);
337
+ }
338
+
339
+ static VALUE rb_sigar_net_stat_port(VALUE obj, VALUE flags, VALUE address, VALUE port)
340
+ {
341
+ return rb_sigar_net_stat_get(obj, flags, address, NUM2INT(port));
342
+ }
343
+
344
+ static VALUE rb_sigar_NetStat_tcp_states(VALUE self)
345
+ {
346
+ sigar_net_stat_t *net_stat;
347
+
348
+ Data_Get_Struct(self, sigar_net_stat_t, net_stat);
349
+
350
+ return rb_sigar_new_intlist(&net_stat->tcp_states[0], SIGAR_TCP_UNKNOWN);
351
+ }
352
+
353
+ static VALUE rb_cSigarNetConnection;
354
+
355
+ static VALUE rb_sigar_net_connection_list(VALUE obj, VALUE flags)
356
+ {
357
+ SIGAR_GET;
358
+
359
+ int status;
360
+ sigar_net_connection_list_t connlist;
361
+ VALUE RETVAL;
362
+
363
+ status = sigar_net_connection_list_get(sigar, &connlist, NUM2UINT(flags));
364
+
365
+ if (status != SIGAR_OK) {
366
+ RB_SIGAR_CROAK;
367
+ }
368
+
369
+ RETVAL = rb_sigar_new_list((char *)&connlist.data[0],
370
+ connlist.number,
371
+ sizeof(*connlist.data),
372
+ rb_cSigarNetConnection);
373
+
374
+ sigar_net_connection_list_destroy(sigar, &connlist);
375
+
376
+ return RETVAL;
377
+ }
378
+
379
+ static VALUE rb_sigar_net_services_name(VALUE obj, VALUE protocol, VALUE port)
380
+ {
381
+ SIGAR_GET;
382
+
383
+ char *name;
384
+
385
+ if ((name = sigar_net_services_name_get(sigar, NUM2UINT(protocol), NUM2UINT(port)))) {
386
+ return rb_str_new2(name);
387
+ }
388
+ else {
389
+ return Qnil;
390
+ }
391
+ }
392
+
393
+ static VALUE rb_cSigarCpuInfo;
394
+
395
+ static VALUE rb_sigar_cpu_info_list(VALUE obj)
396
+ {
397
+ SIGAR_GET;
398
+
399
+ int status;
400
+ sigar_cpu_info_list_t cpu_infos;
401
+ VALUE RETVAL;
402
+
403
+ status = sigar_cpu_info_list_get(sigar, &cpu_infos);
404
+ if (status != SIGAR_OK) {
405
+ RB_SIGAR_CROAK;
406
+ }
407
+
408
+ RETVAL = rb_sigar_new_list((char *)&cpu_infos.data[0],
409
+ cpu_infos.number,
410
+ sizeof(*cpu_infos.data),
411
+ rb_cSigarCpuInfo);
412
+
413
+ sigar_cpu_info_list_destroy(sigar, &cpu_infos);
414
+
415
+ return RETVAL;
416
+ }
417
+
418
+ static VALUE rb_sigar_loadavg(VALUE obj)
419
+ {
420
+ SIGAR_GET;
421
+
422
+ int status;
423
+ sigar_loadavg_t loadavg;
424
+
425
+ status = sigar_loadavg_get(sigar, &loadavg);
426
+ if (status != SIGAR_OK) {
427
+ RB_SIGAR_CROAK;
428
+ }
429
+
430
+ return rb_sigar_new_doublelist(&loadavg.loadavg[0], 3);
431
+ }
432
+
433
+ static void mySleep(int sleepMs)
434
+ {
435
+ #ifdef __linux__
436
+ usleep(sleepMs * 1000); // usleep takes sleep time in us
437
+ #endif
438
+ #ifdef WIN32
439
+ Sleep(sleepMs);
440
+ #endif
441
+ }
442
+
443
+ static VALUE rb_cSigarCpuPerc;
444
+
445
+ static VALUE rb_sigar_cpu_perc(VALUE obj)
446
+ {
447
+ SIGAR_GET;
448
+
449
+ int status;
450
+ sigar_t *sigarcpu;
451
+ sigar_cpu_t cpu1;
452
+ sigar_cpu_t cpu2;
453
+ sigar_cpu_perc_t *RETVAL = malloc(sizeof(*RETVAL));
454
+
455
+ sigar_open(&sigarcpu);
456
+ sigar_cpu_get(sigarcpu, &cpu1);
457
+ sigar_close(sigarcpu);
458
+
459
+ // this comes from the pause definition in Sigar.java
460
+ // no other rational behind the 500 setting
461
+ mySleep(500);
462
+
463
+ sigar_open(&sigarcpu);
464
+ sigar_cpu_get(sigarcpu, &cpu2);
465
+ sigar_close(sigarcpu);
466
+
467
+ if ((status = sigar_cpu_perc_calculate(&cpu1, &cpu2, RETVAL)) != SIGAR_OK) {
468
+ free(RETVAL);
469
+ rb_raise(rb_eArgError, "%s", sigar_strerror(sigar, status));
470
+ return Qnil;
471
+ }
472
+
473
+ return Data_Wrap_Struct(rb_cSigarCpuPerc, 0, rb_sigar_free, RETVAL);
474
+ }
475
+
476
+ static VALUE rb_cSigarFileSystem;
477
+
478
+ static VALUE rb_sigar_file_system_list(VALUE obj)
479
+ {
480
+ SIGAR_GET;
481
+
482
+ int status;
483
+ sigar_file_system_list_t fslist;
484
+ VALUE RETVAL;
485
+
486
+ status = sigar_file_system_list_get(sigar, &fslist);
487
+ if (status != SIGAR_OK) {
488
+ RB_SIGAR_CROAK;
489
+ }
490
+
491
+ RETVAL = rb_sigar_new_list((char *)&fslist.data[0],
492
+ fslist.number,
493
+ sizeof(*fslist.data),
494
+ rb_cSigarFileSystem);
495
+
496
+ sigar_file_system_list_destroy(sigar, &fslist);
497
+
498
+ return RETVAL;
499
+ }
500
+
501
+ static VALUE rb_cSigarArp;
502
+
503
+ static VALUE rb_sigar_arp_list(VALUE obj)
504
+ {
505
+ SIGAR_GET;
506
+
507
+ int status;
508
+ sigar_arp_list_t list;
509
+ VALUE RETVAL;
510
+
511
+ status = sigar_arp_list_get(sigar, &list);
512
+ if (status != SIGAR_OK) {
513
+ RB_SIGAR_CROAK;
514
+ }
515
+
516
+ RETVAL = rb_sigar_new_list((char *)&list.data[0],
517
+ list.number,
518
+ sizeof(*list.data),
519
+ rb_cSigarArp);
520
+
521
+ sigar_arp_list_destroy(sigar, &list);
522
+
523
+ return RETVAL;
524
+ }
525
+
526
+ static VALUE rb_cSigarWho;
527
+
528
+ static VALUE rb_sigar_who_list(VALUE obj)
529
+ {
530
+ SIGAR_GET;
531
+
532
+ int status;
533
+ sigar_who_list_t list;
534
+ VALUE RETVAL;
535
+
536
+ status = sigar_who_list_get(sigar, &list);
537
+ if (status != SIGAR_OK) {
538
+ RB_SIGAR_CROAK;
539
+ }
540
+
541
+ RETVAL = rb_sigar_new_list((char *)&list.data[0],
542
+ list.number,
543
+ sizeof(*list.data),
544
+ rb_cSigarWho);
545
+
546
+ sigar_who_list_destroy(sigar, &list);
547
+
548
+ return RETVAL;
549
+ }
550
+
551
+ static VALUE rb_cSigarNetRoute;
552
+
553
+ static VALUE rb_sigar_net_route_list(VALUE obj)
554
+ {
555
+ SIGAR_GET;
556
+
557
+ int status;
558
+ sigar_net_route_list_t list;
559
+ VALUE RETVAL;
560
+
561
+ status = sigar_net_route_list_get(sigar, &list);
562
+ if (status != SIGAR_OK) {
563
+ RB_SIGAR_CROAK;
564
+ }
565
+
566
+ RETVAL = rb_sigar_new_list((char *)&list.data[0],
567
+ list.number,
568
+ sizeof(*list.data),
569
+ rb_cSigarNetRoute);
570
+
571
+ sigar_net_route_list_destroy(sigar, &list);
572
+
573
+ return RETVAL;
574
+ }
575
+
576
+ static VALUE rb_sigar_proc_list(int argc, VALUE *argv, VALUE obj)
577
+ {
578
+ SIGAR_GET;
579
+
580
+ int status;
581
+ sigar_proc_list_t list;
582
+ VALUE RETVAL;
583
+ VALUE vptql;
584
+
585
+ rb_scan_args(argc, argv, "01", &vptql);
586
+ if (NIL_P(vptql)) {
587
+ status = sigar_proc_list_get(sigar, &list);
588
+
589
+ if (status != SIGAR_OK) {
590
+ RB_SIGAR_CROAK;
591
+ }
592
+ }
593
+ else {
594
+ sigar_ptql_query_t *query;
595
+ sigar_ptql_error_t error;
596
+ char *ptql = StringValuePtr(vptql);
597
+
598
+ status = sigar_ptql_query_create(&query, ptql, &error);
599
+
600
+ if (status != SIGAR_OK) {
601
+ RB_SIGAR_RAISE(error.message);
602
+ }
603
+ sigar_ptql_re_impl_set(sigar, NULL, rbsigar_ptql_re_impl);
604
+ status = sigar_ptql_query_find(sigar, query, &list);
605
+ sigar_ptql_re_impl_set(sigar, NULL, NULL);
606
+ sigar_ptql_query_destroy(query);
607
+ if (status != SIGAR_OK) {
608
+ RB_SIGAR_RAISE(sigar_strerror(sigar, status));
609
+ }
610
+ }
611
+
612
+ RETVAL = rb_sigar_new_intlist(&list.data[0],
613
+ list.number);
614
+
615
+ sigar_proc_list_destroy(sigar, &list);
616
+
617
+ return RETVAL;
618
+ }
619
+
620
+ static VALUE rb_sigar_proc_args(VALUE obj, VALUE pid)
621
+ {
622
+ SIGAR_GET;
623
+
624
+ int status;
625
+ sigar_proc_args_t args;
626
+ VALUE RETVAL;
627
+
628
+ status = sigar_proc_args_get(sigar, OBJ2PID(pid), &args);
629
+
630
+ if (status != SIGAR_OK) {
631
+ RB_SIGAR_CROAK;
632
+ }
633
+
634
+ RETVAL = rb_sigar_new_strlist(args.data, args.number);
635
+
636
+ sigar_proc_args_destroy(sigar, &args);
637
+
638
+ return RETVAL;
639
+ }
640
+
641
+ static int rb_sigar_env_getall(void *data,
642
+ const char *key, int klen,
643
+ char *val, int vlen)
644
+ {
645
+ rb_hash_aset(*((VALUE*)data),
646
+ rb_str_new(key, klen),
647
+ rb_str_new(val, vlen));
648
+ return SIGAR_OK;
649
+ }
650
+
651
+ static VALUE rb_sigar_proc_port(VALUE obj, VALUE protocol, VALUE port)
652
+ {
653
+ SIGAR_GET;
654
+
655
+ int status;
656
+ sigar_pid_t RETVAL;
657
+
658
+ status = sigar_proc_port_get(sigar, NUM2INT(protocol), NUM2LL(port), &RETVAL);
659
+ if (status != SIGAR_OK) {
660
+ RB_SIGAR_CROAK;
661
+ }
662
+
663
+ return rb_int2inum(RETVAL);
664
+ }
665
+
666
+ static VALUE rb_sigar_proc_env(VALUE obj, VALUE pid)
667
+ {
668
+ SIGAR_GET;
669
+
670
+ int status;
671
+ sigar_proc_env_t procenv;
672
+ VALUE RETVAL = rb_hash_new();
673
+
674
+ procenv.type = SIGAR_PROC_ENV_ALL;
675
+ procenv.env_getter = rb_sigar_env_getall;
676
+ procenv.data = &RETVAL;
677
+
678
+ status = sigar_proc_env_get(sigar, OBJ2PID(pid), &procenv);
679
+ if (status != SIGAR_OK) {
680
+ RB_SIGAR_CROAK;
681
+ }
682
+
683
+ return RETVAL;
684
+ }
685
+
686
+ VALUE rb = Qnil;
687
+
688
+ static const char *logger_consts[] = {
689
+ "FATAL", /* SIGAR_LOG_FATAL */
690
+ "ERROR", /* SIGAR_LOG_ERROR */
691
+ "WARN", /* SIGAR_LOG_WARN */
692
+ "INFO", /* SIGAR_LOG_INFO */
693
+ "DEBUG", /* SIGAR_LOG_DEBUG */
694
+ "DEBUG", /* SIGAR_LOG_TRACE */
695
+ };
696
+
697
+ static void rb_sigar_logger_impl(sigar_t *sigar, void *data,
698
+ int level, char *message)
699
+ {
700
+ rb_sigar_t *rbsigar = ((rb_sigar_t*)data);
701
+ VALUE logger = rbsigar->logger;
702
+
703
+ /* XXX: cost of this, better way? */
704
+ VALUE logger_const = rb_const_get(rb_cObject, rb_intern("Logger"));
705
+ VALUE logger_level = rb_const_get(logger_const,
706
+ rb_intern(logger_consts[level]));
707
+ VALUE msg = rb_str_new2(message);
708
+
709
+ rb_funcall(logger, rb_intern ("add"), 2, logger_level, msg);
710
+
711
+ return;
712
+ }
713
+
714
+ static void rb_sigar_proc_impl(sigar_t *sigar, void *data,
715
+ int level, char *message)
716
+ {
717
+ rb_sigar_t *rbsigar = ((rb_sigar_t*)data);
718
+ VALUE logger = rbsigar->logger;
719
+
720
+ rb_funcall(logger, rb_intern("call"), 2, INT2FIX(level), rb_str_new2(message));
721
+
722
+ return;
723
+ }
724
+
725
+ static VALUE rb_sigar_logger(VALUE obj)
726
+ {
727
+ rb_sigar_t *rbsigar = rb_sigar_get(obj);
728
+
729
+ return rbsigar->logger;
730
+ }
731
+
732
+ static VALUE rb_sigar_set_logger(VALUE obj, VALUE logger)
733
+ {
734
+ SIGAR_GET;
735
+
736
+ if (rb_obj_is_kind_of(logger, rb_cProc) ||
737
+ rb_respond_to(logger, rb_intern("call"))) {
738
+
739
+ sigar_log_impl_set(sigar, rbsigar, rb_sigar_proc_impl);
740
+ rbsigar->logger = logger;
741
+
742
+ return obj;
743
+ }
744
+
745
+ /* Have to load Logger to test for it properly */
746
+ rb_require("logger");
747
+ if (rb_obj_is_kind_of(logger, rb_path2class("Logger"))) {
748
+ sigar_log_impl_set(sigar, rbsigar, rb_sigar_logger_impl);
749
+ rbsigar->logger = logger;
750
+ }
751
+ else {
752
+ rb_raise(rb_eArgError,
753
+ "value is not a proc object or subclass of Logger");
754
+ }
755
+
756
+ return obj;
757
+ }
758
+
759
+ static VALUE rb_sigar_log_level(VALUE obj)
760
+ {
761
+ SIGAR_GET;
762
+
763
+ return INT2FIX(sigar_log_level_get(sigar));
764
+ }
765
+
766
+ static VALUE rb_sigar_set_log_level(VALUE obj, VALUE level)
767
+ {
768
+ SIGAR_GET;
769
+
770
+ sigar_log_level_set(sigar, NUM2INT(level));
771
+
772
+ return obj;
773
+ }
774
+
775
+ static VALUE rb_sigar_fqdn(VALUE obj)
776
+ {
777
+ SIGAR_GET;
778
+
779
+ char fqdn[SIGAR_FQDN_LEN];
780
+ int status;
781
+
782
+ if ((status = sigar_fqdn_get(sigar, fqdn, sizeof(fqdn))) != SIGAR_OK) {
783
+ RB_SIGAR_CROAK;
784
+ }
785
+
786
+ return rb_str_new2(fqdn);
787
+ }
788
+
789
+ #include "./rbsigar_generated.rx"
790
+
791
+ static VALUE rb_sigar_cpu_list(VALUE obj)
792
+ {
793
+ SIGAR_GET;
794
+
795
+ int status;
796
+ sigar_cpu_list_t cpus;
797
+ VALUE RETVAL;
798
+
799
+ status = sigar_cpu_list_get(sigar, &cpus);
800
+ if (status != SIGAR_OK) {
801
+ RB_SIGAR_CROAK;
802
+ }
803
+
804
+ RETVAL = rb_sigar_new_list((char *)&cpus.data[0],
805
+ cpus.number,
806
+ sizeof(*cpus.data),
807
+ rb_cSigarCpu);
808
+
809
+ sigar_cpu_list_destroy(sigar, &cpus);
810
+
811
+ return RETVAL;
812
+ }
813
+
814
+ #define RB_SIGAR_CONST_INT(name) \
815
+ rb_define_const(rclass, #name, INT2FIX(SIGAR_##name))
816
+
817
+ #define RB_SIGAR_DEFINE_CONST_STR(name, value) \
818
+ rb_define_const(rclass, name, rb_obj_freeze(rb_str_new2(value)))
819
+
820
+ #define RB_SIGAR_CONST_STR(name) \
821
+ rb_define_const(rclass, #name, rb_obj_freeze(rb_str_new2(SIGAR_##name)))
822
+
823
+ static void Init_rbsigar_constants(VALUE rclass)
824
+ {
825
+ RB_SIGAR_CONST_INT(FSTYPE_NONE);
826
+ RB_SIGAR_CONST_INT(FSTYPE_LOCAL_DISK);
827
+ RB_SIGAR_CONST_INT(FSTYPE_NETWORK);
828
+ RB_SIGAR_CONST_INT(FSTYPE_RAM_DISK);
829
+ RB_SIGAR_CONST_INT(FSTYPE_CDROM);
830
+ RB_SIGAR_CONST_INT(FSTYPE_SWAP);
831
+
832
+ RB_SIGAR_CONST_INT(IFF_UP);
833
+ RB_SIGAR_CONST_INT(IFF_BROADCAST);
834
+ RB_SIGAR_CONST_INT(IFF_DEBUG);
835
+ RB_SIGAR_CONST_INT(IFF_LOOPBACK);
836
+ RB_SIGAR_CONST_INT(IFF_POINTOPOINT);
837
+ RB_SIGAR_CONST_INT(IFF_NOTRAILERS);
838
+ RB_SIGAR_CONST_INT(IFF_RUNNING);
839
+ RB_SIGAR_CONST_INT(IFF_NOARP);
840
+ RB_SIGAR_CONST_INT(IFF_PROMISC);
841
+ RB_SIGAR_CONST_INT(IFF_ALLMULTI);
842
+ RB_SIGAR_CONST_INT(IFF_MULTICAST);
843
+ RB_SIGAR_CONST_INT(IFF_SLAVE);
844
+ RB_SIGAR_CONST_INT(IFF_MASTER);
845
+ RB_SIGAR_CONST_INT(IFF_DYNAMIC);
846
+
847
+ RB_SIGAR_CONST_INT(NETCONN_CLIENT);
848
+ RB_SIGAR_CONST_INT(NETCONN_SERVER);
849
+ RB_SIGAR_CONST_INT(NETCONN_TCP);
850
+ RB_SIGAR_CONST_INT(NETCONN_UDP);
851
+ RB_SIGAR_CONST_INT(NETCONN_RAW);
852
+ RB_SIGAR_CONST_INT(NETCONN_UNIX);
853
+
854
+ RB_SIGAR_CONST_INT(TCP_ESTABLISHED);
855
+ RB_SIGAR_CONST_INT(TCP_SYN_SENT);
856
+ RB_SIGAR_CONST_INT(TCP_SYN_RECV);
857
+ RB_SIGAR_CONST_INT(TCP_FIN_WAIT1);
858
+ RB_SIGAR_CONST_INT(TCP_FIN_WAIT2);
859
+ RB_SIGAR_CONST_INT(TCP_TIME_WAIT);
860
+ RB_SIGAR_CONST_INT(TCP_CLOSE);
861
+ RB_SIGAR_CONST_INT(TCP_CLOSE_WAIT);
862
+ RB_SIGAR_CONST_INT(TCP_LAST_ACK);
863
+ RB_SIGAR_CONST_INT(TCP_LISTEN);
864
+ RB_SIGAR_CONST_INT(TCP_CLOSING);
865
+ RB_SIGAR_CONST_INT(TCP_IDLE);
866
+ RB_SIGAR_CONST_INT(TCP_BOUND);
867
+ RB_SIGAR_CONST_INT(TCP_UNKNOWN);
868
+
869
+ RB_SIGAR_CONST_INT(RTF_UP);
870
+ RB_SIGAR_CONST_INT(RTF_GATEWAY);
871
+ RB_SIGAR_CONST_INT(RTF_HOST);
872
+
873
+ RB_SIGAR_CONST_STR(NULL_HWADDR);
874
+
875
+ RB_SIGAR_CONST_INT(LOG_FATAL);
876
+ RB_SIGAR_CONST_INT(LOG_ERROR);
877
+ RB_SIGAR_CONST_INT(LOG_WARN);
878
+ RB_SIGAR_CONST_INT(LOG_INFO);
879
+ RB_SIGAR_CONST_INT(LOG_DEBUG);
880
+ RB_SIGAR_CONST_INT(LOG_TRACE);
881
+ }
882
+
883
+ static void Init_rbsigar_version(VALUE rclass)
884
+ {
885
+ sigar_version_t *sv = sigar_version_get();
886
+ RB_SIGAR_DEFINE_CONST_STR("BUILD_DATE", sv->build_date);
887
+ RB_SIGAR_DEFINE_CONST_STR("SCM_REVISION", sv->scm_revision);
888
+ RB_SIGAR_DEFINE_CONST_STR("VERSION", sv->version);
889
+ }
890
+
891
+ void Init_csigar(void)
892
+ {
893
+ VALUE rclass = rb_define_class("Csigar", rb_cObject);
894
+
895
+ rb_define_method(rclass, "logger", rb_sigar_logger, 0);
896
+ rb_define_method(rclass, "logger=", rb_sigar_set_logger, 1);
897
+
898
+ rb_define_method(rclass, "log_level", rb_sigar_log_level, 0);
899
+ rb_define_method(rclass, "log_level=", rb_sigar_set_log_level, 1);
900
+
901
+ rb_define_method(rclass, "cpu_info_list", rb_sigar_cpu_info_list, 0);
902
+ rb_define_method(rclass, "cpu_list", rb_sigar_cpu_list, 0);
903
+ rb_define_method(rclass, "loadavg", rb_sigar_loadavg, 0);
904
+ rb_define_method(rclass, "file_system_list", rb_sigar_file_system_list, 0);
905
+ rb_define_method(rclass, "net_connection_list", rb_sigar_net_connection_list, 1);
906
+ rb_define_method(rclass, "net_interface_list", rb_sigar_net_interface_list, 0);
907
+ rb_define_method(rclass, "net_services_name", rb_sigar_net_services_name, 2);
908
+ rb_define_method(rclass, "net_stat", rb_sigar_net_stat, 1);
909
+ rb_define_method(rclass, "net_stat_port", rb_sigar_net_stat_port, 3);
910
+ rb_define_method(rclass, "net_route_list", rb_sigar_net_route_list, 0);
911
+ rb_define_method(rclass, "arp_list", rb_sigar_arp_list, 0);
912
+ rb_define_method(rclass, "who_list", rb_sigar_who_list, 0);
913
+ rb_define_method(rclass, "proc_list", rb_sigar_proc_list, -1);
914
+ rb_define_method(rclass, "proc_args", rb_sigar_proc_args, 1);
915
+ rb_define_method(rclass, "proc_env", rb_sigar_proc_env, 1);
916
+ rb_define_method(rclass, "proc_port", rb_sigar_proc_port, 2);
917
+ rb_define_method(rclass, "fqdn", rb_sigar_fqdn, 0);
918
+
919
+ rb_define_method(rclass, "cpu_perc", rb_sigar_cpu_perc, 0);
920
+
921
+ rb_define_singleton_method(rclass, "new", rb_sigar_new, 0);
922
+ rb_define_singleton_method(rclass, "format_size", rb_sigar_format_size, 1);
923
+ rb_define_singleton_method(rclass, "net_interface_flags_to_s",
924
+ rb_sigar_net_interface_flags_to_s, 1);
925
+ rb_define_singleton_method(rclass, "net_scope_to_s",
926
+ rb_sigar_net_scope_to_s, 1);
927
+ rb_define_singleton_method(rclass, "net_connection_type_to_s",
928
+ rb_sigar_net_connection_type_to_s, 1);
929
+ rb_define_singleton_method(rclass, "net_connection_state_to_s",
930
+ rb_sigar_net_connection_state_to_s, 1);
931
+
932
+ Init_rbsigar_constants(rclass);
933
+ Init_rbsigar_version(rclass);
934
+
935
+ /* generated */
936
+ rb_sigar_define_module_methods(rclass);
937
+ rb_define_method(rb_cSigarNetStat, "tcp_states", rb_sigar_NetStat_tcp_states, 0);
938
+ }