diff --git a/app/lib/prymn_web/components/layouts/app.html.heex b/app/lib/prymn_web/components/layouts/app.html.heex index b91bc3b..ab86cad 100644 --- a/app/lib/prymn_web/components/layouts/app.html.heex +++ b/app/lib/prymn_web/components/layouts/app.html.heex @@ -15,11 +15,19 @@ v<%= Application.spec(:prymn, :vsn) %>

-
- <.link class="px-3 py-4" href={~p"/users/settings"}> +
+ <.link class="border-r border-l px-3 py-4 hover:bg-white" href={~p"/users/settings"}> <.icon name="hero-user" /> <.icon name="hero-chevron-down" /> + <.link + title="Log out" + class="border-r px-3 py-4 hover:bg-white" + method="DELETE" + href={~p"/auth/log_out"} + > + <.icon name="hero-x-mark" /> +
diff --git a/app/lib/prymn_web/components/system_info.ex b/app/lib/prymn_web/components/system_info.ex index d252c1e..92d7226 100644 --- a/app/lib/prymn_web/components/system_info.ex +++ b/app/lib/prymn_web/components/system_info.ex @@ -18,46 +18,48 @@ defmodule PrymnWeb.SystemInfo do @impl true def render(assigns) do - %{result: unwrapped_info} = assigns.sys_info - assigns = assign(assigns, unwrapped_info: unwrapped_info) - ~H""" -
-
+
+ <.async_result :let={sys_info} assign={@sys_info}> + <:loading> +
+ <.spinner class="h-5 w-5" /> +

Loading system statistics...

+
+
-

<%= @unwrapped_info.uptime || "" %>s

+

<%= sys_info.uptime || "" %>s

Uptime

-
-

<%= Enum.count(@unwrapped_info.cpus || []) %>

+
+

<%= Enum.count(sys_info.cpus || []) %>

CPUs

-
-

<%= calculate_cpu_usage(@unwrapped_info.cpus) %>

+
+

<%= calculate_cpu_usage(sys_info.cpus) %>

CPU%

-
+

- <%= bytes_to_gigabytes(@unwrapped_info.mem_total_bytes - @unwrapped_info.mem_avail_bytes) %> + <%= bytes_to_gigabytes(sys_info.mem_total_bytes - sys_info.mem_avail_bytes) %> / - <%= bytes_to_gigabytes(@unwrapped_info.mem_total_bytes) %> + <%= bytes_to_gigabytes(sys_info.mem_total_bytes) %> GiB

Memory

-
+

- <%= calculate_disk_used_percent(@unwrapped_info.disks) %> + <%= calculate_disk_used_percent(sys_info.disks) %> %

Used Disk

-
+
""" end - @impl true def handle_async(:get_sys_info, {:ok, {:ok, sys_info}}, socket) do %{sys_info: sys_info_result, ip: host_address} = socket.assigns @@ -81,8 +83,7 @@ defmodule PrymnWeb.SystemInfo do |> assign(:sys_info, AsyncResult.failed(sys_info_result, grpc_error))} end - def handle_async(:get_sys_info, {:exit, reason}, socket) do - # dbg(reason) + def handle_async(:get_sys_info, {:exit, _reason}, socket) do {:noreply, socket} end diff --git a/app/lib/prymn_web/live/dashboard_live.ex b/app/lib/prymn_web/live/dashboard_live.ex index c84437a..78a9a6e 100644 --- a/app/lib/prymn_web/live/dashboard_live.ex +++ b/app/lib/prymn_web/live/dashboard_live.ex @@ -9,25 +9,30 @@ defmodule PrymnWeb.DashboardLive do

Good morning, <%= @current_user.email %>!

Your overview

- -
-
+
+
+ 0 +

Projects

+ <.link class="text-sm text-blue-600"> + <.icon class="h-3 w-4" name="hero-arrow-right" /> Manage your projects + +
+
0

Total Servers

<.link class="text-sm text-blue-600" navigate={~p"/servers"}> <.icon class="h-3 w-4" name="hero-arrow-right" /> View your servers
-
+
0

Apps

- <.link class="text-sm text-blue-600"> + <.link class="text-sm text-blue-600" navigate={~p"/apps"}> <.icon class="h-3 w-4" name="hero-arrow-right" /> View your apps
-
diff --git a/app/lib/prymn_web/live/server_live/show.ex b/app/lib/prymn_web/live/server_live/show.ex index 2c22941..bcb9f80 100644 --- a/app/lib/prymn_web/live/server_live/show.ex +++ b/app/lib/prymn_web/live/server_live/show.ex @@ -31,6 +31,7 @@ defmodule PrymnWeb.ServerLive.Show do |> assign(:registration_command, Servers.create_setup_command(server))} end + @impl true def handle_info(%PrymnProto.Prymn.SysUpdateResponse{} = response, socket) do output = String.split(response.output, "\n") socket = assign(socket, :update_output, output) diff --git a/app/test/prymn_web/live/user_registration_live_test.exs b/app/test/prymn_web/live/user_registration_live_test.exs index 5157f2f..e15dfc8 100644 --- a/app/test/prymn_web/live/user_registration_live_test.exs +++ b/app/test/prymn_web/live/user_registration_live_test.exs @@ -39,12 +39,6 @@ defmodule PrymnWeb.UserRegistrationLiveTest do conn = follow_trigger_action(form, conn) assert redirected_to(conn) == ~p"/" - - # Now do a logged in request and assert on the menu - conn = get(conn, "/") - response = html_response(conn, 200) - assert response =~ email - assert response =~ "Welcome" end test "renders errors for duplicated email", %{conn: conn} do diff --git a/mix.exs b/mix.exs index 79ae4d3..0b2214a 100644 --- a/mix.exs +++ b/mix.exs @@ -9,6 +9,7 @@ defmodule Prymn.MixProject do compilers: [:proto | Mix.compilers()], elixirc_paths: elixirc_paths(Mix.env()), config_path: Path.expand("app/config/config.exs", __DIR__), + test_paths: ["app/test"], start_permanent: Mix.env() == :prod, aliases: aliases(), deps: deps() @@ -64,7 +65,7 @@ defmodule Prymn.MixProject do {:tailwind_formatter, "~> 0.3.6", runtime: Mix.env() == :dev}, {:phoenix_live_reload, "~> 1.2", only: :dev}, {:dialyxir, "~> 1.4", only: [:dev], runtime: false}, - {:prymn_proto_compiler, path: "./proto_compiler", only: :dev, runtime: false} + {:prymn_proto_compiler, path: "proto_compiler", runtime: false} ] end