mperham--sidekiq/lib/sidekiq/configuration.rb

83 lines
2.2 KiB
Ruby

require "logger"
module Sidekiq
class Configuration
attr_accessor :concurrency
attr_accessor :environment
attr_accessor :shutdown_timeout
attr_reader :server_middleware
attr_reader :event_hooks
attr_reader :error_handlers
attr_reader :death_handlers
attr_accessor :logger
attr_accessor :log_level
attr_accessor :redis
attr_accessor :queues
attr_reader :default_worker_options
attr_reader :pool
# an arbitrary set of entries
attr_reader :labels
attr_accessor :tag
def initialize
@queues = ["default"]
@concurrency = 10
@shutdown_timeout = 25
@logger = ::Logger.new($stdout)
@logger.level = ::Logger::INFO
@environment = "development"
@default_worker_options = {"retry": 25, "queue": "default"}
@redis = {url: ENV[(ENV["REDIS_PROVIDER"] || "REDIS_URL")] || "redis://localhost:6379/0"}
@client_middleware = Sidekiq::Middleware::Chain.new
@server_middleware = Sidekiq::Middleware::Chain.new
@event_hooks = {
startup: [],
quiet: [],
shutdown: [],
heartbeat: []
}
@death_handlers = []
@error_handlers = [->(ex, ctx) {
@logger.warn(Sidekiq.dump_json(ctx)) unless ctx.empty?
@logger.warn("#{ex.class.name}: #{ex.message}")
@logger.warn(ex.backtrace.join("\n")) unless ex.backtrace.nil?
}]
@labels = Set.new
@tag = ""
@components = []
end
# components will be called back when the configuration is
# finalized so they can pull config'd items like logger, pool, etc.
def register_component(comp)
@components << comp
end
def on(event, &block)
raise ArgumentError, "Symbols only please: #{event}" unless event.is_a?(Symbol)
raise ArgumentError, "Invalid event name: #{event}" unless event_hooks.key?(event)
@event_hooks[event] << block
end
def client_middleware
if block_given?
yield @client_middleware
else
@client_middleware
end
end
def finalize
@pool ||= ConnectionPool.new(size: concurrency + 2, timeout: 5) { Redis.new(redis) }
@components.each do |comp|
comp.finalize(self)
end
@components = nil
end
end
end