Class: MiGA::MiGA
- Inherits:
-
Object
- Object
- MiGA::MiGA
- Extended by:
- Common::Format, Common::Net, Common::Path, Common::SystemCall
- Defined in:
- lib/miga/common.rb,
lib/miga/version.rb,
lib/miga/common/base.rb
Overview
Generic class used to handle system-wide information and methods, and parent of all other MiGA::* classes.
Direct Known Subclasses
Cli, Cli::Action, Daemon, Dataset, Json, Lair, Metadata, Parallel, Project, RemoteDataset, Result, SQLite, TaxIndex, TaxIndexTaxon, Taxonomy
Constant Summary
Constants included from MiGA
CITATION, VERSION, VERSION_DATE, VERSION_NAME
Class Method Summary collapse
-
.CITATION ⇒ Object
Reference of MiGA.
- .CITATION_ARRAY ⇒ Object
-
.DEBUG(*args) ⇒ Object
Send debug message.
- .debug? ⇒ Boolean
-
.DEBUG_OFF ⇒ Object
Turn off debugging.
-
.DEBUG_ON ⇒ Object
Turn on debugging.
- .debug_trace? ⇒ Boolean
-
.DEBUG_TRACE_OFF ⇒ Object
Turn off debug tracing (but not debugging).
-
.DEBUG_TRACE_ON ⇒ Object
Turn on debug tracing (and debugging).
-
.FULL_VERSION ⇒ Object
Complete version as string.
-
.initialized? ⇒ Boolean
Has MiGA been initialized?.
-
.LONG_VERSION ⇒ Object
Complete version with nickname and date as string.
-
.rc_path ⇒ Object
Path to the
.miga_rc
file. -
.VERSION ⇒ Object
Major.minor version as Float.
-
.VERSION_DATE ⇒ Object
Date of the current gem release.
Instance Method Summary collapse
-
#advance(step, n = 0, total = nil, bin = true) ⇒ Object
Reports the advance of a task at
step
(String), then
out oftotal
. - #like_io?(obj) ⇒ Boolean
-
#num_suffix(n, bin = false) ⇒ Object
Return formatted number
n
with the appropriate units as powers of 1,000 (ifbin
if false) or 1,024 (otherwise). -
#result_files_exist?(base, ext) ⇒ Boolean
Check if the result files exist with
base
name (String) followed by theext
values (Array of String). -
#say(*par) ⇒ Object
Print
par
ensuring new line at the end.
Methods included from Common::Path
Methods included from Common::Format
clean_fasta_file, seqs_length, tabulate
Methods included from Common::Net
download_file_ftp, known_hosts, remote_connection
Methods included from Common::SystemCall
Class Method Details
.CITATION ⇒ Object
Reference of MiGA
70 71 72 |
# File 'lib/miga/version.rb', line 70 def self.CITATION CITATION.map { |i| "- #{i}" }.join end |
.CITATION_ARRAY ⇒ Object
74 75 76 |
# File 'lib/miga/version.rb', line 74 def self.CITATION_ARRAY CITATION end |
.DEBUG(*args) ⇒ Object
Send debug message
31 32 33 34 35 36 |
# File 'lib/miga/common/base.rb', line 31 def DEBUG(*args) $stderr.puts(*args) if debug? $stderr.puts( caller.map { |v| v.gsub(/^/, ' ') }.join("\n") ) if debug_trace? end |
.debug? ⇒ Boolean
38 39 40 |
# File 'lib/miga/common/base.rb', line 38 def debug? @@DEBUG ||= false end |
.DEBUG_OFF ⇒ Object
Turn off debugging
12 13 14 |
# File 'lib/miga/common/base.rb', line 12 def DEBUG_OFF @@DEBUG = false end |
.DEBUG_ON ⇒ Object
Turn on debugging
6 7 8 |
# File 'lib/miga/common/base.rb', line 6 def DEBUG_ON @@DEBUG = true end |
.debug_trace? ⇒ Boolean
42 43 44 |
# File 'lib/miga/common/base.rb', line 42 def debug_trace? @@DEBUG_TRACE ||= false end |
.DEBUG_TRACE_OFF ⇒ Object
Turn off debug tracing (but not debugging)
25 26 27 |
# File 'lib/miga/common/base.rb', line 25 def DEBUG_TRACE_OFF @@DEBUG_TRACE = false end |
.DEBUG_TRACE_ON ⇒ Object
Turn on debug tracing (and debugging)
18 19 20 21 |
# File 'lib/miga/common/base.rb', line 18 def DEBUG_TRACE_ON @@DEBUG_TRACE = true DEBUG_ON() end |
.FULL_VERSION ⇒ Object
Complete version as string
52 53 54 |
# File 'lib/miga/version.rb', line 52 def self.FULL_VERSION VERSION.join('.') end |
.initialized? ⇒ Boolean
Has MiGA been initialized?
36 37 38 39 |
# File 'lib/miga/common.rb', line 36 def self.initialized? File.exist?(rc_path) && File.exist?(File.join(ENV['MIGA_HOME'], '.miga_daemon.json')) end |
.LONG_VERSION ⇒ Object
Complete version with nickname and date as string
58 59 60 |
# File 'lib/miga/version.rb', line 58 def self.LONG_VERSION "MiGA #{VERSION.join('.')} - #{VERSION_NAME} - #{VERSION_DATE}" end |
.rc_path ⇒ Object
Path to the .miga_rc
file
30 31 32 |
# File 'lib/miga/common.rb', line 30 def self.rc_path File.join(ENV['MIGA_HOME'], '.miga_rc') end |
.VERSION ⇒ Object
Major.minor version as Float
46 47 48 |
# File 'lib/miga/version.rb', line 46 def self.VERSION VERSION[0] end |
.VERSION_DATE ⇒ Object
Date of the current gem release
64 65 66 |
# File 'lib/miga/version.rb', line 64 def self.VERSION_DATE VERSION_DATE end |
Instance Method Details
#advance(step, n = 0, total = nil, bin = true) ⇒ Object
Reports the advance of a task at step
(String), the n
out of total
. The advance is reported in powers of 1,024 if bin
is true, or powers of 1,000 otherwise. The report goes to $stderr iff –verbose
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/miga/common.rb', line 65 def advance(step, n = 0, total = nil, bin = true) # Initialize advance timing @_advance_time ||= { last: nil, n: 0, avg: nil } if @_advance_time[:n] > n @_advance_time[:last] = nil @_advance_time[:n] = 0 @_advance_time[:avg] = nil end # Estimate timing adv_n = n - @_advance_time[:n] if total.nil? || @_advance_time[:last].nil? || adv_n.negative? @_advance_time[:last] = Time.now @_advance_time[:n] = n elsif adv_n > 0.001 * total this_time = (Time.now - @_advance_time[:last]).to_f this_avg = this_time / adv_n @_advance_time[:avg] ||= this_avg @_advance_time[:avg] = 0.9 * @_advance_time[:avg] + 0.1 * this_avg @_advance_time[:last] = Time.now @_advance_time[:n] = n end # Report adv = if total.nil? (n == 0 ? '' : num_suffix(n, bin)) else vals = [100.0 * n / total, num_suffix(n, bin), num_suffix(total, bin)] ('%.1f%% (%s/%s)' % vals) end left = if @_advance_time[:avg].nil? '' else left_time = @_advance_time[:avg] * (total - n) / 60 # <- in minutes left_time < 0.01 ? ' ' : left_time < 1 ? ('%.0fs left' % (left_time * 60)) : left_time > 1440 ? ('%.1fd left' % (left_time / 1440)) : left_time > 60 ? ('%.1fh left' % (left_time / 60)) : ('%.1fm left' % left_time) end $stderr.print("[%s] %s %s %s \r" % [Time.now, step, adv, left]) end |
#like_io?(obj) ⇒ Boolean
126 127 128 |
# File 'lib/miga/common.rb', line 126 def like_io?(obj) obj.is_a?(IO) || obj.is_a?(StringIO) end |
#num_suffix(n, bin = false) ⇒ Object
Return formatted number n
with the appropriate units as powers of 1,000 (if bin
if false) or 1,024 (otherwise)
113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/miga/common.rb', line 113 def num_suffix(n, bin = false) p = '' { T: 4, G: 3, M: 2, K: 1 }.each do |k, x| v = (bin ? 1024 : 1e3)**x if n > v n = '%.1f' % (n.to_f / v) p = k break end end "#{n}#{p}" end |
#result_files_exist?(base, ext) ⇒ Boolean
Check if the result files exist with base
name (String) followed by the ext
values (Array of String).
44 45 46 47 48 |
# File 'lib/miga/common.rb', line 44 def result_files_exist?(base, ext) ext = [ext] unless ext.is_a? Array MiGA::MiGA.DEBUG("Assserting files for result: #{ext}") ext.all? { |f| File.exist?(base + f) or File.exist?("#{base}#{f}.gz") } end |
#say(*par) ⇒ Object
Print par
ensuring new line at the end. Date/time-stamp each line. If the first parameter is IO
or StringIO
the output is sent there, otherwise it’s sent to $stderr
55 56 57 58 |
# File 'lib/miga/common.rb', line 55 def say(*par) io = like_io?(par.first) ? par.shift : $stderr io.puts(*par.map { |i| "[#{Time.now}] #{i}" }) end |