import { Row, Col, Typography, Alert, Spin } from 'antd'; import React, { ReactElement, useEffect, useState } from 'react'; import dynamic from 'next/dynamic'; import { fetchData, FETCH_INTERVAL, HARDWARE_STATS } from '../../utils/apis'; import { Chart } from '../../components/admin/Chart'; import { StatisticItem } from '../../components/admin/StatisticItem'; import { AdminLayout } from '../../components/layouts/AdminLayout'; // Lazy loaded components const BulbOutlined = dynamic(() => import('@ant-design/icons/BulbOutlined'), { ssr: false, }); const LaptopOutlined = dynamic(() => import('@ant-design/icons/LaptopOutlined'), { ssr: false, }); const SaveOutlined = dynamic(() => import('@ant-design/icons/SaveOutlined'), { ssr: false, }); export default function HardwareInfo() { const [hardwareStatus, setHardwareStatus] = useState({ cpu: [], // Array(), memory: [], // Array(), disk: [], // Array(), message: '', }); const getHardwareStatus = async () => { try { const result = await fetchData(HARDWARE_STATS); setHardwareStatus({ ...result }); } catch (error) { setHardwareStatus({ ...hardwareStatus, message: error.message }); } }; useEffect(() => { let getStatusIntervalId = null; getHardwareStatus(); getStatusIntervalId = setInterval(getHardwareStatus, FETCH_INTERVAL); // runs every 1 min. // returned function will be called on component unmount return () => { clearInterval(getStatusIntervalId); }; }, []); if (!hardwareStatus.cpu) { return (
Hardware Info
); } const currentCPUUsage = hardwareStatus.cpu[hardwareStatus.cpu.length - 1]?.value; const currentRamUsage = hardwareStatus.memory[hardwareStatus.memory.length - 1]?.value; const currentDiskUsage = hardwareStatus.disk[hardwareStatus.disk.length - 1]?.value; const series = [ { name: 'CPU', color: '#B63FFF', data: hardwareStatus.cpu, pointStyle: 'rect', }, { name: 'Memory', color: '#2087E2', data: hardwareStatus.memory, pointStyle: 'circle', }, { name: 'Disk', color: '#FF7700', data: hardwareStatus.disk, pointStyle: 'rectRounded', }, ]; return ( <> Hardware Info
} color={series[0].color} progress centered /> } color={series[1].color} progress centered /> } color={series[2].color} progress centered />
); } HardwareInfo.getLayout = function getLayout(page: ReactElement) { return ; };