2023-06-09 19:13:27 +00:00
|
|
|
defmodule PrymnWeb.ServerLive.Index do
|
2023-07-26 19:41:52 +00:00
|
|
|
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()
|
|
|
|
|
2023-08-19 18:14:07 +00:00
|
|
|
if connected?(socket) do
|
|
|
|
for %Servers.Server{status: :registered, public_ip: ip} <- servers do
|
|
|
|
Agents.start_connection_or_keep_alive(ip)
|
|
|
|
end
|
2023-07-09 16:41:41 +00:00
|
|
|
end
|
|
|
|
|
2023-07-26 19:41:52 +00:00
|
|
|
{:ok, assign(socket, :servers, servers)}
|
2023-06-09 19:13:27 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
@impl true
|
2023-08-19 18:14:07 +00:00
|
|
|
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
|
2023-07-26 19:41:52 +00:00
|
|
|
{:noreply,
|
|
|
|
socket
|
|
|
|
|> update(:servers, fn servers -> [server | servers] end)}
|
2023-07-09 16:41:41 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
@impl true
|
2023-07-26 19:41:52 +00:00
|
|
|
def handle_info({:healthcheck, ip, _message}, socket) do
|
|
|
|
servers =
|
|
|
|
update_in(
|
|
|
|
socket.assigns.servers,
|
|
|
|
[Access.filter(&match?(%{public_ip: ^ip}, &1))],
|
|
|
|
&Map.merge(&1, %{connection_status: "Connected"})
|
|
|
|
)
|
2023-07-09 16:41:41 +00:00
|
|
|
|
2023-07-26 19:41:52 +00:00
|
|
|
{:noreply, assign(socket, :servers, servers)}
|
2023-06-09 19:13:27 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
@impl true
|
2023-07-26 19:41:52 +00:00
|
|
|
def handle_info(msg, state) do
|
|
|
|
Logger.debug("received unexpected message #{inspect(msg)}")
|
|
|
|
{:noreply, state}
|
2023-06-09 19:13:27 +00:00
|
|
|
end
|
|
|
|
end
|