splib 1.4.1 → 1.4.2
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.
- data/CHANGELOG +6 -0
- data/Rakefile +1 -1
- data/lib/splib/Exec.rb +36 -7
- data/lib/splib/Float.rb +1 -6
- data/test/cases/Exec.rb +12 -0
- metadata +2 -2
data/CHANGELOG
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
1.4.2
|
2
|
+
* Modify Float#within_delta? to use #between? like any
|
3
|
+
reasonable person would
|
4
|
+
* Add a priority setting for Splib.exec
|
5
|
+
* Add process tracking with Splib.exec so we don't leave
|
6
|
+
children laying around if we get shutdown
|
1
7
|
1.4.1
|
2
8
|
* Updates in Monitor to attempt to force
|
3
9
|
threads to stay put
|
data/Rakefile
CHANGED
@@ -15,7 +15,7 @@ spec = Gem::Specification.new do |s|
|
|
15
15
|
s.name = 'splib'
|
16
16
|
s.author = 'spox'
|
17
17
|
s.email = 'spox@modspox.com'
|
18
|
-
s.version = '1.4.
|
18
|
+
s.version = '1.4.2'
|
19
19
|
s.summary = 'Spox Library'
|
20
20
|
s.platform = Gem::Platform::RUBY
|
21
21
|
s.files = %w(LICENSE README.rdoc CHANGELOG Rakefile) + Dir.glob("{bin,lib,spec,test}/**/*")
|
data/lib/splib/Exec.rb
CHANGED
@@ -2,6 +2,13 @@ require 'timeout'
|
|
2
2
|
|
3
3
|
module Splib
|
4
4
|
|
5
|
+
@@processes = []
|
6
|
+
Kernel.at_exit{@@processes.each{|p| Process.kill('KILL', pro.pid) }}
|
7
|
+
|
8
|
+
# Returns current array of running Processes
|
9
|
+
def self.running_procs
|
10
|
+
@@processes
|
11
|
+
end
|
5
12
|
# command:: command string to execute
|
6
13
|
# timeout:: length of time to execute
|
7
14
|
# maxbytes:: maximum number return bytes allowed
|
@@ -18,17 +25,23 @@ module Splib
|
|
18
25
|
# command:: command to execute
|
19
26
|
# timeout:: maximum number of seconds to run
|
20
27
|
# maxbytes:: maximum number of result bytes to accept
|
28
|
+
# priority:: set priority of the process
|
21
29
|
# Execute a system command (use with care)
|
22
30
|
# This is the normal exec command that is used
|
23
|
-
def self.standard_exec(command, timeout=10, maxbytes=500)
|
24
|
-
|
31
|
+
def self.standard_exec(command, timeout=10, maxbytes=500, priority=nil)
|
32
|
+
timeout = timeout.to_i
|
25
33
|
maxbytes = maxbytes.to_i
|
34
|
+
priority = priority.to_i
|
26
35
|
output = []
|
27
36
|
pro = nil
|
28
37
|
begin
|
29
38
|
if(timeout > 0)
|
30
39
|
Timeout::timeout(timeout) do
|
31
40
|
pro = IO.popen(command)
|
41
|
+
@@processes << pro
|
42
|
+
if(priority > 0)
|
43
|
+
Process.setpriority(Process::PRIO_PROCESS, pro.pid, priority)
|
44
|
+
end
|
32
45
|
until(pro.closed? || pro.eof?)
|
33
46
|
output << pro.getc.chr
|
34
47
|
if(maxbytes > 0 && output.size > maxbytes)
|
@@ -38,6 +51,7 @@ module Splib
|
|
38
51
|
end
|
39
52
|
else
|
40
53
|
pro = IO.popen(command)
|
54
|
+
@@processes << pro
|
41
55
|
until(pro.closed? || pro.eof?)
|
42
56
|
output << pro.getc.chr
|
43
57
|
if(maxbytes > 0 && output.size > maxbytes)
|
@@ -48,6 +62,7 @@ module Splib
|
|
48
62
|
output = output.join('')
|
49
63
|
ensure
|
50
64
|
Process.kill('KILL', pro.pid) if Process.waitpid2(pro.pid, Process::WNOHANG).nil? # make sure the process is dead
|
65
|
+
@@processes.delete(pro)
|
51
66
|
end
|
52
67
|
return output
|
53
68
|
end
|
@@ -58,6 +73,7 @@ module Splib
|
|
58
73
|
# command:: command to execute
|
59
74
|
# timeout:: maximum number of seconds to run
|
60
75
|
# maxbytes:: maximum number of result bytes to accept
|
76
|
+
# priority:: set priority of the process
|
61
77
|
# Execute a system command (use with care)
|
62
78
|
# This is the threaded exec command that is generally used
|
63
79
|
# with JRuby. The regular timeout does not work when executing
|
@@ -66,6 +82,7 @@ module Splib
|
|
66
82
|
def self.thread_exec(command, timeout=10, maxbytes=500)
|
67
83
|
timeout = timeout.to_i
|
68
84
|
maxbytes = maxbytes.to_i
|
85
|
+
priority = priority.to_i
|
69
86
|
current = Thread.current
|
70
87
|
output = []
|
71
88
|
pro = nil
|
@@ -73,6 +90,10 @@ module Splib
|
|
73
90
|
boom = Complete.new
|
74
91
|
begin
|
75
92
|
pro = IO.popen(command)
|
93
|
+
@@processes << pro
|
94
|
+
if(priority > 0)
|
95
|
+
Process.setpriority(Process::PRIO_PROCESS, pro.pid, priority)
|
96
|
+
end
|
76
97
|
until(pro.closed? || pro.eof?)
|
77
98
|
output << pro.getc.chr
|
78
99
|
if(maxbytes > 0 && output.size > maxbytes)
|
@@ -85,13 +106,21 @@ module Splib
|
|
85
106
|
current.raise boom unless boom.is_a?(Timeout::Error)
|
86
107
|
end
|
87
108
|
begin
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
109
|
+
begin
|
110
|
+
if(timeout > 0)
|
111
|
+
thread.join(timeout)
|
112
|
+
thread.raise Timeout::Error.new
|
113
|
+
raise Timeout::Error.new
|
114
|
+
else
|
115
|
+
thread.join
|
116
|
+
end
|
117
|
+
output.join('')
|
118
|
+
rescue Complete
|
119
|
+
# ignore this exception
|
120
|
+
end
|
93
121
|
ensure
|
94
122
|
Process.kill('KILL', pro.pid) unless pro.nil?
|
123
|
+
@@processes.delete(pro)
|
95
124
|
end
|
96
125
|
output.join('')
|
97
126
|
end
|
data/lib/splib/Float.rb
CHANGED
@@ -7,12 +7,7 @@ module Splib
|
|
7
7
|
raise ArgumentError.new('Missing required argument: :delta') unless args[:delta]
|
8
8
|
e = args[:expected].to_f
|
9
9
|
d = args[:delta].to_f
|
10
|
-
|
11
|
-
if(pos = d.to_s.index('.'))
|
12
|
-
mult = (d.to_s.length - (pos + 1))
|
13
|
-
end
|
14
|
-
mult = 10 ** mult
|
15
|
-
((e*mult) - (self*mult)).abs <= (d*mult)
|
10
|
+
self.between?(e-d, e+d)
|
16
11
|
end
|
17
12
|
end
|
18
13
|
end
|
data/test/cases/Exec.rb
CHANGED
@@ -15,4 +15,16 @@ class ExecTest < Test::Unit::TestCase
|
|
15
15
|
end
|
16
16
|
assert_equal("test\n", Splib.exec('echo test'))
|
17
17
|
end
|
18
|
+
|
19
|
+
def test_running
|
20
|
+
output = nil
|
21
|
+
Thread.new do
|
22
|
+
output = Splib.exec('ruby -e \'sleep(0.4); puts "done"\'')
|
23
|
+
end
|
24
|
+
sleep(0.1)
|
25
|
+
assert_equal(1, Splib.running_procs.size)
|
26
|
+
sleep(0.5)
|
27
|
+
assert_equal("done\n", output)
|
28
|
+
assert_equal(0, Splib.running_procs.size)
|
29
|
+
end
|
18
30
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: splib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- spox
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-29 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|