Packages
honeydew
1.4.1
1.5.0
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.0
1.2.8
1.2.7
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc7
1.0.0-rc6
1.0.0-rc5
1.0.0-rc4
1.0.0-rc3
1.0.0-rc2
1.0.0-rc1
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Pluggable local/clusterable job queue focused on safety.
Current section
Files
Jump to
Current section
Files
lib/honeydew/queue/mnesia/wrapped_job.ex
defmodule Honeydew.Queue.Mnesia.WrappedJob do
alias Honeydew.Job
@record_name :wrapped_job
@record_fields [:key, :job]
job_filter_map =
%Job{}
|> Map.from_struct()
|> Enum.map(fn {k, _} ->
{k, :_}
end)
@job_filter struct(Job, job_filter_map)
defstruct [:run_at,
:id,
:job]
def record_name, do: @record_name
def record_fields, do: @record_fields
def new(%Job{delay_secs: delay_secs} = job) do
id = :erlang.unique_integer()
run_at = now() + delay_secs
job = %{job | private: id}
%__MODULE__{run_at: run_at,
id: id,
job: job}
end
def from_record({@record_name, {run_at, id}, job}) do
%__MODULE__{run_at: run_at,
id: id,
job: job}
end
def to_record(%__MODULE__{run_at: run_at,
id: id,
job: job}) do
{@record_name, key(run_at, id), job}
end
def key({@record_name, key, _job}) do
key
end
def key(run_at, id) do
{run_at, id}
end
def id_from_key({_run_at, id}) do
id
end
def id_pattern(id) do
%__MODULE__{
id: id,
run_at: :_,
job: :_
}
|> to_record
end
def filter_pattern(map) do
job = struct(@job_filter, map)
%__MODULE__{
id: :_,
run_at: :_,
job: job
}
|> to_record
end
def reserve_match_spec do
pattern =
%__MODULE__{
id: :_,
run_at: :"$1",
job: :_
}
|> to_record
[{
pattern,
[{:"=<", :"$1", now()}],
[:"$_"]
}]
end
defp now do
:erlang.monotonic_time(:second)
end
end