miga-base 0.7.13.2 → 0.7.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/miga/cli.rb +3 -24
- data/lib/miga/cli/action/browse.rb +4 -4
- data/lib/miga/cli/action/classify_wf.rb +1 -3
- data/lib/miga/cli/action/daemon.rb +6 -1
- data/lib/miga/cli/action/quality_wf.rb +2 -5
- data/lib/miga/cli/action/wf.rb +4 -4
- data/lib/miga/common.rb +35 -2
- data/lib/miga/daemon.rb +13 -3
- data/lib/miga/daemon/base.rb +25 -1
- data/lib/miga/version.rb +2 -2
- data/test/daemon_test.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0160b454e26886637f28dea78ab57e66b1c53ee3fca610c64339f3265ce86afb
|
4
|
+
data.tar.gz: 6df1a7bfc7ebf0493265cd6be8f8600a575b3c20f07ec43f7c25b8de3035b5c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00245e9a4d698ed335f1777bd1f9156ecc2ba325c4ef66f42f01f9e59c70e4bfb42a588a7be62271dd55df73e2fc737a29e24253487ba55e9d8645a43508d91c
|
7
|
+
data.tar.gz: 12c8beb33f81fc7114d957a59982d4bfab1deceb21db27dde1a93f474d4ab5918308ac04d351c86b9a71f8a6804e0311b3230ccbad16de320523246f1e7e3f9b
|
data/lib/miga/cli.rb
CHANGED
@@ -110,30 +110,9 @@ class MiGA::Cli < MiGA::MiGA
|
|
110
110
|
end
|
111
111
|
|
112
112
|
##
|
113
|
-
#
|
114
|
-
|
115
|
-
|
116
|
-
# The report goes to $stderr iff --verborse
|
117
|
-
def advance(step, n = 0, total = nil, bin = true)
|
118
|
-
return unless self[:verbose]
|
119
|
-
|
120
|
-
adv = total.nil? ? (n == 0 ? '' : num_suffix(n, bin)) :
|
121
|
-
('%.1f%% (%s/%s)' % [100.0 * n / total,
|
122
|
-
num_suffix(n, bin), num_suffix(total, bin)])
|
123
|
-
$stderr.print("[%s] %s %s \r" % [Time.now, step, adv])
|
124
|
-
end
|
125
|
-
|
126
|
-
def num_suffix(n, bin = false)
|
127
|
-
p = ''
|
128
|
-
{ T: 4, G: 3, M: 2, K: 1 }.each do |k, x|
|
129
|
-
v = (bin ? 1024 : 1e3)**x
|
130
|
-
if n > v
|
131
|
-
n = '%.1f' % (n / v)
|
132
|
-
p = k
|
133
|
-
break
|
134
|
-
end
|
135
|
-
end
|
136
|
-
"#{n}#{p}"
|
113
|
+
# Same as MiGA::MiGA#advance, but checks if the CLI is verbose
|
114
|
+
def advance(*par)
|
115
|
+
super(*par) if self[:verbose]
|
137
116
|
end
|
138
117
|
|
139
118
|
##
|
@@ -15,12 +15,12 @@ class MiGA::Cli::Action::Browse < MiGA::Cli::Action
|
|
15
15
|
p = cli.load_project
|
16
16
|
create_empty_page(p)
|
17
17
|
generate_project_page(p)
|
18
|
-
say 'Creating dataset pages'
|
18
|
+
cli.say 'Creating dataset pages'
|
19
19
|
cli.load_project.each_dataset do |d|
|
20
20
|
generate_dataset_page(p, d)
|
21
21
|
end
|
22
22
|
generate_datasets_index(p)
|
23
|
-
say "Open in your browser: #{File.join(p.path, 'index.html')}"
|
23
|
+
cli.say "Open in your browser: #{File.join(p.path, 'index.html')}"
|
24
24
|
end
|
25
25
|
|
26
26
|
private
|
@@ -28,7 +28,7 @@ class MiGA::Cli::Action::Browse < MiGA::Cli::Action
|
|
28
28
|
##
|
29
29
|
# Create an empty page with necessary assets for project +p+
|
30
30
|
def create_empty_page(p)
|
31
|
-
say 'Creating project page'
|
31
|
+
cli.say 'Creating project page'
|
32
32
|
FileUtils.mkdir_p(browse_file(p, '.'))
|
33
33
|
%w[favicon-32.png style.css].each do |i|
|
34
34
|
FileUtils.cp(template_file(i), browse_file(p, i))
|
@@ -103,7 +103,7 @@ class MiGA::Cli::Action::Browse < MiGA::Cli::Action
|
|
103
103
|
##
|
104
104
|
# Create pages for reference and query dataset indexes
|
105
105
|
def generate_datasets_index(p)
|
106
|
-
say 'Creating index pages'
|
106
|
+
cli.say 'Creating index pages'
|
107
107
|
data = format_dataset_index(p)
|
108
108
|
data.each do |k, v|
|
109
109
|
write_file(p, "#{k}_datasets.html") do
|
@@ -42,9 +42,7 @@ class MiGA::Cli::Action::ClassifyWf < MiGA::Cli::Action
|
|
42
42
|
'--no-summaries',
|
43
43
|
'Do not generate intermediate step summaries'
|
44
44
|
) { |v| cli[:summaries] = v }
|
45
|
-
opts_for_wf(
|
46
|
-
opt, 'Input genome assemblies (nucleotides, FastA)', qual: false
|
47
|
-
)
|
45
|
+
opts_for_wf(opt, 'Input genome assemblies (nucleotides, FastA)')
|
48
46
|
end
|
49
47
|
end
|
50
48
|
|
@@ -6,7 +6,7 @@ require 'miga/daemon'
|
|
6
6
|
|
7
7
|
class MiGA::Cli::Action::Daemon < MiGA::Cli::Action
|
8
8
|
def parse_cli
|
9
|
-
cli.defaults = { daemon_opts: [] }
|
9
|
+
cli.defaults = { daemon_opts: [], show_log: false }
|
10
10
|
cli.expect_operation = true
|
11
11
|
cli.parse do |opt|
|
12
12
|
opt.separator 'Available operations:'
|
@@ -45,6 +45,10 @@ class MiGA::Cli::Action::Daemon < MiGA::Cli::Action
|
|
45
45
|
'--json PATH',
|
46
46
|
'Path to a custom daemon definition in json format'
|
47
47
|
) { |v| cli[:json] = v }
|
48
|
+
opt.on(
|
49
|
+
'--show-log',
|
50
|
+
'Display log on advance instead of the progress summary'
|
51
|
+
) { |v| cli[:show_log] = v }
|
48
52
|
cli.opt_common(opt)
|
49
53
|
|
50
54
|
opt.separator 'Daemon options:'
|
@@ -73,6 +77,7 @@ class MiGA::Cli::Action::Daemon < MiGA::Cli::Action
|
|
73
77
|
d = MiGA::Daemon.new(p, cli[:json])
|
74
78
|
dopts = %i[latency maxjobs nodelist ppn shutdown_when_done]
|
75
79
|
dopts.each { |k| d.runopts(k, cli[k]) }
|
80
|
+
d.show_log! if cli[:show_log]
|
76
81
|
d.daemon(cli.operation, cli[:daemon_opts])
|
77
82
|
end
|
78
83
|
end
|
@@ -9,16 +9,13 @@ class MiGA::Cli::Action::QualityWf < MiGA::Cli::Action
|
|
9
9
|
|
10
10
|
def parse_cli
|
11
11
|
default_opts_for_wf
|
12
|
-
cli.defaults = { mytaxa: false }
|
12
|
+
cli.defaults = { mytaxa: false, min_qual: 'no' }
|
13
13
|
cli.parse do |opt|
|
14
14
|
opt.on(
|
15
15
|
'-m', '--mytaxa-scan',
|
16
16
|
'Perform MyTaxa scan analysis'
|
17
17
|
) { |v| cli[:mytaxa] = v }
|
18
|
-
opts_for_wf(
|
19
|
-
opt, 'Input genome assemblies (nucleotides, FastA)',
|
20
|
-
qual: false
|
21
|
-
)
|
18
|
+
opts_for_wf(opt, 'Input genome assemblies (nucleotides, FastA)')
|
22
19
|
end
|
23
20
|
end
|
24
21
|
|
data/lib/miga/cli/action/wf.rb
CHANGED
@@ -9,7 +9,7 @@ module MiGA::Cli::Action::Wf
|
|
9
9
|
cli.defaults = {
|
10
10
|
clean: false, regexp: MiGA::Cli.FILE_REGEXP,
|
11
11
|
project_type: :genomes, dataset_type: :popgenome,
|
12
|
-
ncbi_draft: true
|
12
|
+
ncbi_draft: true, min_qual: 25.0
|
13
13
|
}
|
14
14
|
end
|
15
15
|
|
@@ -42,10 +42,10 @@ module MiGA::Cli::Action::Wf
|
|
42
42
|
end
|
43
43
|
if params[:qual]
|
44
44
|
opt.on(
|
45
|
-
'--min-qual FLOAT',
|
45
|
+
'--min-qual FLOAT',
|
46
46
|
'Minimum genome quality to include in analysis',
|
47
|
-
|
48
|
-
) { |v| cli[:min_qual] = v }
|
47
|
+
"By default: #{cli[:min_qual]}"
|
48
|
+
) { |v| cli[:min_qual] = v == 'no' ? v : v.to_f }
|
49
49
|
end
|
50
50
|
if params[:cleanup]
|
51
51
|
opt.on(
|
data/lib/miga/common.rb
CHANGED
@@ -6,6 +6,7 @@ require 'miga/json'
|
|
6
6
|
require 'miga/common/base'
|
7
7
|
require 'miga/common/path'
|
8
8
|
require 'miga/common/format'
|
9
|
+
require 'stringio'
|
9
10
|
|
10
11
|
##
|
11
12
|
# Generic class used to handle system-wide information and methods, and parent
|
@@ -38,10 +39,42 @@ class MiGA::MiGA
|
|
38
39
|
##
|
39
40
|
# Print +par+ ensuring new line at the end.
|
40
41
|
# Date/time-stamp each line.
|
41
|
-
# If the first parameter is +IO
|
42
|
+
# If the first parameter is +IO+ or +StringIO+ the output is sent there,
|
42
43
|
# otherwise it's sent to +$stderr+
|
43
44
|
def say(*par)
|
44
|
-
io = par.first
|
45
|
+
io = like_io?(par.first) ? par.shift : $stderr
|
45
46
|
io.puts(*par.map { |i| "[#{Time.now}] #{i}" })
|
46
47
|
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# Reports the advance of a task at +step+ (String), the +n+ out of +total+.
|
51
|
+
# The advance is reported in powers of 1,024 if +bin+ is true, or powers of
|
52
|
+
# 1,000 otherwise.
|
53
|
+
# The report goes to $stderr iff --verborse
|
54
|
+
def advance(step, n = 0, total = nil, bin = true)
|
55
|
+
adv = total.nil? ? (n == 0 ? '' : num_suffix(n, bin)) :
|
56
|
+
('%.1f%% (%s/%s)' % [100.0 * n / total,
|
57
|
+
num_suffix(n, bin), num_suffix(total, bin)])
|
58
|
+
$stderr.print("[%s] %s %s \r" % [Time.now, step, adv])
|
59
|
+
end
|
60
|
+
|
61
|
+
##
|
62
|
+
# Return formatted number +n+ with the appropriate units as
|
63
|
+
# powers of 1,000 (if +bin+ if false) or 1,024 (otherwise)
|
64
|
+
def num_suffix(n, bin = false)
|
65
|
+
p = ''
|
66
|
+
{ T: 4, G: 3, M: 2, K: 1 }.each do |k, x|
|
67
|
+
v = (bin ? 1024 : 1e3)**x
|
68
|
+
if n > v
|
69
|
+
n = '%.1f' % (n / v)
|
70
|
+
p = k
|
71
|
+
break
|
72
|
+
end
|
73
|
+
end
|
74
|
+
"#{n}#{p}"
|
75
|
+
end
|
76
|
+
|
77
|
+
def like_io?(obj)
|
78
|
+
obj.is_a?(IO) || obj.is_a?(StringIO)
|
79
|
+
end
|
47
80
|
end
|
data/lib/miga/daemon.rb
CHANGED
@@ -72,6 +72,7 @@ class MiGA::Daemon < MiGA::MiGA
|
|
72
72
|
say '-----------------------------------'
|
73
73
|
say 'MiGA:%s launched' % project.name
|
74
74
|
say '-----------------------------------'
|
75
|
+
miga_say "Saving log to: #{output_file}" unless show_log?
|
75
76
|
recalculate_status!
|
76
77
|
load_status
|
77
78
|
say 'Configuration options:'
|
@@ -111,10 +112,12 @@ class MiGA::Daemon < MiGA::MiGA
|
|
111
112
|
say(*msg) if verbosity >= level
|
112
113
|
end
|
113
114
|
|
115
|
+
alias miga_say say
|
116
|
+
|
114
117
|
##
|
115
118
|
# Same as +l_say+ with +level = 1+
|
116
119
|
def say(*msg)
|
117
|
-
super(*msg) if verbosity >= 1
|
120
|
+
super(logfh, *msg) if verbosity >= 1
|
118
121
|
end
|
119
122
|
|
120
123
|
##
|
@@ -173,6 +176,12 @@ class MiGA::Daemon < MiGA::MiGA
|
|
173
176
|
o = true if ds.ref?
|
174
177
|
queue_job(:d, ds)
|
175
178
|
end
|
179
|
+
unless show_log?
|
180
|
+
n = project.dataset_names.count
|
181
|
+
k = jobs_to_run.size + jobs_running.size
|
182
|
+
advance('Datasets:', n - k, n, false)
|
183
|
+
miga_say if k == 0
|
184
|
+
end
|
176
185
|
o
|
177
186
|
end
|
178
187
|
|
@@ -332,8 +341,9 @@ class MiGA::Daemon < MiGA::MiGA
|
|
332
341
|
kill: %w[pid]
|
333
342
|
}.each do |k, v|
|
334
343
|
if !runopts(k).nil? && runopts(k) =~ /%(\d+\$)?[ds]/
|
335
|
-
runopts(
|
336
|
-
|
344
|
+
runopts(
|
345
|
+
k, runopts(k).gsub(/%(\d+\$)?d/, '%\\1s') % v.map { |i| "{{#{i}}}" }
|
346
|
+
)
|
337
347
|
end
|
338
348
|
end
|
339
349
|
runopts(:format_version, 1)
|
data/lib/miga/daemon/base.rb
CHANGED
@@ -17,7 +17,7 @@ module MiGA::Daemon::Base
|
|
17
17
|
if !force && v == 0 && k != :verbosity
|
18
18
|
raise "Daemon's #{k} cannot be set to zero"
|
19
19
|
end
|
20
|
-
when :shutdown_when_done
|
20
|
+
when :shutdown_when_done, :show_log
|
21
21
|
v = !!v
|
22
22
|
when :nodelist
|
23
23
|
if v =~ /^\$/
|
@@ -73,4 +73,28 @@ module MiGA::Daemon::Base
|
|
73
73
|
def verbosity
|
74
74
|
runopts(:verbosity) || 1
|
75
75
|
end
|
76
|
+
|
77
|
+
##
|
78
|
+
# Writing file handler (IO) to the log file
|
79
|
+
def logfh
|
80
|
+
show_log? ? $stderr : (@logfh ||= File.open(output_file, 'w'))
|
81
|
+
end
|
82
|
+
|
83
|
+
##
|
84
|
+
# Display log instead of the progress summary
|
85
|
+
def show_log!
|
86
|
+
@show_log = true
|
87
|
+
end
|
88
|
+
|
89
|
+
##
|
90
|
+
# Display progress summary instead of the log
|
91
|
+
def show_summary!
|
92
|
+
@runopts[:show_log] = false
|
93
|
+
end
|
94
|
+
|
95
|
+
##
|
96
|
+
# Display log instead of the progress summary?
|
97
|
+
def show_log?
|
98
|
+
@runopts[:show_log] ||= false
|
99
|
+
end
|
76
100
|
end
|
data/lib/miga/version.rb
CHANGED
@@ -8,7 +8,7 @@ module MiGA
|
|
8
8
|
# - Float representing the major.minor version.
|
9
9
|
# - Integer representing gem releases of the current version.
|
10
10
|
# - Integer representing minor changes that require new version number.
|
11
|
-
VERSION = [0.7,
|
11
|
+
VERSION = [0.7, 15, 0]
|
12
12
|
|
13
13
|
##
|
14
14
|
# Nickname for the current major.minor version.
|
@@ -16,7 +16,7 @@ module MiGA
|
|
16
16
|
|
17
17
|
##
|
18
18
|
# Date of the current gem release.
|
19
|
-
VERSION_DATE = Date.new(2020, 8,
|
19
|
+
VERSION_DATE = Date.new(2020, 8, 12)
|
20
20
|
|
21
21
|
##
|
22
22
|
# Reference of MiGA.
|
data/test/daemon_test.rb
CHANGED
@@ -9,7 +9,7 @@ class DaemonTest < Test::Unit::TestCase
|
|
9
9
|
def setup
|
10
10
|
initialize_miga_home(
|
11
11
|
<<~DAEMON
|
12
|
-
{ "maxjobs": 1, "ppn": 1, "latency": 2, "varsep": " ",
|
12
|
+
{ "maxjobs": 1, "ppn": 1, "latency": 2, "varsep": " ", "show_log": true,
|
13
13
|
"var": "{{key}}={{value}}", "cmd": "echo {{task_name}} >/dev/null",
|
14
14
|
"alive": "echo 1 # {{pid}}", "type": "bash", "format_version": 1 }
|
15
15
|
DAEMON
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: miga-base
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luis M. Rodriguez-R
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-08-
|
11
|
+
date: 2020-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: daemons
|