dotfiles/app/lib/prymn_web/live/server_live/index.ex

88 lines
2.2 KiB
Elixir
Raw Normal View History

2023-06-09 19:13:27 +00:00
defmodule PrymnWeb.ServerLive.Index do
require Logger
alias Prymn.{Servers, Agents}
2023-06-09 19:13:27 +00:00
2023-07-09 16:41:41 +00:00
use PrymnWeb, :live_view
2023-06-09 19:13:27 +00:00
@impl true
def mount(_params, _session, socket) do
2023-07-09 16:41:41 +00:00
servers = Servers.list_servers()
healths =
if connected?(socket) do
for %Servers.Server{status: :registered, public_ip: ip} <- servers, into: %{} do
Agents.subscribe_to_health(ip)
Agents.start_connection(ip)
{ip, Agents.get_health(ip)}
end
else
%{}
end
2023-07-09 16:41:41 +00:00
{:ok,
socket
|> assign(:servers, servers)
|> assign(:healths, healths)}
2023-06-09 19:13:27 +00:00
end
@impl true
def handle_params(_params, _url, socket) do
socket =
case socket.assigns.live_action do
:new -> assign(socket, :page_title, gettext("Connect a Server"))
:index -> assign(socket, :page_title, gettext("Listing Servers"))
end
{:noreply, socket}
2023-06-09 19:13:27 +00:00
end
@impl true
2023-06-23 07:05:10 +00:00
def handle_info({:connect, %Servers.Server{} = server}, socket) do
{:noreply,
socket
|> update(:servers, fn servers -> [server | servers] end)}
2023-07-09 16:41:41 +00:00
end
def handle_info(%Agents.Health{} = health, socket) do
healths = Map.put(socket.assigns.healths, health.host, health)
{:noreply, assign(socket, :healths, healths)}
2023-06-09 19:13:27 +00:00
end
def handle_info(msg, state) do
Logger.debug("received unexpected message #{inspect(msg)}")
{:noreply, state}
2023-06-09 19:13:27 +00:00
end
defp server_status(assigns) do
case {assigns.status, assigns.health} do
{:unregistered, _} ->
~H"""
<span class="text-gray-500">Needs registration</span>
"""
{:registered, nil} ->
~H"""
<span class="text-yellow-600">Connecting...</span>
"""
{:registered, %Agents.Health{message: "Connected"}} ->
~H"""
<span class="text-green-600">Connected</span>
"""
{:registered, %Agents.Health{message: "Disconnected"}} ->
~H"""
<span class="text-red-600">Disconnected</span>
"""
{:registered, %Agents.Health{message: message}} ->
assigns = assign(assigns, :message, message)
~H"""
<span class="text-yellow-900"><%= @message %></span>
"""
end
end
2023-06-09 19:13:27 +00:00
end