class Asperalm::Cli::Listener::ProgressMulti
a listener to FASP event that displays a progress bar
Constants
- BYTE_PER_MEGABIT
Public Class Methods
new()
click to toggle source
# File lib/asperalm/cli/listener/progress_multi.rb, line 10 def initialize @progress_bar=nil @sessions={} end
Public Instance Methods
event_enhanced(data)
click to toggle source
# File lib/asperalm/cli/listener/progress_multi.rb, line 38 def event_enhanced(data) if @progress_bar.nil? @progress_bar=ProgressBar.create( :format => '%t %a %B %p%% %r Mbps %e', :rate_scale => lambda{|rate|rate/BYTE_PER_MEGABIT}, :title => '', :total => nil) end if !data.has_key?(Fasp::Manager::LISTENER_SESSION_ID_S) Log.log.error("Internal error: no #{Fasp::Manager::LISTENER_SESSION_ID_S} in event: #{data}") return end newtitle=@sessions.length < 2 ? '' : "multi=#{@sessions.length}" @progress_bar.title=newtitle unless @progress_bar.title.eql?(newtitle) session=@sessions[data[Fasp::Manager::LISTENER_SESSION_ID_S]]||={ cumulative: 0, job_size: 0, current: 0 } case data['type'] when 'INIT' # connection to ascp (get id) when 'SESSION' # session information when 'NOTIFICATION' # sent from remote if data.has_key?('pre_transfer_bytes') then session[:job_size]=data['pre_transfer_bytes'] update_total end when 'STATS' # during transfer if !@progress_bar.total.nil? then if data.has_key?('bytescont') session[:current]=session[:cumulative]+data['bytescont'].to_i update_progress else session[:current]=data['transfer_bytes'].to_i update_progress end else @progress_bar.increment end when 'STOP' # stop event when one file is completed session[:cumulative]=session[:cumulative]+data['size'].to_i when 'DONE' # end of session @sessions.delete(data[Fasp::Manager::LISTENER_SESSION_ID_S]) update_progress update_total else Log.log.debug("ignore: #{data['type']}") end end
reset()
click to toggle source
# File lib/asperalm/cli/listener/progress_multi.rb, line 15 def reset @progress_bar=nil @sessions={} end
update_progress()
click to toggle source
# File lib/asperalm/cli/listener/progress_multi.rb, line 30 def update_progress begin @progress_bar.progress=@sessions.values.inject(0){|m,s|m+=s[:current].to_i;m;} rescue nil end end
update_total()
click to toggle source
# File lib/asperalm/cli/listener/progress_multi.rb, line 22 def update_total begin @progress_bar.total=@sessions.values.inject(0){|m,s|m+=s[:job_size].to_i;m;} rescue nil end end