Sha256: 3d91bdfbacb515be9ce37487c71e876d293b0992deb4a06250a1777e8c2829ce

Contents?: true

Size: 1.37 KB

Versions: 5

Compression:

Stored size: 1.37 KB

Contents

class Freddy
  class RequestManager

    def initialize(logger)
      @requests = Hamster.mutable_hash
      @logger = logger
    end

    def start
      @timeout_thread = Thread.new do
        while true do
          clear_timeouts Time.now
          sleep 0.05
        end
      end
    end

    def no_route(correlation_id)
      if request = @requests[correlation_id]
        @requests.delete correlation_id
        request[:callback].call({error: 'Specified queue does not exist'}, nil)
      end
    end

    def store(correlation_id, opts)
      @requests.store(correlation_id, opts)
    end

    def delete(correlation_id)
      @requests.delete(correlation_id)
    end

    private

    def clear_timeouts(now)
      @requests.each do |key, value|
        timeout(key, value) if now > value[:expires_at]
      end
    end

    def timeout(correlation_id, request)
      @requests.delete correlation_id

      @logger.warn "Request timed out waiting response from #{request[:destination]}, correlation id #{correlation_id}"
      Utils.notify 'RequestTimeout', "Request timed out waiting for response from #{request[:destination]}", {
        correlation_id: correlation_id,
        destination: request[:destination],
        expires_at: request[:expires_at]
      }

      request[:callback].call({error: 'RequestTimeout', message: 'Timed out waiting for response'}, nil)
    end
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
freddy-0.5.2 lib/freddy/request_manager.rb
freddy-jruby-0.5.1 lib/freddy/request_manager.rb
freddy-0.5.1 lib/freddy/request_manager.rb
freddy-jruby-0.5.0 lib/freddy/request_manager.rb
freddy-0.5.0 lib/freddy/request_manager.rb