Packages
verk
0.9.8
1.7.3
1.7.2
1.7.1
1.7.0
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.0
1.4.1
1.4.0
1.3.0
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.1
1.1.0
1.0.2
1.0.1
1.0.0
0.14.1
0.14.0
0.13.6
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.0
0.9.13
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
Verk is a job processing system backed by Redis.
Current section
Files
Jump to
Current section
Files
lib/verk/dead_set.ex
defmodule Verk.DeadSet do
@moduledoc """
This module interacts with jobs in the dead set
"""
alias Verk.SortedSet
alias Verk.Job
@max_jobs 100
@timeout 60 * 60 * 24 * 7 # a week
@dead_key "dead"
@doc "Redis dead set key"
def key, do: @dead_key
def add(job, timestamp, redis \\ Verk.Redis) do
case Redix.pipeline(redis, [["ZADD", @dead_key, timestamp, Poison.encode!(job)],
["ZREMRANGEBYSCORE", @dead_key, "-inf", timestamp - @timeout],
["ZREMRANGEBYRANK", @dead_key, 0, -@max_jobs]]) do
{ :ok, _ } -> :ok
error -> error
end
end
@doc """
Counts how many jobs are inside the dead set
"""
@spec count(GenServer.Server) :: integer
def count(redis \\ Verk.Redis), do: SortedSet.count(@dead_key, redis)
@doc """
Clears the dead set
"""
@spec clear(GenServer.server) :: boolean
def clear(redis \\ Verk.Redis), do: SortedSet.clear(@dead_key, redis)
@doc """
List jobs from `start` to `stop`
"""
@spec range(integer, integer, GenServer.server) :: [Verk.Job.T]
def range(start \\ 0, stop \\ -1, redis \\ Verk.Redis) do
SortedSet.range(@dead_key, start, stop, redis)
end
@doc """
Delete the job from the dead set
"""
@spec delete_job(%Job{} | String.t, GenServer.server) :: boolean
def delete_job(original_json, redis \\ Verk.Redis)
def delete_job(%Job{ original_json: original_json }, redis) do
delete_job(original_json, redis)
end
def delete_job(original_json, redis), do: SortedSet.delete_job(@dead_key, original_json, redis)
end