Current section
Files
Jump to
Current section
Files
lib/queues.ex
defmodule Oban.Console.Queues do
alias Oban.Console.Repo
alias Oban.Console.View.Printer
alias Oban.Console.View.Table
@spec list() :: [Oban.Queue.t()]
def list, do: Repo.queues()
@spec show_list() :: :ok
def show_list do
headers = [
:queue,
:paused,
:local_limit,
:available,
:executing,
:scheduled,
:retryable,
:completed,
:cancelled,
:discarded
]
queues = list()
queue_jobs = Repo.queue_jobs()
default = %{
queue: nil,
paused: false,
local_limit: nil,
available: 0,
executing: 0,
scheduled: 0,
retryable: 0,
completed: 0,
cancelled: 0,
discarded: 0
}
queues =
Enum.map(queues, fn queue ->
states =
queue_jobs
|> Enum.filter(fn {name, _, _} -> name == queue.queue end)
|> Enum.map(fn {_, state, count} -> {String.to_atom(state), count} end)
|> Map.new()
default |> Map.merge(queue) |> Map.merge(states)
end)
Table.show(queues, headers, nil)
end
@spec pause_queues([String.t()]) :: :ok
def pause_queues([_ | _] = names), do: Enum.each(names, &pause_queues/1)
def pause_queues([]), do: :ok
def pause_queues(name) when is_binary(name) do
Repo.pause_queue(String.to_atom(name))
["Paused", name] |> Printer.title() |> IO.puts()
end
def pause_queues(name) do
["Pause", name, "Queue name is not valid"] |> Printer.error() |> IO.puts()
end
@spec resume_queues([String.t()]) :: :ok
def resume_queues([_ | _] = names), do: Enum.each(names, &resume_queues/1)
def resume_queues([]), do: :ok
def resume_queues(name) when is_binary(name) do
Repo.resume_queue(String.to_atom(name))
["Resumed", name] |> Printer.title() |> IO.puts()
end
def resume_queues(name) do
["Resume", name, "Queue name is not valid"] |> Printer.error() |> IO.puts()
end
end