proceso 0.1.1 → 0.2.0
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.
- checksums.yaml +4 -4
- data/ext/proceso/darwin.c +0 -29
- data/ext/proceso/darwin.h +1 -2
- data/ext/proceso/pid.c +0 -14
- data/ext/proceso/proceso.c +0 -18
- data/lib/proceso/version.rb +1 -1
- data/lib/proceso.rb +0 -18
- data/spec/proceso/pid_spec.rb +0 -6
- data/spec/proceso_spec.rb +0 -9
- data/spec/spec_helper.rb +1 -0
- metadata +3 -4
- data/lib/proceso/middleware.rb +0 -71
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a49a83d9db144438ccca258b165644e93e14183a
|
4
|
+
data.tar.gz: 93e182fa67298287a5402c2a553376c5d1c07f6e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 93e7588f3a630b729754c764fe238307353c8401f6de24575a19b12082821a91be4c9e67bbc4bd0b123e601e07373884a0a622084a270d71c507087d5dcf7757
|
7
|
+
data.tar.gz: 9c56ba0567d6901430dd26fee225b93fef0fe93a7bdc3445d1c210011725bb2b13e113781f6b7368e621bb587ff77bdeea5094fcd5e63b46a9f7744cea21fde0
|
data/ext/proceso/darwin.c
CHANGED
@@ -37,33 +37,4 @@ int rb_process_info(int pid, int flavor, void *pti, int size) {
|
|
37
37
|
}
|
38
38
|
}
|
39
39
|
|
40
|
-
/* List of Processes */
|
41
|
-
int * rb_process_list() {
|
42
|
-
int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0};
|
43
|
-
size_t buf_size;
|
44
|
-
int ret;
|
45
|
-
int list[4096];
|
46
|
-
ret = sysctl(mib, 4, NULL, &buf_size, NULL, 0);
|
47
|
-
if (ret >= 0) {
|
48
|
-
struct kinfo_proc *processes = NULL;
|
49
|
-
int i, nb_entries;
|
50
|
-
nb_entries = buf_size / sizeof(struct kinfo_proc);
|
51
|
-
processes = (struct kinfo_proc*) malloc(buf_size);
|
52
|
-
if (processes != NULL) {
|
53
|
-
ret = sysctl(mib, 4, processes, &buf_size, NULL, 0);
|
54
|
-
if (ret >= 0) {
|
55
|
-
for (i = 0; i < nb_entries; i++) {
|
56
|
-
int pid = processes[i].kp_proc.p_pid;
|
57
|
-
list[i] = pid;
|
58
|
-
}
|
59
|
-
free(processes);
|
60
|
-
return list;
|
61
|
-
}
|
62
|
-
free(processes);
|
63
|
-
return 0;
|
64
|
-
}
|
65
|
-
}
|
66
|
-
return 0;
|
67
|
-
}
|
68
|
-
|
69
40
|
#endif
|
data/ext/proceso/darwin.h
CHANGED
@@ -14,5 +14,4 @@
|
|
14
14
|
|
15
15
|
int rb_sysctl_kern_argmax();
|
16
16
|
int rb_sysctl_kern_procargs2(int pid, char **process_name, int argmax, size_t buf_size);
|
17
|
-
int rb_process_info(int pid, int flavor, void *pti, int size);
|
18
|
-
int * rb_process_list();
|
17
|
+
int rb_process_info(int pid, int flavor, void *pti, int size);
|
data/ext/proceso/pid.c
CHANGED
@@ -57,19 +57,6 @@ proceso__process_system_cpu(VALUE self) {
|
|
57
57
|
return rb_float_new(val);
|
58
58
|
}
|
59
59
|
|
60
|
-
/* PID CPU Usage */
|
61
|
-
static VALUE
|
62
|
-
proceso__process_cpu_usage(VALUE self) {
|
63
|
-
int ncpu = rb_hw_ncpu();
|
64
|
-
float u1, u2;
|
65
|
-
float usage;
|
66
|
-
u1 = rb_process_cpu_times(iv2pid(self), FCPU_USR);
|
67
|
-
usleep(100000);
|
68
|
-
u2 = rb_process_cpu_times(iv2pid(self), FCPU_USR);
|
69
|
-
usage = ncpu * ((u2 - u1) * 100);
|
70
|
-
return rb_float_new(usage);
|
71
|
-
}
|
72
|
-
|
73
60
|
void Init__proceso_pid() {
|
74
61
|
|
75
62
|
VALUE rb_mProceso = rb_define_module("Proceso");
|
@@ -82,6 +69,5 @@ void Init__proceso_pid() {
|
|
82
69
|
rb_define_method(rb_cProcesoPID, "virtual_size", proceso__process_vms, 0);
|
83
70
|
rb_define_method(rb_cProcesoPID, "user_cpu_times", proceso__process_user_cpu, 0);
|
84
71
|
rb_define_method(rb_cProcesoPID, "system_cpu_times", proceso__process_system_cpu, 0);
|
85
|
-
rb_define_method(rb_cProcesoPID, "cpu_usage", proceso__process_cpu_usage, 0);
|
86
72
|
|
87
73
|
}
|
data/ext/proceso/proceso.c
CHANGED
@@ -6,30 +6,12 @@ int iv2pid(VALUE self) {
|
|
6
6
|
return FIX2INT(rb_iv_get(self, "@pid"));
|
7
7
|
}
|
8
8
|
|
9
|
-
#ifdef __APPLE__
|
10
|
-
/* Process PIDs */
|
11
|
-
static VALUE
|
12
|
-
proceso__pids(VALUE self) {
|
13
|
-
int *pids = rb_process_list();
|
14
|
-
VALUE processes = rb_ary_new();
|
15
|
-
int i;
|
16
|
-
for(i = 0; i < sizeof(pids); i++) {
|
17
|
-
rb_ary_push(processes, INT2NUM(pids[i]));
|
18
|
-
}
|
19
|
-
return processes;
|
20
|
-
}
|
21
|
-
#endif
|
22
|
-
|
23
9
|
void Init_proceso() {
|
24
10
|
|
25
11
|
rb_mProceso = rb_define_module("Proceso");
|
26
12
|
|
27
13
|
rb_define_const(rb_mProceso, "NCPU", INT2NUM(rb_hw_ncpu()));
|
28
14
|
|
29
|
-
#ifdef __APPLE__
|
30
|
-
rb_define_singleton_method(rb_mProceso, "pids", proceso__pids, 0);
|
31
|
-
#endif
|
32
|
-
|
33
15
|
Init__proceso_pid();
|
34
16
|
}
|
35
17
|
|
data/lib/proceso/version.rb
CHANGED
data/lib/proceso.rb
CHANGED
@@ -4,26 +4,8 @@ require 'proceso/pid'
|
|
4
4
|
module Proceso
|
5
5
|
extend self
|
6
6
|
|
7
|
-
if RUBY_PLATFORM =~ /linux/
|
8
|
-
def pids
|
9
|
-
Dir["/proc/*"].select do
|
10
|
-
|x| x =~ /\/\d+$/
|
11
|
-
end.map(&File.method(:basename)).map(&:to_i)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def processes
|
16
|
-
pids.map do |i|
|
17
|
-
Proceso::PID.new(i)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
7
|
def current
|
22
8
|
@current ||= Proceso::PID.new(Process.pid)
|
23
9
|
end
|
24
10
|
|
25
11
|
end
|
26
|
-
|
27
|
-
if defined?(Rails) || defined?(Rack)
|
28
|
-
require 'proceso/middleware'
|
29
|
-
end
|
data/spec/proceso/pid_spec.rb
CHANGED
@@ -40,12 +40,6 @@ describe Proceso::PID do
|
|
40
40
|
process.virtual_size.should == 100
|
41
41
|
end
|
42
42
|
|
43
|
-
it "should return cpu usage" do
|
44
|
-
process.cpu_usage.should be_kind_of(Float)
|
45
|
-
process.stub(:cpu_usage).and_return(0.1)
|
46
|
-
process.cpu_usage.should == 0.1
|
47
|
-
end
|
48
|
-
|
49
43
|
it "should return user cpu times" do
|
50
44
|
process.user_cpu_times.should be_kind_of(Float)
|
51
45
|
process.stub(:user_cpu_times).and_return(0.1)
|
data/spec/proceso_spec.rb
CHANGED
@@ -6,15 +6,6 @@ describe Proceso do
|
|
6
6
|
Proceso::NCPU.should_not == 0
|
7
7
|
end
|
8
8
|
|
9
|
-
it "should return list of pids" do
|
10
|
-
Proceso.pids.should be_kind_of(Array)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should return list of Proceso::PID objects" do
|
14
|
-
Proceso.processes.should be_kind_of(Array)
|
15
|
-
Proceso.processes.last.should be_kind_of(Proceso::PID)
|
16
|
-
end
|
17
|
-
|
18
9
|
it "should return current process" do
|
19
10
|
Proceso.current.should_not be_nil
|
20
11
|
Proceso.current.pid.should == Process.pid
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: proceso
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bryan Goines
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -88,7 +88,6 @@ extensions:
|
|
88
88
|
- ext/proceso/extconf.rb
|
89
89
|
extra_rdoc_files: []
|
90
90
|
files:
|
91
|
-
- lib/proceso/middleware.rb
|
92
91
|
- lib/proceso/pid.rb
|
93
92
|
- lib/proceso/version.rb
|
94
93
|
- lib/proceso.rb
|
@@ -126,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
126
125
|
version: '0'
|
127
126
|
requirements: []
|
128
127
|
rubyforge_project:
|
129
|
-
rubygems_version: 2.
|
128
|
+
rubygems_version: 2.0.14
|
130
129
|
signing_key:
|
131
130
|
specification_version: 4
|
132
131
|
summary: Simple process information gather
|
data/lib/proceso/middleware.rb
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
require 'rack'
|
2
|
-
|
3
|
-
module Proceso
|
4
|
-
class Middleware
|
5
|
-
|
6
|
-
SUBSCRIPTION = 'proceso.usage'
|
7
|
-
|
8
|
-
def self.report
|
9
|
-
subscribe do |name, start, finish, id, payload|
|
10
|
-
puts
|
11
|
-
puts "******* PROCESO INFORMATION *******"
|
12
|
-
mem_used = (payload[:mem_used].to_f / 1024.0).round(1)
|
13
|
-
cpu_used = payload[:cpu_used].to_f.round(1)
|
14
|
-
path = payload[:request].path_info
|
15
|
-
resp_time = payload[:resp_time]
|
16
|
-
puts "MEM: #{mem_used}KB CPU: #{cpu_used} RESP: #{resp_time}ms PATH: #{path}"
|
17
|
-
puts "******* END OF PROCESO INFORMATION *******"
|
18
|
-
puts
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.subscribe(&blk)
|
23
|
-
return unless defined?(ActiveSupport::Notifications)
|
24
|
-
ActiveSupport::Notifications.subscribe(SUBSCRIPTION, &blk)
|
25
|
-
end
|
26
|
-
|
27
|
-
attr_reader :app, :pid, :notifier
|
28
|
-
|
29
|
-
def initialize(app)
|
30
|
-
@app = app
|
31
|
-
@notifier ||= ActiveSupport::Notifications if defined?(ActiveSupport::Notifications)
|
32
|
-
@pid = Process.pid
|
33
|
-
end
|
34
|
-
|
35
|
-
def call(env)
|
36
|
-
measure_process_usage(env) do
|
37
|
-
@app.call(env)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def measure_process_usage(env)
|
42
|
-
mem_1 = process.mem_size
|
43
|
-
cpu_1 = process.user_cpu_times
|
44
|
-
resp_1 = Time.now.to_i
|
45
|
-
response = yield
|
46
|
-
mem_2 = process.mem_size
|
47
|
-
cpu_2 = process.user_cpu_times
|
48
|
-
resp_2 = Time.now.to_i
|
49
|
-
process_usage = process_info(env, (mem_2 - mem_1), (cpu_2 - cpu_1), (resp_2 - resp_1))
|
50
|
-
notifier.instrument(SUBSCRIPTION, process_usage)
|
51
|
-
response
|
52
|
-
end
|
53
|
-
|
54
|
-
def process_info(env, mem_used, cpu_used, resp_time)
|
55
|
-
req = Rack::Request.new(env)
|
56
|
-
{
|
57
|
-
pid: process.pid,
|
58
|
-
mem_used: mem_used,
|
59
|
-
cpu_used: cpu_used,
|
60
|
-
resp_time: resp_time,
|
61
|
-
request: req
|
62
|
-
}
|
63
|
-
end
|
64
|
-
|
65
|
-
def process
|
66
|
-
@process ||= Proceso::PID.new(pid)
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|