Keep memory usage state at the root on homepage (#1129)

* Keep memory usage state at the root on homepage

* Update lib/livebook/system_resources.ex

Co-authored-by: José Valim <jose.valim@dashbit.co>

Co-authored-by: José Valim <jose.valim@dashbit.co>
This commit is contained in:
Jonatan Kłosko 2022-04-18 18:06:04 +02:00 committed by GitHub
parent 4248de6003
commit 6e66c80120
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 17 additions and 24 deletions

View file

@ -13,7 +13,7 @@ defmodule Livebook.Settings do
@doc """
Returns the current autosave path.
"""
@spec autosave_path() :: String.t()
@spec autosave_path() :: String.t() | nil
def autosave_path() do
case storage().fetch_key(:settings, "global", :autosave_path) do
{:ok, value} -> value

View file

@ -46,13 +46,16 @@ defmodule Livebook.SystemResources do
@impl true
def handle_cast(:update, state) do
measure()
memory = measure()
Phoenix.PubSub.local_broadcast(Livebook.PubSub, "system_resources", {:memory_update, memory})
{:noreply, state}
end
defp measure() do
memory = :memsup.get_system_memory_data()
:ets.insert(@name, {:memory, %{total: memory[:total_memory], free: memory[:free_memory]}})
memory_data = :memsup.get_system_memory_data()
memory = %{total: memory_data[:total_memory], free: memory_data[:free_memory]}
:ets.insert(@name, {:memory, memory})
memory
end
defp schedule() do

View file

@ -11,6 +11,7 @@ defmodule LivebookWeb.HomeLive do
def mount(params, _session, socket) do
if connected?(socket) do
Phoenix.PubSub.subscribe(Livebook.PubSub, "tracker_sessions")
Phoenix.PubSub.subscribe(Livebook.PubSub, "system_resources")
end
sessions = Sessions.list_sessions()
@ -113,7 +114,8 @@ defmodule LivebookWeb.HomeLive do
<div id="running-sessions" class="py-12" role="region" aria-label="running sessions">
<.live_component module={LivebookWeb.HomeLive.SessionListComponent}
id="session-list"
sessions={@sessions}/>
sessions={@sessions}
memory={@memory} />
</div>
</div>
</div>
@ -335,6 +337,10 @@ defmodule LivebookWeb.HomeLive do
{:noreply, socket}
end
def handle_info({:memory_update, memory}, socket) do
{:noreply, assign(socket, memory: memory)}
end
defp files(sessions) do
Enum.map(sessions, & &1.file)
end

View file

@ -33,7 +33,6 @@ defmodule LivebookWeb.HomeLive.CloseSessionComponent do
@impl true
def handle_event("close", %{}, socket) do
Livebook.Session.close(socket.assigns.session.pid)
SessionListComponent.refresh_memory_info()
{:noreply, push_patch(socket, to: socket.assigns.return_to, replace: true)}
end
end

View file

@ -54,7 +54,6 @@ defmodule LivebookWeb.HomeLive.EditSessionsComponent do
|> Enum.map(& &1.pid)
|> Livebook.Session.close()
SessionListComponent.refresh_memory_info()
{:noreply, push_patch(socket, to: socket.assigns.return_to, replace: true)}
end
@ -64,7 +63,6 @@ defmodule LivebookWeb.HomeLive.EditSessionsComponent do
|> Enum.map(& &1.pid)
|> Livebook.Session.disconnect_runtime()
SessionListComponent.refresh_memory_info()
{:noreply, push_patch(socket, to: socket.assigns.return_to, replace: true)}
end

View file

@ -12,10 +12,6 @@ defmodule LivebookWeb.HomeLive.SessionListComponent do
end
@impl true
def update(%{memory_timestamp: ts}, socket) do
{:ok, assign(socket, :memory_timestamp, ts)}
end
def update(assigns, socket) do
{sessions, assigns} = Map.pop!(assigns, :sessions)
@ -30,11 +26,7 @@ defmodule LivebookWeb.HomeLive.SessionListComponent do
socket =
socket
|> assign(assigns)
|> assign(
sessions: sessions,
show_autosave_note?: show_autosave_note?,
memory_timestamp: System.os_time()
)
|> assign(sessions: sessions, show_autosave_note?: show_autosave_note?)
{:ok, socket}
end
@ -50,7 +42,7 @@ defmodule LivebookWeb.HomeLive.SessionListComponent do
</h2>
</div>
<div class="flex flex-row">
<.memory_info memory_timestamp={@memory_timestamp} />
<.memory_info memory={@memory} />
<%= if @sessions != [] do %>
<.edit_sessions sessions={@sessions} socket={@socket}/>
<% end %>
@ -191,7 +183,7 @@ defmodule LivebookWeb.HomeLive.SessionListComponent do
end
defp memory_info(assigns) do
%{free: free, total: total} = Livebook.SystemResources.memory()
%{free: free, total: total} = assigns.memory
used = total - free
percentage = Float.round(used / total * 100, 2)
assigns = assign(assigns, free: free, used: used, total: total, percentage: percentage)
@ -291,7 +283,6 @@ defmodule LivebookWeb.HomeLive.SessionListComponent do
def handle_event("disconnect_runtime", %{"id" => session_id}, socket) do
session = Enum.find(socket.assigns.sessions, &(&1.id == session_id))
Session.disconnect_runtime(session.pid)
refresh_memory_info()
{:noreply, socket}
end
@ -300,10 +291,6 @@ defmodule LivebookWeb.HomeLive.SessionListComponent do
time_words <> " ago"
end
def refresh_memory_info do
send_update(__MODULE__, memory_timestamp: System.os_time(), id: "session-list")
end
def toggle_edit(:on) do
JS.remove_class("hidden", to: "[data-el-bulk-edit-member]")
|> JS.add_class("hidden", to: "#toggle-edit")