mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-10-08 12:36:36 +08:00
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:
parent
4248de6003
commit
6e66c80120
6 changed files with 17 additions and 24 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Add table
Reference in a new issue