diff --git a/km-console/packages/layout-clusters-fe/src/pages/Connect/HasConnector.tsx b/km-console/packages/layout-clusters-fe/src/pages/Connect/HasConnector.tsx
index 18136475..d2deaeea 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/Connect/HasConnector.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/Connect/HasConnector.tsx
@@ -36,7 +36,7 @@ export default (props: Props) => {
const [disabled, setDisabled] = useState(true);
useLayoutEffect(() => {
- Utils.request(api.getConnectors(clusterId))
+ Utils.request(api.getConnectClusters(clusterId))
.then((res: any[]) => {
res?.length && setDisabled(false);
})
diff --git a/km-console/packages/layout-clusters-fe/src/pages/Connect/config.tsx b/km-console/packages/layout-clusters-fe/src/pages/Connect/config.tsx
index 82bfa59a..67691d74 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/Connect/config.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/Connect/config.tsx
@@ -94,28 +94,12 @@ const renderLine = (record: any, metricName: string) => {
export const getConnectorsColumns = (arg?: any) => {
const columns = [
- {
- title: 'Connect集群',
- dataIndex: 'connectClusterName',
- key: 'connectClusterName',
- width: 200,
- fixed: 'left',
- lineClampOne: true,
- needTooltip: true,
- // render: (t: string, r: any) => {
- // return (
- //
- // {t}
- // {r?.status ? Live : Down}
- //
- // );
- // },
- },
{
title: 'Connector Name',
dataIndex: 'connectorName',
key: 'connectorName',
width: 160,
+ fixed: 'left',
lineClampOne: true,
render: (t: string, r: any) => {
return t ? (
@@ -135,6 +119,23 @@ export const getConnectorsColumns = (arg?: any) => {
);
},
},
+ {
+ title: 'Connect集群',
+ dataIndex: 'connectClusterName',
+ key: 'connectClusterName',
+ width: 200,
+ lineClampOne: true,
+ needTooltip: true,
+ // render: (t: string, r: any) => {
+ // return (
+ //
+ // {t}
+ // {r?.status ? Live : Down}
+ //
+ // );
+ // },
+ },
+
{
title: 'State',
dataIndex: 'state',
diff --git a/km-console/packages/layout-clusters-fe/src/pages/MirrorMakerDashBoard/HasConnector.tsx b/km-console/packages/layout-clusters-fe/src/pages/MirrorMakerDashBoard/HasConnector.tsx
new file mode 100644
index 00000000..a8fffc76
--- /dev/null
+++ b/km-console/packages/layout-clusters-fe/src/pages/MirrorMakerDashBoard/HasConnector.tsx
@@ -0,0 +1,51 @@
+import React, { useLayoutEffect, useState } from 'react';
+import api from '@src/api';
+import { Spin, Utils } from 'knowdesign';
+import { useParams } from 'react-router-dom';
+import NodataImg from '@src/assets/no-data.png';
+
+interface Props {
+ children: any;
+}
+
+const NoConnector = () => {
+ return (
+
+

+
暂无数据,请先创建 MM2 任务
+
+ );
+};
+
+export default (props: Props) => {
+ const { clusterId } = useParams<{
+ clusterId: string;
+ }>();
+ const [loading, setLoading] = useState(true);
+ const [disabled, setDisabled] = useState(true);
+
+ useLayoutEffect(() => {
+ Utils.request(api.getMirrorMakerMetadata(clusterId))
+ .then((res: any[]) => {
+ res?.length && setDisabled(false);
+ })
+ .finally(() => setLoading(false));
+ }, []);
+
+ return disabled ? (
+ {loading ? : }
+ ) : (
+ props.children
+ );
+};
diff --git a/km-console/packages/layout-clusters-fe/src/pages/MirrorMakerDashBoard/index.tsx b/km-console/packages/layout-clusters-fe/src/pages/MirrorMakerDashBoard/index.tsx
new file mode 100644
index 00000000..b82e7dac
--- /dev/null
+++ b/km-console/packages/layout-clusters-fe/src/pages/MirrorMakerDashBoard/index.tsx
@@ -0,0 +1,34 @@
+import React from 'react';
+import { MetricType } from '@src/api';
+import MirrorMakerCard from '@src/components/CardBar/MirrorMakerCard';
+import DraggableCharts from '@src/components/DraggableCharts';
+import DBreadcrumb from 'knowdesign/es/extend/d-breadcrumb';
+import { AppContainer } from 'knowdesign';
+import HasConnector from './HasConnector';
+
+const MirrorMakerDashboard = (): JSX.Element => {
+ const [global] = AppContainer.useGlobalValue();
+ return (
+ <>
+
+
+
+
+ <>
+
+
+ >
+
+
+ {/* */}
+ >
+ );
+};
+
+export default MirrorMakerDashboard;
diff --git a/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/AccessCluster.tsx b/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/AccessCluster.tsx
index ec5fab11..8f06b99b 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/AccessCluster.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/AccessCluster.tsx
@@ -522,6 +522,7 @@ const ConnectorForm = (props: {
const params = {
...values,
id: initFieldsValue?.id,
+ jmxProperties: values.jmxProperties ? `{ "jmxProperties": "${values.jmxProperties}" }` : undefined,
};
Utils.put(api.batchConnectClusters, [params])
.then((res) => {
@@ -542,7 +543,7 @@ const ConnectorForm = (props: {
setSelectedTabKey(undefined);
try {
const jmxPortInfo = JSON.parse(initFieldsValue.jmxProperties) || {};
- form.setFieldsValue({ ...initFieldsValue, jmxPort: jmxPortInfo.jmxPort });
+ form.setFieldsValue({ ...initFieldsValue, jmxProperties: jmxPortInfo.jmxProperties });
} catch {
form.setFieldsValue({ ...initFieldsValue });
}
@@ -551,7 +552,7 @@ const ConnectorForm = (props: {
useLayoutEffect(() => {
try {
const jmxPortInfo = JSON.parse(initFieldsValue.jmxProperties) || {};
- form.setFieldsValue({ ...initFieldsValue, jmxPort: jmxPortInfo.jmxPort });
+ form.setFieldsValue({ ...initFieldsValue, jmxProperties: jmxPortInfo.jmxProperties });
} catch {
form.setFieldsValue({ ...initFieldsValue });
}
@@ -626,7 +627,7 @@ const ConnectorForm = (props: {
))}
-
+
diff --git a/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/AccessClusterConfig.tsx b/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/AccessClusterConfig.tsx
new file mode 100644
index 00000000..4c73a8ae
--- /dev/null
+++ b/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/AccessClusterConfig.tsx
@@ -0,0 +1,23 @@
+import React, { useState } from 'react';
+import { message } from 'knowdesign';
+import { HeartTwoTone } from '@ant-design/icons';
+
+const AccessClusterConfig = () => {
+ const [count, setCount] = useState(1);
+
+ const setErgeModal = () => {
+ if (count >= 50) {
+ message.success({
+ content: 'Erge',
+ icon: ,
+ });
+ setCount(1);
+ } else {
+ setCount(count + 1);
+ }
+ };
+
+ return ;
+};
+
+export default AccessClusterConfig;
diff --git a/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/HomePage.tsx b/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/HomePage.tsx
index 25e5cdfe..4f59ae90 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/HomePage.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/HomePage.tsx
@@ -6,6 +6,7 @@ import TourGuide, { MultiPageSteps } from '@src/components/TourGuide';
import { healthSorceList, sliderValueMap, sortFieldList, sortTypes, statusFilters } from './config';
import ClusterList from './List';
import AccessClusters from './AccessCluster';
+import AccessCluster from './AccessClusterConfig';
import CustomCheckGroup from './CustomCheckGroup';
import { ClustersPermissionMap } from '../CommonConfig';
import './index.less';
@@ -359,6 +360,7 @@ const MultiClusterPage = () => {
/>
+
diff --git a/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/index.less b/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/index.less
index fc5dbfa3..f0dab4ba 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/index.less
+++ b/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/index.less
@@ -343,6 +343,14 @@
}
}
}
+ .multi-cluster-erge {
+ position: absolute;
+ width: 15px;
+ height: 15px;
+ top: 100px;
+ left: 20px;
+ background-color: transparent;
+ }
}
&-dashboard {
& > .dcloud-spin-nested-loading > .dcloud-spin-container::after {
diff --git a/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/CheckDetail.tsx b/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/CheckDetail.tsx
index 29fc708a..83f78db4 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/CheckDetail.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/CheckDetail.tsx
@@ -19,6 +19,7 @@ const CheckDetail = forwardRef((props: any, ref): JSX.Element => {
const getHealthDetail = () => {
setLoading(true);
return Utils.request(API.getResourceListHealthDetail(+clusterId)).then((res: any) => {
+ res.sort((a: any, b: any) => a.dimension - b.dimension);
setData(res);
setLoading(false);
});
diff --git a/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/config.tsx b/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/config.tsx
index 01af934a..e7d4f2ba 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/config.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/config.tsx
@@ -40,6 +40,10 @@ export const dimensionMap = {
label: 'Connector',
href: '/connect/connectors',
},
+ 7: {
+ label: 'MirrorMaker',
+ href: '/replication',
+ },
} as any;
const toLowerCase = (name = '') => {
@@ -95,6 +99,18 @@ const CONFIG_ITEM_DETAIL_DESC = {
ConnectorUnassignedTaskCount: (valueGroup: any) => {
return `未被分配的任务数量 小于 ${valueGroup?.value}`;
},
+ MirrorMakerFailedTaskCount: (valueGroup: any) => {
+ return `失败状态的任务数量 小于 ${valueGroup?.value}`;
+ },
+ MirrorMakerUnassignedTaskCount: (valueGroup: any) => {
+ return `未被分配的任务数量 小于 ${valueGroup?.value}`;
+ },
+ ReplicationLatencyMsMax: (valueGroup: any) => {
+ return `消息复制最大延迟时间 小于 ${valueGroup?.value}`;
+ },
+ 'TotalRecord-errors': (valueGroup: any) => {
+ return `消息处理错误的次数 增量小于 ${valueGroup?.value}`;
+ },
};
export const getConfigItemDetailDesc = (item: keyof typeof CONFIG_ITEM_DETAIL_DESC, valueGroup: any) => {
@@ -409,6 +425,42 @@ export const getHealthySettingColumn = (form: any, data: any, clusterId: string)
);
}
+ case 'MirrorMakerFailedTaskCount': {
+ return (
+
+ {'>'}
+ {getFormItem({ configItem, attrs: { min: 0, max: 99998 } })}
+ 则不通过
+
+ );
+ }
+ case 'MirrorMakerUnassignedTaskCount': {
+ return (
+
+ {'>'}
+ {getFormItem({ configItem, attrs: { min: 0, max: 99998 } })}
+ 则不通过
+
+ );
+ }
+ case 'ReplicationLatencyMsMax': {
+ return (
+
+ {'>'}
+ {getFormItem({ configItem, attrs: { min: 0, max: 99998 } })}
+ 则不通过
+
+ );
+ }
+ case 'TotalRecord-errors': {
+ return (
+
+ {'>'}
+ {getFormItem({ configItem, attrs: { min: 0, max: 99998 } })}
+ 则不通过
+
+ );
+ }
default: {
return <>>;
}