import React, { useState, useEffect } from 'react'; import { AppContainer, ProTable, Utils, Tag, Modal, Tooltip } from 'knowdesign'; import Api from '@src/api'; import { useParams } from 'react-router-dom'; import { getDataUnit } from '@src/constants/chartConfig'; import message from '@src/components/Message'; import { ClustersPermissionMap } from '../CommonConfig'; import { ControlStatusMap } from '../CommonRoute'; const { request } = Utils; const getColmns = (arg: any) => { const formattedBytes = (v: number) => { const [unit, size] = getDataUnit['Memory'](v); return `${(v / size).toFixed(2)}${unit}/s`; }; const tagEle = ( 当前集群 ); const baseColumns: any = [ { title: '源集群', dataIndex: 'sourceClusterName', key: 'sourceClusterName', render: (t: string, record: any) => ( <> {t || '-'} {record.sourceClusterId == arg.clusterId && tagEle} ), }, { title: '目标集群', dataIndex: 'destClusterName', key: 'destClusterName', render: (t: string, record: any) => ( <> {t || '-'} {record.destClusterId == arg.clusterId && tagEle} ), }, { title: '消息写入速率', dataIndex: 'bytesIn', key: 'bytesIn', width: 150, render: (t: number) => (t !== null && t !== undefined ? formattedBytes(t) : '-'), }, { title: '消息复制速率', dataIndex: 'replicationBytesIn', key: 'replicationBytesIn', width: 150, render: (t: number) => (t !== null && t !== undefined ? formattedBytes(t) : '-'), }, { title: '延迟(个消息)', dataIndex: 'lag', key: 'lag', width: 150, }, { title: '操作', dataIndex: 'option', key: 'option', width: 100, render: (_t: any, r: any) => { return arg.global.hasPermission(ClustersPermissionMap.TOPIC_CANCEL_REPLICATOR) ? ( arg.cancelSync(r)}>取消同步 ) : ( '-' ); }, }, ]; return baseColumns; }; const Replicator = (props: any) => { const { hashData } = props; const urlParams = useParams(); // 获取地址栏参数 const [global] = AppContainer.useGlobalValue(); const [loading, setLoading] = useState(false); const [data, setData] = useState([]); const [pagination, setPagination] = useState({ current: 1, pageSize: 10, position: 'bottomRight', showSizeChanger: true, pageSizeOptions: ['10', '20', '50', '100', '200', '500'], }); const genData = () => { if (urlParams?.clusterId === undefined || hashData?.topicName === undefined) return; setLoading(true); request(Api.getTopicMirrorList(urlParams?.clusterId, hashData?.topicName)) .then((res: any = []) => { setData(res); }) .finally(() => setLoading(false)); }; const cancelSync = (item: any) => { Modal.confirm({ title: `确认取消此Topic同步吗?`, okType: 'primary', centered: true, okButtonProps: { size: 'small', danger: true, }, cancelButtonProps: { size: 'small', }, maskClosable: false, onOk(close) { close(); const data = [ { destClusterPhyId: item.destClusterId, sourceClusterPhyId: item.sourceClusterId, topicName: item.topicName, }, ]; Utils.delete(Api.handleTopicMirror(), { data }).then(() => { message.success('成功取消Topic同步'); genData(); }); }, }); }; const onTableChange = (pagination: any, filters: any, sorter: any, extra: any) => { setPagination(pagination); }; useEffect(() => { props.positionType === 'Replicator' && genData(); }, []); return (
); }; export default Replicator;