import { TaskExecutorHeartbeatItem } from '@/interfaces/database/user-setting'; import { Divider, Flex } from 'antd'; import { Bar, BarChart, CartesianGrid, Legend, Rectangle, ResponsiveContainer, Tooltip, XAxis, } from 'recharts'; import { formatDate, formatTime } from '@/utils/date'; import dayjs from 'dayjs'; import { get } from 'lodash'; import styles from './index.less'; interface IProps { data: Record; } const CustomTooltip = ({ active, payload, ...restProps }: any) => { if (active && payload && payload.length) { const taskExecutorHeartbeatItem: TaskExecutorHeartbeatItem = get( payload, '0.payload', {}, ); return (
{formatDate(restProps.label)}
{Object.entries(taskExecutorHeartbeatItem).map(([key, val], index) => { return (
{`${key}: `} {key === 'now' || key === 'boot_at' ? formatDate(val) : val}
); })}
); } return null; }; const TaskBarChat = ({ data }: IProps) => { return Object.entries(data).map(([key, val]) => { const data = val.map((x) => ({ ...x, now: dayjs(x.now).valueOf(), failed: 5, })); const firstItem = data[0]; const lastItem = data[data.length - 1]; const domain = [firstItem.now, lastItem.now]; return (
ID: {key} Lag: {lastItem.lag} Pending: {lastItem.pending}
formatTime(x)} allowDataOverflow angle={60} padding={{ left: 20, right: 20 }} tickMargin={20} /> } /> } /> } />
); }); }; export default TaskBarChat;