vmstat 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -0
- data/Guardfile +8 -0
- data/README.md +12 -2
- data/ext/vmstat/extconf.rb +57 -0
- data/ext/vmstat/hw/bsd.h +88 -0
- data/ext/vmstat/hw/mach.h +107 -0
- data/ext/vmstat/hw/posix.h +29 -0
- data/ext/vmstat/hw/statfs.h +41 -0
- data/ext/vmstat/hw/sysctl.h +72 -0
- data/ext/vmstat/vmstat.c +40 -260
- data/ext/vmstat/vmstat.h +6 -4
- data/lib/vmstat.rb +35 -35
- data/lib/vmstat/linux_disk.rb +33 -0
- data/lib/vmstat/procfs.rb +126 -0
- data/lib/vmstat/snapshot.rb +1 -1
- data/lib/vmstat/stub.rb +69 -0
- data/lib/vmstat/version.rb +1 -1
- data/spec/procfs/loadavg +1 -0
- data/spec/procfs/meminfo +46 -0
- data/spec/procfs/net/dev +5 -0
- data/spec/procfs/stat +12 -0
- data/spec/procfs/uptime +1 -0
- data/spec/procfs/vmstat +89 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/vmstat/procfs_spec.rb +62 -0
- data/vmstat.gemspec +2 -0
- metadata +59 -4
data/ext/vmstat/vmstat.c
CHANGED
@@ -1,276 +1,56 @@
|
|
1
|
-
#include <sys/types.h>
|
2
|
-
#include <sys/socket.h>
|
3
|
-
#include <sys/sysctl.h>
|
4
|
-
#include <net/if.h>
|
5
|
-
#include <net/if_mib.h>
|
6
|
-
#include <net/if_types.h>
|
7
|
-
#include <sys/param.h>
|
8
|
-
#include <sys/mount.h>
|
9
|
-
#if defined(__APPLE__)
|
10
|
-
#include <mach/mach.h>
|
11
|
-
#include <mach/mach_host.h>
|
12
|
-
#endif
|
13
1
|
#include <vmstat.h>
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
2
|
+
#include <hw/posix.h>
|
3
|
+
#include <hw/statfs.h>
|
4
|
+
#include <hw/sysctl.h>
|
5
|
+
#include <hw/mach.h>
|
6
|
+
#include <hw/bsd.h>
|
18
7
|
|
19
8
|
void Init_vmstat() {
|
20
|
-
vmstat = rb_define_module("Vmstat");
|
9
|
+
VALUE vmstat = rb_define_module("Vmstat");
|
21
10
|
|
11
|
+
/*
|
12
|
+
* Below the list of platform implementations. The Platforms in square
|
13
|
+
* brackets are implemented in ruby not in c.
|
14
|
+
*/
|
15
|
+
|
16
|
+
// MAC, FreeBSD, [LINUX]
|
17
|
+
#if defined(VMSTAT_NETWORK_INTERFACES)
|
22
18
|
rb_define_singleton_method(vmstat, "network_interfaces", vmstat_network_interfaces, 0);
|
23
|
-
rb_define_singleton_method(vmstat, "cpu", vmstat_cpu, 0);
|
24
|
-
rb_define_singleton_method(vmstat, "memory", vmstat_memory, 0);
|
25
|
-
rb_define_singleton_method(vmstat, "disk", vmstat_disk, 1);
|
26
|
-
rb_define_singleton_method(vmstat, "load_average", vmstat_load_average, 0);
|
27
|
-
rb_define_singleton_method(vmstat, "boot_time", vmstat_boot_time, 0);
|
28
|
-
#if defined(__APPLE__)
|
29
|
-
rb_define_singleton_method(vmstat, "task", vmstat_task, 0);
|
30
19
|
#endif
|
31
|
-
}
|
32
|
-
|
33
|
-
VALUE vmstat_network_interfaces(VALUE self) {
|
34
|
-
VALUE devices = rb_ary_new();
|
35
|
-
int i, err;
|
36
|
-
struct ifmibdata mibdata;
|
37
|
-
size_t len = sizeof(mibdata);
|
38
|
-
int ifmib_path[] = {
|
39
|
-
CTL_NET, PF_LINK, NETLINK_GENERIC, IFMIB_IFDATA, -1, IFDATA_GENERAL
|
40
|
-
};
|
41
20
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
if (err == 0) {
|
46
|
-
VALUE device = rb_funcall(rb_path2class("Vmstat::NetworkInterface"),
|
47
|
-
rb_intern("new"), 7, ID2SYM(rb_intern(mibdata.ifmd_name)),
|
48
|
-
ULL2NUM(mibdata.ifmd_data.ifi_ibytes),
|
49
|
-
ULL2NUM(mibdata.ifmd_data.ifi_ierrors),
|
50
|
-
ULL2NUM(mibdata.ifmd_data.ifi_iqdrops),
|
51
|
-
ULL2NUM(mibdata.ifmd_data.ifi_obytes),
|
52
|
-
ULL2NUM(mibdata.ifmd_data.ifi_oerrors),
|
53
|
-
ULL2NUM(mibdata.ifmd_data.ifi_type));
|
54
|
-
|
55
|
-
rb_ary_push(devices, device);
|
56
|
-
}
|
57
|
-
}
|
58
|
-
|
59
|
-
return devices;
|
60
|
-
}
|
61
|
-
|
62
|
-
#if defined(__APPLE__)
|
63
|
-
VALUE vmstat_cpu(VALUE self) {
|
64
|
-
VALUE cpus = rb_ary_new();
|
65
|
-
processor_info_array_t cpuInfo;
|
66
|
-
mach_msg_type_number_t numCpuInfo;
|
67
|
-
natural_t numCPUsU = 0U;
|
68
|
-
kern_return_t err = host_processor_info(mach_host_self(),
|
69
|
-
PROCESSOR_CPU_LOAD_INFO, &numCPUsU, &cpuInfo, &numCpuInfo);
|
70
|
-
|
71
|
-
if(err == KERN_SUCCESS) {
|
72
|
-
unsigned i;
|
73
|
-
|
74
|
-
for(i = 0U; i < numCPUsU; ++i) {
|
75
|
-
int pos = CPU_STATE_MAX * i;
|
76
|
-
VALUE cpu = rb_funcall(rb_path2class("Vmstat::Cpu"),
|
77
|
-
rb_intern("new"), 5, ULL2NUM(i),
|
78
|
-
ULL2NUM(cpuInfo[pos + CPU_STATE_USER]),
|
79
|
-
ULL2NUM(cpuInfo[pos + CPU_STATE_SYSTEM]),
|
80
|
-
ULL2NUM(cpuInfo[pos + CPU_STATE_NICE]),
|
81
|
-
ULL2NUM(cpuInfo[pos + CPU_STATE_IDLE]));
|
82
|
-
rb_ary_push(cpus, cpu);
|
83
|
-
}
|
84
|
-
|
85
|
-
err = vm_deallocate(mach_task_self(), (vm_address_t)cpuInfo,
|
86
|
-
(vm_size_t)sizeof(*cpuInfo) * numCpuInfo);
|
87
|
-
if (err != KERN_SUCCESS) {
|
88
|
-
rb_bug("vm_deallocate: %s\n", mach_error_string(err));
|
89
|
-
}
|
90
|
-
}
|
91
|
-
|
92
|
-
return cpus;
|
93
|
-
}
|
94
|
-
|
95
|
-
VALUE vmstat_memory(VALUE self) {
|
96
|
-
VALUE memory = Qnil;
|
97
|
-
vm_size_t pagesize;
|
98
|
-
uint host_count = HOST_VM_INFO_COUNT;
|
99
|
-
kern_return_t err;
|
100
|
-
vm_statistics_data_t vm_stat;
|
101
|
-
|
102
|
-
err = host_page_size(mach_host_self(), &pagesize);
|
103
|
-
if (err == KERN_SUCCESS) {
|
104
|
-
err = host_statistics(mach_host_self(), HOST_VM_INFO,
|
105
|
-
(host_info_t)&vm_stat, &host_count);
|
106
|
-
if (err == KERN_SUCCESS) {
|
107
|
-
memory = rb_funcall(rb_path2class("Vmstat::Memory"),
|
108
|
-
rb_intern("new"), 15, ULL2NUM(pagesize),
|
109
|
-
ULL2NUM(vm_stat.active_count),
|
110
|
-
ULL2NUM(vm_stat.inactive_count),
|
111
|
-
ULL2NUM(vm_stat.wire_count),
|
112
|
-
ULL2NUM(vm_stat.free_count),
|
113
|
-
ULL2NUM(vm_stat.pageins),
|
114
|
-
ULL2NUM(vm_stat.pageouts),
|
115
|
-
ULL2NUM(vm_stat.zero_fill_count),
|
116
|
-
ULL2NUM(vm_stat.reactivations),
|
117
|
-
ULL2NUM(vm_stat.purgeable_count),
|
118
|
-
ULL2NUM(vm_stat.purges),
|
119
|
-
ULL2NUM(vm_stat.faults),
|
120
|
-
ULL2NUM(vm_stat.cow_faults),
|
121
|
-
ULL2NUM(vm_stat.lookups),
|
122
|
-
ULL2NUM(vm_stat.hits));
|
123
|
-
}
|
124
|
-
|
125
|
-
err = vm_deallocate(mach_task_self(), (vm_address_t)pagesize,
|
126
|
-
(vm_size_t)host_count);
|
127
|
-
if (err != KERN_SUCCESS) {
|
128
|
-
rb_bug("vm_deallocate: %s\n", mach_error_string(err));
|
129
|
-
}
|
130
|
-
}
|
131
|
-
|
132
|
-
return memory;
|
133
|
-
}
|
134
|
-
|
135
|
-
VALUE vmstat_task(VALUE self) {
|
136
|
-
VALUE task = Qnil;
|
137
|
-
struct task_basic_info info;
|
138
|
-
kern_return_t err;
|
139
|
-
mach_msg_type_number_t size = sizeof(info);
|
140
|
-
|
141
|
-
err = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&info, &size);
|
142
|
-
if (err == KERN_SUCCESS) {
|
143
|
-
task = rb_funcall(rb_path2class("Vmstat::Task"),
|
144
|
-
rb_intern("new"), 5, LONG2NUM(info.suspend_count),
|
145
|
-
LONG2NUM(info.virtual_size),
|
146
|
-
LONG2NUM(info.resident_size),
|
147
|
-
LONG2NUM(info.user_time.seconds * 1000 + info.user_time.microseconds),
|
148
|
-
LONG2NUM(info.system_time.seconds * 1000 + info.system_time.microseconds));
|
149
|
-
} else {
|
150
|
-
rb_bug("task_info: %s\n", mach_error_string(err));
|
151
|
-
}
|
152
|
-
|
153
|
-
return task;
|
154
|
-
}
|
155
|
-
#elif __linux
|
156
|
-
// linux
|
157
|
-
#elif __unix // all unices not caught above
|
158
|
-
typedef struct {
|
159
|
-
long user;
|
160
|
-
long nice;
|
161
|
-
long system;
|
162
|
-
long intr;
|
163
|
-
long idle;
|
164
|
-
} cpu_time_t;
|
165
|
-
|
166
|
-
VALUE vmstat_cpu(VALUE self) {
|
167
|
-
VALUE cpus = rb_ary_new();
|
168
|
-
int cpu_count = system_int("hw.ncpu");
|
169
|
-
size_t len = sizeof(cpu_time_t) * cpu_count;
|
170
|
-
cpu_time_t * cp_times = ALLOC_N(cpu_time_t, cpu_count);
|
171
|
-
cpu_time_t * cp_time;
|
172
|
-
int i;
|
173
|
-
|
174
|
-
if (sysctlbyname("kern.cp_times", cp_times, &len, NULL, 0) == 0) {
|
175
|
-
for (i = 0; i < cpu_count; i++) {
|
176
|
-
cp_time = &cp_times[i];
|
177
|
-
VALUE cpu = rb_funcall(rb_path2class("Vmstat::Cpu"),
|
178
|
-
rb_intern("new"), 5, ULL2NUM(i),
|
179
|
-
ULL2NUM(cp_time->user),
|
180
|
-
ULL2NUM(cp_time->system + cp_time->intr),
|
181
|
-
ULL2NUM(cp_time->nice),
|
182
|
-
ULL2NUM(cp_time->idle));
|
183
|
-
rb_ary_push(cpus, cpu);
|
184
|
-
}
|
185
|
-
}
|
186
|
-
|
187
|
-
free(cp_times);
|
188
|
-
|
189
|
-
return cpus;
|
190
|
-
}
|
191
|
-
|
192
|
-
VALUE vmstat_memory(VALUE self) {
|
193
|
-
VALUE memory = rb_funcall(rb_path2class("Vmstat::Memory"),
|
194
|
-
rb_intern("new"), 15, ULL2NUM(system_ull("vm.stats.vm.v_page_size")),
|
195
|
-
ULL2NUM(system_ull("vm.stats.vm.v_active_count")),
|
196
|
-
ULL2NUM(system_ull("vm.stats.vm.v_wire_count")),
|
197
|
-
ULL2NUM(system_ull("vm.stats.vm.v_inactive_count")),
|
198
|
-
ULL2NUM(system_ull("vm.stats.vm.v_free_count")),
|
199
|
-
ULL2NUM(Qnil),
|
200
|
-
ULL2NUM(Qnil),
|
201
|
-
ULL2NUM(system_ull("vm.stats.misc.zero_page_count")),
|
202
|
-
ULL2NUM(system_ull("vm.stats.vm.v_reactivated")),
|
203
|
-
ULL2NUM(Qnil),
|
204
|
-
ULL2NUM(Qnil),
|
205
|
-
ULL2NUM(system_ull("vm.stats.vm.v_vm_faults")),
|
206
|
-
ULL2NUM(system_ull("vm.stats.vm.v_cow_faults")),
|
207
|
-
ULL2NUM(Qnil),
|
208
|
-
ULL2NUM(Qnil));
|
209
|
-
return memory;
|
210
|
-
}
|
211
|
-
#elif __posix
|
212
|
-
// POSIX
|
21
|
+
// MAC, FreeBSD, [LINUX]
|
22
|
+
#if defined(VMSTAT_CPU)
|
23
|
+
rb_define_singleton_method(vmstat, "cpu", vmstat_cpu, 0);
|
213
24
|
#endif
|
214
25
|
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
if (statfs(StringValueCStr(path), &stat) != -1) {
|
220
|
-
disk = rb_funcall(rb_path2class("Vmstat::Disk"),
|
221
|
-
rb_intern("new"), 7, ID2SYM(rb_intern(stat.f_fstypename)),
|
222
|
-
rb_str_new(stat.f_mntfromname, strlen(stat.f_mntfromname)),
|
223
|
-
rb_str_new(stat.f_mntonname, strlen(stat.f_mntonname)),
|
224
|
-
ULL2NUM(stat.f_bsize),
|
225
|
-
ULL2NUM(stat.f_bfree),
|
226
|
-
ULL2NUM(stat.f_bavail),
|
227
|
-
ULL2NUM(stat.f_blocks));
|
228
|
-
}
|
229
|
-
|
230
|
-
return disk;
|
231
|
-
}
|
232
|
-
|
233
|
-
VALUE vmstat_load_average(VALUE self) {
|
234
|
-
VALUE load = Qnil;
|
235
|
-
double loadavg[AVGCOUNT];
|
236
|
-
|
237
|
-
getloadavg(&loadavg[0], AVGCOUNT);
|
238
|
-
|
239
|
-
load = rb_funcall(rb_path2class("Vmstat::LoadAverage"),
|
240
|
-
rb_intern("new"), 3, rb_float_new(loadavg[0]),
|
241
|
-
rb_float_new(loadavg[1]),
|
242
|
-
rb_float_new(loadavg[2]));
|
26
|
+
// MAC, FreeBSD, [LINUX]
|
27
|
+
#if defined(VMSTAT_MEMORY)
|
28
|
+
rb_define_singleton_method(vmstat, "memory", vmstat_memory, 0);
|
29
|
+
#endif
|
243
30
|
|
244
|
-
|
245
|
-
|
31
|
+
// MAC, FreeBSD, LINUX
|
32
|
+
#if defined(VMSTAT_DISK)
|
33
|
+
rb_define_singleton_method(vmstat, "disk", vmstat_disk, 1);
|
34
|
+
#endif
|
246
35
|
|
247
|
-
|
36
|
+
// MAC, FreeBSD, LINUX
|
37
|
+
#if defined(VMSTAT_LOAD_AVERAGE)
|
38
|
+
rb_define_singleton_method(vmstat, "load_average", vmstat_load_average, 0);
|
39
|
+
#endif
|
248
40
|
|
249
|
-
|
250
|
-
|
251
|
-
|
41
|
+
// MAC, FreeBSD, [LINUX]
|
42
|
+
#if defined(VMSTAT_BOOT_TIME)
|
43
|
+
rb_define_singleton_method(vmstat, "boot_time", vmstat_boot_time, 0);
|
44
|
+
#endif
|
252
45
|
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
}
|
258
|
-
}
|
46
|
+
// MAC
|
47
|
+
#if defined(VMSTAT_TASK)
|
48
|
+
rb_define_singleton_method(vmstat, "task", vmstat_task, 0);
|
49
|
+
#endif
|
259
50
|
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
return number;
|
51
|
+
// MAC, FreeBSD, LINUX
|
52
|
+
#if defined(VMSTAT_PAGESIZE)
|
53
|
+
rb_define_singleton_method(vmstat, "pagesize", vmstat_pagesize, 0);
|
54
|
+
#endif
|
265
55
|
}
|
266
56
|
|
267
|
-
unsigned long long system_ull(const char * name) {
|
268
|
-
long number;
|
269
|
-
size_t number_size = sizeof(number);
|
270
|
-
if (sysctlbyname(name, &number, &number_size, NULL, 0) == -1) {
|
271
|
-
perror("sysctlbyname");
|
272
|
-
return -1;
|
273
|
-
} else {
|
274
|
-
return number;
|
275
|
-
}
|
276
|
-
}
|
data/ext/vmstat/vmstat.h
CHANGED
@@ -1,15 +1,17 @@
|
|
1
1
|
#include <ruby.h>
|
2
2
|
|
3
|
+
#ifndef _VMSTAT_H_
|
4
|
+
#define _VMSTAT_H_
|
5
|
+
|
3
6
|
#define AVGCOUNT 3
|
4
7
|
|
5
|
-
VALUE vmstat = Qnil;
|
6
8
|
VALUE vmstat_network_interfaces(VALUE self);
|
7
9
|
VALUE vmstat_cpu(VALUE self);
|
8
10
|
VALUE vmstat_memory(VALUE self);
|
9
11
|
VALUE vmstat_disk(VALUE self, VALUE path);
|
10
12
|
VALUE vmstat_load_average(VALUE self);
|
11
13
|
VALUE vmstat_boot_time(VALUE self);
|
12
|
-
|
13
|
-
#if defined(__APPLE__)
|
14
14
|
VALUE vmstat_task(VALUE self);
|
15
|
-
|
15
|
+
VALUE vmstat_pagesize(VALUE self);
|
16
|
+
|
17
|
+
#endif /* _VMSTAT_H_ */
|
data/lib/vmstat.rb
CHANGED
@@ -4,76 +4,72 @@ module Vmstat
|
|
4
4
|
autoload :Cpu, "vmstat/cpu"
|
5
5
|
autoload :NetworkInterface, "vmstat/network_interface"
|
6
6
|
autoload :Disk, "vmstat/disk"
|
7
|
+
autoload :LinuxDisk, "vmstat/linux_disk"
|
7
8
|
autoload :Memory, "vmstat/memory"
|
8
9
|
autoload :Task, "vmstat/task"
|
9
10
|
autoload :LoadAverage, "vmstat/load_average"
|
11
|
+
autoload :ProcFS, "vmstat/procfs"
|
12
|
+
autoload :Stub, "vmstat/stub"
|
10
13
|
autoload :Snapshot, "vmstat/snapshot"
|
14
|
+
extend Stub # the default null implementation
|
11
15
|
|
12
|
-
#
|
13
|
-
# @param [Array<String>] the paths to the disks to snapshot.
|
14
|
-
# @return [Vmstat::Snapshot] a snapshot of all statistics.
|
15
|
-
# @example
|
16
|
-
# Vmstat.snapshot # => #<struct Vmstat::Snapshot ...>
|
17
|
-
def self.snapshot(paths = ["/"])
|
18
|
-
Snapshot.new(paths)
|
19
|
-
end
|
20
|
-
|
16
|
+
# @!method self.boot_time
|
21
17
|
# Fetches the boot time of the system.
|
22
18
|
# @return [Time] the boot time as regular time object.
|
23
19
|
# @example
|
24
20
|
# Vmstat.boot_time # => 2012-10-09 18:42:37 +0200
|
25
|
-
|
26
|
-
|
27
|
-
end
|
28
|
-
|
21
|
+
|
22
|
+
# @!method self.cpu
|
29
23
|
# Fetches the cpu statistics (usage counter for user, nice, system and idle)
|
30
24
|
# @return [Array<Vmstat::Cpu>] the array of cpu counter
|
31
25
|
# @example
|
32
26
|
# Vmstat.cpu # => [#<struct Vmstat::Cpu ...>, #<struct Vmstat::Cpu ...>]
|
33
|
-
|
34
|
-
|
35
|
-
end
|
36
|
-
|
27
|
+
|
28
|
+
# @!method self.disk(path)
|
37
29
|
# Fetches the usage data and other useful disk information for the given path.
|
38
30
|
# @param [String] path the path (mount point or device path) to the disk
|
39
31
|
# @return [Vmstat::Disk] the disk information
|
40
32
|
# @example
|
41
33
|
# Vmstat.disk("/") # => #<struct Vmstat::Disk type=:hfs, ...>
|
42
|
-
|
43
|
-
|
44
|
-
end
|
45
|
-
|
34
|
+
|
35
|
+
# @!method self.load_average
|
46
36
|
# Fetches the load average for the current system.
|
47
37
|
# @return [Vmstat::LoadAverage] the load average data
|
48
38
|
# @example
|
49
39
|
# Vmstat.load_average # => #<struct Vmstat::LoadAverage one_minute=...>
|
50
|
-
|
51
|
-
|
52
|
-
end
|
53
|
-
|
40
|
+
|
41
|
+
# @!method self.memory
|
54
42
|
# Fetches the memory usage information.
|
55
43
|
# @return [Vmstat::Memory] the memory data like free, used und total.
|
56
44
|
# @example
|
57
45
|
# Vmstat.memory # => #<struct Vmstat::Memory ...>
|
58
|
-
|
59
|
-
|
60
|
-
end
|
61
|
-
|
46
|
+
|
47
|
+
# @!method self.network_interfaces
|
62
48
|
# Fetches the information for all available network devices.
|
63
49
|
# @return [Array<Vmstat::NetworkInterface>] the network device information
|
64
50
|
# @example
|
65
51
|
# Vmstat.network_interfaces # => [#<struct Vmstat::NetworkInterface ...>, ...]
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
52
|
+
|
53
|
+
# @!method self.pagesize
|
54
|
+
# Fetches pagesize of the current system.
|
55
|
+
# @return [Fixnum] the pagesize of the current system in bytes.
|
56
|
+
# @example
|
57
|
+
# Vmstat.pagesize # => 4096
|
58
|
+
|
59
|
+
# @!method self.task
|
70
60
|
# Fetches time and memory usage for the current process.
|
71
61
|
# @note Currently only on Mac OS X
|
72
62
|
# @return [Array<Vmstat::Task>] the network device information
|
73
63
|
# @example
|
74
64
|
# Vmstat.task # => #<struct Vmstat::Task ...>
|
75
|
-
|
76
|
-
|
65
|
+
|
66
|
+
# Creates a full snapshot of the systems hardware statistics.
|
67
|
+
# @param [Array<String>] the paths to the disks to snapshot.
|
68
|
+
# @return [Vmstat::Snapshot] a snapshot of all statistics.
|
69
|
+
# @example
|
70
|
+
# Vmstat.snapshot # => #<struct Vmstat::Snapshot ...>
|
71
|
+
def self.snapshot(paths = ["/"])
|
72
|
+
Snapshot.new(paths)
|
77
73
|
end
|
78
74
|
|
79
75
|
# Filters all available ethernet devices.
|
@@ -90,3 +86,7 @@ module Vmstat
|
|
90
86
|
end
|
91
87
|
|
92
88
|
require "vmstat/vmstat" # native lib
|
89
|
+
|
90
|
+
if RUBY_PLATFORM =~ /linux/
|
91
|
+
Vmstat.send(:extend, Vmstat::ProcFS)
|
92
|
+
end
|