class RackRabbit::Config
Attributes
values[R]
Public Class Methods
new(options = {})
click to toggle source
# File lib/rack-rabbit/config.rb, line 11 def initialize(options = {}) @values = {} options.each{|key, value| send(key, value) if respond_to?(key)} reload(options) end
Public Instance Methods
ack(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 113 def ack(value = :missing) if value == :missing values[:ack] else values[:ack] = !!value end end
after_fork(server=nil, worker=nil, &block)
click to toggle source
# File lib/rack-rabbit/config.rb, line 177 def after_fork(server=nil, worker=nil, &block) if block values[:after_fork] = block elsif values[:after_fork].respond_to?(:call) values[:after_fork].call(server, worker) end end
app_id(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 81 def app_id(value = :missing) if value == :missing values[:app_id] ||= "rr-#{exchange || 'default'}-#{queue || routing_key || 'null'}" else values[:app_id] = value end end
before_fork(server=nil, &block)
click to toggle source
# File lib/rack-rabbit/config.rb, line 169 def before_fork(server=nil, &block) if block values[:before_fork] = block elsif values[:before_fork].respond_to?(:call) values[:before_fork].call(server) end end
config_file(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 33 def config_file(value = :missing) if value == :missing values[:config_file] else values[:config_file] = filename(value) end end
daemonize(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 129 def daemonize(value = :missing) if value == :missing values[:daemonize] else values[:daemonize] = !!value end end
exchange(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 57 def exchange(value = :missing) if value == :missing values[:exchange] else values[:exchange] = value end end
exchange_type(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 65 def exchange_type(value = :missing) if value == :missing values[:exchange_type] ||= :direct else values[:exchange_type] = value.to_s.downcase.to_sym end end
log_level(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 137 def log_level(value = :missing) if value == :missing values[:log_level] ||= :info else values[:log_level] = symbolize(value) end end
logfile(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 153 def logfile(value = :missing) if value == :missing values[:logfile] ||= daemonize ? "/var/log/#{app_id}.log" : nil else values[:logfile] = filename(value) end end
logger(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 145 def logger(value = :missing) if value == :missing values[:logger] ||= build_default_logger else values[:logger] = value end end
max_workers(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 105 def max_workers(value = :missing) if value == :missing values[:max_workers] ||= 32 else values[:max_workers] = value.to_i end end
min_workers(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 97 def min_workers(value = :missing) if value == :missing values[:min_workers] ||= 1 else values[:min_workers] = value.to_i end end
pidfile(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 161 def pidfile(value = :missing) if value == :missing values[:pidfile] ||= daemonize ? "/var/run/#{app_id}.pid" : nil else values[:pidfile] = filename(value) end end
preload_app(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 121 def preload_app(value = :missing) if value == :missing values[:preload_app] else values[:preload_app] = !!value end end
queue(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 49 def queue(value = :missing) if value == :missing values[:queue] else values[:queue] = value end end
rabbit(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 25 def rabbit(value = :missing) if value == :missing values[:rabbit] ||= {}.merge(DEFAULT_RABBIT) elsif value.is_a?(Hash) rabbit.merge!(value) end end
rack_env()
click to toggle source
# File lib/rack-rabbit/config.rb, line 187 def rack_env @rack_env ||= { 'rack.version' => Rack::VERSION, 'rack.logger' => logger, 'rack.errors' => $stderr, 'rack.multithread' => false, 'rack.multiprocess' => true, 'rack.run_once' => false, 'rack.url_scheme' => 'http', 'SERVER_NAME' => app_id } end
rack_file(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 41 def rack_file(value = :missing) if value == :missing values[:rack_file] ||= filename("config.ru", File.dirname(config_file || "")) else values[:rack_file] = filename(value, File.dirname(config_file || "")) end end
reload(options = {})
click to toggle source
# File lib/rack-rabbit/config.rb, line 17 def reload(options = {}) @rack_env = nil instance_eval(File.read(config_file), config_file) if config_file && File.exist?(config_file) validate(options) unless options[:validate] == false end
routing_key(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 73 def routing_key(value = :missing) if value == :missing values[:routing_key] else values[:routing_key] = value end end
workers(value = :missing)
click to toggle source
# File lib/rack-rabbit/config.rb, line 89 def workers(value = :missing) if value == :missing values[:workers] ||= 1 else values[:workers] = value.to_i end end
Private Instance Methods
build_default_logger()
click to toggle source
# File lib/rack-rabbit/config.rb, line 236 def build_default_logger logger = Logger.new($stderr) class << logger attr_accessor :master_pid # track the master_pid (might change if we daemonize) in order to differentiate between "SERVER" vs "worker" in log entry preamble end logger.master_pid = $$ logger.formatter = proc do |severity, datetime, progname, msg| "[#{Process.pid}:#{$$ == logger.master_pid ? "SERVER" : "worker"}] #{datetime} #{msg}\n" end logger.level = case log_level.to_s.downcase.to_sym when :fatal then Logger::FATAL when :error then Logger::ERROR when :warn then Logger::WARN when :info then Logger::INFO when :debug then Logger::DEBUG else Logger::INFO end logger end
filename(path, relative_to = nil)
click to toggle source
# File lib/rack-rabbit/config.rb, line 206 def filename(path, relative_to = nil) File.expand_path(path, relative_to) end
symbolize(s)
click to toggle source
# File lib/rack-rabbit/config.rb, line 210 def symbolize(s) s.to_s.downcase.to_sym end
validate(options = {})
click to toggle source
# File lib/rack-rabbit/config.rb, line 214 def validate(options = {}) raise ArgumentError, "must provide EITHER a :queue OR an :exchange to subscribe to" if queue.nil? && exchange.nil? raise ArgumentError, "missing app_id" if app_id.to_s.empty? raise ArgumentError, "invalid workers" unless workers.is_a?(Integer) raise ArgumentError, "invalid min_workers" unless min_workers.is_a?(Integer) raise ArgumentError, "invalid max_workers" unless max_workers.is_a?(Integer) raise ArgumentError, "invalid workers < min_workers" if workers < min_workers raise ArgumentError, "invalid workers > max_workers" if workers > max_workers raise ArgumentError, "invalid min_workers > max_workers" if min_workers > max_workers raise ArgumentError, "invalid logger" unless [:fatal, :error, :warn, :info, :debug].all?{|method| logger.respond_to?(method)} raise ArgumentError, "missing pidfile - required for daemon" if daemonize && pidfile.to_s.empty? raise ArgumentError, "missing logfile - required for daemon" if daemonize && logfile.to_s.empty? unless options[:skip_filesystem_checks] raise ArgumentError, "missing rack config file #{rack_file}" unless File.readable?(rack_file) raise ArgumentError, "pidfile not writable" if pidfile && !File.writable?(File.dirname(pidfile)) raise ArgumentError, "logfile not writable" if logfile && !File.writable?(File.dirname(logfile)) end end