defmodule PrymnWeb.SystemInfo do use PrymnWeb, :live_component require Logger alias Phoenix.LiveView.AsyncResult @impl true def update(assigns, socket) do {:ok, socket |> assign(:ip, assigns.ip) |> assign(:sys_info, AsyncResult.loading()) |> start_async(:get_sys_info, fn -> Logger.debug("getting initial system info for #{assigns.ip}...") Prymn.Agents.get_sys_info(assigns.ip) end)} end @impl true def render(assigns) do %{result: unwrapped_info} = assigns.sys_info assigns = assign(assigns, unwrapped_info: unwrapped_info) ~H"""
<%= @unwrapped_info.uptime || "" %>s
Uptime
<%= Enum.count(@unwrapped_info.cpus || []) %>
CPUs
<%= calculate_cpu_usage(@unwrapped_info.cpus) %>
CPU%
<%= bytes_to_gigabytes(@unwrapped_info.mem_total_bytes - @unwrapped_info.mem_avail_bytes) %> / <%= bytes_to_gigabytes(@unwrapped_info.mem_total_bytes) %> GiB
Memory
<%= calculate_disk_used_percent(@unwrapped_info.disks) %> %
Used Disk