module Subserver

Constants

DEFAULTS
DEFAULT_SUBSCRIBER_OPTIONS
LICENSE
NAME
VERSION

Public Class Methods

configure() { |self| ... } click to toggle source
# File lib/subserver.rb, line 58
def self.configure
  yield self
end
death_handlers() click to toggle source

Death handlers are called when all retries for a job have been exhausted and the job dies. It's the notification to your application that this job will not succeed without manual intervention.

Subserver.configure do |config|

config.death_handlers << ->(job, ex) do
end

end

# File lib/subserver.rb, line 119
def self.death_handlers
  options[:death_handlers]
end
default_middleware() click to toggle source
# File lib/subserver.rb, line 99
def self.default_middleware
  Middleware::Chain.new
end
default_subscriber_options() click to toggle source
# File lib/subserver.rb, line 107
def self.default_subscriber_options
  defined?(@default_subscriber_options) ? @default_subscriber_options : DEFAULT_SUBSCRIBER_OPTIONS
end
default_subscriber_options=(hash) click to toggle source
# File lib/subserver.rb, line 103
def self.default_subscriber_options=(hash)
  @default_subscriber_options = default_subscriber_options.merge(Hash[hash.map{|k, v| [k.to_s, v]}])
end
dump_json(object) click to toggle source
# File lib/subserver.rb, line 73
def self.dump_json(object)
  JSON.generate(object)
end
error_handlers() click to toggle source

Register a proc to handle any error which occurs within the Subserver process.

Subserver.configure do |config|
  config.error_handlers << proc {|ex,ctx_hash| MyErrorService.notify(ex, ctx_hash) }
end

The default error handler logs errors to Subserver.logger.

# File lib/subserver.rb, line 130
def self.error_handlers
  self.options[:error_handlers]
end
health_server() click to toggle source
# File lib/subserver.rb, line 85
def self.health_server
  @health_server ||= Subserver::Health.new
end
load_config(file=nil) click to toggle source
# File lib/subserver.rb, line 62
def self.load_config(file=nil)
  opts = DEFAULTS.dup
  file = Dir["config/subserver.yml*"].first if file.nil?
  return opts unless file && File.exists?(file)
  opts.merge(parse_config(file))
end
load_json(string) click to toggle source
# File lib/subserver.rb, line 69
def self.load_json(string)
  JSON.parse(string)
end
logger() click to toggle source
# File lib/subserver.rb, line 77
def self.logger
  Subserver::Logging.logger
end
logger=(log) click to toggle source
# File lib/subserver.rb, line 81
def self.logger=(log)
  Subserver::Logging.logger = log
end
middleware() { |chain| ... } click to toggle source
# File lib/subserver.rb, line 93
def self.middleware
  @chain ||= default_middleware
  yield @chain if block_given?
  @chain
end
on(event, &block) click to toggle source

Register a block to run at a point in the Subserver lifecycle. :startup, :quiet or :shutdown are valid events.

Subserver.configure do |config|
  config.on(:shutdown) do
    puts "Goodbye cruel world!"
  end
end
# File lib/subserver.rb, line 142
def self.on(event, &block)
  raise ArgumentError, "Symbols only please: #{event}" unless event.is_a?(Symbol)
  raise ArgumentError, "Invalid event name: #{event}" unless options[:lifecycle_events].key?(event)
  options[:lifecycle_events][event] << block
end
options() click to toggle source
# File lib/subserver.rb, line 50
def self.options
  @options ||= load_config
end
options=(opts) click to toggle source
# File lib/subserver.rb, line 54
def self.options=(opts)
  @options = opts
end
pubsub_client() click to toggle source
# File lib/subserver.rb, line 89
def self.pubsub_client
  Subserver::Pubsub.client
end

Private Class Methods

parse_config(cfile) click to toggle source
# File lib/subserver.rb, line 158
def self.parse_config(cfile)
  opts = {}
  if File.exist?(cfile)
    opts = YAML.load(ERB.new(IO.read(cfile)).result) || opts

    if opts.respond_to? :deep_symbolize_keys!
      opts.deep_symbolize_keys!
    else
      symbolize_keys_deep!(opts)
    end

  else
    # allow a non-existent config file so Subserver
    # can be deployed by cap with just the defaults.
  end
  opts
end
symbolize_keys_deep!(hash) click to toggle source
# File lib/subserver.rb, line 176
def self.symbolize_keys_deep!(hash)
  hash.keys.each do |k|
    symkey = k.respond_to?(:to_sym) ? k.to_sym : k
    hash[symkey] = hash.delete k
    symbolize_keys_deep! hash[symkey] if hash[symkey].kind_of? Hash
  end
end