mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-10-09 13:07:37 +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 """
|
@doc """
|
||||||
Returns the current autosave path.
|
Returns the current autosave path.
|
||||||
"""
|
"""
|
||||||
@spec autosave_path() :: String.t()
|
@spec autosave_path() :: String.t() | nil
|
||||||
def autosave_path() do
|
def autosave_path() do
|
||||||
case storage().fetch_key(:settings, "global", :autosave_path) do
|
case storage().fetch_key(:settings, "global", :autosave_path) do
|
||||||
{:ok, value} -> value
|
{:ok, value} -> value
|
||||||
|
|
|
@ -46,13 +46,16 @@ defmodule Livebook.SystemResources do
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def handle_cast(:update, state) do
|
def handle_cast(:update, state) do
|
||||||
measure()
|
memory = measure()
|
||||||
|
Phoenix.PubSub.local_broadcast(Livebook.PubSub, "system_resources", {:memory_update, memory})
|
||||||
{:noreply, state}
|
{:noreply, state}
|
||||||
end
|
end
|
||||||
|
|
||||||
defp measure() do
|
defp measure() do
|
||||||
memory = :memsup.get_system_memory_data()
|
memory_data = :memsup.get_system_memory_data()
|
||||||
:ets.insert(@name, {:memory, %{total: memory[:total_memory], free: memory[:free_memory]}})
|
memory = %{total: memory_data[:total_memory], free: memory_data[:free_memory]}
|
||||||
|
:ets.insert(@name, {:memory, memory})
|
||||||
|
memory
|
||||||
end
|
end
|
||||||
|
|
||||||
defp schedule() do
|
defp schedule() do
|
||||||
|
|
|
@ -11,6 +11,7 @@ defmodule LivebookWeb.HomeLive do
|
||||||
def mount(params, _session, socket) do
|
def mount(params, _session, socket) do
|
||||||
if connected?(socket) do
|
if connected?(socket) do
|
||||||
Phoenix.PubSub.subscribe(Livebook.PubSub, "tracker_sessions")
|
Phoenix.PubSub.subscribe(Livebook.PubSub, "tracker_sessions")
|
||||||
|
Phoenix.PubSub.subscribe(Livebook.PubSub, "system_resources")
|
||||||
end
|
end
|
||||||
|
|
||||||
sessions = Sessions.list_sessions()
|
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">
|
<div id="running-sessions" class="py-12" role="region" aria-label="running sessions">
|
||||||
<.live_component module={LivebookWeb.HomeLive.SessionListComponent}
|
<.live_component module={LivebookWeb.HomeLive.SessionListComponent}
|
||||||
id="session-list"
|
id="session-list"
|
||||||
sessions={@sessions}/>
|
sessions={@sessions}
|
||||||
|
memory={@memory} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -335,6 +337,10 @@ defmodule LivebookWeb.HomeLive do
|
||||||
{:noreply, socket}
|
{:noreply, socket}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def handle_info({:memory_update, memory}, socket) do
|
||||||
|
{:noreply, assign(socket, memory: memory)}
|
||||||
|
end
|
||||||
|
|
||||||
defp files(sessions) do
|
defp files(sessions) do
|
||||||
Enum.map(sessions, & &1.file)
|
Enum.map(sessions, & &1.file)
|
||||||
end
|
end
|
||||||
|
|
|
@ -33,7 +33,6 @@ defmodule LivebookWeb.HomeLive.CloseSessionComponent do
|
||||||
@impl true
|
@impl true
|
||||||
def handle_event("close", %{}, socket) do
|
def handle_event("close", %{}, socket) do
|
||||||
Livebook.Session.close(socket.assigns.session.pid)
|
Livebook.Session.close(socket.assigns.session.pid)
|
||||||
SessionListComponent.refresh_memory_info()
|
|
||||||
{:noreply, push_patch(socket, to: socket.assigns.return_to, replace: true)}
|
{:noreply, push_patch(socket, to: socket.assigns.return_to, replace: true)}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -54,7 +54,6 @@ defmodule LivebookWeb.HomeLive.EditSessionsComponent do
|
||||||
|> Enum.map(& &1.pid)
|
|> Enum.map(& &1.pid)
|
||||||
|> Livebook.Session.close()
|
|> Livebook.Session.close()
|
||||||
|
|
||||||
SessionListComponent.refresh_memory_info()
|
|
||||||
{:noreply, push_patch(socket, to: socket.assigns.return_to, replace: true)}
|
{:noreply, push_patch(socket, to: socket.assigns.return_to, replace: true)}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -64,7 +63,6 @@ defmodule LivebookWeb.HomeLive.EditSessionsComponent do
|
||||||
|> Enum.map(& &1.pid)
|
|> Enum.map(& &1.pid)
|
||||||
|> Livebook.Session.disconnect_runtime()
|
|> Livebook.Session.disconnect_runtime()
|
||||||
|
|
||||||
SessionListComponent.refresh_memory_info()
|
|
||||||
{:noreply, push_patch(socket, to: socket.assigns.return_to, replace: true)}
|
{:noreply, push_patch(socket, to: socket.assigns.return_to, replace: true)}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -12,10 +12,6 @@ defmodule LivebookWeb.HomeLive.SessionListComponent do
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def update(%{memory_timestamp: ts}, socket) do
|
|
||||||
{:ok, assign(socket, :memory_timestamp, ts)}
|
|
||||||
end
|
|
||||||
|
|
||||||
def update(assigns, socket) do
|
def update(assigns, socket) do
|
||||||
{sessions, assigns} = Map.pop!(assigns, :sessions)
|
{sessions, assigns} = Map.pop!(assigns, :sessions)
|
||||||
|
|
||||||
|
@ -30,11 +26,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_timestamp: System.os_time()
|
|
||||||
)
|
|
||||||
|
|
||||||
{:ok, socket}
|
{:ok, socket}
|
||||||
end
|
end
|
||||||
|
@ -50,7 +42,7 @@ defmodule LivebookWeb.HomeLive.SessionListComponent do
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-row">
|
<div class="flex flex-row">
|
||||||
<.memory_info memory_timestamp={@memory_timestamp} />
|
<.memory_info memory={@memory} />
|
||||||
<%= if @sessions != [] do %>
|
<%= if @sessions != [] do %>
|
||||||
<.edit_sessions sessions={@sessions} socket={@socket}/>
|
<.edit_sessions sessions={@sessions} socket={@socket}/>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
@ -191,7 +183,7 @@ defmodule LivebookWeb.HomeLive.SessionListComponent do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp memory_info(assigns) do
|
defp memory_info(assigns) do
|
||||||
%{free: free, total: total} = Livebook.SystemResources.memory()
|
%{free: free, total: total} = assigns.memory
|
||||||
used = total - free
|
used = total - free
|
||||||
percentage = Float.round(used / total * 100, 2)
|
percentage = Float.round(used / total * 100, 2)
|
||||||
assigns = assign(assigns, free: free, used: used, total: total, percentage: percentage)
|
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
|
def handle_event("disconnect_runtime", %{"id" => session_id}, socket) do
|
||||||
session = Enum.find(socket.assigns.sessions, &(&1.id == session_id))
|
session = Enum.find(socket.assigns.sessions, &(&1.id == session_id))
|
||||||
Session.disconnect_runtime(session.pid)
|
Session.disconnect_runtime(session.pid)
|
||||||
refresh_memory_info()
|
|
||||||
{:noreply, socket}
|
{:noreply, socket}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -300,10 +291,6 @@ defmodule LivebookWeb.HomeLive.SessionListComponent do
|
||||||
time_words <> " ago"
|
time_words <> " ago"
|
||||||
end
|
end
|
||||||
|
|
||||||
def refresh_memory_info do
|
|
||||||
send_update(__MODULE__, memory_timestamp: System.os_time(), id: "session-list")
|
|
||||||
end
|
|
||||||
|
|
||||||
def toggle_edit(:on) do
|
def toggle_edit(:on) do
|
||||||
JS.remove_class("hidden", to: "[data-el-bulk-edit-member]")
|
JS.remove_class("hidden", to: "[data-el-bulk-edit-member]")
|
||||||
|> JS.add_class("hidden", to: "#toggle-edit")
|
|> JS.add_class("hidden", to: "#toggle-edit")
|
||||||
|
|
Loading…
Add table
Reference in a new issue