Skip to content

Instantly share code, notes, and snippets.

@MatiasFernandez
Last active September 21, 2016 20:02
Show Gist options
  • Save MatiasFernandez/9c23c8f138dc166a5fc42f31ae5d6877 to your computer and use it in GitHub Desktop.
Save MatiasFernandez/9c23c8f138dc166a5fc42f31ae5d6877 to your computer and use it in GitHub Desktop.
Sidekiq API Extension. Some useful code to interact with Sidekiq API in a simple way
class SidekiqQueue < Sidekiq::Queue
def newer(limit = 1)
fetch_one_or_more_jobs(starting: :back, limit: limit)
end
def older(limit = 1)
fetch_one_or_more_jobs(starting: :front, limit: limit)
end
def all
parse_jobs(Sidekiq.redis { |r| r.lrange(@rname, 0, -1) })
end
def jobs_breakdown(jobs_subset = all)
jobs_subset.each_with_object(Hash.new(0)) do |job, counts|
counts[job["class"]] += 1
end
end
protected
def fetch_one_or_more_jobs(starting:, limit:)
if limit == 1
fetch_jobs(starting: starting, limit: 1).first
else
fetch_jobs(starting: starting, limit: limit)
end
end
def fetch_jobs(starting:, limit:)
start_index = starting == :front ? -limit : 0
stop_index = starting == :front ? -1 : limit-1
parse_jobs(Sidekiq.redis { |r| r.lrange(@rname, start_index, stop_index) })
end
def parse_jobs(redis_jobs)
redis_jobs.map do |j|
job = JSON.parse(j)
job["enqueued_at"] = Time.at(job["enqueued_at"])
job
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment