class Nifty::Event::Processor

Processing of events

@author Michal Kimle @attr_reader [Nifty::Backend] backend @attr_reader [Nifty::TransferMethod] transfer_method @attr_reader [Hash] parameters

Attributes

backend[R]
error_code[R]
parameters[R]
transfer_method[R]

Public Class Methods

new(backend, transfer_method, parameters) click to toggle source

Constructor

@param [Nifty::Backend] backend @param [Nifty::TransferMethod] transfer_method @param [Hash] parameters

# File lib/nifty/event/processor.rb, line 17
def initialize(backend, transfer_method, parameters)
  @backend = backend
  @transfer_method = transfer_method
  @parameters = parameters
  @error_code = Nifty::ExitCodes::NO_ERROR_EXIT_CODE
end

Public Instance Methods

process_events() click to toggle source

Runs the whole event processing

# File lib/nifty/event/processor.rb, line 26
def process_events
  run_backend_pre
  run_events
  run_backend_post

  error_code
end
run_backend_post() click to toggle source

Runs backend's postprocessing routine

# File lib/nifty/event/processor.rb, line 43
def run_backend_post
  logger.debug('Running backend post-processing...')
  backend.post(parameters) if backend.respond_to? 'post'
end
run_backend_pre() click to toggle source

Runs backend's preprocessing routine

# File lib/nifty/event/processor.rb, line 36
def run_backend_pre
  logger.debug('Running backend pre-processing...')
  backend.pre(parameters) if backend.respond_to? 'pre'
end
run_events() click to toggle source

Takes care of event processing. All the events are loaded, converted and run.

# File lib/nifty/event/processor.rb, line 50
def run_events
  events = prepare_events
  logger.debug("Events ready to run: #{events}")
  events.each do |event, file|
    begin
      event.run

      # clean event's descriptor so it won't be processed again
      FileUtils.rm file
    rescue Nifty::Errors::Events::EventError => ex
      logger.error "Unable to process event #{event.inspect} from descriptor #{file.inspect}: #{ex.message}."
      @error_code = Nifty::ExitCodes::EVENT_PROCESSING_ERROR_EXIT_CODE
      break
    rescue SystemCallError => ex
      logger.error "Cannot delete descriptor file #{file.inspect} of already processed event: #{ex.message}."
      @error_code = Nifty::ExitCodes::EVENT_CLEANUP_ERROR_EXIT_CODE
      break
    end
  end
end

Private Instance Methods

prepare_events() click to toggle source

Prepares events for processing

# File lib/nifty/event/processor.rb, line 75
def prepare_events
  appliance_dir = parameters[:"appliance-dir"]
  logger.warn "Descriptor directory #{appliance_dir.inspect} doesn't seem to be readable" unless File.readable? appliance_dir

  events = {}
  # each event has its own descriptor
  Dir.glob(File.join(appliance_dir, '*.json')).sort.each do |file|
    begin
      appliance = Nifty::Event::Loader.load_appliance(file)
      event = Nifty::Event::Converter.convert_appliance(appliance, backend, transfer_method, parameters)

      events[event] = file
    rescue Nifty::Errors::Event::LoaderError, Nifty::Errors::BackendError => ex
      logger.error "Error occured while event #{file.inspect} preparation: #{ex.message}."
      @error_code = Nifty::ExitCodes::EVENT_PREPARATION_ERROR_EXIT_CODE
      break
    end
  end

  events
end