81 lines
2.5 KiB
Elixir
81 lines
2.5 KiB
Elixir
defmodule ToweropsWeb.CoverageLive.Index do
|
|
@moduledoc false
|
|
use ToweropsWeb, :live_view
|
|
|
|
alias Towerops.Coverages
|
|
alias Towerops.Sites
|
|
|
|
@impl true
|
|
def mount(_params, _session, socket) do
|
|
organization = socket.assigns.current_scope.organization
|
|
|
|
_ = if connected?(socket), do: Coverages.subscribe_organization(organization.id)
|
|
|
|
{:ok,
|
|
socket
|
|
|> assign(:page_title, t("Coverage"))
|
|
|> assign(:organization, organization)
|
|
|> assign(:sites, Sites.list_organization_sites(organization.id))
|
|
|> load_coverages()}
|
|
end
|
|
|
|
@impl true
|
|
def handle_params(_params, _url, socket), do: {:noreply, socket}
|
|
|
|
@impl true
|
|
def handle_event("delete", %{"id" => id}, socket) do
|
|
coverage = Coverages.get_coverage!(socket.assigns.organization.id, id)
|
|
|
|
case Coverages.delete_coverage(coverage) do
|
|
{:ok, _} ->
|
|
{:noreply,
|
|
socket
|
|
|> put_flash(:info, t("Coverage deleted"))
|
|
|> load_coverages()}
|
|
|
|
{:error, _} ->
|
|
{:noreply, put_flash(socket, :error, t("Unable to delete coverage"))}
|
|
end
|
|
end
|
|
|
|
@impl true
|
|
def handle_event("recompute", %{"id" => id}, socket) do
|
|
coverage = Coverages.get_coverage!(socket.assigns.organization.id, id)
|
|
|
|
case Coverages.queue_compute(coverage) do
|
|
{:ok, _} ->
|
|
{:noreply,
|
|
socket
|
|
|> put_flash(:info, t("Coverage queued for recompute"))
|
|
|> load_coverages()}
|
|
|
|
{:error, :compute_in_progress} ->
|
|
{:noreply, put_flash(socket, :error, t("Coverage is already being computed"))}
|
|
|
|
{:error, _} ->
|
|
{:noreply, put_flash(socket, :error, t("Failed to queue coverage"))}
|
|
end
|
|
end
|
|
|
|
@impl true
|
|
def handle_info({:coverage_status, _status, _arg}, socket) do
|
|
{:noreply, load_coverages(socket)}
|
|
end
|
|
|
|
defp load_coverages(socket) do
|
|
assign(socket, :coverages, Coverages.list_for_organization(socket.assigns.organization.id))
|
|
end
|
|
|
|
@doc false
|
|
def status_badge_class("draft"), do: "bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-300"
|
|
|
|
def status_badge_class("queued"), do: "bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"
|
|
|
|
def status_badge_class("computing"), do: "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300"
|
|
|
|
def status_badge_class("ready"), do: "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300"
|
|
|
|
def status_badge_class("failed"), do: "bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"
|
|
|
|
def status_badge_class(_), do: "bg-gray-100 text-gray-700"
|
|
end
|