58 lines
1.8 KiB
Ruby
58 lines
1.8 KiB
Ruby
|
class RedisFactory
|
||
|
# db_id: configuration databases entry key (:tables_metadata, :api_credentials...)
|
||
|
def self.new_connection(db_id: nil, secondary: false)
|
||
|
configuration = get_conf(secondary)
|
||
|
configuration[:db] = databases[db_id] if db_id.present?
|
||
|
Redis.new(configuration)
|
||
|
end
|
||
|
|
||
|
def self.get_conf(secondary = false)
|
||
|
# TODO: because of #8439 we're testing different Redis timeouts for connection, R and W.
|
||
|
# After getting a final solution timeout configuration should be read from the file again
|
||
|
redis_conf = conf
|
||
|
redis_conf.merge!(secondary_conf) if secondary
|
||
|
redis_conf.slice!(:host, :port, :driver, :tcp_keepalive, :timeout, :connect_timeout, :read_timeout, :write_timeout)
|
||
|
|
||
|
redis_conf[:port] = ENV['REDIS_PORT'] if ENV['REDIS_PORT']
|
||
|
|
||
|
if redis_conf[:tcp_keepalive] && redis_conf[:tcp_keepalive].is_a?(Hash)
|
||
|
redis_conf[:tcp_keepalive] = redis_conf[:tcp_keepalive].symbolize_keys
|
||
|
end
|
||
|
if redis_conf[:driver] && redis_conf[:driver].is_a?(String)
|
||
|
redis_conf[:driver] = redis_conf[:driver].to_sym
|
||
|
end
|
||
|
|
||
|
redis_conf
|
||
|
end
|
||
|
|
||
|
def self.databases
|
||
|
if conf[:databases].blank?
|
||
|
@@default_databases
|
||
|
else
|
||
|
conf[:databases].symbolize_keys
|
||
|
end
|
||
|
end
|
||
|
|
||
|
@@default_databases = {
|
||
|
tables_metadata: 0,
|
||
|
api_credentials: 3,
|
||
|
users_metadata: 5,
|
||
|
redis_migrator_logs: 6,
|
||
|
limits_metadata: 8
|
||
|
}.freeze
|
||
|
|
||
|
def self.conf
|
||
|
# Note that `symbolize_keys` creates a new instance, which is relevant to avoid side effects
|
||
|
Cartodb.config[:redis].symbolize_keys
|
||
|
end
|
||
|
|
||
|
def self.secondary_conf
|
||
|
(Cartodb.get_config(:redis, 'secondary') || {}).symbolize_keys
|
||
|
end
|
||
|
|
||
|
private_class_method :conf
|
||
|
private_class_method :secondary_conf
|
||
|
private_class_method :get_conf
|
||
|
private_class_method :databases
|
||
|
end
|