rbbt-util 5.33.3 → 5.33.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3ffb05883cf1e7eda628395b50967322b42240ace100fb73a2f4c4a1ed5e8d27
4
- data.tar.gz: 8b25c002f68b88dc0ba1f09c041258ee0ca15d4fc6f8dc3df5de37ea2473d059
3
+ metadata.gz: 7ef9895840235ea220e85895364588fca0c56b1ed8673483474465bfbf94a32b
4
+ data.tar.gz: 68ba6769881c9118256efd14c8d05ed1ca6f8ab56733800c45c25631016647d0
5
5
  SHA512:
6
- metadata.gz: 7b74e527336830eecb1cad52bb13cbcb335c734a18e9261d87cfba6da93422cf94a826e97d43c6ef1d37d122623408230d80a037a9a91000fa95a6cf9c818cf6
7
- data.tar.gz: 8b8de5c12aac8dfae5f68018cb5aae4023b78993fa78aa7cf93cacc16eea4c2b959f75190ead6862502ecc75ae3ccd9cc462b1db26930943447a758f1f359cd9
6
+ metadata.gz: 53c4c81fcfafd8e001f33886323829e230a93731ba23379e1f40358f3bcfae72931d3978d2db3a490b48f22c618462947d5f63a3cc7d135564588d4f6b48aae8
7
+ data.tar.gz: c53364bbc000b098d4b80afaab6fa8fb16802f9106bfcb8a0aa847b6b8d970e373f102a0fec6021e817a6ebec58d7dc7586c315c9f3aee67481d975d02558abc
@@ -538,10 +538,13 @@ env > #{batch_options[:fenv]}
538
538
  workflow = job.workflow
539
539
  task_name = job.task_name
540
540
 
541
+ workflows_to_load = job.rec_dependencies.select{|d| Step === d}.collect{|d| d.workflow }.compact.collect(&:to_s) - [workflow.to_s]
542
+
541
543
  TmpFile.with_file(nil, remove_batch_dir, :tmpdir => batch_base_dir, :prefix => "#{system}_rbbt_job-#{workflow.to_s}-#{task_name}-") do |batch_dir|
542
544
  Misc.add_defaults options,
543
545
  :batch_dir => batch_dir,
544
- :inputs_dir => File.join(batch_dir, "inputs_dir")
546
+ :inputs_dir => File.join(batch_dir, "inputs_dir"),
547
+ :workflows => workflows_to_load * ","
545
548
 
546
549
  options[:procpath_performance] ||= File.join(batch_dir, "procpath##{procpath.gsub(',', '#')}") if procpath
547
550
 
@@ -31,7 +31,8 @@ module HPC
31
31
  top = batches.select{|b| b[:deps].nil? || (b[:deps] - batch_ids.keys).empty? }.first
32
32
  raise "No batch without unmet dependencies" if top.nil?
33
33
  batches.delete top
34
- job_options = options.merge(top[:rules])
34
+
35
+ job_options = HPC::Orchestration.merge_rules(options, top[:rules])
35
36
 
36
37
  if top[:deps].nil?
37
38
  batch_dependencies = []
@@ -59,7 +60,9 @@ module HPC
59
60
 
60
61
  if options[:dry_run]
61
62
  puts Log.color(:magenta, "Manifest: ") + Log.color(:blue, job_options[:manifest] * ", ") + " - tasks: #{job_options[:task_cpus] || 1} - time: #{job_options[:time]} - config: #{job_options[:config_keys]}"
62
- puts Log.color(:yellow, "Deps: ") + Log.color(:blue, job_options[:batch_dependencies]*", ")
63
+ puts Log.color(:magenta, "Deps: ") + Log.color(:blue, job_options[:batch_dependencies]*", ")
64
+ puts Log.color(:yellow, "Path: ") + top[:top_level].path
65
+ puts Log.color(:yellow, "Options: ") + Misc.fingerprint(job_options)
63
66
  batch_ids[top] = top[:top_level].task_signature
64
67
  else
65
68
  id = run_job(top[:top_level], job_options)
@@ -32,6 +32,8 @@ export BATCH_SYSTEM=SLURM
32
32
  constraint = Misc.process_options options, :constraint
33
33
  gres = Misc.process_options options, :gres
