class Bluecollar::Client

Attributes

configuration[R]
instance[R]
logger[R]
redis_db[RW]
redis_hostname[RW]
redis_key_prefix[RW]
redis_port[RW]
redis_timeout[RW]

Public Class Methods

configure(options = {}) click to toggle source
# File lib/bluecollar-client/client.rb, line 10
def configure(options = {})
  @instance = nil

  @logger = options[:logger] || Logger.new("/dev/null")

  @configuration = {}
  @configuration[:redis_key_prefix] = options[:redis_key_prefix] || "bluecollar"
  @configuration[:redis_hostname] = options[:redis_hostname] || "127.0.0.1"
  @configuration[:redis_port] = (options[:redis_port] || 6379).to_i
  @configuration[:redis_db] = options[:redis_db].to_i
  @configuration[:redis_timeout] = (options[:redis_timeout] || 5000).to_i
end
new(options) click to toggle source
# File lib/bluecollar-client/client.rb, line 37
def initialize(options)
  options.each { |k,v| send("#{k}=".to_sym, v) }
end

Public Instance Methods

async_job_for(worker_name, args) click to toggle source
# File lib/bluecollar-client/client.rb, line 28
def async_job_for(worker_name, args)
  redis_connection.lpush processing_queue, redis_payload(worker_name, args)
rescue Redis::BaseError => e
  Bluecollar::Client.logger.warn("Error while adding #{worker_name}: #{args.inspect} to queue.\n#{e}:#{e.message}\nBacktrace:\n\t#{e.backtrace.join("\n\t")}")
  raise Bluecollar::ClientError.new("Error while adding #{worker_name}: #{args.inspect} to queue.\n#{e}:#{e.message}\nBacktrace:\n\t#{e.backtrace.join("\n\t")}")
end

Private Instance Methods

processing_queue() click to toggle source
# File lib/bluecollar-client/client.rb, line 52
def processing_queue
  @processing_queue ||= "#{redis_key_prefix}:queues:master"
end
redis_connection() click to toggle source
# File lib/bluecollar-client/client.rb, line 56
def redis_connection
  @redis_connection ||= Redis.new(host: redis_hostname,
                                  port: redis_port,
                                  db: redis_db,
                                  timeout: redis_timeout)
end
redis_payload(worker_name, args) click to toggle source
# File lib/bluecollar-client/client.rb, line 41
def redis_payload(worker_name, args)
  raise ArgumentError.new("args must be an Array.") unless args.is_a? Array

  begin
    payload = { "worker" => worker_name, "args" => args, "uuid" => SecureRandom.uuid, "scheduled-runtime" => nil }
    JSON.dump(payload)
  rescue
    raise Bluecollar::ClientError.new("Error while creating JSON payload for #{worker_name}: #{args.inpsect}.\n#{e}:#{e.message}\nBacktrace:\n\t#{e.backtrace.join("\n\t")}")
  end
end