Ready to build sysinfo route screen

This commit is contained in:
2023-09-08 09:45:41 +02:00
parent bd5ea1fb23
commit f14e8a8e58
7 changed files with 236 additions and 4 deletions

@ -14,6 +14,7 @@ import { LoginRoute } from "./routes/auth/LoginRoute";
import { AuthApi } from "./api/AuthApi";
import { IsoFilesRoute } from "./routes/IsoFilesRoute";
import { ServerApi } from "./api/ServerApi";
import { SysInfoRoute } from "./routes/SysInfoRoute";
interface AuthContext {
signedIn: boolean;
@ -35,6 +36,7 @@ export function App() {
signedIn || ServerApi.Config.auth_disabled ? (
<Route path="*" element={<BaseAuthenticatedPage />}>
<Route path="iso" element={<IsoFilesRoute />} />
<Route path="sysinfo" element={<SysInfoRoute />} />
<Route path="*" element={<NotFoundRoute />} />
</Route>
) : (

@ -10,7 +10,100 @@ export interface ServerConfig {
let config: ServerConfig | null = null;
export interface ServerInfo {}
export interface ServerSystemInfo {
hypervisor: HypervisorInfo;
system: SystemInfo;
}
interface HypervisorInfo {
type: string;
hyp_version: number;
lib_version: number;
capabilities: string;
free_memory: number;
hostname: string;
node: {
cpu_model: string;
memory_size: number;
number_of_active_cpus: number;
cpu_frequency_mhz: number;
number_of_numa_cell: number;
number_of_cpu_socket_per_node: number;
number_of_core_per_sockets: number;
number_of_threads_per_sockets: number;
};
}
interface SystemInfo {
IS_SUPPORTED: boolean;
SUPPORTED_SIGNALS: string[];
MINIMUM_CPU_UPDATE_INTERVAL: {
secs: number;
nanos: number;
};
global_cpu_info: GlobalCPUInfo;
cpus: CpuCore[];
physical_core_count: number;
total_memory: number;
free_memory: number;
available_memory: number;
used_memory: number;
total_swap: number;
free_swap: number;
used_swap: number;
components: SysComponent;
users: [];
disks: DiskInfo[];
networks: [];
uptime: number;
boot_time: number;
load_average: SysLoadAverage;
name: string;
kernel_version: string;
os_version: string;
long_os_version: string;
distribution_id: string;
host_name: string;
}
interface GlobalCPUInfo {
cpu_usage: number;
name: string;
vendor_id: string;
brand: string;
frequency: number;
}
interface CpuCore {
cpu_usage: number;
name: string;
vendor_id: string;
brand: string;
frequency: number;
}
interface SysComponent {
temperature: number;
max: number;
critical: number;
label: string;
}
interface DiskInfo {
DiskKind: "HDD" | "SSD";
name: string;
file_system: number[];
mount_point: string;
total_space: number;
available_space: number;
is_removable: boolean;
}
interface SysLoadAverage {
one: number;
five: number;
fifteen: number;
}
export class ServerApi {
/**
@ -36,7 +129,7 @@ export class ServerApi {
/**
* Get server information
*/
static async SystemInfo(): Promise<ServerInfo> {
static async SystemInfo(): Promise<ServerSystemInfo> {
return (
await APIClient.exec({
method: "GET",

@ -0,0 +1,26 @@
import React from "react";
import { ServerApi, ServerSystemInfo } from "../api/ServerApi";
import { AsyncWidget } from "../widgets/AsyncWidget";
export function SysInfoRoute(): React.ReactElement {
const [info, setInfo] = React.useState<ServerSystemInfo>();
const load = async () => {
setInfo(await ServerApi.SystemInfo());
};
return (
<AsyncWidget
load={load}
loadKey={1}
build={() => <SysInfoRouteInner info={info!} />}
errMsg="Failed to load system info"
/>
);
}
export function SysInfoRouteInner(p: {
info: ServerSystemInfo;
}): React.ReactElement {
return <>todo</>;
}

@ -1,4 +1,4 @@
import { mdiDisc, mdiHome, mdiLanPending } from "@mdi/js";
import { mdiDisc, mdiHome, mdiInformation, mdiLanPending } from "@mdi/js";
import Icon from "@mdi/react";
import {
Box,
@ -54,6 +54,11 @@ export function BaseAuthenticatedPage(): React.ReactElement {
uri="/iso"
icon={<Icon path={mdiDisc} size={1} />}
/>
<NavLink
label="Sysinfo"
uri="/sysinfo"
icon={<Icon path={mdiInformation} size={1} />}
/>
</List>
<div style={{ flex: 1 }}>
<Outlet />