class ErrorHandler::EH

Constants

DEBUG
ERROR
EX_BASE
EX_CANTCREAT
EX_CONFIG
EX_DATAERR
EX_GENERAL
EX_IOERR
EX_NOHOST
EX_NOINPUT
EX_NOPERM
EX_NOUSER
EX_OK
EX_OSERR
EX_OSFILE
EX_PROTOCOL
EX_SOFTWARE
EX_TEMPFAIL
EX_UNAVAILABLE
EX_USAGE
FATAL
INFO
WARN

Private Class Methods

construct_args(opts) click to toggle source
# File lib/eh/eh.rb, line 122
def self.construct_args(opts)
  return nil if opts.nil?
  return nil if opts[:args].nil?
  opts[:args].join(' ')
end
generate_log_id() click to toggle source
# File lib/eh/eh.rb, line 105
def self.generate_log_id
  ms = Time.now
end
handle(handlers, e, msg) click to toggle source
# File lib/eh/eh.rb, line 111
def self.handle(handlers, e, msg)
  return if handlers.nil?
  if handlers.is_a? Array
    handlers.each do |handler|
      handler.handle(e, msg) if not handler.nil?
    end
  else
    handlers.handle(e, msg)
  end
end
log(facilities, msg, msg_type) click to toggle source
# File lib/eh/eh.rb, line 97
def self.log(facilities, msg, msg_type)
  if facilities.is_a? Array
    EH::log_multiple_loggers(facilities, msg, msg_type)
  else
    EH::log_single_logger(facilities, msg, msg_type)
  end
end
log_level(opts) click to toggle source
# File lib/eh/eh.rb, line 163
def self.log_level(opts)
  opts[:level] || EH::ERROR
end
log_multiple_loggers(loggers, msg, msg_type) click to toggle source
# File lib/eh/eh.rb, line 152
def self.log_multiple_loggers(loggers, msg, msg_type)
  loggers.each do |logger|
    next if logger.nil?
    logger.warn msg if msg_type == WARN
    logger.debug msg if msg_type == DEBUG
    logger.error msg if msg_type == ERROR
    logger.info msg if msg_type == INFO
    logger.fatal msg if msg_type == FATAL
  end
end
log_single_logger(logger, msg, msg_type) click to toggle source
# File lib/eh/eh.rb, line 144
def self.log_single_logger(logger, msg, msg_type)
  if logger.nil?
    warn msg_type + ': ' + msg
  else
    self.log([logger], msg, msg_type)
  end
end
report_unhandled(logfile = nil, handlers = nil) click to toggle source
# File lib/eh/eh.rb, line 28
def self.report_unhandled(logfile = nil, handlers = nil)
  if $!
    message = "Unhandled exception: #{$!}"
    warn message
    if not logfile.nil?
      open(logfile, 'a') { |f|
        f.puts message
      }
    end

    handle(handlers, $!, message) if not handlers.nil?
  end
end
retry(options, &block) click to toggle source
# File lib/eh/eh.rb, line 55
def self.retry(options, &block)
  opts = options || {}
  begin
    EH::retry_with_raise(opts, block)
    return true
  rescue => e
    msg = "#{opts[:message]}: #{e.message}"
    if not opts[:logger].nil?
      EH::log(opts[:logger], msg, EH::log_level(opts)) if opts[:exception_filter].nil? or opts[:exception_filter].include? e.class
    end
    EH::handle(opts[:handlers], e, msg) if not opts[:handlers].nil?
    return false
  end
end
retry!(options, &block) click to toggle source
# File lib/eh/eh.rb, line 42
def self.retry!(options, &block)
  opts = options || {}
  EH::retry_with_raise(opts, block)

rescue => e
  raise e if opts.nil? == false and opts[:exception_filter] and not opts[:exception_filter].include? e.class

  msg = "#{opts[:message]}: #{e.message}"
  EH::log(opts[:logger], msg, EH::log_level(opts)) if opts.nil? == false and not opts[:logger].nil? and not opts[:message].nil?
  EH::handle(opts[:handlers], e, msg) if not opts[:handlers].nil?
  raise e
end
retry_with_raise(opts, block) click to toggle source
# File lib/eh/eh.rb, line 128
def self.retry_with_raise(opts, block)
  retry_threshold = opts[:threshold] || 3
  delay = opts[:delay] || 0.2
  attempts = 0
  begin
    block.call(EH::construct_args(opts))
  rescue => e
    raise e if opts[:exception_filter] and not opts[:exception_filter].include? e.class

    attempts += 1
    sleep delay
    retry if attempts < retry_threshold
    raise e
  end
end
run(options, &block) click to toggle source
# File lib/eh/eh.rb, line 85
def self.run(options, &block)
  opts = options || {}
  block.call(EH::construct_args(opts))

rescue => e
  msg = "#{opts[:message]}: #{e.message}"
  if not opts[:logger].nil?
    EH::log(opts[:logger], msg, EH::log_level(opts)) if opts[:exception_filter].nil? or opts[:exception_filter].include? e.class
  end
  EH::handle(opts[:handlers], e, msg) if not opts[:handlers].nil?
end
run!(options, &block) click to toggle source
# File lib/eh/eh.rb, line 70
def self.run!(options, &block)
  opts = options || {}
  block.call(EH::construct_args(opts))

rescue => e
  msg = "#{opts[:message]}: #{e.message}"
  if not opts[:logger].nil?
    EH::log(opts[:logger], msg, EH::log_level(opts)) if opts[:exception_filter].nil? or opts[:exception_filter].include? e.class
  end
  EH::handle(opts[:handlers], e, msg) if not opts[:handlers].nil?

  raise e if opts.nil? == false and opts[:exception_filter] and not opts[:exception_filter].include? e.class
  raise e if opts.nil? == true or opts[:exception_filter].nil? == true or opts[:exception_filter] == []
end