defmodule Oban.Web.Queues.TableComponent do use Oban.Web, :live_component import Oban.Web.Helpers, only: [integer_to_estimate: 1, oban_path: 1] import Oban.Web.Helpers.QueueHelper alias Oban.Web.Components.Core alias Oban.Web.Queue @impl Phoenix.LiveComponent def render(assigns) do ~H"""

No queues

Queues process jobs concurrently. They'll appear here once your Oban instance starts with queues configured.

No queues match the current filters.
""" end # Components attr :label, :string, required: true attr :class, :string, default: "" defp queue_header(assigns) do ~H""" {@label} """ end attr :access, :map, required: true attr :history, :map, required: true attr :myself, :any, required: true attr :queue, :string, required: true attr :selected, :boolean, default: false attr :total_limit, :integer, required: true defp queue_row(assigns) do ~H"""
  • <.link patch={oban_path([:queues, @queue.name])} class="py-5 flex flex-grow items-center">
    {@queue.name}
    <% {exec, limit, percent} = utilization(@queue) %>
    {exec}/{limit}
    {integer_to_estimate(@queue.counts.available)} 0, do: "bg-cyan-400", else: "bg-gray-300 dark:bg-gray-600" ) ]} /> {integer_to_estimate(@queue.counts.scheduled)} 0, do: "bg-emerald-400", else: "bg-gray-300 dark:bg-gray-600" ) ]} /> {integer_to_estimate(@queue.counts.retryable)} 0, do: "bg-yellow-400", else: "bg-gray-300 dark:bg-gray-600" ) ]} />
    {length(@queue.checks)}
  • """ end # Handlers @impl Phoenix.LiveComponent def handle_event("toggle-select", %{"id" => queue}, socket) do send(self(), {:toggle_select, queue}) {:noreply, socket} end # Helpers defp utilization(queue) do exec = executing_count(queue.checks) limit = Queue.local_limit(queue) percent = if limit > 0, do: min(round(exec / limit * 100), 100), else: 0 {exec, limit, percent} end end