import React from 'react'; import {Space, Tooltip} from "antd"; import {DualAxes, Liquid} from '@ant-design/plots'; import {ProCard, StatisticCard} from '@ant-design/pro-components'; import dayjs from "dayjs"; import {renderSize} from "../../utils/utils"; import {Area} from "@ant-design/charts"; import './Monitoring.css' import {renderWeekDay} from "../../utils/week"; import {useQuery} from "react-query"; import monitorApi from "../../api/monitor"; const {Statistic} = StatisticCard; const renderLoad = (percent) => { if (percent >= 0.9) { return '堵塞'; } else if (percent >= 0.8) { return '缓慢'; } else if (percent >= 0.7) { return '正常'; } else { return '流畅'; } } const initData = { loadStat: { load1: 0, load5: 0, load15: 0, percent: 0 }, mem: { total: 0, available: 0, usedPercent: 0 }, cpu: { count: 0, usedPercent: 0, info: [{ 'modelName': '' }] }, disk: { total: 0, available: 0, usedPercent: 0 }, diskIO: [], netIO: [], cpuStat: [], memStat: [], } const Monitoring = () => { let monitorQuery = useQuery('getMonitorData', monitorApi.getData, { initialData: initData, refetchInterval: 5 }); let loadPercent = monitorQuery.data?.loadStat['percent']; let loadColor = '#5B8FF9'; if (loadPercent > 0.9) { loadColor = '#F4664A'; } else if (loadPercent > 0.8) { loadColor = '#001D70'; } else if (loadPercent > 0.7) { loadColor = '#0047A5'; } const loadStatConfig = { height: 100, width: 100, shape: function (x, y, width, height) { const r = width / 4; const dx = x - width / 2; const dy = y - height / 2; return [ ['M', dx, dy + r * 2], ['A', r, r, 0, 0, 1, x, dy + r], ['A', r, r, 0, 0, 1, dx + width, dy + r * 2], ['L', x, dy + height], ['L', dx, dy + r * 2], ['Z'], ]; }, percent: loadPercent, outline: { border: 4, distance: 4, }, wave: { length: 64, }, theme: { styleSheet: { brandColor: loadColor, }, }, statistic: { title: false, content: false }, pattern: { type: 'square', }, }; let cpuPercent = monitorQuery.data?.cpu['usedPercent'] / 100; let cpuColor = '#5B8FF9'; if (cpuPercent > 0.9) { cpuColor = '#F4664A'; } else if (cpuPercent > 0.8) { cpuColor = '#001D70'; } const cpuStatConfig = { height: 100, width: 100, shape: 'diamond', percent: cpuPercent, outline: { border: 4, distance: 4, }, wave: { length: 64, }, theme: { styleSheet: { brandColor: cpuColor, }, }, pattern: { type: 'line', }, statistic: { title: false, content: false } }; let memPercent = monitorQuery.data?.mem['usedPercent'] / 100; let memColor = '#5B8FF9'; if (memPercent > 0.75) { memColor = '#F4664A'; } const memStatConfig = { height: 100, width: 100, percent: memPercent, outline: { border: 4, distance: 4, }, wave: { length: 64, }, theme: { styleSheet: { brandColor: memColor, }, }, statistic: { title: false, content: false }, pattern: { type: 'dot', }, }; let diskPercent = monitorQuery.data?.disk['usedPercent'] / 100; let diskColor = '#5B8FF9'; if (diskPercent > 0.9) { diskColor = '#F4664A'; } else if (diskPercent > 0.8) { diskColor = '#001D70'; } const diskStatConfig = { height: 100, width: 100, shape: 'rect', percent: diskPercent, outline: { border: 4, distance: 4, }, wave: { length: 64, }, theme: { styleSheet: { brandColor: diskColor, }, }, pattern: { type: 'line', }, statistic: { title: false, content: false } }; const diskIOConfig = { height: 150, data: [monitorQuery.data['diskIO'], monitorQuery.data['diskIO']], xField: 'time', yField: ['read', 'write'], meta: { read: { alias: '读取(MB/s)', }, write: { alias: '写入(MB/s)' } }, geometryOptions: [{ geometry: 'line', color: '#5B8FF9', smooth: true, }, { geometry: 'line', color: '#5AD8A6', smooth: true, },], }; const netIOConfig = { height: 150, data: [monitorQuery.data['netIO'], monitorQuery.data['netIO']], xField: 'time', yField: ['read', 'write'], meta: { read: { alias: '接收(MB/s)', }, write: { alias: '发送(MB/s)' } }, geometryOptions: [{ geometry: 'line', color: '#5B8FF9', smooth: true, }, { geometry: 'line', color: '#5AD8A6', smooth: true, },], }; const cpuConfig = { height: 150, data: monitorQuery.data['cpuStat'], xField: 'time', yField: 'value', smooth: true, areaStyle: { fill: '#d6e3fd', }, }; const memConfig = { height: 150, data: monitorQuery.data['memStat'], xField: 'time', yField: 'value', smooth: true, areaStyle: { fill: '#d6e3fd', }, }; const cpuModelName = monitorQuery.data['cpu']['info'][0]['modelName'].length > 10 ? monitorQuery.data['cpu']['info'][0]['modelName'].substring(0, 10) + '...' : monitorQuery.data['cpu']['info'][0]['modelName']; return (<>
, }} chart={} chartPlacement="left" /> , }} chart={} chartPlacement="left" /> , }} chart={} chartPlacement="left" /> , }} chart={} chartPlacement="left" />
); } export default Monitoring;