module Emque::Consuming::Application

Public Class Methods

included(descendant) click to toggle source
# File lib/emque/consuming/application.rb, line 16
def self.included(descendant)
  Emque::Consuming.application = descendant

  descendant.class_eval do
    extend Emque::Consuming::Core
    include Emque::Consuming::Helpers

    attr_reader :error_tracker, :manager

    private :ensure_adapter_is_configured!, :initialize_error_tracker,
            :initialize_manager, :log_prefix, :handle_shutdown
  end
end
new() click to toggle source
# File lib/emque/consuming/application.rb, line 30
def initialize
  self.class.instance = self

  logger.info "#{log_prefix}: initializing"

  ensure_adapter_is_configured!

  initialize_manager
  initialize_error_tracker
end

Public Instance Methods

auto_shutdown_enabled() click to toggle source

private

# File lib/emque/consuming/application.rb, line 74
def auto_shutdown_enabled
  config.auto_shutdown
end
ensure_adapter_is_configured!() click to toggle source
# File lib/emque/consuming/application.rb, line 78
def ensure_adapter_is_configured!
  if config.adapter.nil?
    raise AdapterConfigurationError,
          "Adapter not found! use config.set_adapter(name, options)"
  end
end
handle_shutdown() click to toggle source
# File lib/emque/consuming/application.rb, line 85
def handle_shutdown
  context = {
    :limit => error_tracker.limit,
    :expiration => error_tracker.expiration,
    :occurrences => error_tracker.occurrences,
    :status => runner.status.to_h,
    :configuration => config.to_h
  }

  Emque::Consuming.logger.error("Error limit exceeded... shutting down")
  Emque::Consuming.logger.error(context)

  Emque::Consuming.config.shutdown_handlers.each do |handler|
    handler.call(context)
  end
end
initialize_error_tracker() click to toggle source
# File lib/emque/consuming/application.rb, line 102
def initialize_error_tracker
  @error_tracker = Emque::Consuming::ErrorTracker.new(
    :expiration => config.error_expiration,
    :limit => config.error_limit
  )
end
initialize_manager() click to toggle source
# File lib/emque/consuming/application.rb, line 109
def initialize_manager
  @manager = config.adapter.manager.new
end
log_prefix() click to toggle source
# File lib/emque/consuming/application.rb, line 113
def log_prefix
  "#{config.app_name.capitalize} Application"
end
notice_error(context) click to toggle source
# File lib/emque/consuming/application.rb, line 41
def notice_error(context)
  error_tracker.notice_error_for(context)
  verify_error_status
end
restart() click to toggle source
# File lib/emque/consuming/application.rb, line 46
def restart
  stop
  initialize_manager
  error_tracker.occurrences.clear
  start
end
start() click to toggle source
# File lib/emque/consuming/application.rb, line 53
def start
  logger.info "#{log_prefix}: starting"
  manager.async.start
end
stop() click to toggle source
# File lib/emque/consuming/application.rb, line 58
def stop
  logger.info "#{log_prefix}: stopping"
  manager.stop
end
verify_error_status() click to toggle source
# File lib/emque/consuming/application.rb, line 63
def verify_error_status
  if error_tracker.limit_reached?
    if auto_shutdown_enabled
      handle_shutdown
      runner.stop
    end
  end
end