Sha256: 892e304ed0006ef0a965f19f4cd02650837a14bdeaf3f0077edfd3529cee5f4e

Contents?: true

Size: 702 Bytes

Versions: 5

Compression:

Stored size: 702 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
      _cleanup unless Process.pid == @_pid
    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-2.3.0 lib/routemaster/redis_broker.rb
routemaster-drain-2.2.2 lib/routemaster/redis_broker.rb
routemaster-drain-2.0.0 lib/routemaster/redis_broker.rb
routemaster-drain-1.1.0 lib/routemaster/redis_broker.rb
routemaster-drain-1.0.5 lib/routemaster/redis_broker.rb