34
34
 
35
+ constraint = [constraint, "highmem"].compact * "&" if highmem
36
+
35
37
  mem = Misc.process_options options, :mem
36
38
  mem_per_cpu = Misc.process_options options, :mem_per_cpu
37
39
 
@@ -50,14 +52,15 @@ export BATCH_SYSTEM=SLURM
50
52
  "cpus-per-task" => task_cpus,
51
53
  "nodes" => nodes,
52
54
  "time" => time,
55
+ "constraint" => constraint,
53
56
  "exclusive" => exclusive,
54
- "highmem" => highmem,
55
57
  "licenses" => licenses,
56
58
  "gres" => gres,
57
59
  "mem" => mem,
58
60
  "mem-per-cpu" => mem_per_cpu,
59
61
  }
60
62
 
63
+
61
64
  header =<<-EOF
62
65
  #!/bin/bash
63
66
  EOF
data/lib/rbbt/resource.rb CHANGED
@@ -270,6 +270,7 @@ source "$INSTALL_HELPER_FILE"
270
270
  git = content[:git]
271
271
  src = content[:src]
272
272
  url = content[:url]
273
+ jar = content[:jar]
273
274
  extra = content[:extra]
274
275
  commands = content[:commands]
275
276
  if git
@@ -290,6 +291,16 @@ url='#{src}'
290
291
 
291
292
  install_src "$name" "$url" #{extra}
292
293
 
294
+ #{commands}
295
+ EOF
296
+ elsif jar
297
+ <<-EOF
298
+
299
+ name='#{name}'
300
+ url='#{jar}'
301
+
302
+ install_jar "$name" "$url" #{extra}
303
+
293
304
  #{commands}
294
305
  EOF
295
306
  else
@@ -93,22 +93,22 @@ module Workflow
93
93
  Open.rm_rf self.files_dir if Open.exist? self.files_dir
94
94
  FileUtils.cp_r dep.files_dir, self.files_dir if Open.exist?(dep.files_dir)
95
95
 
96
- if dep.overriden
96
+ if dep.overriden || ! Workflow.job_path?(dep.path)
97
97
  Open.link dep.path, self.tmp_path
98
98
  else
99
99
  Open.ln_h dep.path, self.tmp_path
100
- end
101
100
 
102
- case remove.to_s
103
- when 'true'
104
- dep.clean
105
- when 'recursive'
106
- (dep.dependencies + dep.rec_dependencies).uniq.each do |d|
107
- next if d.overriden
108
- d.clean unless config(:remove_dep, d.task_signature, d.task_name, d.workflow.to_s, :default => true).to_s == 'false'
109
- end
110
- dep.clean unless config(:remove_dep, dep.task_signature, dep.task_name, dep.workflow.to_s, :default => true).to_s == 'false'
111
- end unless dep.overriden
101
+ case remove.to_s
102
+ when 'true'
103
+ dep.clean
104
+ when 'recursive'
105
+ (dep.dependencies + dep.rec_dependencies).uniq.each do |d|
106
+ next if d.overriden
107
+ d.clean unless config(:remove_dep, d.task_signature, d.task_name, d.workflow.to_s, :default => true).to_s == 'false'
108
+ end
109
+ dep.clean unless config(:remove_dep, dep.task_signature, dep.task_name, dep.workflow.to_s, :default => true).to_s == 'false'
110
+ end
111
+ end
112
112
  else
113
113
  if Open.exists?(dep.files_dir)
114
114
  Open.rm_rf self.files_dir
@@ -5,10 +5,10 @@ module Workflow
5
5
 
6
6
  def self.job_workload(job)
7
7
  workload = {job => []}
8
- return workload if job.done?
8
+ return workload if job.done? && ! job.dirty?
9
9
 
10
10
  job.dependencies.each do |dep|
11
- next if dep.done?
11
+ next if dep.done? && ! job.dirty?
12
12
  workload.merge!(job_workload(dep))
13
13
  workload[job] += workload[dep]
14
14
  workload[job] << dep
@@ -16,7 +16,7 @@ module Workflow
16
16
  end
17
17
 
18
18
  job.input_dependencies.each do |dep|
