110 lines
3.0 KiB
TypeScript
110 lines
3.0 KiB
TypeScript
import { useRouter } from '@uirouter/react';
|
|
|
|
import { humanize } from '@/portainer/filters/filters';
|
|
import { EnvironmentId } from '@/react/portainer/environments/types';
|
|
|
|
import { Widget } from '@@/Widget/Widget';
|
|
import { WidgetBody } from '@@/Widget/WidgetBody';
|
|
import { WidgetTitle } from '@@/Widget/WidgetTitle';
|
|
import { DetailsTable } from '@@/DetailsTable/DetailsTable';
|
|
import { Tooltip } from '@@/Tip/Tooltip';
|
|
|
|
import { DockerStorageInfo } from '../DockerStorageInfo';
|
|
|
|
type HostOs = {
|
|
type: string;
|
|
arch: string;
|
|
name: string;
|
|
};
|
|
|
|
type HostInfo = {
|
|
name: string;
|
|
os?: HostOs;
|
|
kernelVersion?: string;
|
|
totalCPU: number;
|
|
totalMemory: number;
|
|
};
|
|
|
|
type Props = {
|
|
host: HostInfo;
|
|
isBrowseEnabled: boolean;
|
|
browseUrl: string;
|
|
endpointId?: EnvironmentId;
|
|
};
|
|
|
|
export function HostDetailsPanel({
|
|
host,
|
|
isBrowseEnabled,
|
|
browseUrl,
|
|
endpointId,
|
|
}: Props) {
|
|
const router = useRouter();
|
|
|
|
return (
|
|
<div className="row">
|
|
<div className="col-lg-12 col-md-12 col-sm-12 col-xs-12">
|
|
<Widget>
|
|
<WidgetTitle title="Host Details" icon="code" />
|
|
<WidgetBody className="no-padding">
|
|
<DetailsTable dataCy="host-details" className="!mb-0">
|
|
<tr>
|
|
<td>Hostname</td>
|
|
<td>{host.name}</td>
|
|
</tr>
|
|
{host.os && (
|
|
<tr>
|
|
<td>OS Information</td>
|
|
<td>
|
|
{host.os.type} {host.os.arch} {host.os.name}
|
|
</td>
|
|
</tr>
|
|
)}
|
|
{host.kernelVersion && (
|
|
<tr>
|
|
<td>Kernel Version</td>
|
|
<td>{host.kernelVersion}</td>
|
|
</tr>
|
|
)}
|
|
<tr>
|
|
<td>Total CPU</td>
|
|
<td>{host.totalCPU}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Total memory</td>
|
|
<td>{humanize(host.totalMemory)}</td>
|
|
</tr>
|
|
{endpointId && (
|
|
<tr>
|
|
<td>
|
|
<span className="flex items-center">
|
|
Disk usage
|
|
<Tooltip message="Disk usage on the partition backing Docker's data directory. Docker usage includes images, container layers, volumes, and build cache." />
|
|
</span>
|
|
</td>
|
|
<td>
|
|
<DockerStorageInfo endpointId={endpointId} />
|
|
</td>
|
|
</tr>
|
|
)}
|
|
{isBrowseEnabled && (
|
|
<tr>
|
|
<td colSpan={2}>
|
|
<button
|
|
type="button"
|
|
className="btn btn-primary btn-sm"
|
|
title="Browse"
|
|
onClick={() => router.stateService.go(browseUrl)}
|
|
>
|
|
Browse
|
|
</button>
|
|
</td>
|
|
</tr>
|
|
)}
|
|
</DetailsTable>
|
|
</WidgetBody>
|
|
</Widget>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|