Class: Aspera::Cli::TransferProgress
- Inherits:
-
Object
- Object
- Aspera::Cli::TransferProgress
- Defined in:
- lib/aspera/cli/transfer_progress.rb
Overview
Progress bar for transfers. Supports multi-session. Note that we can have this case: 2 sessions (-C x:2), but one session fails and restarts…
Instance Method Summary collapse
-
#event(type, session_id: nil, info: nil) ⇒ Object
Called by user of progress bar with a status on a transfer session.
-
#initialize ⇒ TransferProgress
constructor
A new instance of TransferProgress.
-
#reset ⇒ Object
Reset progress bar, to re-use it.
Constructor Details
#initialize ⇒ TransferProgress
Returns a new instance of TransferProgress.
14 15 16 17 18 19 20 |
# File 'lib/aspera/cli/transfer_progress.rb', line 14 def initialize @progress_bar = nil # Key is session id @sessions = {} @completed = false @title = nil end |
Instance Method Details
#event(type, session_id: nil, info: nil) ⇒ Object
Called by user of progress bar with a status on a transfer session
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 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 |
# File 'lib/aspera/cli/transfer_progress.rb', line 31 def event(type, session_id: nil, info: nil) Log.log.trace1{"progress: #{type} #{session_id} #{info}"} return if @completed if @progress_bar.nil? @progress_bar = ProgressBar.create( format: '%t %a %B %p%% %r Mbps %E', rate_scale: lambda{ |rate| rate / Environment::BYTES_PER_MEBIBIT}, title: '', total: nil ) end progress_provided = false case type when :sessions_init # Give opportunity to show progress of initialization with multiple status Aspera.assert(session_id.nil?) Aspera.assert_type(info, String) # Initialization of progress bar @title = info when :session_start Aspera.assert_type(session_id, String) Aspera.assert(info.nil?) raise "Session #{session_id} already started" if @sessions[session_id] @sessions[session_id] = { job_size: 0, # Total size of transfer (pre-calc) current: 0, running: true } # Remove last pre-start message if any @title = nil when :session_size Aspera.assert_type(session_id, String) Aspera.assert(!info.nil?) Aspera.assert_type(@sessions[session_id], Hash) @sessions[session_id][:job_size] = info.to_i sessions_total = total(:job_size) @progress_bar.total = sessions_total unless sessions_total.eql?(@progress_bar.total) || sessions_total < @progress_bar.progress when :transfer Aspera.assert_type(session_id, String) Aspera.assert_type(@sessions[session_id], Hash) if !@progress_bar.total.nil? && !info.nil? progress_provided = true @sessions[session_id][:current] = info.to_i sessions_current = total(:current) @progress_bar.progress = sessions_current unless @progress_bar.progress.eql?(sessions_current) || sessions_current > total(:job_size) end when :session_end Aspera.assert_type(session_id, String) Aspera.assert(info.nil?) # A session may be too short and finish before it has been started @sessions[session_id][:running] = false if @sessions[session_id].is_a?(Hash) when :end Aspera.assert(session_id.nil?) Aspera.assert(info.nil?) @progress_bar.finish else Aspera.error_unexpected_value(type){'event type'} end new_title = @sessions.length < 2 ? @title.to_s : "[#{@sessions.count{ |_i, d| d[:running]}}] #{@title}" @progress_bar&.title = new_title unless @progress_bar&.title.eql?(new_title) @progress_bar&.increment if !progress_provided && @progress_bar.progress.nil? rescue ProgressBar::InvalidProgressError => e Log.log.error{"Progress error: #{e}"} end |
#reset ⇒ Object
Reset progress bar, to re-use it.
23 24 25 |
# File 'lib/aspera/cli/transfer_progress.rb', line 23 def reset send(:initialize) end |