Class: Aspera::Agent::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/aspera/agent/base.rb

Overview

Base class for transfer agents

Direct Known Subclasses

Alpha, Connect, Direct, Httpgw, Node, Trsdk

Constant Summary collapse

RUBY_EXT =
'.rb'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.agent_listObject

discover available agents



34
35
36
37
38
39
# File 'lib/aspera/agent/base.rb', line 34

def agent_list
  base_class = File.basename(__FILE__)
  Dir.entries(File.dirname(File.expand_path(__FILE__))).select do |file|
    file.end_with?(RUBY_EXT) && !file.eql?(base_class)
  end.map{|file|file[0..(-1 - RUBY_EXT.length)].to_sym}
end

.factory_create(agent, options) ⇒ Object



11
12
13
14
15
# File 'lib/aspera/agent/base.rb', line 11

def factory_create(agent, options)
  # Aspera.assert_values(agent, agent_list)
  require "aspera/agent/#{agent}"
  Aspera::Agent.const_get(agent.to_s.capitalize).new(**options)
end

.to_move_options(default:, options:) ⇒ Object

compute options from user provided and default options



18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/aspera/agent/base.rb', line 18

def to_move_options(default:, options:)
  result = options.symbolize_keys
  available = default.map{|k, v|"#{k}(#{v})"}.join(', ')
  result.each_key do |k|
    Aspera.assert_values(k, default.keys){"transfer agent parameter: #{k}"}
    # check it is the expected type: too limiting, as we can have an Integer or Float, or symbol and string
    # raise "Invalid value for transfer agent parameter: #{k}, expect #{default[k].class.name}" unless default[k].nil? || v.is_a?(default[k].class)
  end
  default.each do |k, v|
    raise "Missing required agent parameter: #{k}. Parameters: #{available}" if v.eql?(:required) && !result.key?(k)
    result[k] = v unless result.key?(k)
  end
  return result
end

Instance Method Details

#wait_for_completionObject

Wait for all sessions to terminate and return the status of each session



43
44
45
46
47
48
49
50
# File 'lib/aspera/agent/base.rb', line 43

def wait_for_completion
  # list of: :success or "error message string"
  statuses = wait_for_transfers_completion
  @progress&.reset
  Aspera.assert_type(statuses, Array)
  Aspera.assert(statuses.none?{|i|!i.eql?(:success) && !i.is_a?(StandardError)}){"bad statuses content: #{statuses}"}
  return statuses
end