Packages
verk
1.5.0
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/queue.ex
defmodule Verk.Queue do
@moduledoc """
This module interacts with a queue
"""
alias Verk.Job
import Verk.Dsl
@doc """
Counts how many jobs are enqueued on a queue
"""
@spec count(binary) :: {:ok, integer} | {:error, atom | Redix.Error.t()}
def count(queue) do
Redix.command(Verk.Redis, ["LLEN", queue_name(queue)])
end
@doc """
Counts how many jobs are enqueued on a queue, raising if there's an error
"""
@spec count!(binary) :: integer
def count!(queue) do
bangify(count(queue))
end
@doc """
Clears the `queue`
It will return `{:ok, true}` if the `queue` was cleared and `{:ok, false}` otherwise
An error tuple may be returned if Redis failed
"""
@spec clear(binary) :: {:ok, boolean} | {:error, Redix.Error.t()}
def clear(queue) do
case Redix.command(Verk.Redis, ["DEL", queue_name(queue)]) do
{:ok, 0} -> {:ok, false}
{:ok, 1} -> {:ok, true}
{:error, error} -> {:error, error}
end
end
@doc """
Clears the `queue`, raising if there's an error
It will return `true` if the `queue` was cleared and `false` otherwise
"""
@spec clear!(binary) :: boolean
def clear!(queue) do
bangify(clear(queue))
end
@doc """
Lists enqueued jobs from `start` to `stop`
"""
@spec range(binary, integer, integer) :: {:ok, [Verk.Job.T]} | {:error, Redix.Error.t()}
def range(queue, start \\ 0, stop \\ -1) do
case Redix.command(Verk.Redis, ["LRANGE", queue_name(queue), start, stop]) do
{:ok, jobs} -> {:ok, for(job <- jobs, do: Job.decode!(job))}
{:error, error} -> {:error, error}
end
end
@doc """
Lists enqueued jobs from `start` to `stop`, raising if there's an error
"""
@spec range!(binary, integer, integer) :: [Verk.Job.T]
def range!(queue, start \\ 0, stop \\ -1) do
bangify(range(queue, start, stop))
end
@doc """
Deletes the job from the `queue`
It returns `{:ok, true}` if the job was found and deleted
Otherwise it returns `{:ok, false}`
An error tuple may be returned if Redis failed
"""
@spec delete_job(binary, %Job{} | binary) :: {:ok, boolean} | {:error, Redix.Error.t()}
def delete_job(queue, %Job{original_json: original_json}) do
delete_job(queue, original_json)
end
def delete_job(queue, original_json) do
case Redix.command(Verk.Redis, ["LREM", queue_name(queue), 1, original_json]) do
{:ok, 0} -> {:ok, false}
{:ok, 1} -> {:ok, true}
{:error, error} -> {:error, error}
end
end
@doc """
Delete job from the `queue`, raising if there's an error
It returns `true` if the job was found and delete
Otherwise it returns `false`
An error will be raised if Redis failed
"""
@spec delete_job!(binary, %Job{} | binary) :: boolean
def delete_job!(queue, %Job{original_json: original_json}) do
delete_job!(queue, original_json)
end
def delete_job!(queue, original_json) do
bangify(delete_job(queue, original_json))
end
defp queue_name(queue), do: "queue:#{queue}"
end