Class: WorkerRoulette::Foreman

Inherits:
Object
  • Object
show all
Defined in:
lib/worker_roulette/foreman.rb

Constant Summary collapse

LUA_ENQUEUE_WORK_ORDERS =
"    local counter_key       = KEYS[1]\n    local job_board_key     = KEYS[2]\n    local sender_key        = KEYS[3]\n    local channel           = KEYS[4]\n\n    local work_order        = ARGV[1]\n    local job_notification  = ARGV[2]\n    local redis_call        = redis.call\n    local zscore            = 'ZSCORE'\n    local incr              = 'INCR'\n    local zadd              = 'ZADD'\n    local rpush             = 'RPUSH'\n    local publish           = 'PUBLISH'\n\n    local function enqueue_work_orders(work_order, job_notification)\n      if (redis_call(zscore, job_board_key, sender_key) == false) then\n        local count     = redis_call(incr, counter_key)\n        redis_call(zadd, job_board_key, count, sender_key)\n      end\n\n      redis_call(rpush,sender_key, work_order)\n      redis_call(publish, channel, job_notification)\n    end\n\n    enqueue_work_orders(work_order, job_notification)\n"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sender, redis_pool, namespace = nil) ⇒ Foreman

Returns a new instance of Foreman.



33
34
35
36
37
38
# File 'lib/worker_roulette/foreman.rb', line 33

def initialize(sender, redis_pool, namespace = nil)
  @sender     = sender
  @namespace  = namespace
  @redis_pool = redis_pool
  @channel    = namespace || WorkerRoulette::JOB_NOTIFICATIONS
end

Instance Attribute Details

#senderObject (readonly)

Returns the value of attribute sender.



3
4
5
# File 'lib/worker_roulette/foreman.rb', line 3

def sender
  @sender
end

Instance Method Details

#counter_keyObject



54
55
56
# File 'lib/worker_roulette/foreman.rb', line 54

def counter_key
  @counter_key ||= WorkerRoulette.counter_key(@namespace)
end

#enqueue_work_order(work_order, headers = {}, &callback) ⇒ Object



40
41
42
43
# File 'lib/worker_roulette/foreman.rb', line 40

def enqueue_work_order(work_order, headers = {}, &callback)
  work_order = {'headers' => default_headers.merge(headers), 'payload' => work_order}
  enqueue_work_order_without_headers(work_order, &callback)
end

#enqueue_work_order_without_headers(work_order, &callback) ⇒ Object



45
46
47
48
# File 'lib/worker_roulette/foreman.rb', line 45

def enqueue_work_order_without_headers(work_order, &callback)
  Lua.call(self.class.lua_enqueue_work_orders, [counter_key, job_board_key, sender_key, @channel],
           [WorkerRoulette.dump(work_order),  WorkerRoulette::JOB_NOTIFICATIONS], &callback)
end

#job_board_keyObject



50
51
52
# File 'lib/worker_roulette/foreman.rb', line 50

def job_board_key
  @job_board_key ||= WorkerRoulette.job_board_key(@namespace)
end