Compute memory information on every session list render

This commit is contained in:
José Valim 2022-01-22 18:30:29 +01:00
parent e9ea88e180
commit c58ab447e5

View file

@ -24,11 +24,7 @@ defmodule LivebookWeb.HomeLive.SessionListComponent do
socket = socket =
socket socket
|> assign(assigns) |> assign(assigns)
|> assign( |> assign(sessions: sessions, show_autosave_note?: show_autosave_note?)
sessions: sessions,
show_autosave_note?: show_autosave_note?,
memory: memory_info()
)
{:ok, socket} {:ok, socket}
end end
@ -41,16 +37,7 @@ defmodule LivebookWeb.HomeLive.SessionListComponent do
<h2 class="uppercase font-semibold text-gray-500"> <h2 class="uppercase font-semibold text-gray-500">
Running sessions (<%= length(@sessions) %>) Running sessions (<%= length(@sessions) %>)
</h2> </h2>
<span class="tooltip top" data-tooltip={"#{format_bytes(@memory.free)} available"}> <.memory_info />
<div class="text-md text-gray-500 font-medium">
<span> <%= format_bytes(@memory.used) %> / <%= format_bytes(@memory.total) %></span>
<div class="w-64 h-4 bg-gray-200">
<div class="h-4 bg-blue-600"
style={"width: #{@memory.percentage}%"}>
</div>
</div>
</div>
</span>
<.menu id="sessions-order-menu"> <.menu id="sessions-order-menu">
<:toggle> <:toggle>
<button class="button-base button-outlined-gray px-4 py-1"> <button class="button-base button-outlined-gray px-4 py-1">
@ -157,6 +144,24 @@ defmodule LivebookWeb.HomeLive.SessionListComponent do
""" """
end end
defp memory_info(assigns) do
%{free: free, total: total} = Livebook.SystemResources.memory()
used = total - free
percentage = Float.round(used / total * 100, 2)
assigns = assign(assigns, free: free, used: used, total: total, percentage: percentage)
~H"""
<span class="tooltip top" data-tooltip={"#{format_bytes(@free)} available"}>
<div class="text-sm text-gray-500 font-medium">
<span><%= format_bytes(@used) %> / <%= format_bytes(@total) %></span>
<div class="w-32 md:w-64 h-4 bg-gray-200">
<div class="h-4 bg-blue-600" style={"width: #{@percentage}%"}></div>
</div>
</div>
</span>
"""
end
@impl true @impl true
def handle_event("set_order", %{"order_by" => order_by}, socket) do def handle_event("set_order", %{"order_by" => order_by}, socket) do
sessions = sort_sessions(socket.assigns.sessions, order_by) sessions = sort_sessions(socket.assigns.sessions, order_by)
@ -190,13 +195,6 @@ defmodule LivebookWeb.HomeLive.SessionListComponent do
Enum.sort_by(sessions, &total_runtime_memory/1, :desc) Enum.sort_by(sessions, &total_runtime_memory/1, :desc)
end end
defp memory_info() do
%{free: free, total: total} = Livebook.SystemResources.memory()
used = total - free
percentage = Float.round(used / total * 100, 2)
%{free: free, used: used, total: total, percentage: percentage}
end
defp total_runtime_memory(%{memory_usage: %{runtime: nil}}), do: 0 defp total_runtime_memory(%{memory_usage: %{runtime: nil}}), do: 0
defp total_runtime_memory(%{memory_usage: %{runtime: %{total: total}}}), do: total defp total_runtime_memory(%{memory_usage: %{runtime: %{total: total}}}), do: total
end end