class SimpleMapReduce::Worker::PollingWorkersStatusWorker

Constants

HTTP_JSON_HEADER

Public Instance Methods

perform(workers) click to toggle source
# File lib/simple_map_reduce/worker/polling_workers_status_worker.rb, line 6
def perform(workers)
  logger.debug("begin polling workers: #{workers.keys}")
  workers.each do |id, worker|
    response = http_client(worker.url).get("/workers/#{worker.id}")
    body = JSON.parse(response.body, symbolize_names: true)[:worker]
    worker.aasm.current_state = body[:state].to_sym
  rescue => e
    logger.error(e.inspect)
    logger.error(e&.response&.inspect)
    logger.info("Worker #{worker.id} is removed from workers")
    workers.delete(id)
  end
  logger.debug("finish polling workers: #{workers.keys}")
end

Private Instance Methods

http_client(url) click to toggle source
# File lib/simple_map_reduce/worker/polling_workers_status_worker.rb, line 28
def http_client(url)
  ::Faraday.new(
    url: url,
    headers: HTTP_JSON_HEADER,
    request: {
      open_timeout: 5,
      timeout: 10
    }
  ) do |faraday|
    faraday.response :logger
    faraday.response :raise_error
    faraday.adapter  Faraday.default_adapter
  end
end
logger() click to toggle source
# File lib/simple_map_reduce/worker/polling_workers_status_worker.rb, line 43
def logger
  SimpleMapReduce.logger
end