19
- next if dep.done?
19
+ next if dep.done? && ! job.dirty?
20
20
  workload.merge!(job_workload(dep))
21
21
  workload[job] += workload[dep]
22
22
  workload[job] << dep
data/share/Rlib/plot.R CHANGED
@@ -38,3 +38,4 @@ geom_entity <- function (real.geom = NULL, mapping = NULL, data = NULL, stat = "
38
38
  rg
39
39
  }
40
40
 
41
+ rbbt.ggplot2.rotate_x_labels <- function(){ theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1)) }
@@ -21,6 +21,7 @@ $ rbbt slurm list [options]
21
21
  -j--job* Job ids
22
22
  -s--search* Regular expression
23
23
  -t--tail* Show the last lines of the STDERR
24
+ -l--long Show more entries
24
25
  -p--progress Report progress of job and the dependencies
25
26
  -BP--batch_parameters show batch parameters
26
27
  -BPP--batch_procpath show Procpath performance summary
@@ -40,6 +41,8 @@ end
40
41
  batch_system = options.delete :batch_system
41
42
  batch_system ||= 'auto'
42
43
 
44
+ long = options.delete :long
45
+
43
46
  HPC::BATCH_MODULE = HPC.batch_system batch_system
44
47
 
45
48
  raise ParameterException.new("Could not detect batch_system: #{Misc.fingerprint batch_system}") if HPC::BATCH_MODULE.nil?
@@ -183,24 +186,24 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
183
186
 
184
187
 
185
188
  puts Log.color :blue, dir
186
- puts Log.color(:magenta, "Creation: ") << File.mtime(File.join(dir, 'command.batch')).to_s
187
- puts Log.color(:magenta, "Started: ") << File.ctime(File.join(dir, 'std.err')).to_s if File.exist?(File.join(dir, 'std.err'))
188
- puts Log.color(:magenta, "Manifest: ") << Log.color(:yellow, manifest)
189
+ puts Log.color(:magenta, "Creation: ") << File.mtime(File.join(dir, 'command.batch')).to_s if long
190
+ puts Log.color(:magenta, "Started: ") << File.ctime(File.join(dir, 'std.err')).to_s if File.exist?(File.join(dir, 'std.err')) && long
191
+ puts Log.color(:magenta, "Manifest: ") << Log.color(:yellow, manifest) if long
189
192
  puts Log.color(:magenta, "Step path: ") << Log.color(:yellow, step_path)
190
193
  puts Log.color(:magenta, "Done: ") << File.mtime(File.join(dir, 'exit.status')).to_s if File.exist?(File.join(dir, 'exit.status'))
191
- puts Log.color(:magenta, "Exec: ") << (exe || "Missing")
192
- puts Log.color(:magenta, "CMD: ") << (Log.color(:yellow, cmd) || "Missing")
193
- puts Log.color(:magenta, "HOME: ") << Log.color(:yellow, container_home) if container_home
194
+ puts Log.color(:magenta, "Exec: ") << (exe || "Missing") if long
195
+ puts Log.color(:magenta, "CMD: ") << (Log.color(:yellow, cmd) || "Missing") if long
196
+ puts Log.color(:magenta, "HOME: ") << Log.color(:yellow, container_home) if container_home && long
194
197
  if different_system
