scout-gear 7.2.0 → 8.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.vimproject +51 -6
- data/VERSION +1 -1
- data/bin/scout +6 -3
- data/lib/rbbt-scout.rb +1 -0
- data/lib/scout/cmd.rb +1 -1
- data/lib/scout/concurrent_stream.rb +33 -29
- data/lib/scout/config.rb +1 -1
- data/lib/scout/exceptions.rb +1 -0
- data/lib/scout/log/color.rb +4 -2
- data/lib/scout/log/progress/report.rb +1 -1
- data/lib/scout/log/progress/util.rb +71 -2
- data/lib/scout/log/progress.rb +1 -1
- data/lib/scout/log/trap.rb +107 -0
- data/lib/scout/log.rb +56 -21
- data/lib/scout/meta_extension.rb +13 -6
- data/lib/scout/misc/digest.rb +1 -1
- data/lib/scout/misc/format.rb +12 -0
- data/lib/scout/misc/helper.rb +31 -0
- data/lib/scout/misc/insist.rb +1 -1
- data/lib/scout/misc/monitor.rb +12 -1
- data/lib/scout/misc/system.rb +10 -0
- data/lib/scout/misc.rb +1 -0
- data/lib/scout/named_array.rb +65 -3
- data/lib/scout/open/lock/lockfile.rb +587 -0
- data/lib/scout/open/lock.rb +28 -2
- data/lib/scout/open/remote.rb +4 -0
- data/lib/scout/open/stream.rb +111 -42
- data/lib/scout/open/util.rb +13 -3
- data/lib/scout/path/find.rb +9 -1
- data/lib/scout/path/util.rb +35 -0
- data/lib/scout/persist/serialize.rb +18 -5
- data/lib/scout/persist.rb +60 -30
- data/lib/scout/resource/path.rb +53 -0
- data/lib/scout/resource/produce.rb +0 -8
- data/lib/scout/resource/util.rb +2 -1
- data/lib/scout/semaphore.rb +8 -1
- data/lib/scout/tmpfile.rb +7 -8
- data/lib/scout/tsv/attach.rb +177 -0
- data/lib/scout/tsv/change_id.rb +40 -0
- data/lib/scout/tsv/dumper.rb +85 -54
- data/lib/scout/tsv/index.rb +188 -20
- data/lib/scout/tsv/open.rb +182 -0
- data/lib/scout/tsv/parser.rb +200 -118
- data/lib/scout/tsv/path.rb +5 -6
- data/lib/scout/tsv/persist/adapter.rb +26 -37
- data/lib/scout/tsv/persist/fix_width_table.rb +327 -0
- data/lib/scout/tsv/persist/serialize.rb +117 -0
- data/lib/scout/tsv/persist/tokyocabinet.rb +6 -3
- data/lib/scout/tsv/persist.rb +4 -2
- data/lib/scout/tsv/transformer.rb +141 -0
- data/lib/scout/tsv/traverse.rb +136 -37
- data/lib/scout/tsv/util/filter.rb +312 -0
- data/lib/scout/tsv/util/process.rb +73 -0
- data/lib/scout/tsv/util/reorder.rb +81 -0
- data/lib/scout/tsv/util/select.rb +265 -0
- data/lib/scout/tsv/util/unzip.rb +86 -0
- data/lib/scout/tsv/util.rb +126 -19
- data/lib/scout/tsv.rb +28 -5
- data/lib/scout/work_queue/socket.rb +6 -1
- data/lib/scout/work_queue/worker.rb +5 -2
- data/lib/scout/work_queue.rb +15 -8
- data/lib/scout/workflow/definition.rb +29 -2
- data/lib/scout/workflow/step/dependencies.rb +24 -4
- data/lib/scout/workflow/step/info.rb +40 -5
- data/lib/scout/workflow/step/progress.rb +14 -0
- data/lib/scout/workflow/step/provenance.rb +8 -7
- data/lib/scout/workflow/step/status.rb +45 -0
- data/lib/scout/workflow/step.rb +104 -33
- data/lib/scout/workflow/task/inputs.rb +14 -20
- data/lib/scout/workflow/task.rb +86 -47
- data/lib/scout/workflow/usage.rb +10 -6
- data/scout-gear.gemspec +30 -3
- data/scout_commands/workflow/task +37 -9
- data/scout_commands/workflow/task_old +2 -2
- data/test/scout/open/test_stream.rb +61 -59
- data/test/scout/path/test_find.rb +10 -1
- data/test/scout/resource/test_produce.rb +15 -0
- data/test/scout/test_meta_extension.rb +25 -0
- data/test/scout/test_named_array.rb +18 -0
- data/test/scout/test_persist.rb +67 -0
- data/test/scout/test_tmpfile.rb +1 -1
- data/test/scout/test_tsv.rb +222 -3
- data/test/scout/test_work_queue.rb +21 -18
- data/test/scout/tsv/persist/test_adapter.rb +11 -1
- data/test/scout/tsv/persist/test_fix_width_table.rb +134 -0
- data/test/scout/tsv/persist/test_tokyocabinet.rb +29 -1
- data/test/scout/tsv/test_attach.rb +227 -0
- data/test/scout/tsv/test_change_id.rb +98 -0
- data/test/scout/tsv/test_dumper.rb +1 -1
- data/test/scout/tsv/test_index.rb +127 -3
- data/test/scout/tsv/test_open.rb +167 -0
- data/test/scout/tsv/test_parser.rb +45 -3
- data/test/scout/tsv/test_persist.rb +9 -0
- data/test/scout/tsv/test_transformer.rb +108 -0
- data/test/scout/tsv/test_traverse.rb +195 -3
- data/test/scout/tsv/test_util.rb +24 -0
- data/test/scout/tsv/util/test_filter.rb +188 -0
- data/test/scout/tsv/util/test_process.rb +47 -0
- data/test/scout/tsv/util/test_reorder.rb +94 -0
- data/test/scout/tsv/util/test_select.rb +58 -0
- data/test/scout/tsv/util/test_unzip.rb +112 -0
- data/test/scout/work_queue/test_socket.rb +0 -1
- data/test/scout/work_queue/test_worker.rb +63 -6
- data/test/scout/workflow/step/test_load.rb +3 -3
- data/test/scout/workflow/step/test_status.rb +31 -0
- data/test/scout/workflow/task/test_inputs.rb +14 -14
- data/test/scout/workflow/test_step.rb +13 -13
- data/test/scout/workflow/test_task.rb +168 -32
- data/test/scout/workflow/test_usage.rb +33 -6
- data/test/test_helper.rb +3 -1
- metadata +29 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48f6bb392f3391e2816e701887bfd98617b1a68bc533c8b6de3307f25c84906d
|
4
|
+
data.tar.gz: 476858f63deaa7fa9fc531c7872bdaefa1d6b3ed32cdacbe41f53d1d170fcc87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c61501c8cc79b57b64cb8613efc8b00fb84908bf0d55b008c6a6a39b99ea6bffa53630a8e134c07a49cb7bc4145ec181df057b6ba1eebfd2d722b2aa2d2e63d0
|
7
|
+
data.tar.gz: 100356a04cd34eba627239668747023ee5be4455ebbee715df39dbe04e9c8dfcac7007ce310e4622cf0c7e16ee9159e6fc2d4eefcaa486c24519c7f99185facf
|
data/.vimproject
CHANGED
@@ -9,10 +9,10 @@ scout-gear=/$PWD filter="*.rb *.yaml" {
|
|
9
9
|
find
|
10
10
|
glob
|
11
11
|
workflow=workflow{
|
12
|
-
task_old
|
13
12
|
task
|
14
13
|
list
|
15
14
|
info
|
15
|
+
task_old
|
16
16
|
}
|
17
17
|
}
|
18
18
|
lib=lib {
|
@@ -49,6 +49,7 @@ scout-gear=/$PWD filter="*.rb *.yaml" {
|
|
49
49
|
report.rb
|
50
50
|
util.rb
|
51
51
|
}
|
52
|
+
trap.rb
|
52
53
|
}
|
53
54
|
tmpfile.rb
|
54
55
|
simple_opt.rb
|
@@ -70,6 +71,9 @@ scout-gear=/$PWD filter="*.rb *.yaml" {
|
|
70
71
|
open.rb
|
71
72
|
open=open{
|
72
73
|
lock.rb
|
74
|
+
lock=lock{
|
75
|
+
lockfile.rb
|
76
|
+
}
|
73
77
|
stream.rb
|
74
78
|
remote.rb
|
75
79
|
util.rb
|
@@ -98,11 +102,13 @@ scout-gear=/$PWD filter="*.rb *.yaml" {
|
|
98
102
|
step.rb
|
99
103
|
step=step{
|
100
104
|
info.rb
|
105
|
+
status.rb
|
101
106
|
load.rb
|
102
107
|
file.rb
|
103
108
|
config.rb
|
104
109
|
dependencies.rb
|
105
110
|
provenance.rb
|
111
|
+
progress.rb
|
106
112
|
}
|
107
113
|
task.rb
|
108
114
|
task=task{
|
@@ -120,29 +126,66 @@ scout-gear=/$PWD filter="*.rb *.yaml" {
|
|
120
126
|
}
|
121
127
|
tsv.rb
|
122
128
|
tsv=tsv{
|
129
|
+
util.rb
|
130
|
+
util=util{
|
131
|
+
process.rb
|
132
|
+
select.rb
|
133
|
+
process.rb
|
134
|
+
unzip.rb
|
135
|
+
reorder.rb
|
136
|
+
}
|
123
137
|
parser.rb
|
124
138
|
dumper.rb
|
139
|
+
transformer.rb
|
125
140
|
persist.rb
|
126
|
-
index.rb
|
127
141
|
persist=persist{
|
128
142
|
adapter.rb
|
143
|
+
serialize.rb
|
129
144
|
tokyocabinet.rb
|
145
|
+
fix_width_table.rb
|
130
146
|
}
|
147
|
+
index.rb
|
131
148
|
traverse.rb
|
132
|
-
|
149
|
+
attach.rb
|
150
|
+
change_id.rb
|
133
151
|
path.rb
|
152
|
+
open.rb
|
134
153
|
}
|
135
154
|
}
|
136
155
|
}
|
137
156
|
test=test {
|
138
157
|
test_helper.rb
|
158
|
+
test_scout-gear.rb
|
139
159
|
scout=scout{
|
160
|
+
test_cmd.rb
|
161
|
+
test_concurrent_stream.rb
|
162
|
+
test_config.rb
|
140
163
|
test_indiferent_hash.rb
|
164
|
+
test_log.rb
|
165
|
+
test_meta_extension.rb
|
166
|
+
test_misc.rb
|
167
|
+
test_named_array.rb
|
168
|
+
test_open.rb
|
169
|
+
test_path.rb
|
170
|
+
test_persist.rb
|
171
|
+
test_resource.rb
|
172
|
+
test_semaphore.rb
|
173
|
+
test_tmpfile.rb
|
174
|
+
test_tsv.rb
|
175
|
+
test_work_queue.rb
|
176
|
+
test_workflow.rb
|
177
|
+
workflow=workflow{
|
178
|
+
test_definition.rb
|
179
|
+
test_documentation.rb
|
180
|
+
test_step.rb
|
181
|
+
test_task.rb
|
182
|
+
test_usage.rb
|
183
|
+
test_util.rb
|
184
|
+
}
|
141
185
|
indiferent_hash=indiferent_hash{
|
186
|
+
test_case_insensitive.rb
|
142
187
|
test_options.rb
|
143
188
|
}
|
144
|
-
test_log.rb
|
145
|
-
test_tmpfile.rb
|
146
189
|
}
|
147
190
|
}
|
148
191
|
share=share{
|
@@ -275,6 +318,7 @@ scout-gear=/$PWD filter="*.rb *.yaml" {
|
|
275
318
|
|
276
319
|
workflow.rb
|
277
320
|
workflow=workflow{
|
321
|
+
refactor.rb
|
278
322
|
annotate.rb
|
279
323
|
|
280
324
|
definition.rb
|
@@ -356,6 +400,7 @@ scout-gear=/$PWD filter="*.rb *.yaml" {
|
|
356
400
|
|
357
401
|
tsv.rb
|
358
402
|
tsv=tsv{
|
403
|
+
refactor.rb
|
359
404
|
parser.rb
|
360
405
|
dumper.rb
|
361
406
|
|
@@ -479,7 +524,7 @@ scout-gear=/$PWD filter="*.rb *.yaml" {
|
|
479
524
|
test_path.rb
|
480
525
|
}
|
481
526
|
workflow=workflow{
|
482
|
-
|
527
|
+
test_soap.rb
|
483
528
|
test_doc.rb
|
484
529
|
test_step.rb
|
485
530
|
test_task.rb
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
8.0.0
|
data/bin/scout
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
$LOAD_PATH.unshift File.join(__dir__, '../lib')
|
4
4
|
|
5
|
+
ENV["SCOUT_NOCOLOR"] = "true" if ARGV.include? "--nocolor"
|
6
|
+
|
7
|
+
ENV["SCOUT_NO_PROGRESS"] = "true" if ARGV.include? "--nobar"
|
8
|
+
|
5
9
|
require 'scout-gear'
|
6
10
|
|
7
11
|
class CmdStop < Exception
|
@@ -44,7 +48,6 @@ if dev_dir
|
|
44
48
|
end
|
45
49
|
end
|
46
50
|
|
47
|
-
Log.nocolor = true if ARGV.include? "--nocolor"
|
48
51
|
|
49
52
|
require 'scout/simple_opt'
|
50
53
|
|
@@ -66,11 +69,11 @@ Log.nocolor = true if options[:nocolor]
|
|
66
69
|
locate = options.delete :locate_file
|
67
70
|
|
68
71
|
if options[:log_file]
|
69
|
-
Log.logfile(options
|
72
|
+
Log.logfile(options.delete(:log_file))
|
70
73
|
end
|
71
74
|
|
72
75
|
if options[:log]
|
73
|
-
Log.severity = options
|
76
|
+
Log.severity = options.delete(:log).to_i
|
74
77
|
else
|
75
78
|
global_severity = Log.get_level(Scout.etc.log_severity.read.strip) if Scout.etc.log_severity.exists?
|
76
79
|
if ENV["SCOUT_LOG"]
|
data/lib/rbbt-scout.rb
CHANGED
data/lib/scout/cmd.rb
CHANGED
@@ -272,7 +272,7 @@ module CMD
|
|
272
272
|
sout.close unless sout.closed?
|
273
273
|
|
274
274
|
status = wait_thr.value
|
275
|
-
if
|
275
|
+
if status && ! status.success? && ! no_fail
|
276
276
|
if !err.empty?
|
277
277
|
raise ProcessFailed.new pid, "#{cmd} failed with error status #{status.exitstatus}.\n#{err}"
|
278
278
|
else
|
@@ -9,11 +9,11 @@ module AbortedStream
|
|
9
9
|
end
|
10
10
|
|
11
11
|
module ConcurrentStream
|
12
|
-
attr_accessor :threads, :pids, :callback, :abort_callback, :filename, :joined, :aborted, :autojoin, :
|
12
|
+
attr_accessor :threads, :pids, :callback, :abort_callback, :filename, :joined, :aborted, :autojoin, :lock, :no_fail, :pair, :thread, :stream_exception, :log, :std_err, :next
|
13
13
|
|
14
14
|
def self.setup(stream, options = {}, &block)
|
15
15
|
|
16
|
-
threads, pids, callback, abort_callback, filename, autojoin,
|
16
|
+
threads, pids, callback, abort_callback, filename, autojoin, lock, no_fail, pair, next_stream = IndiferentHash.process_options options, :threads, :pids, :callback, :abort_callback, :filename, :autojoin, :lock, :no_fail, :pair, :next
|
17
17
|
stream.extend ConcurrentStream unless ConcurrentStream === stream
|
18
18
|
|
19
19
|
stream.threads ||= []
|
@@ -54,7 +54,7 @@ module ConcurrentStream
|
|
54
54
|
|
55
55
|
stream.filename = filename.nil? ? stream.inspect.split(":").last[0..-2] : filename
|
56
56
|
|
57
|
-
stream.
|
57
|
+
stream.lock = lock unless lock.nil?
|
58
58
|
|
59
59
|
stream.aborted = false
|
60
60
|
|
@@ -62,7 +62,7 @@ module ConcurrentStream
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def annotate(stream)
|
65
|
-
ConcurrentStream.setup(stream, :threads => threads, :pids => pids, :callback => callback, :abort_callback => abort_callback, :filename => filename, :autojoin => autojoin, :
|
65
|
+
ConcurrentStream.setup(stream, :threads => threads, :pids => pids, :callback => callback, :abort_callback => abort_callback, :filename => filename, :autojoin => autojoin, :lock => lock)
|
66
66
|
stream
|
67
67
|
end
|
68
68
|
|
@@ -136,11 +136,16 @@ module ConcurrentStream
|
|
136
136
|
begin
|
137
137
|
join_threads
|
138
138
|
join_pids
|
139
|
+
raise stream_exception if stream_exception
|
139
140
|
join_callback
|
140
141
|
close unless closed?
|
141
142
|
ensure
|
142
143
|
@joined = true
|
143
|
-
|
144
|
+
begin
|
145
|
+
lock.unlock if lock && lock.locked?
|
146
|
+
rescue
|
147
|
+
Log.exception $!
|
148
|
+
end
|
144
149
|
raise stream_exception if stream_exception
|
145
150
|
end
|
146
151
|
end
|
@@ -151,21 +156,17 @@ module ConcurrentStream
|
|
151
156
|
name += " - file:#{filename}" if filename
|
152
157
|
Log.low "Aborting threads (#{name}) - #{@threads.collect{|t| Log.fingerprint(t) } * ", "}"
|
153
158
|
|
154
|
-
@threads.
|
159
|
+
threads = @threads.dup
|
160
|
+
@threads.clear
|
161
|
+
threads.each do |t|
|
155
162
|
next if t == Thread.current
|
163
|
+
next if t["aborted"]
|
164
|
+
t["aborted"] = true
|
165
|
+
exception = exception.nil? ? Aborted.new : exception
|
156
166
|
Log.debug "Aborting thread #{Log.fingerprint(t)} with exception: #{exception}"
|
157
|
-
t.raise(
|
167
|
+
t.raise(exception)
|
168
|
+
t.join
|
158
169
|
end
|
159
|
-
|
160
|
-
@threads.each do |t|
|
161
|
-
next if t == Thread.current
|
162
|
-
begin
|
163
|
-
t.join unless t == Thread.current
|
164
|
-
rescue Aborted
|
165
|
-
rescue Exception
|
166
|
-
Log.debug "Thread (#{name}) exception: #{$!.message}"
|
167
|
-
end
|
168
|
-
end
|
169
170
|
end
|
170
171
|
|
171
172
|
def abort_pids
|
@@ -205,8 +206,8 @@ module ConcurrentStream
|
|
205
206
|
ensure
|
206
207
|
close unless closed?
|
207
208
|
|
208
|
-
if
|
209
|
-
|
209
|
+
if lock and lock.locked?
|
210
|
+
lock.unlock
|
210
211
|
end
|
211
212
|
end
|
212
213
|
end
|
@@ -216,12 +217,11 @@ module ConcurrentStream
|
|
216
217
|
begin
|
217
218
|
super(*args)
|
218
219
|
rescue
|
219
|
-
Log.exception $!
|
220
220
|
self.abort
|
221
221
|
self.join
|
222
222
|
stream_raise_exception $!
|
223
223
|
ensure
|
224
|
-
self.join if self.closed?
|
224
|
+
self.join if ! @stream_exception && (self.closed? || self.eof?)
|
225
225
|
end
|
226
226
|
else
|
227
227
|
super(*args)
|
@@ -231,15 +231,19 @@ module ConcurrentStream
|
|
231
231
|
def read(*args)
|
232
232
|
begin
|
233
233
|
super(*args)
|
234
|
-
rescue
|
235
|
-
|
236
|
-
raise
|
234
|
+
rescue Exception
|
235
|
+
@stream_exception ||= $!
|
236
|
+
raise @stream_exception
|
237
237
|
ensure
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
238
|
+
if ! @stream_exception && autojoin && ! closed?
|
239
|
+
begin
|
240
|
+
done = eof?
|
241
|
+
rescue Exception
|
242
|
+
self.abort($!)
|
243
|
+
raise $!
|
244
|
+
end
|
245
|
+
close if done
|
246
|
+
end
|
243
247
|
end
|
244
248
|
end
|
245
249
|
|
data/lib/scout/config.rb
CHANGED
@@ -148,7 +148,7 @@ module Scout::Config
|
|
148
148
|
end
|
149
149
|
|
150
150
|
def self.process_config(config)
|
151
|
-
if
|
151
|
+
if Path.is_filename?(config) && File.exist?(config)
|
152
152
|
Scout::Config.load_file(config)
|
153
153
|
elsif Scout.etc.config_profile[config].exists?
|
154
154
|
Scout::Config.load_file(Scout.etc.config_profile[config].find)
|
data/lib/scout/exceptions.rb
CHANGED
data/lib/scout/log/color.rb
CHANGED
@@ -2,7 +2,6 @@ require_relative 'color_class'
|
|
2
2
|
require_relative '../indiferent_hash'
|
3
3
|
|
4
4
|
require 'term/ansicolor'
|
5
|
-
require 'colorist'
|
6
5
|
|
7
6
|
module Colorize
|
8
7
|
def self.colors=(colors)
|
@@ -135,7 +134,7 @@ module Log
|
|
135
134
|
attr_accessor :nocolor
|
136
135
|
end
|
137
136
|
|
138
|
-
self.nocolor = ENV["
|
137
|
+
self.nocolor = ENV["SCOUT_NOCOLOR"] == 'true'
|
139
138
|
|
140
139
|
WHITE, DARK, GREEN, YELLOW, RED = Color::SOLARIZED.values_at :base0, :base00, :green, :yellow, :magenta
|
141
140
|
|
@@ -153,6 +152,9 @@ module Log
|
|
153
152
|
:start => cyan,
|
154
153
|
:done => green,
|
155
154
|
:error => red,
|
155
|
+
:time => cyan,
|
156
|
+
:task => yellow,
|
157
|
+
:workflow => yellow,
|
156
158
|
})
|
157
159
|
HIGHLIGHT = "\033[1m"
|
158
160
|
|
@@ -229,7 +229,7 @@ module Log
|
|
229
229
|
done_msg << Log.color(:magenta, " · " << desc)
|
230
230
|
print(io, Log.up_lines(@depth) << done_msg << Log.down_lines(@depth))
|
231
231
|
|
232
|
-
|
232
|
+
FileUtils.rm file if file and File.exist?(file)
|
233
233
|
|
234
234
|
begin
|
235
235
|
@callback.call self
|
@@ -29,7 +29,7 @@ module Log
|
|
29
29
|
|
30
30
|
def self.new_bar(max, options = {})
|
31
31
|
options, max = max, nil if Hash === max
|
32
|
-
max = options[:max] if max.nil?
|
32
|
+
max = options[:max] if options && max.nil?
|
33
33
|
cleanup_bars
|
34
34
|
BAR_MUTEX.synchronize do
|
35
35
|
Log::LAST.replace "new_bar" if Log::LAST == "progress"
|
@@ -82,7 +82,7 @@ module Log
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def self.with_bar(max = nil, options = {})
|
85
|
-
bar = new_bar(max, options)
|
85
|
+
bar = options.include?(:bar) ? options[:bar] : new_bar(max, options)
|
86
86
|
begin
|
87
87
|
error = false
|
88
88
|
keep = false
|
@@ -96,6 +96,75 @@ module Log
|
|
96
96
|
remove_bar(bar, error) if bar && ! keep
|
97
97
|
end
|
98
98
|
end
|
99
|
+
|
100
|
+
def self.guess_obj_max(obj)
|
101
|
+
begin
|
102
|
+
case obj
|
103
|
+
when (defined? Step and Step)
|
104
|
+
if obj.done?
|
105
|
+
path = obj.path
|
106
|
+
path = path.find if path.respond_to? :find
|
107
|
+
if File.exist? path
|
108
|
+
CMD.cmd("wc -l '#{path}'").read.to_i
|
109
|
+
else
|
110
|
+
nil
|
111
|
+
end
|
112
|
+
else
|
113
|
+
nil
|
114
|
+
end
|
115
|
+
when TSV
|
116
|
+
obj.length
|
117
|
+
when Array, Hash
|
118
|
+
obj.size
|
119
|
+
when File
|
120
|
+
return nil if Open.gzip?(obj.filename) or Open.bgzip?(obj.filename) or Open.remote?(obj.filename)
|
121
|
+
CMD.cmd("wc -l '#{obj.filename}'").read.to_i
|
122
|
+
when Path, String
|
123
|
+
obj = obj.find if Path === obj
|
124
|
+
if File.exist? obj
|
125
|
+
return nil if Open.gzip?(obj) or Open.bgzip?(obj)
|
126
|
+
CMD.cmd("wc -l '#{obj}'").read.to_i
|
127
|
+
else
|
128
|
+
nil
|
129
|
+
end
|
130
|
+
end
|
131
|
+
rescue Exception
|
132
|
+
nil
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
def self.get_obj_bar(obj, bar = nil)
|
137
|
+
return nil if bar.nil? || bar == false
|
138
|
+
case bar
|
139
|
+
when String
|
140
|
+
max = guess_obj_max(obj)
|
141
|
+
Log::ProgressBar.new_bar(max, {:desc => bar})
|
142
|
+
when TrueClass
|
143
|
+
max = guess_obj_max(obj)
|
144
|
+
Log::ProgressBar.new_bar(max)
|
145
|
+
when Numeric
|
146
|
+
max = guess_obj_max(obj)
|
147
|
+
Log::ProgressBar.new_bar(bar)
|
148
|
+
when Hash
|
149
|
+
max = IndiferentHash.process_options(bar, :max) || max
|
150
|
+
Log::ProgressBar.new_bar(max, bar)
|
151
|
+
when Log::ProgressBar
|
152
|
+
bar.max ||= guess_obj_max(obj)
|
153
|
+
bar
|
154
|
+
else
|
155
|
+
if (defined? Step and Step === bar)
|
156
|
+
max = guess_obj_max(obj)
|
157
|
+
Log::ProgressBar.new_bar(max, {:desc => bar.status, :file => bar.file(:progress)})
|
158
|
+
else
|
159
|
+
bar
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def self.with_obj_bar(obj, bar = true, &block)
|
165
|
+
bar = get_obj_bar(obj, bar)
|
166
|
+
with_bar nil, bar: bar, &block
|
167
|
+
end
|
99
168
|
end
|
100
169
|
end
|
101
170
|
|
data/lib/scout/log/progress.rb
CHANGED
@@ -0,0 +1,107 @@
|
|
1
|
+
module Log
|
2
|
+
def self.trap_std(msg = "STDOUT", msge = "STDERR", severity = 0, severity_err = nil)
|
3
|
+
sout, sin = Misc.pipe
|
4
|
+
soute, sine = Misc.pipe
|
5
|
+
backup_stderr = STDERR.dup
|
6
|
+
backup_stdout = STDOUT.dup
|
7
|
+
old_logfile = Log.logfile
|
8
|
+
Log.logfile(backup_stderr)
|
9
|
+
|
10
|
+
severity_err ||= severity
|
11
|
+
th_log = Thread.new do
|
12
|
+
while line = sout.gets
|
13
|
+
Log.logn "#{msg}: " + line, severity
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
th_loge = Thread.new do
|
18
|
+
while line = soute.gets
|
19
|
+
Log.logn "#{msge}: " + line, severity_err
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
begin
|
24
|
+
STDOUT.reopen(sin)
|
25
|
+
STDERR.reopen(sine)
|
26
|
+
yield
|
27
|
+
ensure
|
28
|
+
STDERR.reopen backup_stderr
|
29
|
+
STDOUT.reopen backup_stdout
|
30
|
+
sin.close
|
31
|
+
sine.close
|
32
|
+
th_log.join
|
33
|
+
th_loge.join
|
34
|
+
backup_stdout.close
|
35
|
+
backup_stderr.close
|
36
|
+
Log.logfile = old_logfile
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.trap_stderr(msg = "STDERR", severity = 0)
|
41
|
+
sout, sin = Misc.pipe
|
42
|
+
backup_stderr = STDERR.dup
|
43
|
+
old_logfile = Log.logfile
|
44
|
+
Log.logfile(backup_stderr)
|
45
|
+
|
46
|
+
th_log = Thread.new do
|
47
|
+
while line = sout.gets
|
48
|
+
Log.logn "#{msg}: " + line, severity
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
begin
|
53
|
+
STDERR.reopen(sin)
|
54
|
+
yield
|
55
|
+
sin.close
|
56
|
+
ensure
|
57
|
+
STDERR.reopen backup_stderr
|
58
|
+
th_log.join
|
59
|
+
backup_stderr.close
|
60
|
+
Log.logfile = old_logfile
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def self._ignore_stderr
|
65
|
+
begin
|
66
|
+
File.open('/dev/null', 'w') do |f|
|
67
|
+
backup_stderr = STDERR.dup
|
68
|
+
STDERR.reopen(f)
|
69
|
+
begin
|
70
|
+
yield
|
71
|
+
ensure
|
72
|
+
STDERR.reopen backup_stderr
|
73
|
+
backup_stderr.close
|
74
|
+
end
|
75
|
+
end
|
76
|
+
rescue Errno::ENOENT
|
77
|
+
yield
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
def self.ignore_stderr(&block)
|
83
|
+
_ignore_stderr &block
|
84
|
+
end
|
85
|
+
|
86
|
+
def self._ignore_stdout
|
87
|
+
begin
|
88
|
+
File.open('/dev/null', 'w') do |f|
|
89
|
+
backup_stdout = STDOUT.dup
|
90
|
+
STDOUT.reopen(f)
|
91
|
+
begin
|
92
|
+
yield
|
93
|
+
ensure
|
94
|
+
STDOUT.reopen backup_stdout
|
95
|
+
backup_stdout.close
|
96
|
+
end
|
97
|
+
end
|
98
|
+
rescue Errno::ENOENT
|
99
|
+
yield
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
|
104
|
+
def self.ignore_stdout(&block)
|
105
|
+
_ignore_stdout &block
|
106
|
+
end
|
107
|
+
end
|