rbbt-util 5.26.87 → 5.26.88
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rbbt/hpc.rb +15 -5
- data/lib/rbbt/workflow/definition.rb +1 -2
- data/lib/rbbt/workflow/remote/ssh/adaptor.rb +8 -25
- data/lib/rbbt/workflow/remote/ssh/driver.rb +147 -0
- data/lib/rbbt/workflow/remote/ssh/get.rb +29 -159
- data/lib/rbbt/workflow/step.rb +6 -1
- data/share/rbbt_commands/migrate +1 -0
- data/test/rbbt/test_hpc.rb +14 -0
- data/test/rbbt/test_workflow.rb +30 -22
- data/test/rbbt/workflow/remote/test_client.rb +13 -0
- metadata +72 -67
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ea3940c476d54994086edb928a7f3bd8e0f9106cf702fc5383c10dbf43df2f8
|
4
|
+
data.tar.gz: 842453f1c75c7d67307a9d7196273a233cc00d4a4adb27d4cb62d8c41111f748
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d679b8414ef4ed9463e2a214edf51375f417c8f6c5b5b576619efda32fd100f9d3fc623164b3e685b6bee31136a1219cf78a4d0955f5c3661c305598addeab8
|
7
|
+
data.tar.gz: 88e3ad03874491db2536aad2c64269fb165a92aa944101c98d59013b91eb2f05c47bf0680931f849a2a1de4422fe7bde7b7c261e915604141b8c31ee5026fbeb
|
data/lib/rbbt/hpc.rb
CHANGED
@@ -473,11 +473,21 @@ EOF
|
|
473
473
|
end
|
474
474
|
end
|
475
475
|
end
|
476
|
-
end
|
477
476
|
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
477
|
+
def relay(job, options={})
|
478
|
+
options = Misc.add_defaults options, :target => 'mn1', :search_path => 'user'
|
479
|
+
done_deps = job.dependencies.select do |dep|
|
480
|
+
dep.done?
|
481
|
+
end
|
482
|
+
|
483
|
+
error_deps = job.dependencies.select do |dep|
|
484
|
+
dep.error? && ! dep.recoverable_error?
|
485
|
+
end
|
482
486
|
|
487
|
+
(done_deps + error_deps).each do |dep|
|
488
|
+
Step.migrate(dep.path, options[:search_path], options)
|
489
|
+
end
|
490
|
+
|
491
|
+
end
|
492
|
+
end
|
483
493
|
|
@@ -73,8 +73,7 @@ module Workflow
|
|
73
73
|
set_info :result_type, dep.info[:result_type]
|
74
74
|
forget = config :forget_dep_tasks, :forget_dep_tasks, :default => FORGET_DEP_TASKS
|
75
75
|
if forget
|
76
|
-
self.
|
77
|
-
self.set_info :archived_dependencies, info[:dependencies]
|
76
|
+
self.archive
|
78
77
|
self.dependencies = self.dependencies - [dep]
|
79
78
|
Open.rm_rf self.files_dir if Open.exist? self.files_dir
|
80
79
|
FileUtils.cp_r dep.files_dir, self.files_dir if Open.exist? dep.files_dir
|
@@ -1,20 +1,6 @@
|
|
1
|
-
|
2
|
-
def self.__prepare_inputs_for_restclient(inputs)
|
3
|
-
inputs.each do |k,v|
|
4
|
-
if v.respond_to? :path and not v.respond_to? :original_filename
|
5
|
-
class << v
|
6
|
-
def original_filename
|
7
|
-
File.expand_path(path)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
if Array === v and v.empty?
|
13
|
-
inputs[k] = "EMPTY_ARRAY"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
1
|
+
require 'rbbt/workflow/remote/ssh/driver'
|
17
2
|
|
3
|
+
module WorkflowSSHClient
|
18
4
|
def workflow_description
|
19
5
|
WorkflowSSHClient.get_raw(File.join(url, 'description'))
|
20
6
|
end
|
@@ -26,20 +12,20 @@ module WorkflowSSHClient
|
|
26
12
|
|
27
13
|
def task_info(task)
|
28
14
|
@task_info ||= IndiferentHash.setup({})
|
29
|
-
@task_info[task]
|
30
15
|
|
31
16
|
if @task_info[task].nil?
|
32
|
-
task_info = WorkflowSSHClient.get_json(File.join(
|
17
|
+
task_info = WorkflowSSHClient.get_json(File.join(@base_url, task.to_s))
|
33
18
|
task_info = WorkflowSSHClient.fix_hash(task_info)
|
34
19
|
|
35
|
-
task_info[:result_type] = task_info[:result_type].to_sym
|
36
|
-
task_info[:export] = task_info[:export].to_sym
|
20
|
+
task_info[:result_type] = task_info[:result_type].to_sym if task_info[:result_type]
|
21
|
+
task_info[:export] = task_info[:export].to_sym if task_info[:export]
|
37
22
|
task_info[:input_types] = WorkflowSSHClient.fix_hash(task_info[:input_types], true)
|
38
23
|
task_info[:inputs] = task_info[:inputs].collect{|input| input.to_sym }
|
39
24
|
|
40
|
-
@task_info[task] = task_info
|
25
|
+
@task_info[task] = IndiferentHash.setup(task_info)
|
41
26
|
end
|
42
|
-
|
27
|
+
|
28
|
+
IndiferentHash.setup(@task_info[task])
|
43
29
|
end
|
44
30
|
|
45
31
|
def tasks
|
@@ -72,7 +58,4 @@ module WorkflowSSHClient
|
|
72
58
|
@exec_exports = @stream_exports = @synchronous_exports = []
|
73
59
|
@asynchronous_exports = @task_info.keys
|
74
60
|
end
|
75
|
-
|
76
|
-
def self.execute_job(base_url, task, task_params, cache_type)
|
77
|
-
end
|
78
61
|
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
module SSHDriver
|
2
|
+
def self.run(server, script)
|
3
|
+
Log.debug "Run ssh script in #{server}:\n#{script}"
|
4
|
+
CMD.cmd("ssh '#{server}' 'shopt -s expand_aliases; bash -ic \"ruby\"' ", :in => script, :log => true).read
|
5
|
+
end
|
6
|
+
|
7
|
+
#def self.run_log(server, script)
|
8
|
+
# Log.debug "Run and monitor ssh script in #{server}:\n#{script}"
|
9
|
+
# CMD.cmd("ssh '#{server}' 'shopt -s expand_aliases; bash -ic \"ruby\"' ", :in => script, :log => true)
|
10
|
+
#end
|
11
|
+
|
12
|
+
def self.parse_url(url)
|
13
|
+
m = url.match(/ssh:\/\/([^:]+):(.*)/)
|
14
|
+
server = m.captures[0]
|
15
|
+
path = m.captures[1]
|
16
|
+
[server, path]
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.path_script(path)
|
20
|
+
|
21
|
+
workflow, task, job, *rest = path.split("/")
|
22
|
+
|
23
|
+
script =<<-EOF
|
24
|
+
require 'rbbt/workflow'
|
25
|
+
wf = Workflow.require_workflow "#{workflow}"
|
26
|
+
EOF
|
27
|
+
|
28
|
+
case task
|
29
|
+
when nil
|
30
|
+
script +=<<-EOF
|
31
|
+
task_info = {}
|
32
|
+
wf.tasks.keys.each do |task|
|
33
|
+
task_info[task] = wf.task_info(task)
|
34
|
+
end
|
35
|
+
res = task_info
|
36
|
+
EOF
|
37
|
+
when 'documentation'
|
38
|
+
script +=<<-EOF
|
39
|
+
res = documentation = wf.documentation
|
40
|
+
EOF
|
41
|
+
else
|
42
|
+
if job.nil?
|
43
|
+
script +=<<-EOF
|
44
|
+
task = '#{task}'
|
45
|
+
res = task_info = wf.task_info(task)
|
46
|
+
EOF
|
47
|
+
else
|
48
|
+
case rest.first
|
49
|
+
when nil
|
50
|
+
script +=<<-EOF
|
51
|
+
task = '#{task}'
|
52
|
+
jobname = '#{job}'
|
53
|
+
res = job = wf.fast_load_id(File.join(task, jobname))
|
54
|
+
EOF
|
55
|
+
when "info"
|
56
|
+
script +=<<-EOF
|
57
|
+
task = '#{task}'
|
58
|
+
jobname = '#{job}'
|
59
|
+
job = wf.fast_load_id(File.join(task, jobname))
|
60
|
+
res = job_info = job.info
|
61
|
+
EOF
|
62
|
+
else
|
63
|
+
raise "Unkown path: #{[path, rest].inspect}"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.job_script(inputs_id, jobname = nil)
|
70
|
+
script =<<-EOF
|
71
|
+
jobname = #{jobname.nil? ? 'nil' : "'#{jobname}'"}
|
72
|
+
path = File.join(ENV["HOME"], '.rbbt/tmp/tmp-ssh_job_inputs/#{inputs_id}')
|
73
|
+
job_inputs = Workflow.load_inputs(path, task_info[:inputs], task_info[:input_types])
|
74
|
+
job = wf.job(task, jobname, job_inputs)
|
75
|
+
EOF
|
76
|
+
script
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.get_json(url, params)
|
80
|
+
server, path = parse_url(url)
|
81
|
+
script = path_script(path)
|
82
|
+
|
83
|
+
script +=<<-EOF
|
84
|
+
STDOUT.write res.to_json
|
85
|
+
EOF
|
86
|
+
|
87
|
+
JSON.parse(self.run(server, script))
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.get_raw(url, params)
|
91
|
+
server, path = parse_url(url)
|
92
|
+
script = path_script(path)
|
93
|
+
|
94
|
+
script +=<<-EOF
|
95
|
+
STDOUT.write res
|
96
|
+
EOF
|
97
|
+
|
98
|
+
self.run(server, script)
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.post_job(url, inputs_id, jobname = nil)
|
102
|
+
server, path = parse_url(url)
|
103
|
+
|
104
|
+
script = path_script(path)
|
105
|
+
script += job_script(inputs_id, jobname)
|
106
|
+
script +=<<-EOF
|
107
|
+
job.init_info
|
108
|
+
STDOUT.write job.name
|
109
|
+
EOF
|
110
|
+
@name = self.run(server, script)
|
111
|
+
end
|
112
|
+
|
113
|
+
def self.run_job(url, input_id, jobname = nil)
|
114
|
+
server, path = parse_url(url)
|
115
|
+
|
116
|
+
script = path_script(path)
|
117
|
+
script += job_script(input_id, jobname)
|
118
|
+
script +=<<-EOF
|
119
|
+
job.produce
|
120
|
+
STDOUT.write job.path
|
121
|
+
EOF
|
122
|
+
self.run(server, script)
|
123
|
+
end
|
124
|
+
|
125
|
+
def self.run_slurm_job(url, input_id, jobname = nil)
|
126
|
+
server, path = parse_url(url)
|
127
|
+
|
128
|
+
script = path_script(path)
|
129
|
+
script += job_script(input_id, jobname)
|
130
|
+
script +=<<-EOF
|
131
|
+
job.produce
|
132
|
+
STDOUT.write job.path
|
133
|
+
EOF
|
134
|
+
self.run(server, script)
|
135
|
+
end
|
136
|
+
|
137
|
+
def self.clean(url, input_id, jobname = nil)
|
138
|
+
server, path = parse_url(url)
|
139
|
+
|
140
|
+
script = path_script(path)
|
141
|
+
script +=<<-EOF
|
142
|
+
job.clean
|
143
|
+
EOF
|
144
|
+
self.run(server, script)
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
@@ -1,150 +1,3 @@
|
|
1
|
-
module SSHClient
|
2
|
-
def self.run(server, script)
|
3
|
-
Log.debug "Run ssh script in #{server}:\n#{script}"
|
4
|
-
CMD.cmd("ssh '#{server}' ruby ", :in => script).read.strip
|
5
|
-
end
|
6
|
-
|
7
|
-
def self.run_log(server, script)
|
8
|
-
Log.debug "Run and monitor ssh script in #{server}:\n#{script}"
|
9
|
-
CMD.cmd_log("ssh '#{server}' ruby ", :in => script)
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.parse_url(url)
|
13
|
-
m = url.match(/ssh:\/\/([^:]+):(.*)/)
|
14
|
-
server = m.captures[0]
|
15
|
-
path = m.captures[1]
|
16
|
-
[server, path]
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.path_script(path)
|
20
|
-
|
21
|
-
workflow, task, job, *rest = path.split("/")
|
22
|
-
|
23
|
-
script =<<-EOF
|
24
|
-
require 'rbbt/workflow'
|
25
|
-
wf = Workflow.require_workflow "#{workflow}"
|
26
|
-
EOF
|
27
|
-
case task
|
28
|
-
when nil
|
29
|
-
script +=<<-EOF
|
30
|
-
task_info = {}
|
31
|
-
wf.tasks.keys.each do |task|
|
32
|
-
task_info[task] = wf.task_info(task)
|
33
|
-
end
|
34
|
-
res = task_info
|
35
|
-
EOF
|
36
|
-
when 'documentation'
|
37
|
-
script +=<<-EOF
|
38
|
-
res = documentation = wf.documentation
|
39
|
-
EOF
|
40
|
-
else
|
41
|
-
if job.nil?
|
42
|
-
script +=<<-EOF
|
43
|
-
task = '#{task}'
|
44
|
-
res = task_info = wf.task_info(task)
|
45
|
-
EOF
|
46
|
-
else
|
47
|
-
case rest.first
|
48
|
-
when nil
|
49
|
-
script +=<<-EOF
|
50
|
-
task = '#{task}'
|
51
|
-
jobname = '#{job}'
|
52
|
-
res = job = wf.fast_load_id(File.join(task, jobname))
|
53
|
-
EOF
|
54
|
-
when "info"
|
55
|
-
script +=<<-EOF
|
56
|
-
task = '#{task}'
|
57
|
-
jobname = '#{job}'
|
58
|
-
job = wf.fast_load_id(File.join(task, jobname))
|
59
|
-
res = job_info = job.info
|
60
|
-
EOF
|
61
|
-
else
|
62
|
-
raise "Unkown path: #{[path, rest].inspect}"
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def self.get_json(url, params)
|
69
|
-
server, path = parse_url(url)
|
70
|
-
script = path_script(path)
|
71
|
-
|
72
|
-
script +=<<-EOF
|
73
|
-
puts res.to_json
|
74
|
-
EOF
|
75
|
-
|
76
|
-
JSON.parse(self.run(server, script))
|
77
|
-
end
|
78
|
-
|
79
|
-
def self.get_raw(url, params)
|
80
|
-
server, path = parse_url(url)
|
81
|
-
script = path_script(path)
|
82
|
-
|
83
|
-
script +=<<-EOF
|
84
|
-
puts res
|
85
|
-
EOF
|
86
|
-
|
87
|
-
self.run(server, script)
|
88
|
-
end
|
89
|
-
|
90
|
-
def self.post_job(url, inputs, input_types, jobname = nil)
|
91
|
-
server, path = parse_url(url)
|
92
|
-
script = path_script(path)
|
93
|
-
|
94
|
-
id = "inputs-" << rand(100000).to_s
|
95
|
-
CMD.cmd("ssh '#{server}' mkdir -p .rbbt/tmp/tmp-ssh_job_inputs/ ", :in => script).read
|
96
|
-
TmpFile.with_file do |dir|
|
97
|
-
if Step.save_inputs(inputs, input_types, dir)
|
98
|
-
CMD.cmd("scp -r '#{dir}' .rbbt/tmp/tmp-ssh_job_inputs/#{id}")
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
script +=<<-EOF
|
103
|
-
jobname = #{jobname.nil? ? 'nil' : "'#{jobname}'"}
|
104
|
-
path = '.rbbt/tmp/tmp-ssh_job_inputs/#{id}'
|
105
|
-
job_inputs = Workflow.load_inputs(path, task_info[:inputs], task_info[:input_types])
|
106
|
-
job = wf.job(task, jobname, job_inputs)
|
107
|
-
Log.severity = 10
|
108
|
-
job.fork
|
109
|
-
puts job.name
|
110
|
-
EOF
|
111
|
-
self.run(server, script)
|
112
|
-
end
|
113
|
-
|
114
|
-
def self.run_job(url, inputs, input_types, jobname = nil)
|
115
|
-
server, path = parse_url(url)
|
116
|
-
script = path_script(path)
|
117
|
-
|
118
|
-
id = "inputs-" << rand(100000).to_s
|
119
|
-
CMD.cmd("ssh '#{server}' mkdir -p .rbbt/tmp/tmp-ssh_job_inputs/ ", :in => script).read
|
120
|
-
TmpFile.with_file do |dir|
|
121
|
-
if Step.save_inputs(inputs, input_types, dir)
|
122
|
-
CMD.cmd("scp -r '#{dir}' .rbbt/tmp/tmp-ssh_job_inputs/#{id}")
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
script +=<<-EOF
|
127
|
-
jobname = #{jobname.nil? ? 'nil' : "'#{jobname}'"}
|
128
|
-
path = '.rbbt/tmp/tmp-ssh_job_inputs/#{id}'
|
129
|
-
job_inputs = Workflow.load_inputs(path, task_info[:inputs], task_info[:input_types])
|
130
|
-
job = wf.job(task, jobname, job_inputs)
|
131
|
-
job.run
|
132
|
-
EOF
|
133
|
-
self.run_log(server, script)
|
134
|
-
end
|
135
|
-
|
136
|
-
def self.clean(url)
|
137
|
-
server, path = parse_url(url)
|
138
|
-
script = path_script(path)
|
139
|
-
|
140
|
-
script +=<<-EOF
|
141
|
-
job.clean
|
142
|
-
EOF
|
143
|
-
self.run(server, script)
|
144
|
-
end
|
145
|
-
|
146
|
-
end
|
147
|
-
|
148
1
|
module WorkflowSSHClient
|
149
2
|
def self.fix_hash(hash, fix_values = false)
|
150
3
|
fixed = {}
|
@@ -223,7 +76,7 @@ module WorkflowSSHClient
|
|
223
76
|
|
224
77
|
res = capture_exception do
|
225
78
|
Misc.insist(2, 0.5) do
|
226
|
-
|
79
|
+
SSHDriver.get_json(url, :params => params)
|
227
80
|
end
|
228
81
|
end
|
229
82
|
|
@@ -234,22 +87,32 @@ module WorkflowSSHClient
|
|
234
87
|
end
|
235
88
|
end
|
236
89
|
|
237
|
-
|
238
|
-
|
239
|
-
|
90
|
+
def self.upload_inputs(server, inputs, input_types, input_id)
|
91
|
+
TmpFile.with_file do |dir|
|
92
|
+
if Step.save_inputs(inputs, input_types, dir)
|
93
|
+
CMD.cmd("ssh '#{server}' mkdir -p .rbbt/tmp/tmp-ssh_job_inputs/; scp -r '#{dir}' #{server}:.rbbt/tmp/tmp-ssh_job_inputs/#{input_id}")
|
94
|
+
end
|
95
|
+
end
|
240
96
|
end
|
241
97
|
|
98
|
+
#{{{ RUN
|
99
|
+
|
100
|
+
|
242
101
|
def init_job(cache_type = nil, other_params = {})
|
243
102
|
cache_type = :asynchronous if cache_type.nil? and not @is_exec
|
244
103
|
cache_type = :exec if cache_type.nil?
|
245
104
|
@last_info_time = nil
|
246
105
|
@done = false
|
247
|
-
|
106
|
+
@server, @server_path = SSHDriver.parse_url base_url
|
107
|
+
@input_id ||= "inputs-" << rand(100000).to_s
|
108
|
+
@input_types = task_info(task)[:input_types]
|
109
|
+
|
110
|
+
WorkflowSSHClient.upload_inputs(@server, inputs, @input_types, @input_id)
|
111
|
+
|
248
112
|
@name ||= Persist.memory("RemoteSteps", :workflow => self, :task => task, :jobname => @name, :inputs => inputs, :cache_type => cache_type) do
|
249
113
|
Misc.insist do
|
250
|
-
#@adaptor.post_jobname(File.join(base_url, task.to_s), inputs.merge(other_params).merge(:jobname => @name||@base_name, :_cache_type => cache_type))
|
251
114
|
input_types = {}
|
252
|
-
|
115
|
+
SSHDriver.post_job(File.join(base_url, task.to_s), @input_id, @base_name)
|
253
116
|
end
|
254
117
|
end
|
255
118
|
if Open.remote? @name
|
@@ -262,19 +125,26 @@ module WorkflowSSHClient
|
|
262
125
|
end
|
263
126
|
|
264
127
|
def path
|
265
|
-
server,
|
266
|
-
"ssh://" + server + ":" +
|
128
|
+
@server, @server_path = SSHDriver.parse_url @base_url
|
129
|
+
"ssh://" + @server + ":" + @remote_path
|
267
130
|
end
|
268
131
|
|
269
|
-
def
|
132
|
+
def produce(*args)
|
270
133
|
input_types = {}
|
271
|
-
|
134
|
+
init_job
|
135
|
+
@remote_path = SSHDriver.run_job(File.join(base_url, task.to_s), @input_id, @base_name)
|
136
|
+
while ! done?
|
137
|
+
sleep 1
|
138
|
+
end
|
272
139
|
end
|
273
140
|
|
141
|
+
def run(*args)
|
142
|
+
produce(*args)
|
143
|
+
end
|
274
144
|
|
275
145
|
def clean
|
276
146
|
init_job
|
277
|
-
|
147
|
+
SSHDriver.clean(@url, @input_id, @base_name) if done?
|
278
148
|
_restart
|
279
149
|
end
|
280
150
|
|
data/lib/rbbt/workflow/step.rb
CHANGED
@@ -108,6 +108,11 @@ class Step
|
|
108
108
|
@inputs || []
|
109
109
|
end
|
110
110
|
|
111
|
+
def archive
|
112
|
+
self.set_info :archived_info, archived_info
|
113
|
+
self.set_info :archived_dependencies, info[:dependencies]
|
114
|
+
end
|
115
|
+
|
111
116
|
def archived_info
|
112
117
|
return info[:archived_info] if info[:archived_info]
|
113
118
|
|
@@ -223,7 +228,7 @@ class Step
|
|
223
228
|
|
224
229
|
def result_type
|
225
230
|
@result_type ||= if @task.nil?
|
226
|
-
info[:result_type]
|
231
|
+
info[:result_type] || :binary
|
227
232
|
else
|
228
233
|
@task.result_type || info[:result_type] || :string
|
229
234
|
end
|
data/share/rbbt_commands/migrate
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), '..', 'test_helper.rb')
|
2
|
+
require 'rbbt/hpc'
|
3
|
+
require 'rbbt/workflow'
|
4
|
+
|
5
|
+
class TestHPC < Test::Unit::TestSuite
|
6
|
+
def test_relay
|
7
|
+
Log.severity = 0
|
8
|
+
Workflow.require_workflow "Translation"
|
9
|
+
job = Translation.job(:translate, nil, :genes => %w(TP53 KRAS))
|
10
|
+
Marenostrum.relay job
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
data/test/rbbt/test_workflow.rb
CHANGED
@@ -205,21 +205,23 @@ class TestWorkflow < Test::Unit::TestCase
|
|
205
205
|
def test_update_on_input_dependency_update
|
206
206
|
Open.repository_dirs << File.join(ENV["HOME"],".rbbt/tmp/test/workflow")
|
207
207
|
Log.severity = 0
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
208
|
+
Misc.with_env "RBBT_UPDATE", "true" do
|
209
|
+
send_input_dep_to_reverse_job = TestWF.job(:send_input_dep_to_reverse, nil, :name => "Miguel")
|
210
|
+
send_input_dep_to_reverse_job.clean
|
211
|
+
send_input_dep_to_reverse_job.run
|
212
|
+
|
213
|
+
input_dep_job = send_input_dep_to_reverse_job.step(:input_dep)
|
214
|
+
mtime_orig = Open.mtime send_input_dep_to_reverse_job.step(:reverse_input_text).path
|
215
|
+
|
216
|
+
sleep 2
|
217
|
+
input_dep_job.clean
|
218
|
+
input_dep_job.run
|
219
|
+
send_input_dep_to_reverse_job = TestWF.job(:send_input_dep_to_reverse, nil, :name => "Miguel")
|
220
|
+
|
221
|
+
send_input_dep_to_reverse_job.run
|
222
|
+
mtime_new = Open.mtime send_input_dep_to_reverse_job.step(:reverse_input_text).path
|
223
|
+
assert mtime_orig < mtime_new
|
224
|
+
end
|
223
225
|
end
|
224
226
|
|
225
227
|
def test_helper
|
@@ -252,9 +254,12 @@ class TestWorkflow < Test::Unit::TestCase
|
|
252
254
|
|
253
255
|
def test_search
|
254
256
|
str = "TEST"
|
255
|
-
|
256
|
-
|
257
|
-
|
257
|
+
TestWF.jobs(:repeat2).each do |name|
|
258
|
+
TestWF.load_name(:repeat2, name).clean
|
259
|
+
end
|
260
|
+
job1 = TestWF.job(:repeat2, "subdir/Default", :number => 3).clean.fork
|
261
|
+
job2 = TestWF.job(:repeat2, "subdir/Other", :number => 3).clean.fork
|
262
|
+
job3 = TestWF.job(:repeat2, "Default", :number => 3).clean.fork
|
258
263
|
|
259
264
|
while not job1.done? and not job2.done? and not job3.done?
|
260
265
|
sleep 1
|
@@ -379,10 +384,13 @@ class TestWorkflow < Test::Unit::TestCase
|
|
379
384
|
job.run
|
380
385
|
assert job.checks.select{|d| d.task_name.to_s == "t1" }.any?
|
381
386
|
job = TestWF.job(:t3)
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
assert job.
|
387
|
+
sleep 1
|
388
|
+
Open.touch job.step(:t1).path
|
389
|
+
Misc.with_env "RBBT_UPDATE", "false" do
|
390
|
+
assert job.updated?
|
391
|
+
end
|
392
|
+
Misc.with_env "RBBT_UPDATE", "true" do
|
393
|
+
assert ! job.updated?
|
386
394
|
end
|
387
395
|
end
|
388
396
|
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), '../../..', 'test_helper.rb')
|
2
|
+
require 'rbbt/workflow/remote/client'
|
3
|
+
|
4
|
+
class TestRemote < Test::Unit::TestCase
|
5
|
+
def test_ssh
|
6
|
+
Log.severity = 0
|
7
|
+
client = WorkflowRemoteClient.new "ssh://localhost:Translation", "Translation"
|
8
|
+
job = client.job("translate", "SSH-TEST", :genes => ["TP53","KRAS"])
|
9
|
+
iii job.url
|
10
|
+
puts job.run
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
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.26.
|
4
|
+
version: 5.26.88
|
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-11-
|
11
|
+
date: 2019-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -328,6 +328,7 @@ files:
|
|
328
328
|
- lib/rbbt/workflow/remote/rest/adaptor.rb
|
329
329
|
- lib/rbbt/workflow/remote/rest/get.rb
|
330
330
|
- lib/rbbt/workflow/remote/ssh/adaptor.rb
|
331
|
+
- lib/rbbt/workflow/remote/ssh/driver.rb
|
331
332
|
- lib/rbbt/workflow/remote/ssh/get.rb
|
332
333
|
- lib/rbbt/workflow/schedule.rb
|
333
334
|
- lib/rbbt/workflow/soap.rb
|
@@ -454,6 +455,7 @@ files:
|
|
454
455
|
- test/rbbt/test_association.rb
|
455
456
|
- test/rbbt/test_entity.rb
|
456
457
|
- test/rbbt/test_fix_width_table.rb
|
458
|
+
- test/rbbt/test_hpc.rb
|
457
459
|
- test/rbbt/test_knowledge_base.rb
|
458
460
|
- test/rbbt/test_monitor.rb
|
459
461
|
- test/rbbt/test_packed_index.rb
|
@@ -507,6 +509,7 @@ files:
|
|
507
509
|
- test/rbbt/util/test_simpleDSL.rb
|
508
510
|
- test/rbbt/util/test_simpleopt.rb
|
509
511
|
- test/rbbt/util/test_tmpfile.rb
|
512
|
+
- test/rbbt/workflow/remote/test_client.rb
|
510
513
|
- test/rbbt/workflow/step/test_dependencies.rb
|
511
514
|
- test/rbbt/workflow/test_doc.rb
|
512
515
|
- test/rbbt/workflow/test_step.rb
|
@@ -531,91 +534,93 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
531
534
|
- !ruby/object:Gem::Version
|
532
535
|
version: '0'
|
533
536
|
requirements: []
|
534
|
-
rubygems_version: 3.0.
|
537
|
+
rubygems_version: 3.0.6
|
535
538
|
signing_key:
|
536
539
|
specification_version: 4
|
537
540
|
summary: Utilities for the Ruby Bioinformatics Toolkit (rbbt)
|
538
541
|
test_files:
|
539
|
-
- test/
|
540
|
-
- test/rbbt/
|
541
|
-
- test/rbbt/
|
542
|
-
- test/rbbt/
|
543
|
-
- test/rbbt/
|
544
|
-
- test/rbbt/
|
545
|
-
- test/rbbt/
|
546
|
-
- test/rbbt/
|
547
|
-
- test/rbbt/
|
548
|
-
- test/rbbt/
|
549
|
-
- test/rbbt/
|
550
|
-
- test/rbbt/
|
551
|
-
- test/rbbt/
|
552
|
-
- test/rbbt/
|
542
|
+
- test/rbbt/test_entity.rb
|
543
|
+
- test/rbbt/workflow/test_doc.rb
|
544
|
+
- test/rbbt/workflow/test_step.rb
|
545
|
+
- test/rbbt/workflow/remote/test_client.rb
|
546
|
+
- test/rbbt/workflow/step/test_dependencies.rb
|
547
|
+
- test/rbbt/workflow/test_task.rb
|
548
|
+
- test/rbbt/resource/test_path.rb
|
549
|
+
- test/rbbt/util/test_colorize.rb
|
550
|
+
- test/rbbt/util/misc/test_omics.rb
|
551
|
+
- test/rbbt/util/misc/test_pipes.rb
|
552
|
+
- test/rbbt/util/misc/test_lock.rb
|
553
|
+
- test/rbbt/util/misc/test_multipart_payload.rb
|
554
|
+
- test/rbbt/util/misc/test_bgzf.rb
|
555
|
+
- test/rbbt/util/test_concurrency.rb
|
556
|
+
- test/rbbt/util/test_cmd.rb
|
557
|
+
- test/rbbt/util/R/test_plot.rb
|
558
|
+
- test/rbbt/util/R/test_eval.rb
|
559
|
+
- test/rbbt/util/R/test_model.rb
|
553
560
|
- test/rbbt/util/test_config.rb
|
554
|
-
- test/rbbt/util/
|
561
|
+
- test/rbbt/util/test_log.rb
|
562
|
+
- test/rbbt/util/test_simpleDSL.rb
|
563
|
+
- test/rbbt/util/log/test_progress.rb
|
555
564
|
- test/rbbt/util/test_tmpfile.rb
|
556
|
-
- test/rbbt/util/
|
557
|
-
- test/rbbt/util/test_misc.rb
|
565
|
+
- test/rbbt/util/test_R.rb
|
558
566
|
- test/rbbt/util/test_excel2tsv.rb
|
559
|
-
- test/rbbt/util/
|
560
|
-
- test/rbbt/util/
|
561
|
-
- test/rbbt/util/
|
562
|
-
- test/rbbt/util/misc/test_bgzf.rb
|
563
|
-
- test/rbbt/util/misc/test_lock.rb
|
564
|
-
- test/rbbt/util/misc/test_omics.rb
|
565
|
-
- test/rbbt/util/test_semaphore.rb
|
566
|
-
- test/rbbt/util/simpleopt/test_get.rb
|
567
|
+
- test/rbbt/util/test_misc.rb
|
568
|
+
- test/rbbt/util/test_open.rb
|
569
|
+
- test/rbbt/util/test_simpleopt.rb
|
567
570
|
- test/rbbt/util/simpleopt/test_parse.rb
|
568
571
|
- test/rbbt/util/simpleopt/test_setup.rb
|
569
|
-
- test/rbbt/util/
|
572
|
+
- test/rbbt/util/simpleopt/test_get.rb
|
573
|
+
- test/rbbt/util/test_python.rb
|
574
|
+
- test/rbbt/util/test_filecache.rb
|
570
575
|
- test/rbbt/util/concurrency/test_processes.rb
|
571
576
|
- test/rbbt/util/concurrency/test_threads.rb
|
572
577
|
- test/rbbt/util/concurrency/processes/test_socket.rb
|
573
|
-
- test/rbbt/util/
|
574
|
-
- test/rbbt/util/test_colorize.rb
|
575
|
-
- test/rbbt/util/test_cmd.rb
|
576
|
-
- test/rbbt/util/test_concurrency.rb
|
577
|
-
- test/rbbt/util/R/test_eval.rb
|
578
|
-
- test/rbbt/util/R/test_plot.rb
|
579
|
-
- test/rbbt/util/R/test_model.rb
|
580
|
-
- test/rbbt/util/test_simpleopt.rb
|
578
|
+
- test/rbbt/util/test_semaphore.rb
|
581
579
|
- test/rbbt/util/test_chain_methods.rb
|
582
|
-
- test/rbbt/
|
583
|
-
- test/rbbt/
|
584
|
-
- test/rbbt/tsv/test_index.rb
|
585
|
-
- test/rbbt/tsv/test_parser.rb
|
586
|
-
- test/rbbt/tsv/test_field_index.rb
|
587
|
-
- test/rbbt/tsv/test_stream.rb
|
588
|
-
- test/rbbt/tsv/test_accessor.rb
|
580
|
+
- test/rbbt/test_resource.rb
|
581
|
+
- test/rbbt/test_packed_index.rb
|
589
582
|
- test/rbbt/tsv/test_change_id.rb
|
590
|
-
- test/rbbt/tsv/
|
591
|
-
- test/rbbt/tsv/parallel/test_through.rb
|
592
|
-
- test/rbbt/tsv/parallel/test_traverse.rb
|
593
|
-
- test/rbbt/tsv/test_manipulate.rb
|
583
|
+
- test/rbbt/tsv/test_attach.rb
|
594
584
|
- test/rbbt/tsv/test_filter.rb
|
585
|
+
- test/rbbt/tsv/test_parser.rb
|
586
|
+
- test/rbbt/tsv/test_accessor.rb
|
595
587
|
- test/rbbt/tsv/test_matrix.rb
|
588
|
+
- test/rbbt/tsv/test_field_index.rb
|
596
589
|
- test/rbbt/tsv/test_util.rb
|
597
|
-
- test/rbbt/tsv/
|
590
|
+
- test/rbbt/tsv/test_index.rb
|
591
|
+
- test/rbbt/tsv/test_parallel.rb
|
592
|
+
- test/rbbt/tsv/test_manipulate.rb
|
598
593
|
- test/rbbt/tsv/test_excel.rb
|
599
|
-
- test/rbbt/
|
600
|
-
- test/rbbt/
|
601
|
-
- test/rbbt/
|
602
|
-
- test/rbbt/
|
603
|
-
- test/rbbt/
|
604
|
-
- test/rbbt/
|
605
|
-
- test/rbbt/
|
606
|
-
- test/rbbt/
|
607
|
-
- test/rbbt/
|
608
|
-
- test/rbbt/
|
609
|
-
- test/rbbt/test_resource.rb
|
610
|
-
- test/rbbt/test_persist.rb
|
611
|
-
- test/rbbt/persist/tsv/test_tokyocabinet.rb
|
612
|
-
- test/rbbt/persist/tsv/test_cdb.rb
|
613
|
-
- test/rbbt/persist/tsv/test_leveldb.rb
|
594
|
+
- test/rbbt/tsv/parallel/test_through.rb
|
595
|
+
- test/rbbt/tsv/parallel/test_traverse.rb
|
596
|
+
- test/rbbt/tsv/test_stream.rb
|
597
|
+
- test/rbbt/test_association.rb
|
598
|
+
- test/rbbt/association/test_database.rb
|
599
|
+
- test/rbbt/association/test_item.rb
|
600
|
+
- test/rbbt/association/test_open.rb
|
601
|
+
- test/rbbt/association/test_util.rb
|
602
|
+
- test/rbbt/association/test_index.rb
|
603
|
+
- test/rbbt/test_knowledge_base.rb
|
614
604
|
- test/rbbt/persist/tsv/test_kyotocabinet.rb
|
615
|
-
- test/rbbt/persist/tsv/
|
605
|
+
- test/rbbt/persist/tsv/test_cdb.rb
|
616
606
|
- test/rbbt/persist/tsv/test_lmdb.rb
|
607
|
+
- test/rbbt/persist/tsv/test_sharder.rb
|
608
|
+
- test/rbbt/persist/tsv/test_leveldb.rb
|
609
|
+
- test/rbbt/persist/tsv/test_tokyocabinet.rb
|
617
610
|
- test/rbbt/persist/test_tsv.rb
|
618
611
|
- test/rbbt/test_tsv.rb
|
612
|
+
- test/rbbt/test_annotations.rb
|
619
613
|
- test/rbbt/test_fix_width_table.rb
|
620
|
-
- test/rbbt/
|
621
|
-
- test/rbbt/
|
614
|
+
- test/rbbt/test_workflow.rb
|
615
|
+
- test/rbbt/entity/test_identifiers.rb
|
616
|
+
- test/rbbt/annotations/test_util.rb
|
617
|
+
- test/rbbt/test_hpc.rb
|
618
|
+
- test/rbbt/test_monitor.rb
|
619
|
+
- test/rbbt/test_persist.rb
|
620
|
+
- test/rbbt/knowledge_base/test_entity.rb
|
621
|
+
- test/rbbt/knowledge_base/test_registry.rb
|
622
|
+
- test/rbbt/knowledge_base/test_syndicate.rb
|
623
|
+
- test/rbbt/knowledge_base/test_query.rb
|
624
|
+
- test/rbbt/knowledge_base/test_enrichment.rb
|
625
|
+
- test/rbbt/knowledge_base/test_traverse.rb
|
626
|
+
- test/test_helper.rb
|