Spaces:
Paused
Paused
import SvgIcon from '@/components/svg-icon'; | |
import { useFetchSystemStatus } from '@/hooks/user-setting-hooks'; | |
import { ISystemStatus, Minio } from '@/interfaces/database/userSetting'; | |
import { Badge, Card, Flex, Spin, Typography } from 'antd'; | |
import classNames from 'classnames'; | |
import lowerCase from 'lodash/lowerCase'; | |
import upperFirst from 'lodash/upperFirst'; | |
import { useEffect } from 'react'; | |
import { toFixed } from '@/utils/common-util'; | |
import styles from './index.less'; | |
const { Text } = Typography; | |
enum Status { | |
'green' = 'success', | |
'red' = 'error', | |
'yellow' = 'warning', | |
} | |
const TitleMap = { | |
es: 'Elasticsearch', | |
minio: 'MinIO Object Storage', | |
redis: 'Redis', | |
mysql: 'Mysql', | |
}; | |
const SystemInfo = () => { | |
const { | |
systemStatus, | |
fetchSystemStatus, | |
loading: statusLoading, | |
} = useFetchSystemStatus(); | |
useEffect(() => { | |
fetchSystemStatus(); | |
}, [fetchSystemStatus]); | |
return ( | |
<section className={styles.systemInfo}> | |
<Spin spinning={statusLoading}> | |
<Flex gap={16} vertical> | |
{Object.keys(systemStatus).map((key) => { | |
const info = systemStatus[key as keyof ISystemStatus]; | |
return ( | |
<Card | |
type="inner" | |
title={ | |
<Flex align="center" gap={10}> | |
<SvgIcon name={key} width={26}></SvgIcon> | |
<span className={styles.title}> | |
{TitleMap[key as keyof typeof TitleMap]} | |
</span> | |
<Badge | |
className={styles.badge} | |
status={Status[info.status as keyof typeof Status]} | |
/> | |
</Flex> | |
} | |
key={key} | |
> | |
{Object.keys(info) | |
.filter((x) => x !== 'status') | |
.map((x) => { | |
return ( | |
<Flex | |
key={x} | |
align="center" | |
gap={16} | |
className={styles.text} | |
> | |
<b>{upperFirst(lowerCase(x))}:</b> | |
<Text | |
className={classNames({ | |
[styles.error]: x === 'error', | |
})} | |
> | |
{toFixed(info[x as keyof Minio]) as any} | |
{x === 'elapsed' && ' ms'} | |
</Text> | |
</Flex> | |
); | |
})} | |
</Card> | |
); | |
})} | |
</Flex> | |
</Spin> | |
</section> | |
); | |
}; | |
export default SystemInfo; | |