defmodule Oban.Web.Queues.DetailInsanceComponent do
use Oban.Web, :live_component
import Oban.Web.Helpers.QueueHelper
alias Oban.Web.Components.Core
@impl Phoenix.LiveComponent
def update(%{local_limit: local_limit}, socket) do
{:ok, assign(socket, local_limit: local_limit)}
end
def update(assigns, socket) do
socket =
socket
|> assign(access: assigns.access, checks: assigns.checks)
|> assign_new(:queue, fn -> assigns.checks["queue"] end)
|> assign_new(:paused, fn -> assigns.checks["paused"] end)
|> assign_new(:local_limit, fn -> assigns.checks["local_limit"] end)
{:ok, socket}
end
@impl Phoenix.LiveComponent
def render(assigns) do
~H"""
| {node_name(@checks)} |
{executing_count(@checks)} |
{started_at(@checks)} |
<.pause_button
disabled={not can?(:pause_queues, @access)}
node={node_name(@checks)}
paused={@paused}
queue={@queue}
target={@myself}
/>
|
|
"""
end
defp pause_button(assigns) do
assigns =
assigns
|> assign_new(:id, fn -> "#{assigns.queue}-toggle-pause" end)
|> assign_new(:title, fn -> if assigns.paused, do: "Resume queue", else: "Pause queue" end)
~H"""
"""
end
@impl Phoenix.LiveComponent
def handle_event("toggle-pause", _params, socket) do
enforce_access!(:pause_queues, socket.assigns.access)
checks = socket.assigns.checks
action = if socket.assigns.paused, do: :resume_queue, else: :pause_queue
send(self(), {action, checks["queue"], checks["name"], checks["node"]})
{:noreply, assign(socket, paused: not socket.assigns.paused)}
end
def handle_event("update", %{"local_limit" => limit}, socket) do
enforce_access!(:scale_queues, socket.assigns.access)
limit = String.to_integer(limit)
checks = socket.assigns.checks
send(self(), {:scale_queue, checks["queue"], checks["name"], checks["node"], limit})
{:noreply, assign(socket, local_limit: limit)}
end
def handle_event("increment", _params, socket) do
{:noreply, assign(socket, local_limit: socket.assigns.local_limit + 1)}
end
def handle_event("decrement", _params, socket) do
if socket.assigns.local_limit > 1 do
{:noreply, assign(socket, local_limit: socket.assigns.local_limit - 1)}
else
{:noreply, socket}
end
end
end