class Firehose::Client::Consumer::HttpLongPoll

Connect to Firehose via HTTP Long Polling and consume messages.

Constants

JITTER

Attributes

logger[R]
url[R]

Public Class Methods

new(url, logger = Firehose.logger) click to toggle source
# File lib/firehose/client/consumer.rb, line 59
def initialize(url, logger = Firehose.logger)
  @url, @logger = url, logger
end

Public Instance Methods

request(last_sequence=0) click to toggle source
# File lib/firehose/client/consumer.rb, line 63
def request(last_sequence=0)
  http = EM::HttpRequest.new(url, :inactivity_timeout => 0).get(:query => {'last_message_sequence' => last_sequence})
  http.callback do
    case status = http.response_header.status
    when 200
      json = JSON.parse(http.response)
      next_sequence = json['last_sequence'].to_i
      message = json['message']

      logger.info "HTTP 200 | Next Sequence: #{next_sequence} - #{message[0...40].inspect}"
      EM::add_timer(jitter) { request next_sequence }
    when 204
      logger.info "HTTP 204 | Last Sequence #{last_sequence}"
      EM::add_timer(jitter) { request last_sequence }
    else
      logger.error "HTTP #{status} | Failed"
    end
  end
  http.errback do
    logger.error "Connection Failed"
  end
end

Private Instance Methods

jitter() click to toggle source

Random jitter between long poll requests.

# File lib/firehose/client/consumer.rb, line 88
def jitter
  rand*JITTER
end