class Krakow::Discovery

Provides queue topic discovery

Public Instance Methods

lookup(topic) click to toggle source

Get list of end points with given topic name available

@param topic [String] topic name @return [Array<Hash>]

# File lib/krakow/discovery.rb, line 28
def lookup(topic)
  result = [nsqlookupd].flatten.map do |location|
    uri = URI.parse(location)
    uri.path = '/lookup'
    uri.query = "topic=#{topic}&ts=#{Time.now.to_i}"
    begin
      debug "Requesting lookup for topic #{topic} - #{uri}"
      content = HTTP.with(:accept => 'application/octet-stream').get(uri.to_s)
      unless(content.respond_to?(:to_hash))
        data = MultiJson.load(content.to_s)
      else
        data = content.to_hash
      end
      debug "Lookup response (#{uri.to_s}): #{data.inspect}"
      if(data['data'] && data['data']['producers'])
        data['data']['producers'].map do |producer|
          Hash[*producer.map{|k,v| [k.to_sym, v]}.flatten]
        end
      end
    rescue => e
      warn "Lookup exception encountered: #{e.class.name} - #{e}"
      nil
    end
  end.compact.flatten(1).uniq
  debug "Discovery lookup result: #{result.inspect}"
  result
end