class SidekiqDupGuard::SidekiqUniqueJobFilter

Public Instance Methods

call(worker, item, queue, redis_pool) { || ... } click to toggle source

checks if Sidekiq Job is already present in queue

- If job is already present in queue with same arguments then Sidekiq job will be ignored
- If job is not present with similar arguments then Sidekiq job will be queued

@param worker [String]: Worker class name @param item [Hash]: Args passed to create a SidekiqJob

- item["dup_guard_methods"]: *all* --: All jobs enqueued to all the function of a worker should be unique
- item["dup_guard_methods"]: [array of method names] --: All jobs enqueued to a method should be unique

@param queue [String]: queue name @param redis_pool [ConnectionPool]: Redis connection pool

@return nil

# File lib/sidekiq-dup-guard/sidekiq_unique_job_filter.rb, line 27
def call(worker, item, queue, redis_pool)
  if (item["dup_guard_methods"] != nil) and !item["dup_guard_methods"].empty? and (item["dup_guard_methods"] == "all" or item["dup_guard_methods"].include?(item["args"][0]))
    jid = get_sidekiq_job(queue, item["args"][0], item["args"][1])
    unless (jid == nil)
      logger.info("SidekiqDupGuard: #{item["class"]}##{item["args"][0]} '#{item["args"][1]}' job already exists in queue with JID #{jid}, skipping enqueue.")
      return
    end
  end

  yield
end
get_sidekiq_job(queue, method, args) click to toggle source

checks if Sidekiq job is present

@param [String] queue @param [String] method @param [Hash] args

@return [String] sidekiq job ID

# File lib/sidekiq-dup-guard/sidekiq_unique_job_filter.rb, line 48
def get_sidekiq_job(queue, method, args)
  q = Sidekiq::Queue.new(queue)
  args.transform_keys!(&:to_s)
  q.each do |j|
    if (j.args[0] == method.to_s) and (j.args[1] == args)
      return j.jid
    end
  end
  return nil
end
logger() click to toggle source

get Sidekiq logger

# File lib/sidekiq-dup-guard/sidekiq_unique_job_filter.rb, line 7
def logger
  Sidekiq.logger
end