diff --git a/km-console/packages/layout-clusters-fe/package-lock.json b/km-console/packages/layout-clusters-fe/package-lock.json
index 29ac385f..307d3d6e 100644
--- a/km-console/packages/layout-clusters-fe/package-lock.json
+++ b/km-console/packages/layout-clusters-fe/package-lock.json
@@ -1387,6 +1387,16 @@
"@jridgewell/sourcemap-codec": "^1.4.10"
}
},
+ "@knowdesign/icons": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/@knowdesign/icons/-/icons-1.0.1.tgz",
+ "integrity": "sha512-EI3s25BJt+Slv7/t6B3K3zv7I6TKkk2Wf1y68zuxK80MMkWf8lqqUtyAZbFDoPUfXAjw6vHktMBH44gbMHMRFA==",
+ "requires": {
+ "@ant-design/colors": "^6.0.0",
+ "@ant-design/icons": "^4.7.0",
+ "react": "16.12.0"
+ }
+ },
"@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -7463,9 +7473,9 @@
"integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw=="
},
"is-lite": {
- "version": "0.8.2",
- "resolved": "https://registry.npmmirror.com/is-lite/-/is-lite-0.8.2.tgz",
- "integrity": "sha512-JZfH47qTsslwaAsqbMI3Q6HNNjUuq6Cmzzww50TdP5Esb6e1y2sK2UAaZZuzfAzpoI2AkxoPQapZdlDuP6Vlsw=="
+ "version": "0.9.2",
+ "resolved": "https://registry.npmmirror.com/is-lite/-/is-lite-0.9.2.tgz",
+ "integrity": "sha512-qZuxbaEiKLOKhX4sbHLfhFN9iA3YciuZLb37/DfXCpWnz8p7qNL2lwkpxYMXfjlS8eEEjpULPZxAUI8N6FYvYQ=="
},
"is-negative-zero": {
"version": "2.0.2",
@@ -7769,9 +7779,11 @@
"rc-dialog": "~8.6.0",
"rc-drawer": "^4.4.3",
"rc-dropdown": "~3.2.0",
+ "rc-field-form": "~1.21.0",
"rc-image": "~5.2.5",
"rc-input-number": "~7.3.6",
"rc-mentions": "~1.6.1",
+ "rc-menu": "~9.0.12",
"rc-motion": "^2.4.4",
"rc-notification": "~4.5.7",
"rc-pagination": "~3.1.9",
@@ -7783,9 +7795,11 @@
"rc-slider": "~9.7.4",
"rc-steps": "~4.1.0",
"rc-switch": "~3.2.0",
+ "rc-table": "~7.19.0",
"rc-tabs": "~11.10.0",
"rc-textarea": "~0.3.0",
"rc-tooltip": "~5.1.1",
+ "rc-tree": "~5.3.0",
"rc-tree-select": "~4.8.0",
"rc-trigger": "^5.2.10",
"rc-upload": "~4.3.0",
@@ -7823,81 +7837,10 @@
"scroll-into-view-if-needed": "^2.2.25"
},
"dependencies": {
- "async-validator": {
- "version": "4.2.5",
- "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz",
- "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
- },
- "intl-format-cache": {
- "version": "2.2.9",
- "resolved": "https://registry.npmmirror.com/intl-format-cache/-/intl-format-cache-2.2.9.tgz",
- "integrity": "sha512-Zv/u8wRpekckv0cLkwpVdABYST4hZNTDaX7reFetrYTJwxExR2VyTqQm+l0WmL0Qo8Mjb9Tf33qnfj0T7pjxdQ=="
- },
- "intl-messageformat": {
- "version": "2.2.0",
- "resolved": "https://registry.npmmirror.com/intl-messageformat/-/intl-messageformat-2.2.0.tgz",
- "integrity": "sha512-I+tSvHnXqJYjDfNmY95tpFMj30yoakC6OXAo+wu/wTMy6tA/4Fd4mvV7Uzs4cqK/Ap29sHhwjcY+78a8eifcXw==",
- "requires": {
- "intl-messageformat-parser": "1.4.0"
- }
- },
- "intl-messageformat-parser": {
- "version": "1.4.0",
- "resolved": "https://registry.npmmirror.com/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz",
- "integrity": "sha512-/XkqFHKezO6UcF4Av2/Lzfrez18R0jyw7kRFhSeB/YRakdrgSc9QfFZUwNJI9swMwMoNPygK1ArC5wdFSjPw+A=="
- },
- "rc-field-form": {
- "version": "1.27.1",
- "resolved": "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-1.27.1.tgz",
- "integrity": "sha512-RShegnwFu6TH8tl2olCxn+B4Wyh5EiQH8c/7wucbkLNyue05YiH5gomUAg1vbZjp71yFKwegClctsEG5CNBWAA==",
- "requires": {
- "@babel/runtime": "^7.18.0",
- "async-validator": "^4.1.0",
- "rc-util": "^5.8.0"
- }
- },
- "rc-menu": {
- "version": "9.6.4",
- "resolved": "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.6.4.tgz",
- "integrity": "sha512-6DiNAjxjVIPLZXHffXxxcyE15d4isRL7iQ1ru4MqYDH2Cqc5bW96wZOdMydFtGLyDdnmEQ9jVvdCE9yliGvzkw==",
- "requires": {
- "@babel/runtime": "^7.10.1",
- "classnames": "2.x",
- "rc-motion": "^2.4.3",
- "rc-overflow": "^1.2.0",
- "rc-trigger": "^5.1.2",
- "rc-util": "^5.12.0",
- "shallowequal": "^1.1.0"
- }
- },
- "rc-table": {
- "version": "7.25.3",
- "resolved": "https://registry.npmmirror.com/rc-table/-/rc-table-7.25.3.tgz",
- "integrity": "sha512-McsLJ2rg8EEpRBRYN4Pf9gT7ZNYnjvF9zrBpUBBbUX/fxk+eGi5ff1iPIhMyiHsH71/BmTUzX9nc9XqupD0nMg==",
- "requires": {
- "@babel/runtime": "^7.10.1",
- "classnames": "^2.2.5",
- "rc-resize-observer": "^1.1.0",
- "rc-util": "^5.22.5",
- "shallowequal": "^1.1.0"
- }
- },
- "rc-tree": {
- "version": "5.6.9",
- "resolved": "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.6.9.tgz",
- "integrity": "sha512-si8aGuWQ2/sh2Ibk+WdUdDeAxoviT/+kDY+NLtJ+RhqfySqPFqWM5uHTwgFRrWUvKCqEeE/PjCYuuhHrK7Y7+A==",
- "requires": {
- "@babel/runtime": "^7.10.1",
- "classnames": "2.x",
- "rc-motion": "^2.0.1",
- "rc-util": "^5.16.1",
- "rc-virtual-list": "^3.4.8"
- }
- },
"rc-util": {
- "version": "5.24.2",
- "resolved": "https://registry.npmmirror.com/rc-util/-/rc-util-5.24.2.tgz",
- "integrity": "sha512-MWd0ZEV7xSwN4HM9jz9BwpnMzwCPjYJ7K90lePsrdgAkrmm8U7b4BOTIsv/84BQsaF7N3ejNkcrZ3AfEwc9HXA==",
+ "version": "5.24.4",
+ "resolved": "https://registry.npmmirror.com/rc-util/-/rc-util-5.24.4.tgz",
+ "integrity": "sha512-2a4RQnycV9eV7lVZPEJ7QwJRPlZNc06J7CwcwZo4vIHr3PfUqtYgl1EkUV9ETAc6VRRi8XZOMFhYG63whlIC9Q==",
"requires": {
"@babel/runtime": "^7.18.3",
"react-is": "^16.12.0",
@@ -10289,6 +10232,33 @@
"rc-editor-core": "~0.8.3"
}
},
+ "rc-field-form": {
+ "version": "1.21.2",
+ "resolved": "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-1.21.2.tgz",
+ "integrity": "sha512-LR/bURt/Tf5g39mb0wtMtQuWn42d/7kEzpzlC5fNC7yaRVmLTtlPP4sBBlaViETM9uZQKLoaB0Pt9Mubhm9gow==",
+ "requires": {
+ "@babel/runtime": "^7.8.4",
+ "async-validator": "^4.0.2",
+ "rc-util": "^5.8.0"
+ },
+ "dependencies": {
+ "async-validator": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz",
+ "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
+ },
+ "rc-util": {
+ "version": "5.24.4",
+ "resolved": "https://registry.npmmirror.com/rc-util/-/rc-util-5.24.4.tgz",
+ "integrity": "sha512-2a4RQnycV9eV7lVZPEJ7QwJRPlZNc06J7CwcwZo4vIHr3PfUqtYgl1EkUV9ETAc6VRRi8XZOMFhYG63whlIC9Q==",
+ "requires": {
+ "@babel/runtime": "^7.18.3",
+ "react-is": "^16.12.0",
+ "shallowequal": "^1.1.0"
+ }
+ }
+ }
+ },
"rc-form": {
"version": "2.4.12",
"resolved": "https://registry.npmmirror.com/rc-form/-/rc-form-2.4.12.tgz",
@@ -10389,6 +10359,32 @@
}
}
},
+ "rc-menu": {
+ "version": "9.0.14",
+ "resolved": "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.0.14.tgz",
+ "integrity": "sha512-CIox5mZeLDAi32SlHrV7UeSjv7tmJJhwRyxQtZCKt351w3q59XlL4WMFOmtT9gwIfP9h0XoxdBZUMe/xzkp78A==",
+ "requires": {
+ "@babel/runtime": "^7.10.1",
+ "classnames": "2.x",
+ "rc-motion": "^2.4.3",
+ "rc-overflow": "^1.2.0",
+ "rc-trigger": "^5.1.2",
+ "rc-util": "^5.12.0",
+ "shallowequal": "^1.1.0"
+ },
+ "dependencies": {
+ "rc-util": {
+ "version": "5.24.4",
+ "resolved": "https://registry.npmmirror.com/rc-util/-/rc-util-5.24.4.tgz",
+ "integrity": "sha512-2a4RQnycV9eV7lVZPEJ7QwJRPlZNc06J7CwcwZo4vIHr3PfUqtYgl1EkUV9ETAc6VRRi8XZOMFhYG63whlIC9Q==",
+ "requires": {
+ "@babel/runtime": "^7.18.3",
+ "react-is": "^16.12.0",
+ "shallowequal": "^1.1.0"
+ }
+ }
+ }
+ },
"rc-motion": {
"version": "2.6.2",
"resolved": "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.6.2.tgz",
@@ -10641,6 +10637,30 @@
}
}
},
+ "rc-table": {
+ "version": "7.19.2",
+ "resolved": "https://registry.npmmirror.com/rc-table/-/rc-table-7.19.2.tgz",
+ "integrity": "sha512-NdpnoM50MK02H5/hGOsObfxCvGFUG5cHB9turE5BKJ81T5Ycbq193w5tLhnpILXe//Oanzr47MdMxkUnVGP+qg==",
+ "requires": {
+ "@babel/runtime": "^7.10.1",
+ "classnames": "^2.2.5",
+ "rc-resize-observer": "^1.0.0",
+ "rc-util": "^5.14.0",
+ "shallowequal": "^1.1.0"
+ },
+ "dependencies": {
+ "rc-util": {
+ "version": "5.24.4",
+ "resolved": "https://registry.npmmirror.com/rc-util/-/rc-util-5.24.4.tgz",
+ "integrity": "sha512-2a4RQnycV9eV7lVZPEJ7QwJRPlZNc06J7CwcwZo4vIHr3PfUqtYgl1EkUV9ETAc6VRRi8XZOMFhYG63whlIC9Q==",
+ "requires": {
+ "@babel/runtime": "^7.18.3",
+ "react-is": "^16.12.0",
+ "shallowequal": "^1.1.0"
+ }
+ }
+ }
+ },
"rc-tabs": {
"version": "11.10.8",
"resolved": "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-11.10.8.tgz",
@@ -10713,6 +10733,30 @@
"rc-trigger": "^5.0.0"
}
},
+ "rc-tree": {
+ "version": "5.3.8",
+ "resolved": "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.3.8.tgz",
+ "integrity": "sha512-YuobEryPymqPmHFUOvsoOrYdm24psaj0CrGEUuDUQUeG/nNcTGw6FA2YmF4NsEaNBvNSJUSzwfZnFHrKa/xv0A==",
+ "requires": {
+ "@babel/runtime": "^7.10.1",
+ "classnames": "2.x",
+ "rc-motion": "^2.0.1",
+ "rc-util": "^5.16.1",
+ "rc-virtual-list": "^3.4.1"
+ },
+ "dependencies": {
+ "rc-util": {
+ "version": "5.24.4",
+ "resolved": "https://registry.npmmirror.com/rc-util/-/rc-util-5.24.4.tgz",
+ "integrity": "sha512-2a4RQnycV9eV7lVZPEJ7QwJRPlZNc06J7CwcwZo4vIHr3PfUqtYgl1EkUV9ETAc6VRRi8XZOMFhYG63whlIC9Q==",
+ "requires": {
+ "@babel/runtime": "^7.18.3",
+ "react-is": "^16.12.0",
+ "shallowequal": "^1.1.0"
+ }
+ }
+ }
+ },
"rc-tree-select": {
"version": "4.8.0",
"resolved": "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-4.8.0.tgz",
@@ -11002,6 +11046,13 @@
"prop-types": "^15.8.1",
"react-proptype-conditional-require": "^1.0.4",
"tree-changes": "^0.9.1"
+ },
+ "dependencies": {
+ "is-lite": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmmirror.com/is-lite/-/is-lite-0.8.2.tgz",
+ "integrity": "sha512-JZfH47qTsslwaAsqbMI3Q6HNNjUuq6Cmzzww50TdP5Esb6e1y2sK2UAaZZuzfAzpoI2AkxoPQapZdlDuP6Vlsw=="
+ }
}
},
"react-freeze": {
@@ -11111,19 +11162,19 @@
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
"react-joyride": {
- "version": "2.5.2",
- "resolved": "https://registry.npmmirror.com/react-joyride/-/react-joyride-2.5.2.tgz",
- "integrity": "sha512-wsSYX3PhVrdzdd0/fv5f6ySGvb7QyAzleQv/x9IH+x+SXO6b5MUJUkefS+189bgLPkuHMwtSRcPE/oMupfmCVQ==",
+ "version": "2.5.3",
+ "resolved": "https://registry.npmmirror.com/react-joyride/-/react-joyride-2.5.3.tgz",
+ "integrity": "sha512-DKKvb/JAAsHm0x/RWO3WI6NOtTMHDso5v8MTauxTSz2dFs7Tu1rWg1BDBWmEMj6pUCvem7hblFbCiDAcvhs8tQ==",
"requires": {
"deepmerge": "^4.2.2",
"exenv": "^1.2.2",
- "is-lite": "^0.8.2",
+ "is-lite": "^0.9.2",
"prop-types": "^15.8.1",
"react-floater": "^0.7.6",
"react-is": "^16.13.1",
"scroll": "^3.0.1",
"scrollparent": "^2.0.1",
- "tree-changes": "^0.9.1"
+ "tree-changes": "^0.9.2"
}
},
"react-lifecycles-compat": {
@@ -13131,12 +13182,19 @@
"integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g=="
},
"tree-changes": {
- "version": "0.9.1",
- "resolved": "https://registry.npmmirror.com/tree-changes/-/tree-changes-0.9.1.tgz",
- "integrity": "sha512-Un6R1T6eUStAVbN4G+2djuXEk271mDY78ptxZUUo+TVcwvHZeUgk+pwXZjOZLAJ9n0+p47KUijeuNJSmpuG6Dw==",
+ "version": "0.9.3",
+ "resolved": "https://registry.npmmirror.com/tree-changes/-/tree-changes-0.9.3.tgz",
+ "integrity": "sha512-vvvS+O6kEeGRzMglTKbc19ltLWNtmNt1cpBoSYLj/iEcPVvpJasemKOlxBrmZaCtDJoF+4bwv3m01UKYi8mukQ==",
"requires": {
"@gilbarbara/deep-equal": "^0.1.1",
"is-lite": "^0.8.2"
+ },
+ "dependencies": {
+ "is-lite": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmmirror.com/is-lite/-/is-lite-0.8.2.tgz",
+ "integrity": "sha512-JZfH47qTsslwaAsqbMI3Q6HNNjUuq6Cmzzww50TdP5Esb6e1y2sK2UAaZZuzfAzpoI2AkxoPQapZdlDuP6Vlsw=="
+ }
}
},
"ts-loader": {
diff --git a/km-console/packages/layout-clusters-fe/package.json b/km-console/packages/layout-clusters-fe/package.json
index 35e455a5..732d9c7f 100644
--- a/km-console/packages/layout-clusters-fe/package.json
+++ b/km-console/packages/layout-clusters-fe/package.json
@@ -35,6 +35,7 @@
"dependencies": {
"@ant-design/compatible": "^1.0.8",
"@ant-design/icons": "^4.6.2",
+ "@knowdesign/icons": "^1.0.1",
"@types/react": "^17.0.39",
"@types/react-copy-to-clipboard": "^5.0.2",
"@types/react-dom": "^17.0.11",
@@ -57,10 +58,9 @@
"react-cron-antd": "^1.1.2",
"react-dom": "16.12.0",
"react-intl": "^3.2.1",
- "react-joyride": "^2.5.0",
+ "react-joyride": "^2.5.3",
"single-spa": "5.9.3",
"single-spa-react": "2.14.0",
- "tree-changes": "0.9.1",
"webpack-bundle-analyzer": "^4.5.0"
},
"devDependencies": {
diff --git a/km-console/packages/layout-clusters-fe/src/app.tsx b/km-console/packages/layout-clusters-fe/src/app.tsx
index 6f7d8fad..74b53817 100755
--- a/km-console/packages/layout-clusters-fe/src/app.tsx
+++ b/km-console/packages/layout-clusters-fe/src/app.tsx
@@ -3,7 +3,8 @@ import '@babel/polyfill';
import React, { useState, useEffect, useLayoutEffect } from 'react';
import { BrowserRouter, Switch, Route, useLocation, useHistory } from 'react-router-dom';
import { get as lodashGet } from 'lodash';
-import { DProLayout, AppContainer, IconFont, Menu, Utils, Page403, Page404, Page500, Modal } from 'knowdesign';
+import { DProLayout, AppContainer, Menu, Utils, Page403, Page404, Page500, Modal } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import dantdZhCN from 'knowdesign/es/locale/zh_CN';
import dantdEnUS from 'knowdesign/es/locale/en_US';
import { DotChartOutlined } from '@ant-design/icons';
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 0b022a26..fff750e1 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
@@ -1,7 +1,8 @@
import React, { useState, useEffect } from 'react';
import { useParams } from 'react-router-dom';
import CardBar from './index';
-import { IconFont, Tag, Utils, Tooltip, Popover, AppContainer } from 'knowdesign';
+import { Tag, Utils, Tooltip, Popover, AppContainer } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import api from '@src/api';
import StateChart from './StateChart';
import ClusterNorms from '@src/pages/LoadRebalance/ClusterNorms';
@@ -138,15 +139,15 @@ const LoadRebalanceCardBar = (props: any) => {
// content={
//
//
- //
+ //
// 超过均衡区间的有: {cpu?.bigNu || 0}
//
//
- //
+ //
// 在均衡区间内的有: {cpu?.betweenNu || 0}
//
//
- //
+ //
// 低于均衡区间的有: {cpu?.smallNu || 0}
//
//
@@ -202,15 +203,15 @@ const LoadRebalanceCardBar = (props: any) => {
content={
-
+
超过均衡区间的有: {disk?.bigNu || 0}
-
+
在均衡区间内的有: {disk?.betweenNu || 0}
-
+
低于均衡区间的有: {disk?.smallNu || 0}
@@ -267,15 +268,15 @@ const LoadRebalanceCardBar = (props: any) => {
content={
-
+
超过均衡区间的有: {bytesIn?.bigNu || 0}
-
+
在均衡区间内的有: {bytesIn?.betweenNu || 0}
-
+
低于均衡区间的有: {bytesIn?.smallNu || 0}
@@ -332,15 +333,15 @@ const LoadRebalanceCardBar = (props: any) => {
content={
-
+
超过均衡区间的有: {bytesOut?.bigNu || 0}
-
+
在均衡区间内的有: {bytesOut?.betweenNu || 0}
-
+
低于均衡区间的有: {bytesOut?.smallNu || 0}
diff --git a/km-console/packages/layout-clusters-fe/src/components/CardBar/StateChart.tsx b/km-console/packages/layout-clusters-fe/src/components/CardBar/StateChart.tsx
index 067497fc..a5174c97 100644
--- a/km-console/packages/layout-clusters-fe/src/components/CardBar/StateChart.tsx
+++ b/km-console/packages/layout-clusters-fe/src/components/CardBar/StateChart.tsx
@@ -59,7 +59,7 @@ const EchartsExample = (props: any) => {
normal: {
color: (params: any) => {
// 定义一个颜色数组colorList
- const colorList = ['#00C0A2', '#CED4DA', '#FF7066'];
+ const colorList = ['#FF7066', '#00C0A2', '#FF7066'];
return colorList[params.dataIndex];
},
},
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 ec221e5a..5cfcf236 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
@@ -2,7 +2,8 @@ import React, { useState, useEffect } from 'react';
import { useParams } from 'react-router-dom';
import CardBar from '@src/components/CardBar';
import { healthDataProps } from '.';
-import { IconFont, Utils } from 'knowdesign';
+import { Utils } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import api from '@src/api';
import { healthScoreCondition } from './const';
import { hashDataParse } from '@src/constants/common';
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 d6d4a633..ce7bc126 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
@@ -203,11 +203,19 @@
background: rgba(33, 37, 41, 0.04);
}
-.cutomIcon {
+.anticon.cutomIcon {
display: inline-block;
margin-right: 2px;
}
+.anticon.cutomIcon-red {
+ color: #ff7066;
+}
+
+.anticon.cutomIcon-green {
+ color: #00c0a2;
+}
+
.rebalance-tooltip {
.dcloud-tooltip-inner {
min-height: 20px;
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 18daff03..954839cd 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,6 +1,7 @@
import React, { useEffect, useState } from 'react';
import { useParams } from 'react-router-dom';
-import { Drawer, IconFont, Select, Spin, Table } from 'knowdesign';
+import { Drawer, Select, Spin, Table } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import { Utils, Progress } from 'knowdesign';
import './index.less';
import api from '@src/api';
@@ -110,8 +111,8 @@ const CardBar = (props: CardBarProps) => {
const promise = record
? Utils.request(path)
: Utils.request(path, {
- params: { dimensionCode: sceneObj.code },
- });
+ params: { dimensionCode: sceneObj.code },
+ });
promise.then((data: any[]) => {
setHealthCheckDetailList(data);
});
diff --git a/km-console/packages/layout-clusters-fe/src/components/CopyContent/index.less b/km-console/packages/layout-clusters-fe/src/components/CopyContent/index.less
new file mode 100644
index 00000000..c21edafd
--- /dev/null
+++ b/km-console/packages/layout-clusters-fe/src/components/CopyContent/index.less
@@ -0,0 +1,32 @@
+.content-with-copy {
+ display: flex;
+ align-items: center;
+ .content {
+ flex: 1;
+ display: inline-block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ word-break: break-all;
+ }
+ .copy-icon {
+ width: 20px;
+ height: 20px;
+ padding-top: 2px;
+ border-radius: 50%;
+ margin-left: 4px;
+ font-size: 16px;
+ color: #adb5bc;
+ opacity: 0;
+ &:hover {
+ background: rgba(33, 37, 41, 0.04);
+ color: #74788d;
+ }
+ }
+}
+
+.dcloud-table-cell-row-hover {
+ .copy-icon {
+ opacity: 1;
+ }
+}
\ No newline at end of file
diff --git a/km-console/packages/layout-clusters-fe/src/components/CopyContent/index.tsx b/km-console/packages/layout-clusters-fe/src/components/CopyContent/index.tsx
new file mode 100644
index 00000000..3534fb97
--- /dev/null
+++ b/km-console/packages/layout-clusters-fe/src/components/CopyContent/index.tsx
@@ -0,0 +1,35 @@
+import { CheckCircleFilled } from '@ant-design/icons';
+import { Tooltip } from 'knowdesign';
+import React, { useState } from 'react';
+import CopyToClipboard from 'react-copy-to-clipboard';
+import { IconFont } from '@knowdesign/icons';
+import './index.less';
+
+const ContentWithCopy = (props: { content: string }) => {
+ const { content } = props;
+ const [visible, setVisible] = useState(false);
+ return (
+
+
+
+ {content}
+
+ {content && (
+
+ 复制成功
+
+ }
+ visible={visible}
+ onVisibleChange={() => setVisible(false)}
+ >
+ setVisible(true)} />
+
+ )}
+
+
+ );
+};
+
+export default ContentWithCopy;
diff --git a/km-console/packages/layout-clusters-fe/src/components/DDSearchInput/index.tsx b/km-console/packages/layout-clusters-fe/src/components/DDSearchInput/index.tsx
index e0908d5a..0e9f550b 100644
--- a/km-console/packages/layout-clusters-fe/src/components/DDSearchInput/index.tsx
+++ b/km-console/packages/layout-clusters-fe/src/components/DDSearchInput/index.tsx
@@ -1,5 +1,6 @@
import React, { useState } from 'react';
-import { Input, IconFont } from 'knowdesign';
+import { Input } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import './style/index.less';
interface IObjectProps {
diff --git a/km-console/packages/layout-clusters-fe/src/components/DashboardDragChart/ChartDetail.tsx b/km-console/packages/layout-clusters-fe/src/components/DashboardDragChart/ChartDetail.tsx
index 84527a9c..1101f62b 100644
--- a/km-console/packages/layout-clusters-fe/src/components/DashboardDragChart/ChartDetail.tsx
+++ b/km-console/packages/layout-clusters-fe/src/components/DashboardDragChart/ChartDetail.tsx
@@ -2,9 +2,10 @@ import React, { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, use
import { AppContainer, Drawer, Spin, Table, SingleChart, Utils, Tooltip } from 'knowdesign';
import moment from 'moment';
import api, { MetricType } from '@src/api';
+import { MetricDefaultChartDataType, MetricChartDataType, formatChartData } from '@src/constants/chartConfig';
import { useParams } from 'react-router-dom';
import { debounce } from 'lodash';
-import { MetricDefaultChartDataType, MetricChartDataType, formatChartData, getDetailChartConfig } from './config';
+import { getDetailChartConfig } from './config';
import { UNIT_MAP } from '@src/constants/chartConfig';
import RenderEmpty from '../RenderEmpty';
@@ -50,8 +51,6 @@ interface DataZoomEventProps {
const DATA_ZOOM_DEFAULT_SCALE = 0.25;
// 单次向服务器请求数据的范围(默认 6 小时,超过后采集频率间隔会变长),单位: ms
const DEFAULT_REQUEST_TIME_RANGE = 6 * 60 * 60 * 1000;
-// 采样间隔,影响前端补点逻辑,单位: ms
-const DEFAULT_POINT_INTERVAL = 60 * 1000;
// 向服务器每轮请求的数量
const DEFAULT_REQUEST_COUNT = 6;
// 进入详情页默认展示的时间范围
@@ -376,8 +375,6 @@ const ChartDetail = (props: ChartDetailProps) => {
global.getMetricDefine || {},
metricType,
timeRange,
- DEFAULT_POINT_INTERVAL,
- false,
chartInfo.current.transformUnit
) as MetricChartDataType[];
// 增量填充图表数据
@@ -540,14 +537,7 @@ const ChartDetail = (props: ChartDetailProps) => {
if (res?.length) {
// 格式化图表需要的数据
const formattedMetricData = (
- formatChartData(
- res,
- global.getMetricDefine || {},
- metricType,
- curTimeRange,
- DEFAULT_POINT_INTERVAL,
- false
- ) as MetricChartDataType[]
+ formatChartData(res, global.getMetricDefine || {}, metricType, curTimeRange) as MetricChartDataType[]
)[0];
// 填充图表数据
let initFullTimeRange = curTimeRange;
diff --git a/km-console/packages/layout-clusters-fe/src/components/DashboardDragChart/config.tsx b/km-console/packages/layout-clusters-fe/src/components/DashboardDragChart/config.tsx
index 42e5acf2..c59db888 100644
--- a/km-console/packages/layout-clusters-fe/src/components/DashboardDragChart/config.tsx
+++ b/km-console/packages/layout-clusters-fe/src/components/DashboardDragChart/config.tsx
@@ -1,150 +1,4 @@
-import { getUnit, getDataNumberUnit, getBasicChartConfig, CHART_COLOR_LIST } from '@src/constants/chartConfig';
-import { MetricType } from '@src/api';
-import { MetricsDefine } from '@src/pages/CommonConfig';
-
-export interface MetricInfo {
- name: string;
- desc: string;
- type: number;
- set: boolean;
- support: boolean;
-}
-
-// 接口返回图表原始数据类型
-export interface MetricDefaultChartDataType {
- metricName: string;
- metricLines: {
- name: string;
- createTime: number;
- updateTime: number;
- metricPoints: {
- aggType: string;
- timeStamp: number;
- value: number;
- createTime: number;
- updateTime: number;
- }[];
- }[];
-}
-
-// 格式化后图表数据类型
-export interface MetricChartDataType {
- metricName: string;
- metricUnit: string;
- metricLines: {
- name: string;
- data: (string | number)[][];
- }[];
- dragKey?: number;
-}
-
-// 补点
-export const supplementaryPoints = (
- lines: MetricChartDataType['metricLines'],
- timeRange: readonly [number, number],
- interval: number,
- extraCallback?: (point: [number, 0]) => any[]
-) => {
- lines.forEach(({ data }) => {
- // 获取未补点前线条的点的个数
- let len = data.length;
- // 记录当前处理到的点的下标值
- let i = 0;
-
- for (; i < len; i++) {
- if (i === 0) {
- let firstPointTimestamp = data[0][0] as number;
- while (firstPointTimestamp - interval > timeRange[0]) {
- const prevPointTimestamp = firstPointTimestamp - interval;
- data.unshift(extraCallback ? extraCallback([prevPointTimestamp, 0]) : [prevPointTimestamp, 0]);
- firstPointTimestamp = prevPointTimestamp;
- len++;
- i++;
- }
- }
-
- if (i === len - 1) {
- let lastPointTimestamp = data[i][0] as number;
- while (lastPointTimestamp + interval < timeRange[1]) {
- const nextPointTimestamp = lastPointTimestamp + interval;
- data.push(extraCallback ? extraCallback([nextPointTimestamp, 0]) : [nextPointTimestamp, 0]);
- lastPointTimestamp = nextPointTimestamp;
- }
- break;
- }
-
- {
- let timestamp = data[i][0] as number;
- while (timestamp + interval < data[i + 1][0]) {
- const nextPointTimestamp = timestamp + interval;
- data.splice(i + 1, 0, extraCallback ? extraCallback([nextPointTimestamp, 0]) : [nextPointTimestamp, 0]);
- timestamp = nextPointTimestamp;
- len++;
- i++;
- }
- }
- }
- });
-};
-
-// 格式化图表数据
-export const formatChartData = (
- metricData: MetricDefaultChartDataType[],
- getMetricDefine: (type: MetricType, metric: string) => MetricsDefine[keyof MetricsDefine],
- metricType: MetricType,
- timeRange: readonly [number, number],
- supplementaryInterval: number,
- needDrag = false,
- transformUnit: [string, number] = undefined
-): MetricChartDataType[] => {
- return metricData.map(({ metricName, metricLines }) => {
- const curMetricInfo = (getMetricDefine && getMetricDefine(metricType, metricName)) || null;
- const isByteUnit = curMetricInfo?.unit?.toLowerCase().includes('byte');
- let maxValue = -1;
-
- const PointsMapMethod = ({ timeStamp, value }: { timeStamp: number; value: string | number }) => {
- let parsedValue: string | number = Number(value);
-
- if (Number.isNaN(parsedValue)) {
- parsedValue = value;
- } else {
- // 为避免出现过小的数字影响图表展示效果,图表值统一只保留到小数点后三位
- parsedValue = parseFloat(parsedValue.toFixed(3));
- if (maxValue < parsedValue) maxValue = parsedValue;
- }
-
- return [timeStamp, parsedValue];
- };
-
- const chartData = Object.assign(
- {
- metricName,
- metricUnit: curMetricInfo?.unit || '',
- metricLines: metricLines
- .sort((a, b) => Number(a.name < b.name) - 0.5)
- .map(({ name, metricPoints }) => ({
- name,
- data: metricPoints.map(PointsMapMethod),
- })),
- },
- needDrag ? { dragKey: 999 } : {}
- );
-
- chartData.metricLines.forEach(({ data }) => data.sort((a, b) => (a[0] as number) - (b[0] as number)));
- supplementaryPoints(chartData.metricLines, timeRange, supplementaryInterval);
-
- // 将所有图表点的值按单位进行转换
- if (maxValue > 0) {
- const [unitName, unitSize]: [string, number] = transformUnit || isByteUnit ? getUnit(maxValue) : getDataNumberUnit(maxValue);
- chartData.metricUnit = isByteUnit
- ? chartData.metricUnit.toLowerCase().replace('byte', unitName)
- : `${unitName}${chartData.metricUnit}`;
- chartData.metricLines.forEach(({ data }) => data.forEach((point: any) => (point[1] /= unitSize)));
- }
-
- return chartData;
- });
-};
+import { getBasicChartConfig, CHART_COLOR_LIST } from '@src/constants/chartConfig';
const seriesCallback = (lines: { name: string; data: [number, string | number][] }[]) => {
const len = CHART_COLOR_LIST.length;
diff --git a/km-console/packages/layout-clusters-fe/src/components/DashboardDragChart/index.tsx b/km-console/packages/layout-clusters-fe/src/components/DashboardDragChart/index.tsx
index dde2982e..f7edd444 100644
--- a/km-console/packages/layout-clusters-fe/src/components/DashboardDragChart/index.tsx
+++ b/km-console/packages/layout-clusters-fe/src/components/DashboardDragChart/index.tsx
@@ -1,14 +1,21 @@
import React, { useState, useEffect, useRef } from 'react';
import { arrayMoveImmutable } from 'array-move';
-import { Utils, Empty, IconFont, Spin, AppContainer, SingleChart, Tooltip } from 'knowdesign';
+import { Utils, Empty, Spin, AppContainer, SingleChart, Tooltip } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import { useParams } from 'react-router-dom';
import api, { MetricType } from '@src/api';
+import {
+ MetricInfo,
+ MetricDefaultChartDataType,
+ MetricChartDataType,
+ formatChartData,
+ resolveMetricsRank,
+} from '@src/constants/chartConfig';
import SingleChartHeader, { KsHeaderOptions } from '../SingleChartHeader';
import DragGroup from '../DragGroup';
import ChartDetail from './ChartDetail';
-import { MetricInfo, MetricDefaultChartDataType, MetricChartDataType, formatChartData, getChartConfig } from './config';
+import { getChartConfig } from './config';
import './index.less';
-import { MAX_TIME_RANGE_WITH_SMALL_POINT_INTERVAL } from '@src/constants/common';
interface IcustomScope {
label: string;
@@ -39,8 +46,8 @@ const DashboardDragChart = (props: PropsType): JSX.Element => {
const [curHeaderOptions, setCurHeaderOptions] = useState();
const [metricChartData, setMetricChartData] = useState([]); // 指标图表数据列表
const [gridNum, setGridNum] = useState(12); // 图表列布局
+ const metricRankList = useRef([]);
const chartDetailRef = useRef(null);
- const chartDragOrder = useRef([]);
const curFetchingTimestamp = useRef(0);
// 获取节点范围列表
@@ -60,23 +67,33 @@ const DashboardDragChart = (props: PropsType): JSX.Element => {
setScopeList(list);
};
+ // 更新 rank
+ const updateRank = (metricList: MetricInfo[]) => {
+ const { list, listInfo, shouldUpdate } = resolveMetricsRank(metricList);
+ metricRankList.current = list;
+ if (shouldUpdate) {
+ setMetricList(listInfo);
+ }
+ };
+
// 获取指标列表
const getMetricList = () => {
Utils.request(api.getDashboardMetricList(clusterId, dashboardType)).then((res: MetricInfo[] | null) => {
if (!res) return;
- const showMetrics = res.filter((metric) => metric.support);
- const selectedMetrics = showMetrics.filter((metric) => metric.set).map((metric) => metric.name);
- setMetricsList(showMetrics);
+ const supportMetrics = res.filter((metric) => metric.support);
+ const selectedMetrics = supportMetrics.filter((metric) => metric.set).map((metric) => metric.name);
+ updateRank([...supportMetrics]);
+ setMetricsList(supportMetrics);
setSelectedMetricNames(selectedMetrics);
});
};
// 更新指标
- const setMetricList = (metricsSet: { [name: string]: boolean }) => {
+ const setMetricList = (metricDetailDTOList: { metric: string; rank: number; set: boolean }[]) => {
return Utils.request(api.getDashboardMetricList(clusterId, dashboardType), {
method: 'POST',
data: {
- metricsSet,
+ metricDetailDTOList,
},
});
};
@@ -84,10 +101,11 @@ const DashboardDragChart = (props: PropsType): JSX.Element => {
// 根据筛选项获取图表信息
const getMetricChartData = () => {
!curHeaderOptions.isAutoReload && setLoading(true);
- const [startTime, endTime] = curHeaderOptions.rangeTime;
+ const [startTime, endTime] = curHeaderOptions.rangeTime;
const curTimestamp = Date.now();
curFetchingTimestamp.current = curTimestamp;
+
Utils.post(api.getDashboardMetricChartData(clusterId, dashboardType), {
startTime,
endTime,
@@ -108,36 +126,20 @@ const DashboardDragChart = (props: PropsType): JSX.Element => {
setMetricChartData([]);
} else {
// 格式化图表需要的数据
- const supplementaryInterval = (endTime - startTime > MAX_TIME_RANGE_WITH_SMALL_POINT_INTERVAL ? 10 : 1) * 60 * 1000;
const formattedMetricData = formatChartData(
res,
global.getMetricDefine || {},
dashboardType,
- curHeaderOptions.rangeTime,
- supplementaryInterval,
- true
+ curHeaderOptions.rangeTime
) as MetricChartDataType[];
- // 处理图表的拖拽顺序
- if (chartDragOrder.current && chartDragOrder.current.length) {
- // 根据当前拖拽顺序排列图表数据
- formattedMetricData.forEach((metric) => {
- const i = chartDragOrder.current.indexOf(metric.metricName);
- metric.dragKey = i === -1 ? 999 : i;
- });
- formattedMetricData.sort((a, b) => a.dragKey - b.dragKey);
- }
- // 更新当前拖拽顺序(处理新增或减少图表的情况)
- chartDragOrder.current = formattedMetricData.map((data) => data.metricName);
+ // 指标排序
+ formattedMetricData.sort((a, b) => metricRankList.current.indexOf(a.metricName) - metricRankList.current.indexOf(b.metricName));
setMetricChartData(formattedMetricData);
}
setLoading(false);
},
- () => {
- if (curFetchingTimestamp.current === curTimestamp) {
- setLoading(false);
- }
- }
+ () => curFetchingTimestamp.current === curTimestamp && setLoading(false)
);
};
@@ -163,11 +165,19 @@ const DashboardDragChart = (props: PropsType): JSX.Element => {
// 指标选中项更新回调
const indicatorChangeCallback = (newMetricNames: (string | number)[]) => {
- const updateMetrics: { [name: string]: boolean } = {};
+ const updateMetrics: { metric: string; set: boolean; rank: number }[] = [];
// 需要选中的指标
- newMetricNames.forEach((name) => !selectedMetricNames.includes(name) && (updateMetrics[name] = true));
+ newMetricNames.forEach(
+ (name) =>
+ !selectedMetricNames.includes(name) &&
+ updateMetrics.push({ metric: name as string, set: true, rank: metricsList.find(({ name: metric }) => metric === name)?.rank })
+ );
// 取消选中的指标
- selectedMetricNames.forEach((name) => !newMetricNames.includes(name) && (updateMetrics[name] = false));
+ selectedMetricNames.forEach(
+ (name) =>
+ !newMetricNames.includes(name) &&
+ updateMetrics.push({ metric: name as string, set: false, rank: metricsList.find(({ name: metric }) => metric === name)?.rank })
+ );
const requestPromise = Object.keys(updateMetrics).length ? setMetricList(updateMetrics) : Promise.resolve();
requestPromise.then(
@@ -186,7 +196,11 @@ const DashboardDragChart = (props: PropsType): JSX.Element => {
// 拖拽结束回调,更新图表顺序,并触发图表的 onDrag 事件( 设置为 false ),允许同步展示图表的 tooltip
const dragEnd = ({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }) => {
busInstance.emit('onDrag', false);
- chartDragOrder.current = arrayMoveImmutable(chartDragOrder.current, oldIndex, newIndex);
+ const originFrom = metricRankList.current.indexOf(metricChartData[oldIndex].metricName);
+ const originTarget = metricRankList.current.indexOf(metricChartData[newIndex].metricName);
+ const newList = arrayMoveImmutable(metricRankList.current, originFrom, originTarget);
+ metricRankList.current = newList;
+ setMetricList(newList.map((metric, rank) => ({ metric, rank, set: metricsList.find(({ name }) => metric === name)?.set || false })));
setMetricChartData(arrayMoveImmutable(metricChartData, oldIndex, newIndex));
};
diff --git a/km-console/packages/layout-clusters-fe/src/components/DragGroup/index.tsx b/km-console/packages/layout-clusters-fe/src/components/DragGroup/index.tsx
index c7dc8bc4..731e98b2 100644
--- a/km-console/packages/layout-clusters-fe/src/components/DragGroup/index.tsx
+++ b/km-console/packages/layout-clusters-fe/src/components/DragGroup/index.tsx
@@ -1,4 +1,5 @@
-import { Col, IconFont, Row } from 'knowdesign';
+import { Col, Row } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import React from 'react';
import { SortableContainer, SortableContainerProps, SortableHandle, SortableElement, SortableElementProps } from 'react-sortable-hoc';
import './index.less';
diff --git a/km-console/packages/layout-clusters-fe/src/components/SingleChartHeader/IndicatorDrawer.tsx b/km-console/packages/layout-clusters-fe/src/components/SingleChartHeader/IndicatorDrawer.tsx
index 3a7e0dce..9c7a4833 100644
--- a/km-console/packages/layout-clusters-fe/src/components/SingleChartHeader/IndicatorDrawer.tsx
+++ b/km-console/packages/layout-clusters-fe/src/components/SingleChartHeader/IndicatorDrawer.tsx
@@ -1,5 +1,6 @@
import React, { useState, useEffect } from 'react';
-import { Drawer, Button, Space, Divider, AppContainer, ProTable, IconFont } from 'knowdesign';
+import { Drawer, Button, Space, Divider, AppContainer, ProTable } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import { IindicatorSelectModule } from './index';
import './style/indicator-drawer.less';
import { useLocation } from 'react-router-dom';
diff --git a/km-console/packages/layout-clusters-fe/src/components/SingleChartHeader/NodeScope.tsx b/km-console/packages/layout-clusters-fe/src/components/SingleChartHeader/NodeScope.tsx
index 2f07d243..e033a938 100644
--- a/km-console/packages/layout-clusters-fe/src/components/SingleChartHeader/NodeScope.tsx
+++ b/km-console/packages/layout-clusters-fe/src/components/SingleChartHeader/NodeScope.tsx
@@ -1,5 +1,6 @@
import React, { useState, useEffect } from 'react';
-import { Radio, Input, Popover, Space, Checkbox, Row, Col, Button, IconFont } from 'knowdesign';
+import { Radio, Input, Popover, Space, Checkbox, Row, Col, Button } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import { InodeScopeModule } from './index';
import './style/node-scope.less';
diff --git a/km-console/packages/layout-clusters-fe/src/components/SingleChartHeader/index.tsx b/km-console/packages/layout-clusters-fe/src/components/SingleChartHeader/index.tsx
index 0de5ae96..5284093b 100644
--- a/km-console/packages/layout-clusters-fe/src/components/SingleChartHeader/index.tsx
+++ b/km-console/packages/layout-clusters-fe/src/components/SingleChartHeader/index.tsx
@@ -1,5 +1,6 @@
import React, { useEffect, useState } from 'react';
-import { Tooltip, Select, IconFont, Utils, Divider, Button } from 'knowdesign';
+import { Tooltip, Select, Utils, Divider, Button } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import moment from 'moment';
import { DRangeTime } from 'knowdesign';
import IndicatorDrawer from './IndicatorDrawer';
diff --git a/km-console/packages/layout-clusters-fe/src/components/TopicJob/PreviewTaskPlan.tsx b/km-console/packages/layout-clusters-fe/src/components/TopicJob/PreviewTaskPlan.tsx
index 69d8221e..d9410286 100644
--- a/km-console/packages/layout-clusters-fe/src/components/TopicJob/PreviewTaskPlan.tsx
+++ b/km-console/packages/layout-clusters-fe/src/components/TopicJob/PreviewTaskPlan.tsx
@@ -1,7 +1,8 @@
import React, { useState, useEffect } from 'react';
import { useParams } from 'react-router-dom';
import { ArrowLeftOutlined } from '@ant-design/icons';
-import { Button, Divider, Drawer, IconFont, Select, Space, Table, Utils } from 'knowdesign';
+import { Button, Divider, Drawer, Select, Space, Table, Utils } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import Api, { MetricType } from '@src/api/index';
const { Option } = Select;
diff --git a/km-console/packages/layout-clusters-fe/src/components/TopicJob/ReplicaMove.tsx b/km-console/packages/layout-clusters-fe/src/components/TopicJob/ReplicaMove.tsx
index c8c939dd..a6089e80 100644
--- a/km-console/packages/layout-clusters-fe/src/components/TopicJob/ReplicaMove.tsx
+++ b/km-console/packages/layout-clusters-fe/src/components/TopicJob/ReplicaMove.tsx
@@ -18,9 +18,9 @@ import {
Space,
Divider,
Transfer,
- IconFont,
Tooltip,
} from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import './index.less';
import Api, { MetricType } from '@src/api/index';
import moment from 'moment';
diff --git a/km-console/packages/layout-clusters-fe/src/constants/chartConfig.ts b/km-console/packages/layout-clusters-fe/src/constants/chartConfig.ts
index a4874d98..955bcfa0 100644
--- a/km-console/packages/layout-clusters-fe/src/constants/chartConfig.ts
+++ b/km-console/packages/layout-clusters-fe/src/constants/chartConfig.ts
@@ -1,5 +1,44 @@
import moment from 'moment';
+import { MetricType } from '@src/api';
+import { MetricsDefine } from '@src/pages/CommonConfig';
+export interface MetricInfo {
+ name: string;
+ desc: string;
+ type: number;
+ set: boolean;
+ rank: number | null;
+ support: boolean;
+}
+
+// 接口返回图表原始数据类型
+export interface MetricDefaultChartDataType {
+ metricName: string;
+ metricLines: {
+ name: string;
+ createTime: number;
+ updateTime: number;
+ metricPoints: {
+ aggType: string;
+ timeStamp: number;
+ value: number;
+ createTime: number;
+ updateTime: number;
+ }[];
+ }[];
+}
+
+// 格式化后图表数据类型
+export interface MetricChartDataType {
+ metricName: string;
+ metricUnit: string;
+ metricLines: {
+ name: string;
+ data: (string | number)[][];
+ }[];
+}
+
+// 图表颜色库
export const CHART_COLOR_LIST = [
'#556ee6',
'#94BEF2',
@@ -16,27 +55,176 @@ export const CHART_COLOR_LIST = [
'#C9E795',
];
+// 图表存储单位换算
export const UNIT_MAP = {
TB: Math.pow(1024, 4),
GB: Math.pow(1024, 3),
MB: Math.pow(1024, 2),
KB: 1024,
};
+export const getUnit = (value: number) => Object.entries(UNIT_MAP).find(([, size]) => value / size >= 1) || ['Byte', 1];
+// 图表数字单位换算
export const DATA_NUMBER_MAP = {
十亿: Math.pow(1000, 3),
百万: Math.pow(1000, 2),
千: 1000,
};
-
-export const getUnit = (value: number) => Object.entries(UNIT_MAP).find(([, size]) => value / size >= 1) || ['Byte', 1];
-
export const getDataNumberUnit = (value: number) => Object.entries(DATA_NUMBER_MAP).find(([, size]) => value / size >= 1) || ['', 1];
+// 图表补点间隔计算
+export const SUPPLEMENTARY_INTERVAL_MAP = {
+ '0': 60 * 1000,
+ // 6 小时:10 分钟间隔
+ '21600000': 10 * 60 * 1000,
+ // 24 小时:1 小时间隔
+ '86400000': 60 * 60 * 1000,
+};
+export const getSupplementaryInterval = (range: number) => {
+ return Object.entries(SUPPLEMENTARY_INTERVAL_MAP)
+ .reverse()
+ .find(([curRange]) => range > Number(curRange))[1];
+};
+
+// 处理图表排序
+export const resolveMetricsRank = (metricList: MetricInfo[]) => {
+ const isRanked = metricList.some(({ rank }) => rank !== null);
+ let shouldUpdate = false;
+ let list: string[] = [];
+ if (isRanked) {
+ const rankedMetrics = metricList.filter(({ rank }) => rank !== null).sort((a, b) => a.rank - b.rank);
+ const unRankedMetrics = metricList.filter(({ rank }) => rank === null);
+ // 如果有新增/删除指标的情况,需要触发更新
+ if (unRankedMetrics.length || rankedMetrics.some(({ rank }, i) => rank !== i)) {
+ shouldUpdate = true;
+ }
+ list = [...rankedMetrics.map(({ name }) => name), ...unRankedMetrics.map(({ name }) => name).sort()];
+ } else {
+ shouldUpdate = true;
+ // 按字母先后顺序初始化指标排序
+ list = metricList.map(({ name }) => name).sort();
+ }
+
+ return {
+ list,
+ listInfo: list.map((metric, rank) => ({ metric, rank, set: metricList.find(({ name }) => metric === name)?.set || false })),
+ shouldUpdate,
+ };
+};
+
+// 补点
+export const supplementaryPoints = (
+ lines: MetricChartDataType['metricLines'],
+ timeRange: readonly [number, number],
+ extraCallback?: (point: [number, 0]) => any[]
+): void => {
+ const interval = getSupplementaryInterval(timeRange[1] - timeRange[0]);
+
+ lines.forEach(({ data }) => {
+ // 获取未补点前线条的点的个数
+ let len = data.length;
+ // 记录当前处理到的点的下标值
+ let i = 0;
+
+ for (; i < len; i++) {
+ if (i === 0) {
+ let firstPointTimestamp = data[0][0] as number;
+ while (firstPointTimestamp - interval > timeRange[0]) {
+ const prevPointTimestamp = firstPointTimestamp - interval;
+ data.unshift(extraCallback ? extraCallback([prevPointTimestamp, 0]) : [prevPointTimestamp, 0]);
+ firstPointTimestamp = prevPointTimestamp;
+ len++;
+ i++;
+ }
+ }
+
+ if (i === len - 1) {
+ let lastPointTimestamp = data[i][0] as number;
+ while (lastPointTimestamp + interval < timeRange[1]) {
+ const nextPointTimestamp = lastPointTimestamp + interval;
+ data.push(extraCallback ? extraCallback([nextPointTimestamp, 0]) : [nextPointTimestamp, 0]);
+ lastPointTimestamp = nextPointTimestamp;
+ }
+ break;
+ }
+
+ {
+ let timestamp = data[i][0] as number;
+ while (timestamp + interval < data[i + 1][0]) {
+ const nextPointTimestamp = timestamp + interval;
+ data.splice(i + 1, 0, extraCallback ? extraCallback([nextPointTimestamp, 0]) : [nextPointTimestamp, 0]);
+ timestamp = nextPointTimestamp;
+ len++;
+ i++;
+ }
+ }
+ }
+ });
+};
+
+// 格式化图表数据
+export const formatChartData = (
+ // 图表源数据
+ metricData: MetricDefaultChartDataType[],
+ // 获取指标单位
+ getMetricDefine: (type: MetricType, metric: string) => MetricsDefine[keyof MetricsDefine],
+ // 指标类型
+ metricType: MetricType,
+ // 图表时间范围,用于补点
+ timeRange: readonly [number, number],
+ transformUnit: [string, number] = undefined
+): MetricChartDataType[] => {
+ return metricData.map(({ metricName, metricLines }) => {
+ const curMetricInfo = (getMetricDefine && getMetricDefine(metricType, metricName)) || null;
+ const isByteUnit = curMetricInfo?.unit?.toLowerCase().includes('byte');
+ let maxValue = -1;
+
+ const PointsMapMethod = ({ timeStamp, value }: { timeStamp: number; value: string | number }) => {
+ let parsedValue: string | number = Number(value);
+
+ if (Number.isNaN(parsedValue)) {
+ parsedValue = value;
+ } else {
+ // 为避免出现过小的数字影响图表展示效果,图表值统一保留小数点后三位
+ parsedValue = parseFloat(parsedValue.toFixed(3));
+ if (maxValue < parsedValue) maxValue = parsedValue;
+ }
+
+ return [timeStamp, parsedValue];
+ };
+
+ // 初始化返回结构
+ const chartData = {
+ metricName,
+ metricUnit: curMetricInfo?.unit || '',
+ metricLines: metricLines
+ .sort((a, b) => Number(a.name < b.name) - 0.5)
+ .map(({ name, metricPoints }) => ({
+ name,
+ data: metricPoints.map(PointsMapMethod),
+ })),
+ };
+ // 按时间先后进行对图表点排序
+ chartData.metricLines.forEach(({ data }) => data.sort((a, b) => (a[0] as number) - (b[0] as number)));
+
+ // 图表值单位转换
+ if (maxValue > 0) {
+ const [unitName, unitSize]: [string, number] = transformUnit || isByteUnit ? getUnit(maxValue) : getDataNumberUnit(maxValue);
+ chartData.metricUnit = isByteUnit
+ ? chartData.metricUnit.toLowerCase().replace('byte', unitName)
+ : `${unitName}${chartData.metricUnit}`;
+ chartData.metricLines.forEach(({ data }) => data.forEach((point: any) => (point[1] /= unitSize)));
+ }
+
+ // 补点
+ supplementaryPoints(chartData.metricLines, timeRange);
+
+ return chartData;
+ });
+};
+
// 图表 tooltip 基础展示样式
const tooltipFormatter = (date: any, arr: any, tooltip: any) => {
- // 从大到小排序
- // arr = arr.sort((a: any, b: any) => b.value - a.value);
const str = arr
.map(
(item: any) => `
@@ -121,9 +309,6 @@ export const getBasicChartConfig = (props: any = {}) => {
itemWidth: 8,
itemGap: 8,
textStyle: {
- // width: 85,
- // overflow: 'truncate',
- // ellipsis: '...',
fontSize: 11,
color: '#74788D',
},
diff --git a/km-console/packages/layout-clusters-fe/src/constants/common.ts b/km-console/packages/layout-clusters-fe/src/constants/common.ts
index 367d490c..3b5a1f36 100755
--- a/km-console/packages/layout-clusters-fe/src/constants/common.ts
+++ b/km-console/packages/layout-clusters-fe/src/constants/common.ts
@@ -37,9 +37,6 @@ export const SMALL_DRAWER_WIDTH = 480;
export const MIDDLE_DRAWER_WIDTH = 728;
export const LARGE_DRAWER_WIDTH = 1080;
-// 小间隔(1 分钟)图表点的最大请求时间范围,单位: ms
-export const MAX_TIME_RANGE_WITH_SMALL_POINT_INTERVAL = 6 * 60 * 60 * 1000;
-
export const primaryColor = '#556EE6';
export const numberToFixed = (value: number, num = 2) => {
diff --git a/km-console/packages/layout-clusters-fe/src/pages/BrokerControllerChangeLog/index.tsx b/km-console/packages/layout-clusters-fe/src/pages/BrokerControllerChangeLog/index.tsx
index 1403fb5b..7cd85c6a 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/BrokerControllerChangeLog/index.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/BrokerControllerChangeLog/index.tsx
@@ -1,6 +1,7 @@
import React, { useState, useEffect } from 'react';
import { useParams, useHistory, useLocation } from 'react-router-dom';
-import { ProTable, Utils, AppContainer, SearchInput, IconFont } from 'knowdesign';
+import { ProTable, Utils, AppContainer, SearchInput } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import API from '../../api';
import { getControllerChangeLogListColumns, defaultPagination } from './config';
import BrokerDetail from '../BrokerDetail';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/BrokerDetail/ConfigurationEdit.tsx b/km-console/packages/layout-clusters-fe/src/pages/BrokerDetail/ConfigurationEdit.tsx
index ba7cb3fc..a362acc0 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/BrokerDetail/ConfigurationEdit.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/BrokerDetail/ConfigurationEdit.tsx
@@ -1,5 +1,6 @@
import React, { useEffect } from 'react';
-import { Drawer, Form, Input, Space, Button, Checkbox, Utils, Row, Col, IconFont, Divider, message } from 'knowdesign';
+import { Drawer, Form, Input, Space, Button, Checkbox, Utils, Row, Col, Divider, message } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import { useParams } from 'react-router-dom';
import Api from '@src/api';
export const ConfigurationEdit = (props: any) => {
diff --git a/km-console/packages/layout-clusters-fe/src/pages/BrokerDetail/config.tsx b/km-console/packages/layout-clusters-fe/src/pages/BrokerDetail/config.tsx
index aaa9d977..82deac32 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/BrokerDetail/config.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/BrokerDetail/config.tsx
@@ -1,5 +1,6 @@
import React from 'react';
-import { Utils, IconFont, Tooltip } from 'knowdesign';
+import { Utils, Tooltip } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
export const getConfigurationColmns = (arg: any) => {
const columns: any = [
{
diff --git a/km-console/packages/layout-clusters-fe/src/pages/BrokerList/index.tsx b/km-console/packages/layout-clusters-fe/src/pages/BrokerList/index.tsx
index 3c82b7d5..da1bc854 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/BrokerList/index.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/BrokerList/index.tsx
@@ -1,6 +1,7 @@
import React, { useState, useEffect, memo } from 'react';
import { useParams, useHistory, useLocation } from 'react-router-dom';
-import { ProTable, Drawer, Utils, AppContainer, SearchInput, IconFont } from 'knowdesign';
+import { ProTable, Drawer, Utils, AppContainer, SearchInput } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import API from '../../api';
import { getBrokerListColumns, defaultPagination } from './config';
import { tableHeaderPrefix } from '@src/constants/common';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/Consumers/ConsumerGroupDetail.tsx b/km-console/packages/layout-clusters-fe/src/pages/Consumers/ConsumerGroupDetail.tsx
index 0cdd7b63..1e057d29 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/Consumers/ConsumerGroupDetail.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/Consumers/ConsumerGroupDetail.tsx
@@ -1,15 +1,15 @@
import React, { useState, useEffect } from 'react';
import { useParams, useHistory } from 'react-router-dom';
-import CopyToClipboard from 'react-copy-to-clipboard';
-import { AppContainer, Divider, Drawer, IconFont, ProTable, Select, SingleChart, Space, Tooltip, Utils } from 'knowdesign';
+import { AppContainer, Divider, Drawer, ProTable, Select, SingleChart, Space, Tooltip, Utils } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import { DRangeTime } from 'knowdesign';
import { CHART_COLOR_LIST, getBasicChartConfig } from '@src/constants/chartConfig';
import Api from '@src/api/index';
import { hashDataParse } from '@src/constants/common';
import { ClustersPermissionMap } from '../CommonConfig';
import ResetOffsetDrawer from './ResetOffsetDrawer';
-import { CheckCircleFilled } from '@ant-design/icons';
import SwitchTab from '@src/components/SwitchTab';
+import ContentWithCopy from '@src/components/CopyContent';
const { Option } = Select;
@@ -44,33 +44,6 @@ const metricWithType = [
{ metricName: 'Lag', metricType: 102 },
];
-const ContentWithCopy = (props: { content: string }) => {
- const { content } = props;
- const [visible, setVisible] = useState(false);
- return (
-
-
-
- {content}
-
- {content && (
-
- 复制成功
-
- }
- visible={visible}
- onVisibleChange={() => setVisible(false)}
- >
- setVisible(true)} />
-
- )}
-
-
- );
-};
-
export default (props: any) => {
const { scene } = props;
const params = useParams<{
@@ -104,6 +77,9 @@ export default (props: any) => {
title: 'Topic Partition',
dataIndex: 'partitionId',
key: 'partitionId',
+ lineClampOne: true,
+ needTooltip: true,
+ width: 180,
render: (v: string, record: any) => {
return `${record.topicName}-${v}`;
},
diff --git a/km-console/packages/layout-clusters-fe/src/pages/Consumers/index.tsx b/km-console/packages/layout-clusters-fe/src/pages/Consumers/index.tsx
index 56839434..4e06d92a 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/Consumers/index.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/Consumers/index.tsx
@@ -1,6 +1,7 @@
/* eslint-disable react/display-name */
import React, { useState, useEffect } from 'react';
-import { AppContainer, Divider, Form, IconFont, Input, ProTable, Select, Utils } from 'knowdesign';
+import { AppContainer, Divider, Form, Input, ProTable, Select, Utils } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import './index.less';
import Api from '@src/api/index';
import { getOperatingStateListParams } from './interface';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/Jobs/TeskDetails.tsx b/km-console/packages/layout-clusters-fe/src/pages/Jobs/TeskDetails.tsx
index d3d710cb..fddbc808 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/Jobs/TeskDetails.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/Jobs/TeskDetails.tsx
@@ -1,6 +1,7 @@
/* eslint-disable react/display-name */
import React, { useState, useEffect } from 'react';
-import { Alert, Badge, Dropdown, IconFont, ProTable, Space, Table, Utils } from 'knowdesign';
+import { Alert, Badge, Dropdown, ProTable, Space, Table, Utils } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import { useParams } from 'react-router-dom';
import Api from '@src/api';
import { getTaskDetailsColumns, getMoveBalanceColumns } from './config';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/Jobs/ViewJobsProgress.tsx b/km-console/packages/layout-clusters-fe/src/pages/Jobs/ViewJobsProgress.tsx
index 38cff3a6..b052cb92 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/Jobs/ViewJobsProgress.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/Jobs/ViewJobsProgress.tsx
@@ -1,7 +1,8 @@
import React, { useState, useEffect } from 'react';
import moment from 'moment';
import { useParams } from 'react-router-dom';
-import { Button, Drawer, Utils, Descriptions, Tabs, Input, IconFont, message, Spin, InputNumber } from 'knowdesign';
+import { Button, Drawer, Utils, Descriptions, Tabs, Input, message, Spin, InputNumber } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import TaskDetails from './TeskDetails';
import NodeTraffic from './NodeTraffic';
import RebalancePlan from './RebalancePlan';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/Jobs/config.tsx b/km-console/packages/layout-clusters-fe/src/pages/Jobs/config.tsx
index 5dd24ce9..d4322f40 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/Jobs/config.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/Jobs/config.tsx
@@ -89,12 +89,9 @@ export const getJobsListColumns = (arg?: any) => {
title: '任务执行对象',
dataIndex: 'target',
key: 'target',
+ width: 232,
render(t: any, r: any) {
- return (
-
- `共有${num}个`} />
-
- );
+ return
`共有${num}个`} />;
},
},
{
diff --git a/km-console/packages/layout-clusters-fe/src/pages/Jobs/index.tsx b/km-console/packages/layout-clusters-fe/src/pages/Jobs/index.tsx
index 5432b434..3e08d3a5 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/Jobs/index.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/Jobs/index.tsx
@@ -1,6 +1,7 @@
import React, { useState, useEffect, memo } from 'react';
import { useParams, useHistory, useLocation } from 'react-router-dom';
-import { ProTable, Drawer, Utils, AppContainer, Form, Select, Input, Button, message, Modal, IconFont, Divider } from 'knowdesign';
+import { ProTable, Drawer, Utils, AppContainer, Form, Select, Input, Button, message, Modal, Divider } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import API from '../../api';
import { getJobsListColumns, defaultPagination, runningStatus, jobType } from './config';
import JobsCheck from '@src/components/CardBar/JobsCheck';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/BalanceDrawer.tsx b/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/BalanceDrawer.tsx
index 207e3e30..8ad1cd3c 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/BalanceDrawer.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/BalanceDrawer.tsx
@@ -12,10 +12,9 @@ import {
Transfer,
Select,
message,
- IconFont,
Tooltip,
} from 'knowdesign';
-
+import { IconFont } from '@knowdesign/icons';
import CronInput from './CronInput';
import BalanceEditTable from './BalanceEditTable';
import PlanDrawer from './PlanDrawer';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/BalanceFilter.tsx b/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/BalanceFilter.tsx
index 47732d9f..0465643e 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/BalanceFilter.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/BalanceFilter.tsx
@@ -1,5 +1,6 @@
import React, { useEffect, useState } from 'react';
-import { Button, Popover, IconFont, Row, Col, Select } from 'knowdesign';
+import { Button, Popover, Row, Col, Select } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import { CloseOutlined } from '@ant-design/icons';
const balancePrefix = 'custom-popover-balance';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/ClusterNorms.tsx b/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/ClusterNorms.tsx
index e4c434f6..13cf7ab2 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/ClusterNorms.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/ClusterNorms.tsx
@@ -1,5 +1,6 @@
import React, { useState, useEffect, useRef } from 'react';
-import { Utils, Drawer, Button, Form, Space, Divider, AppContainer, Input, Transfer, message, IconFont, InputNumber } from 'knowdesign';
+import { Utils, Drawer, Button, Form, Space, Divider, AppContainer, Input, Transfer, message, InputNumber } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import { CloseOutlined } from '@ant-design/icons';
import api from '../../api';
import './style/BalanceDrawer.less';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/PlanDrawer.tsx b/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/PlanDrawer.tsx
index 34785d68..cd3fa6ce 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/PlanDrawer.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/PlanDrawer.tsx
@@ -1,5 +1,6 @@
import React, { useState } from 'react';
-import { message, Drawer, Button, Space, Divider, AppContainer, IconFont } from 'knowdesign';
+import { message, Drawer, Button, Space, Divider, AppContainer } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import RebalancePlan from '../Jobs/RebalancePlan';
interface PropsType extends React.HTMLAttributes {
diff --git a/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/index.tsx b/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/index.tsx
index 3a1fa7dc..a0c8dda8 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/index.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/LoadRebalance/index.tsx
@@ -1,5 +1,6 @@
import React, { useState, useEffect, useRef } from 'react';
-import { Select, Form, Utils, AppContainer, Input, Button, ProTable, Badge, Tag, SearchInput, IconFont, Divider } from 'knowdesign';
+import { Select, Form, Utils, AppContainer, Input, Button, ProTable, Badge, Tag, SearchInput, Divider } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import BalanceDrawer from './BalanceDrawer';
import HistoryDrawer from './HistoryDrawer';
import DBreadcrumb from 'knowdesign/es/extend/d-breadcrumb';
@@ -133,7 +134,7 @@ const LoadBalance: React.FC = (props: any) => {
key: 'disk_spec',
width: '150px',
render: (text: any, row: any) => {
- return text !== null ? `${text}GB` : '-';
+ return text !== null ? `${text.toLocaleString()}GB` : '-';
},
},
{
@@ -145,7 +146,10 @@ const LoadBalance: React.FC = (props: any) => {
return text !== null ? (
- {`${getSizeAndUnit(text, 'B').valueWithUnit} (${((row.disk_avg * 100) / Utils.transGBToB(row.disk_spec)).toFixed(2)}%)`}
+ {`${getSizeAndUnit(text, 'B').valueWithUnit.toLocaleString()} (${(
+ (row.disk_avg * 100) /
+ Utils.transGBToB(row.disk_spec)
+ ).toFixed(2)}%)`}
) : (
'-'
@@ -158,7 +162,7 @@ const LoadBalance: React.FC = (props: any) => {
key: 'bytesIn_spec',
width: '150px',
render: (text: any, row: any) => {
- return text !== null ? `${text}MB/s` : '-';
+ return text !== null ? `${text.toLocaleString()}MB/s` : '-';
},
},
{
@@ -170,7 +174,10 @@ const LoadBalance: React.FC = (props: any) => {
return text !== null ? (
- {`${getSizeAndUnit(text, 'B/s').valueWithUnit} (${((row.bytesIn_avg * 100) / (row.bytesIn_spec * 1024 * 1024)).toFixed(2)}%)`}
+ {`${getSizeAndUnit(text, 'B/s').valueWithUnit.toLocaleString()} (${(
+ (row.bytesIn_avg * 100) /
+ (row.bytesIn_spec * 1024 * 1024)
+ ).toFixed(2)}%)`}
) : (
'-'
@@ -183,7 +190,7 @@ const LoadBalance: React.FC = (props: any) => {
key: 'bytesOut_spec',
width: '150px',
render: (text: any, row: any) => {
- return text !== null ? `${text}MB/s` : '-';
+ return text !== null ? `${text.toLocaleString()}MB/s` : '-';
},
},
{
@@ -196,7 +203,10 @@ const LoadBalance: React.FC = (props: any) => {
return text !== null ? (
- {`${getSizeAndUnit(text, 'B/s').valueWithUnit} (${((row.bytesOut_avg * 100) / (row.bytesOut_spec * 1024 * 1024)).toFixed(2)}%)`}
+ {`${getSizeAndUnit(text, 'B/s').valueWithUnit.toLocaleString()} (${(
+ (row.bytesOut_avg * 100) /
+ (row.bytesOut_spec * 1024 * 1024)
+ ).toFixed(2)}%)`}
) : (
'-'
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 473bb2dc..6cebe36a 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,5 +1,6 @@
import React, { useEffect, useRef, useState } from 'react';
-import { Slider, Input, Select, Checkbox, Button, Utils, Spin, IconFont, AppContainer } from 'knowdesign';
+import { Slider, Input, Select, Checkbox, Button, Utils, Spin, AppContainer } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import API from '@src/api';
import TourGuide, { MultiPageSteps } from '@src/components/TourGuide';
import './index.less';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/List.tsx b/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/List.tsx
index a65ac3fd..d15cffcb 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/List.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/List.tsx
@@ -1,4 +1,5 @@
-import { AppContainer, Divider, Form, IconFont, Input, List, message, Modal, Progress, Spin, Tooltip, Utils } from 'knowdesign';
+import { AppContainer, Divider, Form, Input, List, message, Modal, Progress, Spin, Tooltip, Utils } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import moment from 'moment';
import API from '@src/api';
import React, { useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
@@ -16,6 +17,10 @@ import { SearchParams } from './HomePage';
const DEFAULT_PAGE_SIZE = 10;
+enum ClusterRunState {
+ Raft = 2,
+}
+
const DeleteCluster = React.forwardRef((_, ref) => {
const intl = useIntl();
const [form] = Form.useForm();
@@ -245,6 +250,7 @@ const ClusterList = (props: { searchParams: SearchParams; showAccessCluster: any
metricPoints.push(line);
});
+ const runState = itemData.runState;
const {
Brokers: brokers,
Zookeepers: zks,
@@ -345,18 +351,21 @@ const ClusterList = (props: { searchParams: SearchParams; showAccessCluster: any
{brokers}
-
-
-
- ZK
+ {/* 2: raft 模式 无zk */}
+ {runState !== ClusterRunState.Raft && (
+
+
+
+ ZK
+
+
{zookeepersAvailable === -1 ? '-' : zks}
-
{zookeepersAvailable === -1 ? '-' : zks}
-
+ )}
{metricPoints.map((row, index) => {
diff --git a/km-console/packages/layout-clusters-fe/src/pages/SecurityACLs/index.tsx b/km-console/packages/layout-clusters-fe/src/pages/SecurityACLs/index.tsx
index 7d0c9446..a98f6269 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/SecurityACLs/index.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/SecurityACLs/index.tsx
@@ -1,5 +1,6 @@
import React, { useEffect, useRef, useState } from 'react';
-import { Button, Form, Input, Select, Modal, message, ProTable, AppContainer, DKSBreadcrumb, Utils, IconFont, Divider } from 'knowdesign';
+import { Button, Form, Input, Select, Modal, message, ProTable, AppContainer, DKSBreadcrumb, Utils, Divider } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import ACLsCardBar from '@src/components/CardBar/ACLsCardBar';
import api from '@src/api';
import { tableHeaderPrefix } from '@src/constants/common';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/SecurityUsers/index.tsx b/km-console/packages/layout-clusters-fe/src/pages/SecurityUsers/index.tsx
index 919e6b0f..9f493bd7 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/SecurityUsers/index.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/SecurityUsers/index.tsx
@@ -14,9 +14,9 @@ import {
Utils,
Checkbox,
Tooltip,
- IconFont,
Alert,
} from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import { CloseOutlined, EyeInvisibleOutlined, EyeOutlined, LoadingOutlined } from '@ant-design/icons';
import './index.less';
import api from '@src/api';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/DetailChart/index.tsx b/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/DetailChart/index.tsx
index db241e4e..3df6ee1e 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/DetailChart/index.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/DetailChart/index.tsx
@@ -1,30 +1,26 @@
-import { Col, Row, SingleChart, IconFont, Utils, Modal, Spin, Empty, AppContainer, Tooltip } from 'knowdesign';
+import { Col, Row, SingleChart, Utils, Modal, Spin, Empty, AppContainer, Tooltip } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import React, { useEffect, useRef, useState } from 'react';
+import { arrayMoveImmutable } from 'array-move';
import api from '@src/api';
-import { getChartConfig } from './config';
-import './index.less';
import { useParams } from 'react-router-dom';
import {
MetricDefaultChartDataType,
MetricChartDataType,
formatChartData,
supplementaryPoints,
-} from '@src/components/DashboardDragChart/config';
+ resolveMetricsRank,
+ MetricInfo,
+} from '@src/constants/chartConfig';
import { MetricType } from '@src/api';
import { getDataNumberUnit, getUnit } from '@src/constants/chartConfig';
import SingleChartHeader, { KsHeaderOptions } from '@src/components/SingleChartHeader';
-import { MAX_TIME_RANGE_WITH_SMALL_POINT_INTERVAL } from '@src/constants/common';
import RenderEmpty from '@src/components/RenderEmpty';
import DragGroup from '@src/components/DragGroup';
+import { getChartConfig } from './config';
+import './index.less';
type ChartFilterOptions = Omit
;
-interface MetricInfo {
- type: number;
- name: string;
- desc: string;
- set: boolean;
- support: boolean;
-}
interface MessagesInDefaultData {
aggType: string | null;
@@ -71,8 +67,7 @@ const DetailChart = (props: { children: JSX.Element }): JSX.Element => {
const [curHeaderOptions, setCurHeaderOptions] = useState();
const [defaultChartLoading, setDefaultChartLoading] = useState(true);
const [chartLoading, setChartLoading] = useState(true);
- const [showChartDetailModal, setShowChartDetailModal] = useState(false);
- const [chartDetail, setChartDetail] = useState();
+ const metricRankList = useRef([]);
const curFetchingTimestamp = useRef({
messagesIn: 0,
other: 0,
@@ -91,36 +86,53 @@ const DetailChart = (props: { children: JSX.Element }): JSX.Element => {
});
};
+ // 更新 rank
+ const updateRank = (metricList: MetricInfo[]) => {
+ const { list, listInfo, shouldUpdate } = resolveMetricsRank(metricList);
+ metricRankList.current = list;
+ if (shouldUpdate) {
+ updateMetricList(listInfo);
+ }
+ };
+
// 获取指标列表
const getMetricList = () => {
Utils.request(api.getDashboardMetricList(clusterId, MetricType.Cluster)).then((res: MetricInfo[] | null) => {
if (!res) return;
- const showMetrics = res.filter((metric) => metric.support);
- const selectedMetrics = showMetrics.filter((metric) => metric.set).map((metric) => metric.name);
+ const supportMetrics = res.filter((metric) => metric.support);
+ const selectedMetrics = supportMetrics.filter((metric) => metric.set).map((metric) => metric.name);
!selectedMetrics.includes(DEFAULT_METRIC) && selectedMetrics.push(DEFAULT_METRIC);
- setMetricList(showMetrics);
+ updateRank([...supportMetrics]);
+ setMetricList(supportMetrics);
setSelectedMetricNames(selectedMetrics);
});
};
// 更新指标
- const updateMetricList = (metricsSet: { [name: string]: boolean }) => {
+ const updateMetricList = (metricDetailDTOList: { metric: string; rank: number; set: boolean }[]) => {
return Utils.request(api.getDashboardMetricList(clusterId, MetricType.Cluster), {
method: 'POST',
data: {
- metricsSet,
+ metricDetailDTOList,
},
});
};
// 指标选中项更新回调
const indicatorChangeCallback = (newMetricNames: (string | number)[]) => {
- const updateMetrics: { [name: string]: boolean } = {};
+ const updateMetrics: { metric: string; set: boolean; rank: number }[] = [];
// 需要选中的指标
- newMetricNames.forEach((name) => !selectedMetricNames.includes(name) && (updateMetrics[name] = true));
+ newMetricNames.forEach(
+ (name) =>
+ !selectedMetricNames.includes(name) &&
+ updateMetrics.push({ metric: name as string, set: true, rank: metricList.find(({ name: metric }) => metric === name)?.rank })
+ );
// 取消选中的指标
- selectedMetricNames.forEach((name) => !newMetricNames.includes(name) && (updateMetrics[name] = false));
-
+ selectedMetricNames.forEach(
+ (name) =>
+ !newMetricNames.includes(name) &&
+ updateMetrics.push({ metric: name as string, set: false, rank: metricList.find(({ name: metric }) => metric === name)?.rank })
+ );
const requestPromise = Object.keys(updateMetrics).length ? updateMetricList(updateMetrics) : Promise.resolve();
requestPromise.then(
() => getMetricList(),
@@ -156,15 +168,16 @@ const DetailChart = (props: { children: JSX.Element }): JSX.Element => {
return;
}
- const supplementaryInterval = (endTime - startTime > MAX_TIME_RANGE_WITH_SMALL_POINT_INTERVAL ? 10 : 1) * 60 * 1000;
const formattedMetricData: MetricChartDataType[] = formatChartData(
res,
global.getMetricDefine || {},
MetricType.Cluster,
- curHeaderOptions.rangeTime,
- supplementaryInterval
+ curHeaderOptions.rangeTime
);
formattedMetricData.forEach((data) => (data.metricLines[0].name = data.metricName));
+ // 指标排序
+ formattedMetricData.sort((a, b) => metricRankList.current.indexOf(a.metricName) - metricRankList.current.indexOf(b.metricName));
+
setMetricDataList(formattedMetricData);
setChartLoading(false);
},
@@ -242,9 +255,7 @@ const DetailChart = (props: { children: JSX.Element }): JSX.Element => {
...info,
value: 0,
}));
- const supplementaryInterval =
- (curHeaderOptions.rangeTime[1] - curHeaderOptions.rangeTime[0] > MAX_TIME_RANGE_WITH_SMALL_POINT_INTERVAL ? 10 : 1) * 60 * 1000;
- supplementaryPoints([line], curHeaderOptions.rangeTime, supplementaryInterval, (point) => {
+ supplementaryPoints([line], curHeaderOptions.rangeTime, (point) => {
point.push(extraMetrics as any);
return point;
});
@@ -263,6 +274,22 @@ const DetailChart = (props: { children: JSX.Element }): JSX.Element => {
targetNode && targetNode.addEventListener('click', () => busInstance.emit('chartResize'));
};
+ // 拖拽开始回调,触发图表的 onDrag 事件( 设置为 true ),禁止同步展示图表的 tooltip
+ const dragStart = () => {
+ busInstance.emit('onDrag', true);
+ };
+
+ // 拖拽结束回调,更新图表顺序,并触发图表的 onDrag 事件( 设置为 false ),允许同步展示图表的 tooltip
+ const dragEnd = ({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }) => {
+ busInstance.emit('onDrag', false);
+ const originFrom = metricRankList.current.indexOf(metricDataList[oldIndex].metricName);
+ const originTarget = metricRankList.current.indexOf(metricDataList[newIndex].metricName);
+ const newList = arrayMoveImmutable(metricRankList.current, originFrom, originTarget);
+ metricRankList.current = newList;
+ updateMetricList(newList.map((metric, rank) => ({ metric, rank, set: metricList.find(({ name }) => metric === name)?.set || false })));
+ setMetricDataList(arrayMoveImmutable(metricDataList, oldIndex, newIndex));
+ };
+
useEffect(() => {
getMetricData();
}, [selectedMetricNames]);
@@ -359,10 +386,10 @@ const DetailChart = (props: { children: JSX.Element }): JSX.Element => {
0,
- onSortEnd: () => 0,
+ onSortStart: dragStart,
+ onSortEnd: dragEnd,
axis: 'xy',
- useDragHandle: false,
+ useDragHandle: true,
}}
gridProps={{
span: 12,
diff --git a/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/LeftSider.tsx b/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/LeftSider.tsx
index 5a428b5b..bd5989d9 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/LeftSider.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/LeftSider.tsx
@@ -1,4 +1,5 @@
-import { AppContainer, Divider, IconFont, Progress, Tooltip, Utils } from 'knowdesign';
+import { AppContainer, Divider, Progress, Tooltip, Utils } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import React, { useEffect, useState } from 'react';
import AccessClusters from '../MutliClusterPage/AccessCluster';
import './index.less';
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 b2d9eb0c..6ab6e317 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
@@ -2,7 +2,8 @@ import moment from 'moment';
import React from 'react';
import { timeFormat } from '../../constants/common';
import TagsWithHide from '../../components/TagsWithHide/index';
-import { Form, IconFont, InputNumber, Tooltip } from 'knowdesign';
+import { Form, InputNumber, Tooltip } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import { Link } from 'react-router-dom';
import { systemKey } from '../../constants/menu';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/TestingConsumer/Consume.tsx b/km-console/packages/layout-clusters-fe/src/pages/TestingConsumer/Consume.tsx
index d74d723f..be43d454 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/TestingConsumer/Consume.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/TestingConsumer/Consume.tsx
@@ -1,6 +1,7 @@
/* eslint-disable no-case-declarations */
import { DownloadOutlined } from '@ant-design/icons';
-import { AppContainer, Divider, IconFont, message, Tooltip, Utils } from 'knowdesign';
+import { AppContainer, Divider, message, Tooltip, Utils } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import * as React from 'react';
import moment from 'moment';
import { timeFormat } from '../../constants/common';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/TestingProduce/component/EditTable.tsx b/km-console/packages/layout-clusters-fe/src/pages/TestingProduce/component/EditTable.tsx
index 49e2568d..a5300af2 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/TestingProduce/component/EditTable.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/TestingProduce/component/EditTable.tsx
@@ -1,6 +1,7 @@
/* eslint-disable react/display-name */
import React, { useState } from 'react';
-import { Table, Input, InputNumber, Popconfirm, Form, Typography, Button, message, IconFont, Select } from 'knowdesign';
+import { Table, Input, InputNumber, Popconfirm, Form, Typography, Button, message, Select } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import './style/edit-table.less';
import { CheckOutlined, CloseOutlined, PlusSquareOutlined } from '@ant-design/icons';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/TestingProduce/config.tsx b/km-console/packages/layout-clusters-fe/src/pages/TestingProduce/config.tsx
index 97589f32..3e34ad67 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/TestingProduce/config.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/TestingProduce/config.tsx
@@ -1,5 +1,6 @@
import { QuestionCircleOutlined } from '@ant-design/icons';
-import { IconFont, Switch, Tooltip } from 'knowdesign';
+import { Switch, Tooltip } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import { FormItemType, IFormItem } from 'knowdesign/es/extend/x-form';
import moment from 'moment';
import React from 'react';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/BrokersDetail.tsx b/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/BrokersDetail.tsx
index 1c40cd66..9b3a12a0 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/BrokersDetail.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/BrokersDetail.tsx
@@ -1,6 +1,7 @@
import React, { useCallback } from 'react';
import { useEffect, useState } from 'react';
-import { AppContainer, Button, Empty, IconFont, List, Popover, ProTable, Radio, Spin, Utils } from 'knowdesign';
+import { AppContainer, Button, Empty, List, Popover, ProTable, Radio, Spin, Utils } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import { CloseOutlined } from '@ant-design/icons';
import api, { MetricType } from '@src/api';
import { useParams } from 'react-router-dom';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/ConfigurationEdit.tsx b/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/ConfigurationEdit.tsx
index a2638384..7fc4ab80 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/ConfigurationEdit.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/ConfigurationEdit.tsx
@@ -1,5 +1,6 @@
import React from 'react';
-import { Drawer, Form, Input, Space, Button, Utils, Row, Col, IconFont, Divider, message } from 'knowdesign';
+import { Drawer, Form, Input, Space, Button, Utils, Row, Col, Divider, message } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import { useParams } from 'react-router-dom';
import Api from '@src/api';
export const ConfigurationEdit = (props: any) => {
diff --git a/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/Messages.tsx b/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/Messages.tsx
index 1e1f6582..450cb59b 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/Messages.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/Messages.tsx
@@ -1,5 +1,6 @@
import React, { useState, useEffect } from 'react';
-import { Alert, Button, Checkbox, Form, IconFont, Input, ProTable, Select, Tooltip, Utils } from 'knowdesign';
+import { Alert, Button, Checkbox, Form, Input, ProTable, Select, Tooltip, Utils } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import Api from '@src/api';
import { useParams, useHistory } from 'react-router-dom';
import { getTopicMessagesColmns } from './config';
diff --git a/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/config.tsx b/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/config.tsx
index 03a93181..aa1e25d3 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/config.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/config.tsx
@@ -1,8 +1,9 @@
import React from 'react';
import moment from 'moment';
import { timeFormat } from '../../constants/common';
-import { IconFont, Tooltip } from 'knowdesign';
-
+import { message, Tooltip, Utils } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
+import ContentWithCopy from '@src/components/CopyContent';
const aclOperationType: any = {
0: 'UNKNOWN',
1: 'ANY',
@@ -80,6 +81,7 @@ export const getTopicMessagesColmns = () => {
title: 'Offset',
dataIndex: 'offset',
key: 'offset',
+ render: (t: number) => (t ? t.toLocaleString() : '-'),
},
{
title: 'Timestamp',
@@ -100,8 +102,9 @@ export const getTopicMessagesColmns = () => {
dataIndex: 'value',
key: 'value',
width: 280,
- lineClampTwo: true,
- needTooltip: true,
+ render: (t: string) => {
+ return t ? : '-';
+ },
},
{
title: 'Header',
diff --git a/km-console/packages/layout-clusters-fe/src/pages/TopicList/Delete.tsx b/km-console/packages/layout-clusters-fe/src/pages/TopicList/Delete.tsx
index 9a3c6157..75af2070 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/TopicList/Delete.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/TopicList/Delete.tsx
@@ -1,6 +1,7 @@
import React, { useState } from 'react';
import { useParams } from 'react-router-dom';
-import { Button, Form, IconFont, Input, Modal, notification, Utils } from 'knowdesign';
+import { Button, Form, Input, Modal, notification, Utils } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import Api from '@src/api/index';
// eslint-disable-next-line react/display-name
diff --git a/km-console/packages/layout-clusters-fe/src/pages/TopicList/ExpandPartition.tsx b/km-console/packages/layout-clusters-fe/src/pages/TopicList/ExpandPartition.tsx
index 0c814e43..b17a41ab 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/TopicList/ExpandPartition.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/TopicList/ExpandPartition.tsx
@@ -3,7 +3,7 @@ import { useParams } from 'react-router-dom';
import { AppContainer, Button, Divider, Drawer, Form, InputNumber, notification, SingleChart, Space, Spin, Utils } from 'knowdesign';
import Api, { MetricType } from '@src/api/index';
import { getBasicChartConfig, getUnit } from '@src/constants/chartConfig';
-import { formatChartData, MetricDefaultChartDataType } from '@src/components/DashboardDragChart/config';
+import { formatChartData, MetricDefaultChartDataType } from '@src/constants/chartConfig';
const ExpandPartition = (props: { record: any; onConfirm: () => void }) => {
const [global] = AppContainer.useGlobalValue();
@@ -74,8 +74,7 @@ const ExpandPartition = (props: { record: any; onConfirm: () => void }) => {
],
global?.getMetricDefine || {},
MetricType.Topic,
- [startStamp, endStamp],
- 10 * 60 * 1000
+ [startStamp, endStamp]
);
setMinByteInOut(minByteInOut < empiricalMinValue ? empiricalMinValue : minByteInOut);
diff --git a/km-console/packages/layout-clusters-fe/src/pages/TopicList/index.tsx b/km-console/packages/layout-clusters-fe/src/pages/TopicList/index.tsx
index 692da9c2..60d7dd72 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/TopicList/index.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/TopicList/index.tsx
@@ -1,7 +1,8 @@
/* eslint-disable react/display-name */
import React, { useState, useEffect } from 'react';
import { useHistory, useParams } from 'react-router-dom';
-import { AppContainer, IconFont, Input, ProTable, Select, Switch, Tooltip, Utils, Dropdown, Menu, Button, Divider } from 'knowdesign';
+import { AppContainer, Input, ProTable, Select, Switch, Tooltip, Utils, Dropdown, Menu, Button, Divider } from 'knowdesign';
+import { IconFont } from '@knowdesign/icons';
import Create from './Create';
import './index.less';
import Api from '@src/api/index';
@@ -90,11 +91,11 @@ const AutoPage = (props: any) => {
const orgVal = record?.latestMetrics?.metrics?.[metricName];
if (orgVal !== undefined) {
if (metricName === 'HealthScore') {
- return Math.round(orgVal);
+ return Math.round(orgVal).toLocaleString();
} else if (metricName === 'LogSize') {
- return Number(Utils.formatAssignSize(orgVal, 'MB'));
+ return Number(Utils.formatAssignSize(orgVal, 'MB')).toLocaleString();
} else {
- return Number(Utils.formatAssignSize(orgVal, 'KB'));
+ return Number(Utils.formatAssignSize(orgVal, 'KB')).toLocaleString();
// return Utils.formatAssignSize(orgVal, 'KB');
}
}
diff --git a/km-console/packages/layout-clusters-fe/src/style-addition.less b/km-console/packages/layout-clusters-fe/src/style-addition.less
index e2c1eb34..451c31bf 100644
--- a/km-console/packages/layout-clusters-fe/src/style-addition.less
+++ b/km-console/packages/layout-clusters-fe/src/style-addition.less
@@ -655,4 +655,4 @@
.@{ant-prefix}-empty-img-default{
width: 100% !important;
-}
\ No newline at end of file
+}