rbbt-util 5.25.45 → 5.25.46
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/lib/rbbt/tsv/excel.rb +16 -2
- data/lib/rbbt/util/cmd.rb +1 -1
- data/lib/rbbt/util/log/progress/util.rb +4 -0
- data/lib/rbbt/util/open.rb +5 -1
- data/lib/rbbt/workflow/step.rb +3 -2
- data/share/rbbt_commands/system/clean +2 -2
- data/share/rbbt_commands/system/status +4 -3
- data/share/rbbt_commands/tsv/read_excel +1 -0
- data/share/rbbt_commands/workflow/trace +90 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7a6bfb0c182d36d1323ddefe70c93f57e173c55
|
4
|
+
data.tar.gz: fff96627b902d989f53d92a4fe6f327502f75c89
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9cd88404da356142456ea01f3efdb78ec784613a4b7670a4826ca40a4a8d74275632c7cf7ba521437b1554332e713b02904da2735fc30489bdaed9cc858f5e9e
|
7
|
+
data.tar.gz: 26d5b2fc59d6cd3446dfb7de5094c5dec73b44ab9e438e451f160bee3b9a3eddbdb3b49f5614bfc4fb40048bafe7b745360185a203147c0a9d9f2b23b441ae15
|
data/lib/rbbt/tsv/excel.rb
CHANGED
@@ -94,10 +94,12 @@ module TSV
|
|
94
94
|
|
95
95
|
module XLS
|
96
96
|
def self.read(file, options = {})
|
97
|
-
options = Misc.add_defaults options, :sep2 => /[,|]\s
|
97
|
+
options = Misc.add_defaults options, :sep2 => /[,|]\s?/, :skip_rows => 0
|
98
98
|
sheet = Misc.process_options options, :sheet
|
99
99
|
header = Misc.process_options options, :header
|
100
100
|
text = Misc.process_options options, :text
|
101
|
+
skip_rows = Misc.process_options options, :skip_rows
|
102
|
+
skip_rows = skip_rows.to_i
|
101
103
|
|
102
104
|
header = true unless header == false
|
103
105
|
sheet ||= "0"
|
@@ -117,6 +119,11 @@ module TSV
|
|
117
119
|
rows = []
|
118
120
|
|
119
121
|
sheet.each do |row|
|
122
|
+
if skip_rows > 0
|
123
|
+
skip_rows -= 1
|
124
|
+
next
|
125
|
+
end
|
126
|
+
|
120
127
|
rows << row.values_at(0..(row.size - 1)).collect{|c| String === c ? c.gsub("\n", ' ') : c }
|
121
128
|
end
|
122
129
|
|
@@ -159,10 +166,12 @@ module TSV
|
|
159
166
|
|
160
167
|
module XLSX
|
161
168
|
def self.read(file, options = {})
|
162
|
-
options = Misc.add_defaults options, :sep2 => /[,|]\s
|
169
|
+
options = Misc.add_defaults options, :sep2 => /[,|]\s?/, :skip_rows => 0
|
163
170
|
sheet = Misc.process_options options, :sheet
|
164
171
|
header = Misc.process_options options, :header
|
165
172
|
text = Misc.process_options options, :text
|
173
|
+
skip_rows = Misc.process_options options, :skip_rows
|
174
|
+
skip_rows = skip_rows.to_i
|
166
175
|
|
167
176
|
header = true unless header == false
|
168
177
|
|
@@ -182,6 +191,11 @@ module TSV
|
|
182
191
|
|
183
192
|
sheet.each do |row|
|
184
193
|
next if row.nil?
|
194
|
+
if skip_rows > 0
|
195
|
+
skip_rows -= 1
|
196
|
+
next
|
197
|
+
end
|
198
|
+
|
185
199
|
rows << row.cells.collect{|c| c.nil? ? nil : c.value}.collect{|c| String === c ? c.gsub("\n", ' ') : c }
|
186
200
|
end
|
187
201
|
|
data/lib/rbbt/util/cmd.rb
CHANGED
data/lib/rbbt/util/open.rb
CHANGED
@@ -257,7 +257,7 @@ module Open
|
|
257
257
|
if (dir_sub_path = find_repo_dir(file))
|
258
258
|
remove_from_repo(*dir_sub_path)
|
259
259
|
else
|
260
|
-
FileUtils.rm(file) if File.exists?(file)
|
260
|
+
FileUtils.rm(file) if File.exists?(file) or Open.broken_link?(file)
|
261
261
|
end
|
262
262
|
end
|
263
263
|
|
@@ -793,4 +793,8 @@ module Open
|
|
793
793
|
FileUtils.touch(file)
|
794
794
|
end
|
795
795
|
end
|
796
|
+
|
797
|
+
def self.broken_link?(path)
|
798
|
+
File.symlink?(path) && ! File.exists?(File.readlink(path))
|
799
|
+
end
|
796
800
|
end
|
data/lib/rbbt/workflow/step.rb
CHANGED
@@ -303,14 +303,15 @@ class Step
|
|
303
303
|
return
|
304
304
|
end
|
305
305
|
|
306
|
-
if Open.exists?(path) or Open.exists?(pid_file) or Open.exists?(info_file) or Open.exists?(files_dir)
|
306
|
+
if (Open.exists?(path) or Open.broken_link?(path)) or Open.exists?(pid_file) or Open.exists?(info_file) or Open.exists?(files_dir)
|
307
307
|
|
308
308
|
@result = nil
|
309
309
|
@pid = nil
|
310
310
|
|
311
311
|
Misc.insist do
|
312
312
|
Open.rm info_file if Open.exists? info_file
|
313
|
-
Open.rm path if Open.exists? path
|
313
|
+
Open.rm path if (Open.exists?(path) or Open.broken_link?(path))
|
314
|
+
Open.rm path if (Open.exists?(path) or Open.broken_link?(path))
|
314
315
|
Open.rm_rf files_dir if Open.exists? files_dir
|
315
316
|
Open.rm pid_file if Open.exists? pid_file
|
316
317
|
end
|
@@ -82,7 +82,7 @@ puts
|
|
82
82
|
jobs = Rbbt.job_info workflow, task
|
83
83
|
workflows = {}
|
84
84
|
|
85
|
-
TSV.traverse jobs
|
85
|
+
TSV.traverse jobs do |file,i|
|
86
86
|
if options[:quick] and i[:done]
|
87
87
|
status = 'done'
|
88
88
|
else
|
@@ -94,7 +94,7 @@ TSV.traverse jobs, :_bar => "Checking job status" do |file,i|
|
|
94
94
|
{:status => :noinfo}
|
95
95
|
end
|
96
96
|
|
97
|
-
done = Open.exists?(file)
|
97
|
+
done = Open.exists?(file) && ! Open.broken_link?(file)
|
98
98
|
pid = info[:pid] || (Open.exists?(file + '.pid') && Open.read(file + '.pid')) unless done
|
99
99
|
|
100
100
|
status = info[:status].to_s
|
@@ -48,7 +48,7 @@ end
|
|
48
48
|
|
49
49
|
def status_msg(status)
|
50
50
|
color = case status.to_sym
|
51
|
-
when :error, :aborted, :missing, :dead
|
51
|
+
when :error, :aborted, :missing, :dead, :broken
|
52
52
|
:red
|
53
53
|
when :streaming, :started
|
54
54
|
:cyan
|
@@ -56,7 +56,7 @@ def status_msg(status)
|
|
56
56
|
:green
|
57
57
|
when :noinfo
|
58
58
|
:blue
|
59
|
-
when :dependencies, :waiting, :
|
59
|
+
when :dependencies, :waiting, :setup
|
60
60
|
:yellow
|
61
61
|
else
|
62
62
|
if status.to_s.index ">"
|
@@ -199,7 +199,8 @@ workflows.sort.each do |workflow,tasks|
|
|
199
199
|
|
200
200
|
pid = info[:pid]
|
201
201
|
status = info[:status]
|
202
|
-
status = :missing if status == :done and not Open.exist? file
|
202
|
+
status = :missing if status == :done and not (Open.exist?(file) && ! Open.broken_link?(file))
|
203
|
+
status = :broken if Open.broken_link?(file)
|
203
204
|
status = status.to_s
|
204
205
|
if status != "done" and pid and not Misc.pid_exists?(pid)
|
205
206
|
if File.exist? file
|
@@ -0,0 +1,90 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rbbt/workflow'
|
4
|
+
|
5
|
+
require 'rbbt-util'
|
6
|
+
require 'fileutils'
|
7
|
+
require 'rbbt/util/simpleopt'
|
8
|
+
require 'rbbt/workflow/step'
|
9
|
+
require 'rbbt/workflow/provenance'
|
10
|
+
require 'rbbt/util/misc'
|
11
|
+
|
12
|
+
require 'rbbt-util'
|
13
|
+
require 'rbbt/util/simpleopt'
|
14
|
+
require 'rbbt/util/R'
|
15
|
+
|
16
|
+
$0 = "rbbt #{$previous_commands*""} #{ File.basename(__FILE__) }" if $previous_commands
|
17
|
+
|
18
|
+
options = SOPT.setup <<EOF
|
19
|
+
Examine the provenance of a job result
|
20
|
+
|
21
|
+
$ rbbt workflow trace <job-result> <file.png>
|
22
|
+
|
23
|
+
-h--help Help
|
24
|
+
-i--inputs* List of inputs to print
|
25
|
+
-if--info_fields* List of info fields to print
|
26
|
+
EOF
|
27
|
+
|
28
|
+
SOPT.usage if options[:help]
|
29
|
+
|
30
|
+
$inputs = (options[:inputs] || "").split(",")
|
31
|
+
$info_fields = (options[:info_fields] || "").split(",")
|
32
|
+
|
33
|
+
file = ARGV.shift || "/home/mvazque2/.rbbt/var/jobs/Sample/haplotype/NA12878"
|
34
|
+
plot = ARGV.shift || "/tmp/plot.png"
|
35
|
+
|
36
|
+
$seen = []
|
37
|
+
def get_step(file)
|
38
|
+
file = File.expand_path(file)
|
39
|
+
file = file.sub(/\.(info|files)/,'')
|
40
|
+
$seen << file
|
41
|
+
Workflow.load_step file
|
42
|
+
end
|
43
|
+
|
44
|
+
step = get_step file
|
45
|
+
$main_mtime = Open.exist?(step.path) ? Open.mtime(step.path) : nil
|
46
|
+
|
47
|
+
data = TSV.setup({}, "Job~Workflow,Task,Start,End#:type=:list")
|
48
|
+
|
49
|
+
jobs = step.rec_dependencies + [step]
|
50
|
+
|
51
|
+
jobs = jobs.select{|job| job.info[:done]}.sort_by{|job| job.info[:started]}
|
52
|
+
|
53
|
+
min_start = nil
|
54
|
+
max_done = nil
|
55
|
+
jobs.each do |job|
|
56
|
+
next unless job.done?
|
57
|
+
started = job.info[:started]
|
58
|
+
ddone = job.info[:done]
|
59
|
+
data[job.name] = [job.workflow.to_s, job.task_name,started,ddone]
|
60
|
+
if min_start.nil?
|
61
|
+
min_start = started
|
62
|
+
else
|
63
|
+
min_start = started if started < min_start
|
64
|
+
end
|
65
|
+
|
66
|
+
if max_done.nil?
|
67
|
+
max_done = ddone
|
68
|
+
else
|
69
|
+
max_done = ddone if ddone > max_done
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
#data.process "Start" do |value|
|
74
|
+
# value - min_start
|
75
|
+
#end
|
76
|
+
#
|
77
|
+
#data.process "End" do |value|
|
78
|
+
# value - min_start
|
79
|
+
#end
|
80
|
+
|
81
|
+
Log.severity = 0
|
82
|
+
data.R_interactive <<-EOF
|
83
|
+
rbbt.require('timevis')
|
84
|
+
data$id = rownames(data)
|
85
|
+
data$content = data$Task
|
86
|
+
data$start = data$Start
|
87
|
+
data$end = data$End
|
88
|
+
|
89
|
+
timevis(data)
|
90
|
+
EOF
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbbt-util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.25.
|
4
|
+
version: 5.25.46
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-04-
|
11
|
+
date: 2019-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -411,6 +411,7 @@ files:
|
|
411
411
|
- share/rbbt_commands/workflow/remote/remove
|
412
412
|
- share/rbbt_commands/workflow/server
|
413
413
|
- share/rbbt_commands/workflow/task
|
414
|
+
- share/rbbt_commands/workflow/trace
|
414
415
|
- share/unicorn.rb
|
415
416
|
- share/workflow_config.ru
|
416
417
|
- test/rbbt/annotations/test_util.rb
|