import React, { useState, useEffect } from 'react'; import { useParams } from 'react-router-dom'; import CardBar, { healthDataProps } from './index'; import { Tooltip, Utils } from 'knowdesign'; import api from '@src/api'; import { HealthStateEnum } from '../HealthState'; import { InfoCircleOutlined } from '@ant-design/icons'; interface MM2State { workerCount: number; aliveConnectorCount: number; aliveTaskCount: number; healthCheckPassed: number; healthCheckTotal: number; healthState: number; totalConnectorCount: string; totalTaskCount: number; totalServerCount: number; mirrorMakerCount: number; } const getVal = (val: string | number | undefined | null) => { return val === undefined || val === null || val === '' ? '0' : val; }; const ConnectCard = ({ state }: { state?: boolean }) => { const { clusterId } = useParams<{ clusterId: string; }>(); const [loading, setLoading] = useState(false); const [cardData, setCardData] = useState([]); const [healthData, setHealthData] = useState({ state: HealthStateEnum.UNKNOWN, passed: 0, total: 0, }); const getHealthData = () => { return Utils.post(api.getMetricPointsLatest(Number(clusterId)), [ 'HealthCheckPassed_MirrorMaker', 'HealthCheckTotal_MirrorMaker', 'HealthState_MirrorMaker', ]).then((data: any) => { setHealthData({ state: data?.metrics?.['HealthState_MirrorMaker'], passed: data?.metrics?.['HealthCheckPassed_MirrorMaker'] || 0, total: data?.metrics?.['HealthCheckTotal_MirrorMaker'] || 0, }); }); }; const getCardInfo = () => { return Utils.request(api.getMirrorMakerState(clusterId)).then((res: MM2State) => { const { mirrorMakerCount, aliveConnectorCount, aliveTaskCount, totalConnectorCount, totalTaskCount, workerCount } = res || {}; const cardMap = [ { title: 'MM2s', value: getVal(mirrorMakerCount), customStyle: { // 自定义cardbar样式 marginLeft: 0, }, }, { title: 'Workers', value: getVal(workerCount), }, { title() { return (
Connectors
); }, value() { return ( {getVal(aliveConnectorCount)}/{getVal(totalConnectorCount)} ); }, }, { title() { return (
Tasks
); }, value() { return ( {getVal(aliveTaskCount)}/{getVal(totalTaskCount)} ); }, }, ]; setCardData(cardMap); }); }; useEffect(() => { setLoading(true); Promise.all([getHealthData(), getCardInfo()]).finally(() => { setLoading(false); }); }, [clusterId, state]); return ; }; export default ConnectCard;