195
198
  puts Log.color(:magenta, "Job ID (#{Log.color(:red, job_batch_system)}): ") << (exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" : Log.color(:green, id) )
196
199
  else
197
200
  puts Log.color(:magenta, "Job ID: ") << (exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" : (running_jobs.include?(id) || $norunningjobs ? Log.color(:green, id) : Log.color(:red, id) ))
198
- end
201
+ end
199
202
  puts Log.color(:magenta, "Dependencies: ") << deps * ", " if deps
200
203
  puts Log.color(:magenta, "Dependencies (can fail): ") << cadeps * ", " if cadeps
201
- puts Log.color(:magenta, "Nodes: ") << nodes * ", "
204
+ puts Log.color(:magenta, "Nodes: ") << nodes * ", " if long
202
205
  puts Log.color(:magenta, "Time elapsed: ") << Misc.format_seconds(time_elapsed) if time_elapsed
203
- puts Log.color(:magenta, "Output: ") << File.exists?(File.join(dir, 'std.out')).to_s << (id.nil? || File.exists?(File.join(dir, 'exit.status')) ? "" : " (last update " + Misc.format_seconds(time_diff) + " ago)")
206
+ puts Log.color(:magenta, "Output: ") << File.exists?(File.join(dir, 'std.out')).to_s << (id.nil? || File.exists?(File.join(dir, 'exit.status')) ? "" : " (last update " + Misc.format_seconds(time_diff) + " ago)") if long
204
207
 
205
208
  if options[:batch_parameters]
206
209
  puts Log.color(:magenta, "BATCH parameters: ")
@@ -281,7 +284,7 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
281
284
  puts CMD.cmd("grep -i -w 'Completed step' #{File.join(dir, 'std.err')} | grep -v 'Retrying dep.' | tail -n #{tail.to_i}", :no_fail => true).read
282
285
  else
283
286
  puts Log.color(:magenta, "Log tail: ")
284
- puts CMD.cmd(" cat #{File.join(dir, 'std.err')} | grep -v '^[^\\s:]*\\[3.m' | tail -n #{tail.to_i} ").read
287
+ puts CMD.cmd(" cat #{File.join(dir, 'std.err')} | grep -v '^[^\\s:]*\\[3.m' | grep -v -e '^[[:space:]]*$' | tail -n #{tail.to_i} ").read
285
288
  end
286
289
  end
287
290
 
@@ -10,7 +10,7 @@ options = SOPT.setup <<EOF
10
10
 
11
11
  Queue a job in Marenostrum
12
12
 
13
- $ rbbt slurm tail <directory> [options]
13
+ $ rbbt slurm tail <directory|jobid> [options]
14
14
 
15
15
  -h--help Print this help
16
16
  EOF
@@ -35,8 +35,28 @@ directory = ARGV.shift
35
35
 
36
36
  raise ParameterException if directory.nil?
37
37
 
38
- directory = File.dirname(directory) unless File.directory?(directory)
38
+ if directory =~ /^[0-9]*$/
39
+ workdir = File.expand_path('~/rbbt-batch')
40
+ Path.setup(workdir)
41
+
42
+ workdir.glob("**/job.id").each do |file|
43
+ next unless directory == Open.read(file).strip
44
+ directory = File.dirname(file)
45
+ break
46
+ end
47
+ end
48
+
49
+ raise ParameterException, "Could not identify job #{directory}" unless File.exists?(directory)
39
50
 
40
51
  require 'rbbt/hpc/slurm'
41
52
 
53
+ command_txt = Open.read(File.join(directory, 'command.batch'))
54
+ if m = command_txt.match(/#STEP_PATH: (.*)/)
55
+ step_path = m[1]
56
+ else
57
+ step_path = nil
58
+ end
59
+
60
+ puts Log.color(:magenta, "Step path: ") + step_path if step_path
61
+
42
62
  HPC::BATCH_MODULE.follow_job directory, true
@@ -21,6 +21,7 @@ $ rbbt slurm list [options]
21
21
  -j--job* Job ids
22
22
  -s--search* Regular expression
23
23
  -t--tail* Show the last lines of the STDERR
24
+ -l--long Show more entries
24
25
  -p--progress Report progress of job and the dependencies
25
26
  -BP--batch_parameters show batch parameters
26
27
  -BPP--batch_procpath show Procpath performance summary
@@ -40,6 +41,8 @@ end
40
41
  batch_system = options.delete :batch_system
41
42
  batch_system ||= 'auto'
42
43
 
44
+ long = options.delete :long
45
+
43
46
  HPC::BATCH_MODULE = HPC.batch_system batch_system
44
47
 
45
48
  raise ParameterException.new("Could not detect batch_system: #{Misc.fingerprint batch_system}") if HPC::BATCH_MODULE.nil?
@@ -183,24 +186,24 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
183
186
 
184
187
 
185
188
  puts Log.color :blue, dir
186
- puts Log.color(:magenta, "Creation: ") << File.mtime(File.join(dir, 'command.batch')).to_s
187
- puts Log.color(:magenta, "Started: ") << File.ctime(File.join(dir, 'std.err')).to_s if File.exist?(File.join(dir, 'std.err'))
188
- puts Log.color(:magenta, "Manifest: ") << Log.color(:yellow, manifest)
189
+ puts Log.color(:magenta, "Creation: ") << File.mtime(File.join(dir, 'command.batch')).to_s if long
190
+ puts Log.color(:magenta, "Started: ") << File.ctime(File.join(dir, 'std.err')).to_s if File.exist?(File.join(dir, 'std.err')) && long
191
+ puts Log.color(:magenta, "Manifest: ") << Log.color(:yellow, manifest) if long
189
192
  puts Log.color(:magenta, "Step path: ") << Log.color(:yellow, step_path)
190
193
  puts Log.color(:magenta, "Done: ") << File.mtime(File.join(dir, 'exit.status')).to_s if File.exist?(File.join(dir, 'exit.status'))
191
- puts Log.color(:magenta, "Exec: ") << (exe || "Missing")
192
- puts Log.color(:magenta, "CMD: ") << (Log.color(:yellow, cmd) || "Missing")
193
- puts Log.color(:magenta, "HOME: ") << Log.color(:yellow, container_home) if container_home
194
+ puts Log.color(:magenta, "Exec: ") << (exe || "Missing") if long
195
+ puts Log.color(:magenta, "CMD: ") << (Log.color(:yellow, cmd) || "Missing") if long
196
+ puts Log.color(:magenta, "HOME: ") << Log.color(:yellow, container_home) if container_home && long
194
197
  if different_system
195
198
  puts Log.color(:magenta, "Job ID (#{Log.color(:red, job_batch_system)}): ") << (exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" : Log.color(:green, id) )
196
199
  else
197
200
  puts Log.color(:magenta, "Job ID: ") << (exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" : (running_jobs.include?(id) || $norunningjobs ? Log.color(:green, id) : Log.color(:red, id) ))
198
- end
201
+ end
199
202
  puts Log.color(:magenta, "Dependencies: ") << deps * ", " if deps
200
203
  puts Log.color(:magenta, "Dependencies (can fail): ") << cadeps * ", " if cadeps
201
- puts Log.color(:magenta, "Nodes: ") << nodes * ", "
204
+ puts Log.color(:magenta, "Nodes: ") << nodes * ", " if long
202
205
  puts Log.color(:magenta, "Time elapsed: ") << Misc.format_seconds(time_elapsed) if time_elapsed
203
- puts Log.color(:magenta, "Output: ") << File.exists?(File.join(dir, 'std.out')).to_s << (id.nil? || File.exists?(File.join(dir, 'exit.status')) ? "" : " (last update " + Misc.format_seconds(time_diff) + " ago)")
206
+ puts Log.color(:magenta, "Output: ") << File.exists?(File.join(dir, 'std.out')).to_s << (id.nil? || File.exists?(File.join(dir, 'exit.status')) ? "" : " (last update " + Misc.format_seconds(time_diff) + " ago)") if long
204
207
 
205
208
  if options[:batch_parameters]
206
209
  puts Log.color(:magenta, "BATCH parameters: ")
@@ -281,7 +284,7 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
281
284
  puts CMD.cmd("grep -i -w 'Completed step' #{File.join(dir, 'std.err')} | grep -v 'Retrying dep.' | tail -n #{tail.to_i}", :no_fail => true).read
282
285
  else
283
286
  puts Log.color(:magenta, "Log tail: ")
284
- puts CMD.cmd(" cat #{File.join(dir, 'std.err')} | grep -v '^[^\\s:]*\\[3.m' | tail -n #{tail.to_i} ").read
287
+ puts CMD.cmd(" cat #{File.join(dir, 'std.err')} | grep -v '^[^\\s:]*\\[3.m' | grep -v -e '^[[:space:]]*$' | tail -n #{tail.to_i} ").read
285
288
  end
286
289
  end
287
290
 
@@ -10,7 +10,7 @@ options = SOPT.setup <<EOF
10
10
 
11
11
  Queue a job in Marenostrum
12
12
 
13
- $ rbbt slurm tail <directory> [options]
13
+ $ rbbt slurm tail <directory|jobid> [options]
14
14
 
15
15
  -h--help Print this help
16
16
  EOF
@@ -35,8 +35,28 @@ directory = ARGV.shift
35
35
 
36
36
  raise ParameterException if directory.nil?
37
37
 
38
- directory = File.dirname(directory) unless File.directory?(directory)
38
+ if directory =~ /^[0-9]*$/
39
+ workdir = File.expand_path('~/rbbt-batch')
40
+ Path.setup(workdir)
41
+
42
+ workdir.glob("**/job.id").each do |file|
43
+ next unless directory == Open.read(file).strip
44
+ directory = File.dirname(file)
45
+ break
46
+ end
47
+ end
48
+
49
+ raise ParameterException, "Could not identify job #{directory}" unless File.exists?(directory)
39
50
 
40
51
  require 'rbbt/hpc/slurm'
41
52
 
53
+ command_txt = Open.read(File.join(directory, 'command.batch'))
54
+ if m = command_txt.match(/#STEP_PATH: (.*)/)
55
+ step_path = m[1]
56
+ else
57
+ step_path = nil
58
+ end
59
+
60
+ puts Log.color(:magenta, "Step path: ") + step_path if step_path
61
+
42
62
  HPC::BATCH_MODULE.follow_job directory, true
@@ -21,6 +21,7 @@ $ rbbt slurm list [options]
21
21
  -j--job* Job ids
22
22
  -s--search* Regular expression
23
23
  -t--tail* Show the last lines of the STDERR
24
+ -l--long Show more entries
24
25
  -p--progress Report progress of job and the dependencies
25
26
  -BP--batch_parameters show batch parameters
26
27
  -BPP--batch_procpath show Procpath performance summary
@@ -40,6 +41,8 @@ end
40
41
  batch_system = options.delete :batch_system
41
42
  batch_system ||= 'auto'
42
43
 
44
+ long = options.delete :long
45
+
43
46
  HPC::BATCH_MODULE = HPC.batch_system batch_system
44
47
 
45
48
  raise ParameterException.new("Could not detect batch_system: #{Misc.fingerprint batch_system}") if HPC::BATCH_MODULE.nil?
@@ -183,24 +186,24 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
183
186
 
184
187
 
185
188
  puts Log.color :blue, dir
186
- puts Log.color(:magenta, "Creation: ") << File.mtime(File.join(dir, 'command.batch')).to_s
187
- puts Log.color(:magenta, "Started: ") << File.ctime(File.join(dir, 'std.err')).to_s if File.exist?(File.join(dir, 'std.err'))
188
- puts Log.color(:magenta, "Manifest: ") << Log.color(:yellow, manifest)
189
+ puts Log.color(:magenta, "Creation: ") << File.mtime(File.join(dir, 'command.batch')).to_s if long
190
+ puts Log.color(:magenta, "Started: ") << File.ctime(File.join(dir, 'std.err')).to_s if File.exist?(File.join(dir, 'std.err')) && long
191
+ puts Log.color(:magenta, "Manifest: ") << Log.color(:yellow, manifest) if long
189
192
  puts Log.color(:magenta, "Step path: ") << Log.color(:yellow, step_path)
190
193
  puts Log.color(:magenta, "Done: ") << File.mtime(File.join(dir, 'exit.status')).to_s if File.exist?(File.join(dir, 'exit.status'))
191
- puts Log.color(:magenta, "Exec: ") << (exe || "Missing")
192
- puts Log.color(:magenta, "CMD: ") << (Log.color(:yellow, cmd) || "Missing")
193
- puts Log.color(:magenta, "HOME: ") << Log.color(:yellow, container_home) if container_home
194
+ puts Log.color(:magenta, "Exec: ") << (exe || "Missing") if long
195
+ puts Log.color(:magenta, "CMD: ") << (Log.color(:yellow, cmd) || "Missing") if long
196
+ puts Log.color(:magenta, "HOME: ") << Log.color(:yellow, container_home) if container_home && long
194
197
  if different_system
195
198
  puts Log.color(:magenta, "Job ID (#{Log.color(:red, job_batch_system)}): ") << (exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" : Log.color(:green, id) )
196
199
  else
197
200
  puts Log.color(:magenta, "Job ID: ") << (exit_status ? (exit_status == 0 ? Log.color(:green, "Done") : Log.color(:red, "Error")) + " (#{ id })" : (running_jobs.include?(id) || $norunningjobs ? Log.color(:green, id) : Log.color(:red, id) ))
198
- end
201
+ end
199
202
  puts Log.color(:magenta, "Dependencies: ") << deps * ", " if deps
200
203
  puts Log.color(:magenta, "Dependencies (can fail): ") << cadeps * ", " if cadeps
201
- puts Log.color(:magenta, "Nodes: ") << nodes * ", "
204
+ puts Log.color(:magenta, "Nodes: ") << nodes * ", " if long
202
205
  puts Log.color(:magenta, "Time elapsed: ") << Misc.format_seconds(time_elapsed) if time_elapsed
203
- puts Log.color(:magenta, "Output: ") << File.exists?(File.join(dir, 'std.out')).to_s << (id.nil? || File.exists?(File.join(dir, 'exit.status')) ? "" : " (last update " + Misc.format_seconds(time_diff) + " ago)")
206
+ puts Log.color(:magenta, "Output: ") << File.exists?(File.join(dir, 'std.out')).to_s << (id.nil? || File.exists?(File.join(dir, 'exit.status')) ? "" : " (last update " + Misc.format_seconds(time_diff) + " ago)") if long
204
207
 
205
208
  if options[:batch_parameters]
206
209
  puts Log.color(:magenta, "BATCH parameters: ")
@@ -281,7 +284,7 @@ workdir.glob("**/command.batch").sort_by{|f| File.mtime(f)}.each do |fcmd|
281
284
  puts CMD.cmd("grep -i -w 'Completed step' #{File.join(dir, 'std.err')} | grep -v 'Retrying dep.' | tail -n #{tail.to_i}", :no_fail => true).read
282
285
  else
283
286
  puts Log.color(:magenta, "Log tail: ")
284
- puts CMD.cmd(" cat #{File.join(dir, 'std.err')} | grep -v '^[^\\s:]*\\[3.m' | tail -n #{tail.to_i} ").read
287
+ puts CMD.cmd(" cat #{File.join(dir, 'std.err')} | grep -v '^[^\\s:]*\\[3.m' | grep -v -e '^[[:space:]]*$' | tail -n #{tail.to_i} ").read
285
288
  end
286
289
  end
287
290
 
@@ -10,7 +10,7 @@ options = SOPT.setup <<EOF
10
10
 
11
11
  Queue a job in Marenostrum
12
12
 
13
- $ rbbt slurm tail <directory> [options]
13
+ $ rbbt slurm tail <directory|jobid> [options]
14
14
 
15
15
  -h--help Print this help
16
16
  EOF
@@ -35,8 +35,28 @@ directory = ARGV.shift
35
35
 
36
36
  raise ParameterException if directory.nil?
37
37
 
38
- directory = File.dirname(directory) unless File.directory?(directory)
38
+ if directory =~ /^[0-9]*$/
39
+ workdir = File.expand_path('~/rbbt-batch')
40
+ Path.setup(workdir)
41
+
42
+ workdir.glob("**/job.id").each do |file|
43
+ next unless directory == Open.read(file).strip
44
+ directory = File.dirname(file)
45
+ break
46
+ end
47
+ end
48
+
49
+ raise ParameterException, "Could not identify job #{directory}" unless File.exists?(directory)
39
50
 
40
51
  require 'rbbt/hpc/slurm'
41
52
 
53
+ command_txt = Open.read(File.join(directory, 'command.batch'))
54
+ if m = command_txt.match(/#STEP_PATH: (.*)/)
55
+ step_path = m[1]
56
+ else
57
+ step_path = nil
58
+ end
59
+
60
+ puts Log.color(:magenta, "Step path: ") + step_path if step_path
61
+
42
62
  HPC::BATCH_MODULE.follow_job directory, true
@@ -37,7 +37,7 @@ file = ARGV.shift
37
37
  $seen = []
38
38
  def get_step(file)
39
39
  file = File.expand_path(file)
40
- file = file.sub(/\.(info|files)/,'')
40
+ file = file.sub(/\.(info|files)$/,'')
41
41
  $seen << file
42
42
  Workflow.load_step file
43
43
  end
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.33.3
4
+ version: 5.33.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-28 00:00:00.000000000 Z
11
+ date: 2022-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake