Packages
verk
0.12.1
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
"""
import Verk.Dsl
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
@doc """
Adds a `job` to the dead set ordering by `timestamp`
Optionally a redis connection can be specified
"""
@spec add(%Job{}, integer, GenServer.server) :: :ok | {:error, Redix.Error.t}
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} -> {:error, error}
end
end
@doc """
Adds a `job` to the dead set ordering by `timestamp`, raising if there's an error
Optionally a redis connection can be specified
"""
@spec add!(%Job{}, integer, GenServer.server) :: nil
def add!(job, timestamp, redis \\ Verk.Redis) do
bangify(add(job, timestamp, redis))
end
@doc """
Counts how many jobs are inside the dead set
"""
@spec count(GenServer.Server) :: {:ok, integer} | {:error, Redix.Error.t}
def count(redis \\ Verk.Redis), do: SortedSet.count(@dead_key, redis)
@doc """
Counts how many jobs are inside the dead set, raising if there's an error
"""
@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) :: :ok | {:error, RuntimeError.t | Redix.Error.t}
def clear(redis \\ Verk.Redis), do: SortedSet.clear(@dead_key, redis)
@doc """
Clears the dead set, raising if there's an error
"""
@spec clear!(GenServer.server) :: nil
def clear!(redis \\ Verk.Redis), do: SortedSet.clear!(@dead_key, redis)
@doc """
List jobs from `start` to `stop`
"""
@spec range(integer, integer, GenServer.server) :: {:ok, [Verk.Job.T]} | {:error, Redix.Error.t}
def range(start \\ 0, stop \\ -1, redis \\ Verk.Redis) do
SortedSet.range(@dead_key, start, stop, redis)
end
@doc """
List jobs from `start` to `stop`, raising if there's an error
"""
@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) :: :ok | {:error, RuntimeError.t | Redix.Error.t}
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)
@doc """
Delete the job from the dead set, raising if there's an exception
"""
@spec delete_job!(%Job{} | String.t, GenServer.server) :: nil
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