import { mdiHarddisk, mdiInformation, mdiMemory, mdiNetwork, mdiPackageVariantClosed, } from "@mdi/js"; import Icon from "@mdi/react"; import { Box, Grid, LinearProgress, Table, TableBody, TableCell, TableHead, TableRow, Typography, } from "@mui/material"; import { PieChart } from "@mui/x-charts"; import React from "react"; import { DiskInfo, NetworkInfo, ServerApi, ServerSystemInfo, } from "../api/ServerApi"; import { AsyncWidget } from "../widgets/AsyncWidget"; import { VirtWebPaper } from "../widgets/VirtWebPaper"; import { VirtWebRouteContainer } from "../widgets/VirtWebRouteContainer"; import humanizeDuration from "humanize-duration"; import { filesize } from "filesize"; export function SysInfoRoute(): React.ReactElement { const [info, setInfo] = React.useState(); const load = async () => { setInfo(await ServerApi.SystemInfo()); }; return ( } errMsg="Failed to load system info" /> ); } export function SysInfoRouteInner(p: { info: ServerSystemInfo; }): React.ReactElement { const sumDiskUsage = p.info.system.disks.reduce( (prev, disk) => { return { used: prev.used + disk.total_space - disk.available_space, free: prev.free + disk.available_space, }; }, { used: 0, free: 0 } ); return ( {/* Memory */} Memory {/* Disk usage */} Disk usage {/* CPU usage */} CPU usage } entries={[ { label: "Load", value: `${p.info.system.load_average.one} ${p.info.system.load_average.five} ${p.info.system.load_average.fifteen}`, }, { label: "Uptime", value: humanizeDuration(p.info.system.uptime * 1000), }, { label: "Bootime", value: new Date(p.info.system.boot_time * 1000).toString(), }, { label: "Hypvervisor type", value: p.info.hypervisor.type, }, ]} /> } entries={[ { label: "Brand", value: p.info.system.global_cpu_info.brand }, { label: "Vendor ID", value: p.info.system.global_cpu_info.vendor_id, }, { label: "CPU usage", value: p.info.system.global_cpu_info.cpu_usage, }, { label: "Name", value: p.info.system.global_cpu_info.name, }, { label: "CPU model", value: p.info.hypervisor.node.cpu_model, }, { label: "CPU frequency (MHz)", value: p.info.hypervisor.node.cpu_frequency_mhz, }, { label: "Number of socket", value: p.info.hypervisor.node.number_of_cpu_socket_per_node, }, { label: "Number of cores per socket", value: p.info.hypervisor.node.number_of_core_per_sockets, }, { label: "Number of threads per core", value: p.info.hypervisor.node.number_of_threads_per_core, }, ]} /> } entries={[ { label: "Name", value: p.info.system.name }, { label: "Host name", value: p.info.system.host_name }, { label: "Long OS version", value: p.info.system.long_os_version }, { label: "Kernel version", value: p.info.system.kernel_version }, ]} /> ); } function SysInfoDetailsTable(p: { label: string; icon: React.ReactElement; entries: Array<{ label: string; value: string | number }>; }): React.ReactElement { return ( {p.icon} {p.label} } > {p.entries.map((e, c) => ( {e.label} {e.value} ))}
); } function DiskDetailsTable(p: { disks: DiskInfo[] }): React.ReactElement { return ( Storage } > Name Kind Mount point Total space Free space Removable {p.disks.map((e, c) => ( {e.name} {e.DiskKind} {e.mount_point} {filesize(e.total_space)} {filesize(e.available_space)} {e.is_removable ? "Yes" : "No"} ))}
); } function NetworksDetailsTable(p: { networks: NetworkInfo[]; }): React.ReactElement { return ( Networks } > Name Total received Total transmitted {p.networks.map((e, c) => ( {e[0]} {filesize(e[1].total_received)} {filesize(e[1].total_transmitted)} ))}
); }