class Asperalm::Fasp::Manager

Base class for FASP transfer agents sub classes shall implement start_transfer and shutdown

Constants

BooleanFields
ExpectedMethod
IntegerFields

fields description for JSON generation

LISTENER_SESSION_ID_B
LISTENER_SESSION_ID_S

Public Class Methods

new() click to toggle source
# File lib/asperalm/fasp/manager.rb, line 31
def initialize
  @listeners=[]
end
validate_status_list(statuses) click to toggle source

the following methods must be implemented by subclass: start_transfer(transfer_spec,options) : start and wait for completion wait_for_transfers_completion : wait for termination of all transfers, @return list of : :success or error message optional: shutdown

# File lib/asperalm/fasp/manager.rb, line 63
def self.validate_status_list(statuses)
  raise "internal error: bad statuses type: #{statuses.class}" unless statuses.is_a?(Array)
  raise "internal error: bad statuses content: #{statuses}" unless statuses.select{|i|!i.eql?(:success) and !i.is_a?(StandardError)}.empty?
end

Public Instance Methods

add_listener(listener) click to toggle source

listener receives events

# File lib/asperalm/fasp/manager.rb, line 53
def add_listener(listener)
  raise "expect one of #{ExpectedMethod}" if ExpectedMethod.inject(0){|m,e|m+=listener.respond_to?("event_#{e}")?1:0;m}.eql?(0)
  @listeners.push(listener)
  self
end

Private Instance Methods

enhanced_event_format(event) click to toggle source

translates legacy event into enhanced (JSON) event

# File lib/asperalm/fasp/manager.rb, line 15
def enhanced_event_format(event)
  return event.keys.inject({}) do |h,e|
    # capital_to_snake_case
    new_name=e.
    gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
    gsub(/([a-z\d])([A-Z])/,'\1_\2').
    gsub(/([a-z\d])(usec)$/,'\1_\2').
    downcase
    value=event[e]
    value=value.to_i if IntegerFields.include?(e)
    value=value.eql?('Yes') ? true : false if BooleanFields.include?(e)
    h[new_name]=value
    h
  end
end
notify_listeners(current_event_text,current_event_data) click to toggle source
# File lib/asperalm/fasp/manager.rb, line 35
def notify_listeners(current_event_text,current_event_data)
  Log.log.debug("send event to listeners")
  enhanced_event=nil
  @listeners.each do |listener|
    listener.send(:event_text,current_event_text) if listener.respond_to?(:event_text)
    listener.send(:event_struct,current_event_data) if listener.respond_to?(:event_struct)
    if listener.respond_to?(:event_enhanced)
      enhanced_event=enhanced_event_format(current_event_data) if enhanced_event.nil?
      listener.send(:event_enhanced,enhanced_event)
    end
  end
end