import { BulbOutlined, LaptopOutlined, SaveOutlined } from '@ant-design/icons'; import { Row, Col, Typography } from 'antd'; import React, { useEffect, useState } from 'react'; import { fetchData, FETCH_INTERVAL, HARDWARE_STATS } from '../../utils/apis'; import { Chart } from '../../components/admin/Chart'; import { StatisticItem } from '../../components/admin/StatisticItem'; // TODO: FIX TS WARNING FROM THIS. // interface TimedValue { // time: Date; // value: Number; // } 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 null; } 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, }, { name: 'Memory', color: '#2087E2', data: hardwareStatus.memory, }, { name: 'Disk', color: '#FF7700', data: hardwareStatus.disk, }, ]; return ( <> Hardware Info
} color={series[0].color} progress centered /> } color={series[1].color} progress centered /> } color={series[2].color} progress centered />
); }