Sha256: ccac8fcc9bdd0cc8417181be05b133db8b81e7c5e627a65d78f2d0b6b10c97c5

Contents?: true

Size: 1.45 KB

Versions: 3

Compression:

Stored size: 1.45 KB

Contents

require_relative './foreman'
module WorkerRoulette
  class AForeman < Foreman
    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],
                   [@sender, Oj.dump(work_order),  WorkerRoulette::JOB_NOTIFICATIONS], &callback)
    end

  private
    def self.lua_enqueue_work_orders
      <<-HERE
        local counter_key       = KEYS[1]
        local job_board_key     = KEYS[2]
        local sender_key        = KEYS[3]
        local channel           = KEYS[4]

        local sender            = ARGV[1]
        local work_order        = ARGV[2]
        local job_notification  = ARGV[3]

        local function enqueue_work_orders(sender, work_order, job_notification)
          local result    = sender .. ' updated'
          local sender_on_job_board = redis.call('ZSCORE', job_board_key, sender_key)

          if (sender_on_job_board == false) then
            local count     = redis.call('INCR', counter_key)
            local job_added = redis.call('ZADD',job_board_key, count, sender_key)
            result    = sender .. ' added'
          end

          local work_added          = redis.call('RPUSH',sender_key, work_order)
          local job_board_update    = redis.call('PUBLISH', channel, job_notification)
          return result
        end

        return enqueue_work_orders(sender, work_order, job_notification)
      HERE
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
worker_roulette-0.1.0 lib/worker_roulette/a_foreman.rb
worker_roulette-0.0.12 lib/worker_roulette/a_foreman.rb
worker_roulette-0.0.11 lib/worker_roulette/a_foreman.rb