From 5f6df3681cf9f5d214caf65f57a76ed1d35084a2 Mon Sep 17 00:00:00 2001 From: GraceWalk Date: Fri, 28 Oct 2022 17:33:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=81=A5=E5=BA=B7=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../layout-clusters-fe/src/api/index.ts | 10 + ...us-exception.png => health-down-emoji.png} | Bin .../src/assets/health-down.png | Bin 0 -> 26287 bytes ...atus-success.png => health-good-emoji.png} | Bin .../src/assets/health-good.png | Bin 0 -> 26352 bytes ...tus-normal.png => health-medium-emoji.png} | Bin .../src/assets/health-medium.png | Bin 0 -> 24615 bytes .../src/assets/health-poor-emoji.png | Bin 0 -> 24401 bytes .../src/assets/health-poor.png | Bin 0 -> 25496 bytes .../src/assets/health-unknown.png | Bin 0 -> 21363 bytes .../CardBar/BrokerDetailHealthCheck.tsx | 25 +- .../components/CardBar/BrokerHealthCheck.tsx | 24 +- .../CardBar/ConsumerGroupHealthCheck.tsx | 23 +- .../src/components/CardBar/JobsCheck.tsx | 13 +- .../CardBar/LoadRebalanceCardBar.tsx | 75 --- .../CardBar/TopicDetailHealthCheck.tsx | 35 +- .../components/CardBar/TopicHealthCheck.tsx | 24 +- .../src/components/CardBar/ZookeeperCard.tsx | 120 +++++ .../src/components/CardBar/index.less | 51 +- .../src/components/CardBar/index.tsx | 113 ++--- .../src/components/HealthState/index.less | 6 + .../src/components/HealthState/index.tsx | 76 +++ .../src/pages/MutliClusterPage/HomePage.tsx | 101 +++- .../src/pages/MutliClusterPage/List.tsx | 43 +- .../src/pages/MutliClusterPage/config.ts | 50 +- .../src/pages/MutliClusterPage/index.less | 65 +-- .../SingleClusterDetail/HealthySetting.tsx | 54 +- .../pages/SingleClusterDetail/LeftSider.tsx | 25 +- .../src/pages/SingleClusterDetail/config.tsx | 467 ++++++++++-------- .../src/pages/SingleClusterDetail/index.less | 7 +- 30 files changed, 757 insertions(+), 650 deletions(-) rename km-console/packages/layout-clusters-fe/src/assets/{health-status-exception.png => health-down-emoji.png} (100%) create mode 100644 km-console/packages/layout-clusters-fe/src/assets/health-down.png rename km-console/packages/layout-clusters-fe/src/assets/{health-status-success.png => health-good-emoji.png} (100%) create mode 100644 km-console/packages/layout-clusters-fe/src/assets/health-good.png rename km-console/packages/layout-clusters-fe/src/assets/{health-status-normal.png => health-medium-emoji.png} (100%) create mode 100644 km-console/packages/layout-clusters-fe/src/assets/health-medium.png create mode 100644 km-console/packages/layout-clusters-fe/src/assets/health-poor-emoji.png create mode 100644 km-console/packages/layout-clusters-fe/src/assets/health-poor.png create mode 100644 km-console/packages/layout-clusters-fe/src/assets/health-unknown.png create mode 100644 km-console/packages/layout-clusters-fe/src/components/CardBar/ZookeeperCard.tsx create mode 100644 km-console/packages/layout-clusters-fe/src/components/HealthState/index.less create mode 100644 km-console/packages/layout-clusters-fe/src/components/HealthState/index.tsx diff --git a/km-console/packages/layout-clusters-fe/src/api/index.ts b/km-console/packages/layout-clusters-fe/src/api/index.ts index bbf11d0a..0dcc912a 100755 --- a/km-console/packages/layout-clusters-fe/src/api/index.ts +++ b/km-console/packages/layout-clusters-fe/src/api/index.ts @@ -24,6 +24,7 @@ const api = { logout: `${securityPrefix}/account/logout`, // 全局信息 + getVersionInfo: () => getApi('/self/version'), getUserInfo: (userId: number) => `${securityPrefix}/user/${userId}`, getPermissionTree: `${securityPrefix}/permission/tree`, getKafkaVersionItems: () => getApi('/kafka-versions-items'), @@ -60,6 +61,7 @@ const api = { phyClustersDashbord: getApi(`/physical-clusters/dashboard`), supportKafkaVersion: getApi(`/support-kafka-versions`), phyClusterState: getApi(`/physical-clusters/state`), + phyClusterHealthState: getApi(`/physical-clusters/health-state`), getOperatingStateList: (clusterPhyId: number) => getApi(`/clusters/${clusterPhyId}/groups-overview`), getGroupTopicList: (clusterPhyId: number, groupName: string) => getApi(`/clusters/${clusterPhyId}/groups/${groupName}/topics-overview`), @@ -201,6 +203,14 @@ const api = { getJobsTaskData: (clusterPhyId: string, jobId: string | number) => getApi(`/clusters/${clusterPhyId}/jobs/${jobId}/modify-detail`), //编辑任务 putJobsTaskData: (clusterPhyId: string) => getApi(`/clusters/${clusterPhyId}/jobs`), + + // Zookeeper 接口 + getZookeeperState: (clusterPhyId: string) => getApi(`/clusters/${clusterPhyId}/zookeepers-state`), + getZookeeperList: (clusterPhyId: number) => getApi(`/clusters/${clusterPhyId}/zookeepers-overview`), + getZookeeperNodeChildren: (clusterPhyId: number) => getApi(`/clusters/${clusterPhyId}/znode-children`), + getZookeeperNodeData: (clusterPhyId: number) => getApi(`/clusters/${clusterPhyId}/znode-data`), + getZookeeperMetricsInfo: (clusterPhyId: number) => getApi(`/clusters/${clusterPhyId}/zookeeper-latest-metrics`), + getZookeeperMetrics: (clusterPhyId: string) => getApi(`/clusters/${clusterPhyId}/zookeeper-metrics`), }; export default api; diff --git a/km-console/packages/layout-clusters-fe/src/assets/health-status-exception.png b/km-console/packages/layout-clusters-fe/src/assets/health-down-emoji.png similarity index 100% rename from km-console/packages/layout-clusters-fe/src/assets/health-status-exception.png rename to km-console/packages/layout-clusters-fe/src/assets/health-down-emoji.png diff --git a/km-console/packages/layout-clusters-fe/src/assets/health-down.png b/km-console/packages/layout-clusters-fe/src/assets/health-down.png new file mode 100644 index 0000000000000000000000000000000000000000..4a21508e0f140d253e40ab42151def50a31e9e54 GIT binary patch literal 26287 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

};YTI2mhF6JjhjDjS?8d~WsE{@e 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

6Bi77Cb)sR6^J-pk5hwbXKCt7&!Wyg( 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%0D8O0-VOg7dJ#A;!hTe8ViMh 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 literal 0 HcmV?d00001 diff --git a/km-console/packages/layout-clusters-fe/src/assets/health-poor.png b/km-console/packages/layout-clusters-fe/src/assets/health-poor.png new file mode 100644 index 0000000000000000000000000000000000000000..a3562ab1ae58449ac9db56b3bed1a8d1f7d185bb GIT binary patch literal 25496 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 z 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 faD)SUI literal 0 HcmV?d00001 diff --git a/km-console/packages/layout-clusters-fe/src/assets/health-unknown.png b/km-console/packages/layout-clusters-fe/src/assets/health-unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..a71759aeb48c974a1d3069e11da50f78818c7cfc GIT binary patch literal 21363 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 { const { record } = props; @@ -14,22 +15,20 @@ export default (props: { record: any }) => { const [loading, setLoading] = useState(false); const [cardData, setCardData] = useState([]); const [healthData, setHealthData] = useState({ - score: 0, + state: HealthStateEnum.UNKNOWN, passed: 0, total: 0, - alive: 0, }); - const healthItems = ['HealthScore_Topics', 'HealthCheckPassed_Topics', 'HealthCheckTotal_Topics', 'live']; + useEffect(() => { setLoading(true); Utils.post(Api.getBrokerDetailMetricPoints(hashDataParse(urlLocation.hash)?.brokerId, urlParams?.clusterId), [ 'Partitions', 'Leaders', 'PartitionURP', - 'HealthScore', 'HealthCheckPassed', 'HealthCheckTotal', - 'Alive', + 'HealthState', ]).then((data: any) => { setLoading(false); const rightData = JSON.parse(JSON.stringify(data.metrics)); @@ -47,14 +46,12 @@ export default (props: { record: any }) => { value: rightData['PartitionURP'] || '-', }, ]; - const healthResData: any = {}; - healthResData.score = data?.metrics?.['HealthScore'] || 0; - healthResData.passed = data?.metrics?.['HealthCheckPassed'] || 0; - healthResData.total = data?.metrics?.['HealthCheckTotal'] || 0; - healthResData.alive = data?.metrics?.['Alive'] || 0; setCardData(cordRightMap); - setHealthData(healthResData); - // setCardData(data.metrics) + setHealthData({ + state: data?.metrics?.['HealthState'], + passed: data?.metrics?.['HealthCheckPassed'] || 0, + total: data?.metrics?.['HealthCheckTotal'] || 0, + }); }); }, []); return ( diff --git a/km-console/packages/layout-clusters-fe/src/components/CardBar/BrokerHealthCheck.tsx b/km-console/packages/layout-clusters-fe/src/components/CardBar/BrokerHealthCheck.tsx index e4bc6c2b..31531c15 100644 --- a/km-console/packages/layout-clusters-fe/src/components/CardBar/BrokerHealthCheck.tsx +++ b/km-console/packages/layout-clusters-fe/src/components/CardBar/BrokerHealthCheck.tsx @@ -6,6 +6,7 @@ import { healthDataProps } from '.'; import { Tag, Tooltip, Utils } from 'knowdesign'; import api from '@src/api'; import { QuestionCircleOutlined } from '@ant-design/icons'; +import { HealthStateEnum } from '../HealthState'; export default () => { const routeParams = useParams<{ @@ -14,26 +15,21 @@ export default () => { const [loading, setLoading] = useState(false); const [cardData, setCardData] = useState([]); const [healthData, setHealthData] = useState({ - score: 0, + state: HealthStateEnum.UNKNOWN, passed: 0, total: 0, - alive: 0, }); - const cardItems = ['Partitions', 'PartitionsSkew', 'Leaders', 'LeadersSkew', 'LogSize']; - const healthItems = ['HealthScore_Brokers', 'HealthCheckPassed_Brokers', 'HealthCheckTotal_Brokers', 'Alive']; + const healthItems = ['HealthCheckPassed_Brokers', 'HealthCheckTotal_Brokers', 'HealthState']; + useEffect(() => { setLoading(true); // 获取左侧健康度 const brokerMetric = Utils.post(api.getBrokerMetricPoints(Number(routeParams.clusterId)), healthItems).then((data: any) => { - const healthResData: any = {}; - // healthResData.score = data?.find((item:any) => item.metricName === 'HealthScore_Brokers')?.value || 0; - // healthResData.passed = data?.find((item:any) => item.metricName === 'HealthCheckPassed_Brokers')?.value || 0; - // healthResData.total = data?.find((item:any) => item.metricName === 'HealthCheckTotal_Brokers')?.value || 0; - healthResData.score = data?.metrics?.['HealthScore_Brokers'] || 0; - healthResData.passed = data?.metrics?.['HealthCheckPassed_Brokers'] || 0; - healthResData.total = data?.metrics?.['HealthCheckTotal_Brokers'] || 0; - healthResData.alive = data?.metrics?.['Alive'] || 0; - setHealthData(healthResData); + setHealthData({ + state: data?.metrics?.['HealthState'], + passed: data?.metrics?.['HealthCheckPassed_Brokers'] || 0, + total: data?.metrics?.['HealthCheckTotal_Brokers'] || 0, + }); }); // 获取右侧状态 const brokersState = Utils.request(api.getBrokersState(routeParams?.clusterId)).then((data) => { @@ -115,6 +111,6 @@ export default () => { setLoading(false); }); }, [routeParams.clusterId]); - // console.log('cardData', cardData, healthData); + return ; }; diff --git a/km-console/packages/layout-clusters-fe/src/components/CardBar/ConsumerGroupHealthCheck.tsx b/km-console/packages/layout-clusters-fe/src/components/CardBar/ConsumerGroupHealthCheck.tsx index 6df2f2d8..99719e2c 100644 --- a/km-console/packages/layout-clusters-fe/src/components/CardBar/ConsumerGroupHealthCheck.tsx +++ b/km-console/packages/layout-clusters-fe/src/components/CardBar/ConsumerGroupHealthCheck.tsx @@ -4,6 +4,7 @@ import CardBar from '@src/components/CardBar'; import { healthDataProps } from '.'; import { Utils } from 'knowdesign'; import api from '@src/api'; +import { HealthStateEnum } from '../HealthState'; export default () => { const routeParams = useParams<{ @@ -12,22 +13,17 @@ export default () => { const [loading, setLoading] = useState(false); const [cardData, setCardData] = useState([]); const [healthData, setHealthData] = useState({ - score: 0, + state: HealthStateEnum.UNKNOWN, passed: 0, total: 0, - alive: 0, }); - const [healthDetail, setHealthDetail] = useState([]); const cardItems = ['Groups', 'GroupActives', 'GroupEmptys', 'GroupRebalances', 'GroupDeads']; - const healthItems = ['HealthScore_Groups', 'HealthCheckPassed_Groups', 'HealthCheckTotal_Groups', 'Alive']; + const healthItems = ['HealthCheckPassed_Groups', 'HealthCheckTotal_Groups', 'HealthState']; + useEffect(() => { setLoading(true); Utils.post(api.getMetricPointsLatest(Number(routeParams.clusterId)), cardItems.concat(healthItems)).then((data: any) => { setLoading(false); - // setCardData(data - // .filter((item: any) => cardItems.indexOf(item.metricName) >= 0) - // .map((item: any) => ({ title: item.metricName, value: item.value })) - // ) setCardData( cardItems.map((item) => { if (item === 'GroupDeads') { @@ -36,12 +32,11 @@ export default () => { return { title: item, value: data.metrics[item] }; }) ); - const healthResData: any = {}; - healthResData.score = data.metrics['HealthScore_Groups'] || 0; - healthResData.passed = data.metrics['HealthCheckPassed_Groups'] || 0; - healthResData.total = data.metrics['HealthCheckTotal_Groups'] || 0; - healthResData.alive = data.metrics['Alive'] || 0; - setHealthData(healthResData); + setHealthData({ + state: data?.metrics?.['HealthState'], + passed: data?.metrics?.['HealthCheckPassed_Groups'] || 0, + total: data?.metrics?.['HealthCheckTotal_Groups'] || 0, + }); }); }, []); return ; diff --git a/km-console/packages/layout-clusters-fe/src/components/CardBar/JobsCheck.tsx b/km-console/packages/layout-clusters-fe/src/components/CardBar/JobsCheck.tsx index 57b4b5a3..107f8288 100644 --- a/km-console/packages/layout-clusters-fe/src/components/CardBar/JobsCheck.tsx +++ b/km-console/packages/layout-clusters-fe/src/components/CardBar/JobsCheck.tsx @@ -2,8 +2,7 @@ import React, { useState, useEffect } from 'react'; import { useParams } from 'react-router-dom'; import CardBar from '@src/components/CardBar'; -import { healthDataProps } from '.'; -import { Tag, Utils } from 'knowdesign'; +import { Utils } from 'knowdesign'; import Api from '@src/api'; export default () => { @@ -12,14 +11,7 @@ export default () => { }>(); const [loading, setLoading] = useState(false); const [cardData, setCardData] = useState([]); - const [healthData, setHealthData] = useState({ - score: 0, - passed: 0, - total: 0, - alive: 0, - }); - const cardItems = ['Partitions', 'PartitionsSkew', 'Leaders', 'LeadersSkew', 'LogSize']; - const healthItems = ['HealthScore_Brokers', 'HealthCheckPassed_Brokers', 'HealthCheckTotal_Brokers', 'alive']; + const getCordRightMap = (data: any) => { const cordRightMap = [ { @@ -49,6 +41,7 @@ export default () => { ]; return cordRightMap; }; + useEffect(() => { setLoading(true); // 获取状态 diff --git a/km-console/packages/layout-clusters-fe/src/components/CardBar/LoadRebalanceCardBar.tsx b/km-console/packages/layout-clusters-fe/src/components/CardBar/LoadRebalanceCardBar.tsx index fff750e1..eeda7c3d 100644 --- a/km-console/packages/layout-clusters-fe/src/components/CardBar/LoadRebalanceCardBar.tsx +++ b/km-console/packages/layout-clusters-fe/src/components/CardBar/LoadRebalanceCardBar.tsx @@ -32,7 +32,6 @@ const LoadRebalanceCardBar = (props: any) => { const [loading, setLoading] = useState(false); const [cardData, setCardData] = useState([]); const [normsVisible, setNormsVisible] = useState(null); - const cardItems = ['AclEnable', 'Acls', 'AclUsers', 'AclTopics', 'AclGroups']; const onClose = () => { setNormsVisible(false); }; @@ -45,11 +44,9 @@ const LoadRebalanceCardBar = (props: any) => { // 获取右侧状态 getCartInfo() .then((res: any) => { - // const { AclEnable, Acls, AclUsers, AclTopics, AclGroups } = res.metrics; const { next, sub, status } = res; const { cpu, disk, bytesIn, bytesOut } = sub; const newNextDate: any = transUnitTimePro(moment(next).valueOf() - moment().valueOf()); - // const newNextDate = parseInt(`${transUnitTimePro(moment(next).valueOf() - moment().valueOf())}`); const cardMap = [ { title() { @@ -80,20 +77,15 @@ const LoadRebalanceCardBar = (props: any) => { > {!status ? '已均衡' : '未均衡'} - {/* 已均衡 */}

周期均衡 - {/* - 周期均衡 - */} 距下次均衡还剩{newNextDate?.value || 0} {newNextDate?.unit || '分钟'} - {/* {距下次均衡还剩{1}小时} */}
); @@ -106,73 +98,6 @@ const LoadRebalanceCardBar = (props: any) => { padding: '12px 12px 8px 12px', }, }, - // { - // // title: 'CPU avg', - // title() { - // return ( - //
- // CPU AVG - // {!cpu?.interval && cpu?.interval !== 0 && ( - // - // - // - // )} - // {/* setNormsVisible(true)} type="icon-shezhi"> */} - //
- // ); - // }, - // value(visibleType: boolean) { - // return ( - //
- //
- //
- // {cpu?.avg || 0} - // % - //
- //
- // 均衡区间: ±{cpu?.interval || 0}% - //
- //
- // - //
- // - // 超过均衡区间的有: {cpu?.bigNu || 0} - //
- //
- // - // 在均衡区间内的有: {cpu?.betweenNu || 0} - //
- //
- // - // 低于均衡区间的有: {cpu?.smallNu || 0} - //
- //
- // } - // getPopupContainer={(triggerNode: any) => { - // return triggerNode; - // }} - // color="#ffffff" - // > - //
- // - //
- // - // - // ); - // }, - // className: 'custom-card-bar', - // valueClassName: 'custom-card-bar-value', - // }, { title() { return ( diff --git a/km-console/packages/layout-clusters-fe/src/components/CardBar/TopicDetailHealthCheck.tsx b/km-console/packages/layout-clusters-fe/src/components/CardBar/TopicDetailHealthCheck.tsx index 5cfcf236..80191c48 100644 --- a/km-console/packages/layout-clusters-fe/src/components/CardBar/TopicDetailHealthCheck.tsx +++ b/km-console/packages/layout-clusters-fe/src/components/CardBar/TopicDetailHealthCheck.tsx @@ -5,8 +5,10 @@ import { healthDataProps } from '.'; import { Utils } from 'knowdesign'; import { IconFont } from '@knowdesign/icons'; import api from '@src/api'; -import { healthScoreCondition } from './const'; import { hashDataParse } from '@src/constants/common'; +import { HealthStateEnum } from '../HealthState'; + +const healthItems = ['HealthCheckPassed', 'HealthCheckTotal', 'HealthState']; const renderValue = (v: string | number | ((visibleType?: boolean) => JSX.Element), visibleType?: boolean) => { return typeof v === 'function' ? v(visibleType) : v; @@ -19,14 +21,12 @@ export default (props: { record: any }) => { const [loading, setLoading] = useState(false); const [cardData, setCardData] = useState([]); const [healthData, setHealthData] = useState({ - score: 0, + state: HealthStateEnum.UNKNOWN, passed: 0, total: 0, - alive: 0, }); - const [healthDetail, setHealthDetail] = useState([]); const [clusterAlive, setClusterAlive] = useState(0); - const healthItems = ['HealthScore', 'HealthCheckPassed', 'HealthCheckTotal', 'alive']; + const getNumAndSubTitles = (cardColumnsItemData: any) => { return (
@@ -40,21 +40,21 @@ export default (props: { record: any }) => {
); }; + useEffect(() => { setLoading(true); const topicName = hashDataParse(location.hash)['topicName']; - let detailHealthPromise = Utils.post(api.getTopicMetricPointsLatest(Number(routeParams.clusterId), topicName), healthItems).then( + const detailHealthPromise = Utils.post(api.getTopicMetricPointsLatest(Number(routeParams.clusterId), topicName), healthItems).then( (data: any) => { - let healthResData: any = {}; - healthResData.score = data.metrics['HealthScore'] || 0; - healthResData.passed = data.metrics['HealthCheckPassed'] || 0; - healthResData.total = data.metrics['HealthCheckTotal'] || 0; - // healthResData.alive = data.metrics['alive'] || 0 - setHealthData(healthResData); + setHealthData({ + state: data.metrics['HealthState'], + passed: data.metrics['HealthCheckPassed'] || 0, + total: data.metrics['HealthCheckTotal'] || 0, + }); } ); - let detailStatePromise = Utils.request(api.getTopicState(Number(routeParams.clusterId), topicName)).then((topicHealthState: any) => { + const detailStatePromise = Utils.request(api.getTopicState(Number(routeParams.clusterId), topicName)).then((topicHealthState: any) => { setCardData([ { title: 'Partitions', @@ -87,13 +87,12 @@ export default (props: { record: any }) => { ]); }); // 获取集群维度的指标信息 - let clusterStatePromise = Utils.post(api.getMetricPointsLatest(Number(routeParams.clusterId)), ['Alive']).then( + const clusterStatePromise = Utils.post(api.getMetricPointsLatest(Number(routeParams.clusterId)), ['Alive']).then( (clusterHealthState: any) => { - let clusterAlive = clusterHealthState?.metrics?.Alive || 0; - setClusterAlive(clusterAlive); + setClusterAlive(clusterHealthState?.metrics?.Alive || 0); } ); - Promise.all([detailHealthPromise, detailStatePromise, clusterStatePromise]).then((res) => { + Promise.all([detailHealthPromise, detailStatePromise, clusterStatePromise]).then(() => { setLoading(false); }); }, []); @@ -101,7 +100,7 @@ export default (props: { record: any }) => { { const routeParams = useParams<{ @@ -12,14 +13,12 @@ export default () => { const [loading, setLoading] = useState(false); const [cardData, setCardData] = useState([]); const [healthData, setHealthData] = useState({ - score: 0, + state: HealthStateEnum.UNKNOWN, passed: 0, total: 0, - alive: 0, }); - const [healthDetail, setHealthDetail] = useState([]); const cardItems = ['Topics', 'Partitions', 'PartitionNoLeader', 'PartitionMinISR_S', 'PartitionMinISR_E', 'PartitionURP']; - const healthItems = ['HealthScore_Topics', 'HealthCheckPassed_Topics', 'HealthCheckTotal_Topics', 'Alive']; + const healthItems = ['HealthCheckPassed_Topics', 'HealthCheckTotal_Topics', 'HealthState']; useEffect(() => { setLoading(true); Utils.post(api.getMetricPointsLatest(Number(routeParams.clusterId)), cardItems.concat(healthItems)).then((data: any) => { @@ -42,12 +41,6 @@ export default () => { PartitionURP: 'URP', PartitionNoLeader: 'No Leader', }; - // setCardData(data - // .filter(item => cardItems.indexOf(item.name) >= 0) - // .map(item => { - // return { title: metricElmMap[item.name] || item.name, value: item.value } - // }) - // ) setCardData( cardItems.map((item) => { let title = item; @@ -66,12 +59,11 @@ export default () => { return { title, value: data.metrics[item] }; }) ); - const healthResData: any = {}; - healthResData.score = data.metrics['HealthScore_Topics'] || 0; - healthResData.passed = data.metrics['HealthCheckPassed_Topics'] || 0; - healthResData.total = data.metrics['HealthCheckTotal_Topics'] || 0; - healthResData.alive = data.metrics['Alive'] || 0; - setHealthData(healthResData); + setHealthData({ + state: data.metrics['HealthState'], + passed: data.metrics['HealthCheckPassed_Topics'] || 0, + total: data.metrics['HealthCheckTotal_Topics'] || 0, + }); }); }, []); return ; diff --git a/km-console/packages/layout-clusters-fe/src/components/CardBar/ZookeeperCard.tsx b/km-console/packages/layout-clusters-fe/src/components/CardBar/ZookeeperCard.tsx new file mode 100644 index 00000000..8f6c65ed --- /dev/null +++ b/km-console/packages/layout-clusters-fe/src/components/CardBar/ZookeeperCard.tsx @@ -0,0 +1,120 @@ +import React, { useState, useEffect } from 'react'; +import { useParams } from 'react-router-dom'; +import CardBar, { healthDataProps } from './index'; +import { Utils } from 'knowdesign'; +import api from '@src/api'; +import { HealthStateEnum } from '../HealthState'; + +interface ZookeeperState { + aliveFollowerCount: number; + aliveObserverCount: number; + aliveServerCount: number; + healthCheckPassed: number; + healthCheckTotal: number; + healthState: number; + leaderNode: string; + totalFollowerCount: number; + totalObserverCount: number; + totalServerCount: number; + watchCount: number; +} + +const getVal = (val: string | number | undefined | null) => { + return val === undefined || val === null || val === '' ? '-' : val; +}; + +const ZookeeperCard = () => { + 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.getZookeeperMetricsInfo(Number(clusterId)), ['HealthCheckPassed', 'HealthCheckTotal', 'HealthState']).then( + (data: any) => { + setHealthData({ + state: data?.metrics?.['HealthState'], + passed: data?.metrics?.['HealthCheckPassed'] || 0, + total: data?.metrics?.['HealthCheckTotal'] || 0, + }); + } + ); + }; + + const getCardInfo = () => { + return Utils.request(api.getZookeeperState(clusterId)).then((res: ZookeeperState) => { + const { + aliveFollowerCount, + aliveObserverCount, + aliveServerCount, + totalFollowerCount, + totalObserverCount, + totalServerCount, + watchCount, + leaderNode, + } = res || {}; + const cardMap = [ + { + title: 'Node Count', + value() { + return ( + + {aliveServerCount || '-'}/{totalServerCount || '-'} + + ); + }, + customStyle: { + // 自定义cardbar样式 + marginLeft: 0, + }, + }, + { + title: 'Watch Count', + value: getVal(watchCount), + }, + { + title: 'Leader', + value() { + return {leaderNode || '-'}; + }, + }, + { + title: 'Follower', + value() { + return ( + + {getVal(aliveFollowerCount)}/{getVal(totalFollowerCount)} + + ); + }, + }, + { + title: 'Observer', + value() { + return ( + + {getVal(aliveObserverCount)}/{getVal(totalObserverCount)} + + ); + }, + }, + ]; + setCardData(cardMap); + }); + }; + useEffect(() => { + setLoading(true); + Promise.all([getHealthData(), getCardInfo()]).finally(() => { + setLoading(false); + }); + }, [clusterId]); + return ; +}; + +export default ZookeeperCard; diff --git a/km-console/packages/layout-clusters-fe/src/components/CardBar/index.less b/km-console/packages/layout-clusters-fe/src/components/CardBar/index.less index ce7bc126..6474a929 100644 --- a/km-console/packages/layout-clusters-fe/src/components/CardBar/index.less +++ b/km-console/packages/layout-clusters-fe/src/components/CardBar/index.less @@ -10,48 +10,15 @@ height: 88px; width: 100%; display: flex; - // justify-content: space-between; align-items: center; .card-bar-health { width: 240px; height: 70px; display: flex; align-items: center; - // justify-content: space-between; .card-bar-health-process { - height: 100%; - margin-right: 24px; - .dcloud-progress-inner { - border-radius: 50%; - } - .dcloud-progress-status-normal { - .dcloud-progress-inner { - background: rgba(85, 110, 230, 0.03); - } - .dcloud-progress-inner:not(.dcloud-progress-circle-gradient) .dcloud-progress-circle-path { - stroke: rgb(85, 110, 230); - } - } - .dcloud-progress-status-success { - .dcloud-progress-inner { - background: rgba(0, 192, 162, 0.03); - } - .dcloud-progress-inner:not(.dcloud-progress-circle-gradient) .dcloud-progress-circle-path { - stroke: rgb(0, 192, 162); - } - } - .dcloud-progress-status-exception { - .dcloud-progress-inner { - background: rgba(255, 112, 102, 0.03); - } - .dcloud-progress-inner:not(.dcloud-progress-circle-gradient) .dcloud-progress-circle-path { - stroke: rgb(255, 112, 102); - } - } - .dcloud-progress-inner { - font-family: DIDIFD-Regular; - font-size: 40px !important; - } + padding-top: 30px; + margin-right: 20px; } .state { font-size: 13px; @@ -61,20 +28,6 @@ line-height: 20px; display: flex; align-items: center; - .health-status-image { - width: 15px; - height: 15px; - background-size: cover; - } - .health-status-image-success { - background-image: url('../../assets/health-status-success.png'); - } - .health-status-image-exception { - background-image: url('../../assets/health-status-exception.png'); - } - .health-status-image-normal { - background-image: url('../../assets/health-status-normal.png'); - } } .value-bar { display: flex; diff --git a/km-console/packages/layout-clusters-fe/src/components/CardBar/index.tsx b/km-console/packages/layout-clusters-fe/src/components/CardBar/index.tsx index 0de8e813..51fc9057 100644 --- a/km-console/packages/layout-clusters-fe/src/components/CardBar/index.tsx +++ b/km-console/packages/layout-clusters-fe/src/components/CardBar/index.tsx @@ -1,25 +1,24 @@ import React, { useEffect, useState } from 'react'; import { useParams } from 'react-router-dom'; -import { Drawer, Select, Spin, Table } from 'knowdesign'; +import { Drawer, Spin, Table, Utils } from 'knowdesign'; import { IconFont } from '@knowdesign/icons'; -import { Utils, Progress } from 'knowdesign'; import './index.less'; import api from '@src/api'; import moment from 'moment'; import TagsWithHide from '../TagsWithHide/index'; -import { getHealthProcessColor } from '@src/pages/SingleClusterDetail/config'; +import HealthState, { getHealthStateDesc, getHealthStateEmoji, HealthStateEnum } from '../HealthState'; +import { getConfigItemDetailDesc } from '@src/pages/SingleClusterDetail/config'; export interface healthDataProps { - score: number; + state: HealthStateEnum; passed: number; total: number; - alive: number; } export interface CardBarProps { cardColumns?: any[]; healthData?: healthDataProps; showCardBg?: boolean; - scene: 'topic' | 'broker' | 'group'; + scene: 'topic' | 'broker' | 'group' | 'zookeeper'; record?: any; loading?: boolean; needProgress?: boolean; @@ -27,36 +26,27 @@ export interface CardBarProps { const renderValue = (v: string | number | ((visibleType?: boolean) => JSX.Element), visibleType?: boolean) => { return typeof v === 'function' ? v(visibleType) : v; }; -const statusTxtEmojiMap = { - success: { - emoji: '👍', - txt: '优异', - }, - normal: { - emoji: '😊', - txt: '正常', - }, - exception: { - emoji: '👻', - txt: '异常', - }, -}; const sceneCodeMap = { - topic: { - code: 2, - fieldName: 'topicName', - alias: 'Topics', - }, broker: { code: 1, fieldName: 'brokerId', alias: 'Brokers', }, + topic: { + code: 2, + fieldName: 'topicName', + alias: 'Topics', + }, group: { code: 3, fieldName: 'groupName', alias: 'Consumers', }, + zookeeper: { + code: 4, + fieldName: 'zookeeperId', + alias: 'Zookeeper', + }, }; const CardColumnsItem: any = (cardItem: any) => { const { cardColumnsItemData, showCardBg } = cardItem; @@ -92,16 +82,7 @@ const CardBar = (props: CardBarProps) => { }>(); const { healthData, cardColumns, showCardBg = true, scene, record, loading, needProgress = true } = props; const [detailDrawerVisible, setDetailDrawerVisible] = useState(false); - const [progressStatus, setProgressStatus] = useState<'success' | 'exception' | 'normal'>('success'); const [healthCheckDetailList, setHealthCheckDetailList] = useState([]); - const [isAlive, setIsAlive] = useState(true); - - useEffect(() => { - if (healthData) { - setProgressStatus(!isAlive ? 'exception' : healthData.score >= 90 ? 'success' : 'normal'); - setIsAlive(healthData.alive === 1); - } - }, [healthData, isAlive]); useEffect(() => { const sceneObj = sceneCodeMap[scene]; @@ -120,23 +101,24 @@ const CardBar = (props: CardBarProps) => { const columns = [ { title: '检查项', - dataIndex: 'configDesc', - key: 'configDesc', - }, - { - title: '权重', - dataIndex: 'weightPercent', - key: 'weightPercent', - }, - { - title: '得分', - dataIndex: 'score', - key: 'score', + dataIndex: 'checkConfig', + render(config: any, record: any) { + let valueGroup = {}; + try { + valueGroup = JSON.parse(config.value); + } catch (e) { + // + } + return getConfigItemDetailDesc(record.configItem, valueGroup) || record.configDesc || '-'; + }, }, + // { + // title: '得分', + // dataIndex: 'score', + // }, { title: '检查时间', dataIndex: 'updateTime', - key: 'updateTime', render: (value: number) => { return moment(value).format('YYYY-MM-DD HH:mm:ss'); }, @@ -144,8 +126,6 @@ const CardBar = (props: CardBarProps) => { { title: '检查结果', dataIndex: 'passed', - key: 'passed', - width: 280, render(value: boolean, record: any) { const icon = value ? : ; const txt = value ? '已通过' : '未通过'; @@ -168,40 +148,13 @@ const CardBar = (props: CardBarProps) => { {!loading && healthData && needProgress && (
- { - return !isAlive ? ( -
- Down -
- ) : ( -
= 100 ? '-4px' : '', - color: getHealthProcessColor(healthData.score, healthData.alive), - }} - > - {Math.round(percent)} -
- ); - }} - strokeWidth={3} - /> +
-
-  {sceneCodeMap[scene].alias}状态{statusTxtEmojiMap[progressStatus].txt} + {getHealthStateEmoji(healthData?.state)} +  {sceneCodeMap[scene].alias} + {getHealthStateDesc(healthData?.state)}
{`${healthData?.passed}/${healthData?.total}`}
diff --git a/km-console/packages/layout-clusters-fe/src/components/HealthState/index.less b/km-console/packages/layout-clusters-fe/src/components/HealthState/index.less new file mode 100644 index 00000000..64111ce0 --- /dev/null +++ b/km-console/packages/layout-clusters-fe/src/components/HealthState/index.less @@ -0,0 +1,6 @@ +.health-state { + img { + width: 100%; + height: 100%; + } +} \ No newline at end of file diff --git a/km-console/packages/layout-clusters-fe/src/components/HealthState/index.tsx b/km-console/packages/layout-clusters-fe/src/components/HealthState/index.tsx new file mode 100644 index 00000000..3e34a850 --- /dev/null +++ b/km-console/packages/layout-clusters-fe/src/components/HealthState/index.tsx @@ -0,0 +1,76 @@ +import React from 'react'; +import GoodState from '@src/assets/health-good.png'; +import MediumState from '@src/assets/health-medium.png'; +import PoorState from '@src/assets/health-poor.png'; +import DownState from '@src/assets/health-down.png'; +import UnknownState from '@src/assets/health-unknown.png'; +import GoodStateEmoji from '@src/assets/health-good-emoji.png'; +import MediumStateEmoji from '@src/assets/health-medium-emoji.png'; +import PoorStateEmoji from '@src/assets/health-poor-emoji.png'; +import DownStateEmoji from '@src/assets/health-down-emoji.png'; +import './index.less'; + +export enum HealthStateEnum { + UNKNOWN = -1, + GOOD, + MEDIUM, + POOR, + DOWN, +} + +interface HealthStateProps { + state: HealthStateEnum; + width: string | number; + height: string | number; +} + +const HEALTH_STATE_MAP = { + [HealthStateEnum.GOOD]: GoodState, + [HealthStateEnum.MEDIUM]: MediumState, + [HealthStateEnum.POOR]: PoorState, + [HealthStateEnum.DOWN]: DownState, + [HealthStateEnum.UNKNOWN]: UnknownState, +}; + +const HEALTH_STATE_EMOJI_MAP = { + [HealthStateEnum.GOOD]: GoodStateEmoji, + [HealthStateEnum.MEDIUM]: MediumStateEmoji, + [HealthStateEnum.POOR]: PoorStateEmoji, + [HealthStateEnum.DOWN]: DownStateEmoji, + [HealthStateEnum.UNKNOWN]: DownStateEmoji, +}; + +const HEALTH_STATE_DESC_MAP = { + [HealthStateEnum.GOOD]: '状态优异', + [HealthStateEnum.MEDIUM]: '状态良好', + [HealthStateEnum.POOR]: '状态较差', + [HealthStateEnum.DOWN]: '状态异常', + [HealthStateEnum.UNKNOWN]: '状态异常', +}; + +export const getHealthStateEmoji = (state: HealthStateEnum, width = 16, height = 16) => { + return ( + + ); +}; + +export const getHealthStateDesc = (state: HealthStateEnum) => { + return HEALTH_STATE_DESC_MAP[state] || HEALTH_STATE_DESC_MAP[HealthStateEnum.UNKNOWN]; +}; + +const HealthState = (props: HealthStateProps) => { + const { state, width, height } = props; + + return ( +
+ +
+ ); +}; + +export default HealthState; 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 6cebe36a..25e5cdfe 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 @@ -1,14 +1,14 @@ import React, { useEffect, useRef, useState } from 'react'; -import { Slider, Input, Select, Checkbox, Button, Utils, Spin, AppContainer } from 'knowdesign'; +import { Slider, Input, Select, Checkbox, Button, Utils, Spin, AppContainer, Tooltip } from 'knowdesign'; import { IconFont } from '@knowdesign/icons'; import API from '@src/api'; import TourGuide, { MultiPageSteps } from '@src/components/TourGuide'; -import './index.less'; -import { healthSorceList, sortFieldList, sortTypes, statusFilters } from './config'; +import { healthSorceList, sliderValueMap, sortFieldList, sortTypes, statusFilters } from './config'; import ClusterList from './List'; import AccessClusters from './AccessCluster'; import CustomCheckGroup from './CustomCheckGroup'; import { ClustersPermissionMap } from '../CommonConfig'; +import './index.less'; const CheckboxGroup = Checkbox.Group; const { Option } = Select; @@ -19,8 +19,17 @@ interface ClustersState { total: number; } +interface ClustersHealthState { + deadCount: number; + goodCount: number; + mediumCount: number; + poorCount: number; + total: number; + unknownCount: number; +} + export interface SearchParams { - healthScoreRange?: [number, number]; + healthState?: number[]; checkedKafkaVersions?: string[]; sortInfo?: { sortField: string; @@ -74,16 +83,24 @@ const MultiClusterPage = () => { liveCount: 0, total: 0, }); + const [clustersHealthState, setClustersHealthState] = React.useState(); + const [sliderInfo, setSliderInfo] = React.useState<{ + value: [number, number]; + desc: string; + }>({ + value: [0, 5], + desc: '', + }); // TODO: 首次进入因 searchParams 状态变化导致获取两次列表数据的问题 const [searchParams, setSearchParams] = React.useState({ keywords: '', checkedKafkaVersions: [], - healthScoreRange: [0, 100], sortInfo: { - sortField: 'HealthScore', + sortField: 'HealthState', sortType: 'asc', }, clusterStatus: [0, 1], + healthState: [-1, 0, 1, 2, 3], // 是否拉取当前所有数据 isReloadAll: false, }); @@ -91,10 +108,28 @@ const MultiClusterPage = () => { const searchKeyword = useRef(''); const isReload = useRef(false); + const getPhyClusterHealthState = () => { + Utils.request(API.phyClusterHealthState).then((res: ClustersHealthState) => { + setClustersHealthState(res || undefined); + + const result: string[] = []; + for (let i = 0; i < sliderInfo.value[1] - sliderInfo.value[0]; i++) { + const val = sliderValueMap[(sliderInfo.value[1] - i) as keyof typeof sliderValueMap]; + result.push(`${val.name}: ${res?.[val.key as keyof ClustersHealthState]}`); + } + + setSliderInfo((cur) => ({ + ...cur, + desc: result.reverse().join(', '), + })); + }); + }; + // 获取集群状态 const getPhyClusterState = () => { + getPhyClusterHealthState(); Utils.request(API.phyClusterState) - .then((res: any) => { + .then((res: ClustersState) => { setStateInfo(res); }) .finally(() => { @@ -111,13 +146,14 @@ const MultiClusterPage = () => { const updateSearchParams = (params: SearchParams) => { setSearchParams((curParams) => ({ ...curParams, isReloadAll: false, ...params })); + getPhyClusterHealthState(); }; const searchParamsChangeFunc = { // 健康分改变 - onSilderChange: (value: [number, number]) => + onSilderChange: (value: number[]) => updateSearchParams({ - healthScoreRange: value, + healthState: value, }), // 排序信息改变 onSortInfoChange: (type: string, value: string) => @@ -251,16 +287,41 @@ const MultiClusterPage = () => {
-

健康分

-
- -
+

健康状态

+ +
+ { + if (value[0] !== value[1]) { + const result = []; + for (let i = 0; i < value[1] - value[0]; i++) { + const val = sliderValueMap[(value[1] - i) as keyof typeof sliderValueMap]; + result.push(`${val.name}: ${clustersHealthState?.[val.key as keyof ClustersHealthState]}`); + } + setSliderInfo({ + value, + desc: result.reverse().join(', '), + }); + } + }} + onAfterChange={(value: [number, number]) => { + const result = []; + for (let i = 0; i < value[1] - value[0]; i++) { + const val = sliderValueMap[(value[1] - i) as keyof typeof sliderValueMap]; + result.push(val.code); + } + searchParamsChangeFunc.onSilderChange(result); + }} + /> +
+
@@ -269,7 +330,7 @@ const MultiClusterPage = () => {