diff --git a/km-biz/pom.xml b/km-biz/pom.xml index b8c3457b..d9a228ab 100644 --- a/km-biz/pom.xml +++ b/km-biz/pom.xml @@ -29,6 +29,11 @@ km-core ${project.parent.version} + + com.xiaojukeji.kafka + km-rebalance + ${project.parent.version} + diff --git a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/MultiClusterPhyManagerImpl.java b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/MultiClusterPhyManagerImpl.java index 7e379c99..984b2152 100644 --- a/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/MultiClusterPhyManagerImpl.java +++ b/km-biz/src/main/java/com/xiaojukeji/know/streaming/km/biz/cluster/impl/MultiClusterPhyManagerImpl.java @@ -15,6 +15,7 @@ import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result; import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.ClusterPhyBaseVO; import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.ClusterPhyDashboardVO; import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricMultiLinesVO; +import com.xiaojukeji.know.streaming.km.common.constant.Constant; import com.xiaojukeji.know.streaming.km.common.converter.ClusterVOConverter; import com.xiaojukeji.know.streaming.km.common.enums.health.HealthStateEnum; import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil; @@ -24,6 +25,10 @@ import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils; import com.xiaojukeji.know.streaming.km.core.service.cluster.ClusterMetricService; import com.xiaojukeji.know.streaming.km.core.service.cluster.ClusterPhyService; import com.xiaojukeji.know.streaming.km.core.service.version.metrics.kafka.ClusterMetricVersionItems; +import com.xiaojukeji.know.streaming.km.rebalance.algorithm.model.Resource; +import com.xiaojukeji.know.streaming.km.rebalance.common.BalanceMetricConstant; +import com.xiaojukeji.know.streaming.km.rebalance.common.bean.entity.ClusterBalanceItemState; +import com.xiaojukeji.know.streaming.km.rebalance.core.service.ClusterBalanceService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -40,6 +45,9 @@ public class MultiClusterPhyManagerImpl implements MultiClusterPhyManager { @Autowired private ClusterMetricService clusterMetricService; + @Autowired + private ClusterBalanceService clusterBalanceService; + @Override public ClusterPhysState getClusterPhysState() { List clusterPhyList = clusterPhyService.listAllClusters(); @@ -153,6 +161,11 @@ public class MultiClusterPhyManagerImpl implements MultiClusterPhyManager { ClusterMetrics clusterMetrics = clusterMetricService.getLatestMetricsFromCache(vo.getId()); clusterMetrics.getMetrics().putIfAbsent(ClusterMetricVersionItems.CLUSTER_METRIC_HEALTH_STATE, (float) HealthStateEnum.UNKNOWN.getDimension()); + Result balanceMetricsResult = this.getClusterLoadReBalanceInfo(vo.getId()); + if (balanceMetricsResult.hasData()) { + clusterMetrics.putMetric(balanceMetricsResult.getData().getMetrics()); + } + metricsList.add(clusterMetrics); } @@ -174,4 +187,21 @@ public class MultiClusterPhyManagerImpl implements MultiClusterPhyManager { dto.setClusterPhyIds(clusterIdList); return dto; } + + private Result getClusterLoadReBalanceInfo(Long clusterPhyId) { + Result stateResult = clusterBalanceService.getItemStateFromCacheFirst(clusterPhyId); + if (stateResult.failed()) { + return Result.buildFromIgnoreData(stateResult); + } + + ClusterBalanceItemState state = stateResult.getData(); + + ClusterMetrics metric = ClusterMetrics.initWithMetrics(clusterPhyId, BalanceMetricConstant.CLUSTER_METRIC_LOAD_RE_BALANCE_ENABLE, state.getEnable()? Constant.YES: Constant.NO); + metric.putMetric(BalanceMetricConstant.CLUSTER_METRIC_LOAD_RE_BALANCE_CPU, state.getResItemState(Resource.CPU).floatValue()); + metric.putMetric(BalanceMetricConstant.CLUSTER_METRIC_LOAD_RE_BALANCE_NW_IN, state.getResItemState(Resource.NW_IN).floatValue()); + metric.putMetric(BalanceMetricConstant.CLUSTER_METRIC_LOAD_RE_BALANCE_NW_OUT, state.getResItemState(Resource.NW_OUT).floatValue()); + metric.putMetric(BalanceMetricConstant.CLUSTER_METRIC_LOAD_RE_BALANCE_DISK, state.getResItemState(Resource.DISK).floatValue()); + + return Result.buildSuc(metric); + } } diff --git a/km-common/pom.xml b/km-common/pom.xml index b1dc65a7..63c94a48 100644 --- a/km-common/pom.xml +++ b/km-common/pom.xml @@ -22,12 +22,6 @@ - - com.xiaojukeji.kafka - km-rebalance - ${project.parent.version} - - org.springframework spring-web diff --git a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/ESConstant.java b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/ESConstant.java index 07cef36f..85bf2084 100644 --- a/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/ESConstant.java +++ b/km-common/src/main/java/com/xiaojukeji/know/streaming/km/common/constant/ESConstant.java @@ -36,8 +36,6 @@ public class ESConstant { public static final Integer DEFAULT_RETRY_TIME = 3; - public static final String PARTITION_INDEX = "ks_kafka_partition_metric"; - /** * 获取Topic-Latest指标时,单次允许的Topic数 */ diff --git a/km-console/.env b/km-console/.env index a892cff7..15a0e919 100644 --- a/km-console/.env +++ b/km-console/.env @@ -1,2 +1,2 @@ -BUSINESS_VERSION='false' +BUSINESS_VERSION='true' PUBLIC_PATH='' diff --git a/km-console/packages/config-manager-fe/src/app.tsx b/km-console/packages/config-manager-fe/src/app.tsx index 2f29654d..c653b814 100644 --- a/km-console/packages/config-manager-fe/src/app.tsx +++ b/km-console/packages/config-manager-fe/src/app.tsx @@ -31,12 +31,7 @@ export const { Provider, Consumer } = React.createContext('zh'); const defaultLanguage = 'zh'; -const AppContent = (props: { - getLicenseInfo?: (cbk: (msg: string) => void) => void | undefined; - licenseEventBus?: Record | undefined; -}) => { - const { getLicenseInfo, licenseEventBus } = props; - +const AppContent = (props: any) => { return (
@@ -44,7 +39,7 @@ const AppContent = (props: { { - getLicenseInfo?.((msg) => licenseEventBus?.emit('licenseError', msg)); + // getLicenseInfo?.((msg) => licenseEventBus?.emit('licenseError', msg)); return Promise.resolve(true); }} noMatch={() => } @@ -55,7 +50,6 @@ const AppContent = (props: { }; const App = (props: any) => { - const { getLicenseInfo, licenseEventBus } = props; const intlMessages = _.get(localeMap[defaultLanguage], 'intlMessages', intlZhCN); const locale = _.get(localeMap[defaultLanguage], 'intl', 'zh-CN'); const antdLocale = _.get(localeMap[defaultLanguage], 'dantd', dantdZhCN); @@ -65,7 +59,7 @@ const App = (props: any) => { - + diff --git a/km-console/packages/layout-clusters-fe/src/app.tsx b/km-console/packages/layout-clusters-fe/src/app.tsx index b945a9c0..e734f47c 100755 --- a/km-console/packages/layout-clusters-fe/src/app.tsx +++ b/km-console/packages/layout-clusters-fe/src/app.tsx @@ -72,51 +72,12 @@ const logout = () => { localStorage.removeItem('userInfo'); }; -const LicenseLimitModal = () => { - const [visible, setVisible] = useState(false); - const [msg, setMsg] = useState(''); - - useLayoutEffect(() => { - licenseEventBus.on('licenseError', (desc: string) => { - !visible && setVisible(true); - setMsg(desc); - }); - return () => { - licenseEventBus.removeAll('licenseError'); - }; - }, []); - - return ( - - - 许可证限制 - - } - footer={null} - onCancel={() => setVisible(false)} - > -
-
- {msg},前往帮助文档 -
-
-
- ); -}; - const AppContent = (props: { setlanguage: (language: string) => void }) => { const { pathname } = useLocation(); const history = useHistory(); const userInfo = localStorage.getItem('userInfo'); const [curActiveAppName, setCurActiveAppName] = useState(''); const [versionInfo, setVersionInfo] = useState(); - useEffect(() => { if (pathname.startsWith('/config')) { setCurActiveAppName('config'); @@ -179,7 +140,7 @@ const AppContent = (props: { setlanguage: (language: string) => void }) => { }} onMount={(customProps: any) => { judgePage404(); - registerApps(systemsConfig, { ...customProps, getLicenseInfo, licenseEventBus }, () => { + registerApps(systemsConfig, { ...customProps }, () => { // postMessage(); }); }} @@ -200,7 +161,6 @@ const AppContent = (props: { setlanguage: (language: string) => void }) => { }} /> - ); @@ -234,7 +194,6 @@ export default function App(): JSX.Element { - } /> diff --git a/km-console/packages/layout-clusters-fe/src/components/ChartOperateBar/index.tsx b/km-console/packages/layout-clusters-fe/src/components/ChartOperateBar/index.tsx index bfff9b4b..56837b50 100644 --- a/km-console/packages/layout-clusters-fe/src/components/ChartOperateBar/index.tsx +++ b/km-console/packages/layout-clusters-fe/src/components/ChartOperateBar/index.tsx @@ -33,6 +33,7 @@ interface PropsType { }; onChange: (options: KsHeaderOptions) => void; openMetricFilter: () => void; + setScreenType?: any; } interface ScopeData { @@ -56,12 +57,29 @@ const GRID_SIZE_OPTIONS = [ }, ]; +// connect 筛选逻辑补充 +const CONNECT_OPTIONS = [ + { + label: '全部', + value: 'all', + }, + { + label: 'Cluster', + value: 'Connect', + }, + { + label: 'Connector', + value: 'Connector', + }, +]; + const MetricOperateBar = ({ nodeSelect = {}, hideNodeScope = false, hideGridSelect = false, onChange: onChangeCallback, openMetricFilter, + setScreenType, }: PropsType): JSX.Element => { const [gridNum, setGridNum] = useState(GRID_SIZE_OPTIONS[1].value); const [rangeTime, setRangeTime] = useState<[number, number]>(() => { @@ -139,6 +157,17 @@ const MetricOperateBar = ({
+ {/* connect 单独逻辑 */} + {setScreenType && ( +