Sha256: f24324ae9f4e66e04aff15f581b654790f5f2a364101493a0032b0ba6ed778ce

Contents?: true

Size: 711 Bytes

Versions: 5

Compression:

Stored size: 711 Bytes

Contents

require 'redis-namespace'
require 'uri'
require 'singleton'

module Routemaster
  class RedisBroker
    include Singleton

    def initialize
      @_connections = {}
      _cleanup
    end

    def get(url)
      _check_for_fork
      @_connections[url] ||= begin
        parsed_url = URI.parse(url)
        namespace = parsed_url.path.split('/')[2] || 'rm'
        Redis::Namespace.new(namespace, redis: Redis.new(url: url))
      end
    end

    def cleanup
      _cleanup
    end

    private

    def _check_for_fork
      return if Process.pid != @_pid
      _cleanup
    end

    def _cleanup
      @_pid = Process.pid
      @_connections.each_value(&:quit)
      @_connections = {}
    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
routemaster-drain-1.0.4 lib/routemaster/redis_broker.rb
routemaster-drain-1.0.3 lib/routemaster/redis_broker.rb
routemaster-drain-1.0.2 lib/routemaster/redis_broker.rb
routemaster-drain-1.0.1 lib/routemaster/redis_broker.rb
routemaster-drain-1.0.0 lib/routemaster/redis_broker.rb