Sha256: ffb31d2968b32ae84d01995c9f77177216046121c39c77a57966b712db007525

Contents?: true

Size: 1.58 KB

Versions: 2

Compression:

Stored size: 1.58 KB

Contents

require "rest-client"
require "json"
require "multi_json"
require File.dirname(__FILE__) + '/base'

module WorkerArmy
  class Client < Base
    class << self
      def push_job(job_class, data = {}, callback_url = nil, queue_prefix = 'queue', retry_count = 0)
        raise "No data" unless data
        raise "No job class provided" unless job_class
        worker_army_base_url = config['endpoint']
        callback_url = "#{worker_army_base_url}/generic_callback" unless callback_url
        response = nil; response_data = { 'success' => false }
        begin
          response = RestClient.post "#{worker_army_base_url}/jobs",
            data.merge(
              job_class: job_class,
              callback_url: "#{worker_army_base_url}/callback?callback_url=#{callback_url}",
              queue_prefix: queue_prefix
            ).to_json,
            :content_type => :json, :accept => :json, "api_key" => config['api_key']
        rescue => e
          puts "Failed! Retrying (#{retry_count})..."
          retry_count += 1
          if retry_count < client_retry_count(config) and not e.message == '401 Unauthorized'
            sleep (retry_count * 2)
            push_job(job_class, data, callback_url, queue_prefix, retry_count)
          elsif e.message == "401 Unauthorized"
            response_data = response_data.merge('error_message' => '401 Unauthorized')
          end
        end
        if response and response.body and response.code == 200
          hash = JSON.parse(response.body)
          return hash.merge('success' => true)
        end
        response_data
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
worker-army-0.6.4 lib/worker_army/client.rb
worker-army-0.6.3 lib/worker_army/client.rb