You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@inlong.apache.org by zi...@apache.org on 2022/03/23 11:34:12 UTC

[incubator-inlong] branch master updated: [INLONG-3201][TubeMQ] Improve the cluster query function

This is an automated email from the ASF dual-hosted git repository.

zirui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new 10f6d96  [INLONG-3201][TubeMQ] Improve the cluster query function
10f6d96 is described below

commit 10f6d96c11c38aeacfec84298c042bcc9428c913
Author: bluewang <88...@users.noreply.github.com>
AuthorDate: Wed Mar 23 19:34:05 2022 +0800

    [INLONG-3201][TubeMQ] Improve the cluster query function
---
 .../controller/cluster/ClusterController.java      | 145 +++++++++++++++++++--
 .../manager/controller/cluster/vo/ClusterVo.java   |   7 +
 .../group/result/ConsumerGroupInfoRes.java         |  52 ++++++++
 .../result/ConsumerInfoRes.java}                   |  12 +-
 .../controller/topic/result/TopicInfoRes.java      |  56 ++++++++
 .../controller/topic/result/TopicQueryRes.java     |  61 +++++++++
 .../result/TopicViewRes.java}                      |  17 ++-
 .../tubemq/manager/service/MasterServiceImpl.java  |   8 ++
 .../inlong/tubemq/manager/service/TubeConst.java   |   4 +
 .../manager/service/interfaces/MasterService.java  |   2 +
 .../inlong/tubemq/manager/utils/ConvertUtils.java  |  10 +-
 11 files changed, 351 insertions(+), 23 deletions(-)

diff --git a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/cluster/ClusterController.java b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/cluster/ClusterController.java
index 92ff640..357b5d3 100644
--- a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/cluster/ClusterController.java
+++ b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/cluster/ClusterController.java
@@ -18,11 +18,11 @@
 package org.apache.inlong.tubemq.manager.controller.cluster;
 
 import com.google.common.collect.Lists;
+import com.google.common.reflect.TypeToken;
 import com.google.gson.Gson;
-
-import java.util.List;
-import java.util.Map;
-
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.inlong.tubemq.manager.controller.TubeMQResult;
@@ -30,6 +30,10 @@ import org.apache.inlong.tubemq.manager.controller.cluster.dto.ClusterDto;
 import org.apache.inlong.tubemq.manager.controller.cluster.request.AddClusterReq;
 import org.apache.inlong.tubemq.manager.controller.cluster.request.DeleteClusterReq;
 import org.apache.inlong.tubemq.manager.controller.cluster.vo.ClusterVo;
+import org.apache.inlong.tubemq.manager.controller.group.result.ConsumerGroupInfoRes;
+import org.apache.inlong.tubemq.manager.controller.group.result.ConsumerInfoRes;
+import org.apache.inlong.tubemq.manager.controller.topic.result.TopicQueryRes;
+import org.apache.inlong.tubemq.manager.controller.topic.result.TopicViewRes;
 import org.apache.inlong.tubemq.manager.entry.ClusterEntry;
 import org.apache.inlong.tubemq.manager.entry.MasterEntry;
 import org.apache.inlong.tubemq.manager.service.TubeConst;
@@ -47,6 +51,9 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+import java.util.Map;
+
 import static org.apache.inlong.tubemq.manager.service.TubeConst.SUCCESS_CODE;
 
 @RestController
@@ -64,7 +71,7 @@ public class ClusterController {
 
     @PostMapping("")
     public @ResponseBody
-        TubeMQResult clusterMethodProxy(@RequestParam String method, @RequestBody String req) {
+    TubeMQResult clusterMethodProxy(@RequestParam String method, @RequestBody String req) {
         switch (method) {
             case TubeConst.ADD:
                 return addNewCluster(gson.fromJson(req, AddClusterReq.class));
@@ -133,8 +140,9 @@ public class ClusterController {
 
         MasterEntry masterNode = masterService.getMasterNode(clusterEntry.getClusterId());
 
+        ClusterVo allCount = getAllCount(clusterId);
         TubeMQResult result = new TubeMQResult();
-        result.setData(Lists.newArrayList(ConvertUtils.convertToClusterVo(clusterEntry, masterNode)));
+        result.setData(Lists.newArrayList(ConvertUtils.convertToClusterVo(clusterEntry, masterNode, allCount)));
         return result;
     }
 
@@ -149,7 +157,8 @@ public class ClusterController {
         List<ClusterVo> clusterVos = Lists.newArrayList();
         for (ClusterEntry cluster : allClusters) {
             MasterEntry masterNode = masterService.getMasterNode(cluster.getClusterId());
-            ClusterVo clusterVo = ConvertUtils.convertToClusterVo(cluster, masterNode);
+            ClusterVo allCount = getAllCount(Integer.valueOf((int) cluster.getClusterId()));
+            ClusterVo clusterVo = ConvertUtils.convertToClusterVo(cluster, masterNode, allCount);
             clusterVos.add(clusterVo);
         }
         result.setData(clusterVos);
@@ -179,10 +188,130 @@ public class ClusterController {
     @RequestMapping(value = "/query", method = RequestMethod.GET,
             produces = MediaType.APPLICATION_JSON_VALUE)
     public @ResponseBody
-        String queryInfo(
+    String queryInfo(
             @RequestParam Map<String, String> queryBody) throws Exception {
         String url = masterService.getQueryUrl(queryBody);
         return masterService.queryMaster(url);
     }
 
+    /**
+     * get all count
+     *
+     * @param clusterId
+     */
+    public ClusterVo getAllCount(Integer clusterId) {
+        ClusterVo clusterVo = new ClusterVo();
+        int brokerSize = getBrokerSize(clusterId);
+        ClusterVo countVo = getTopicAndPartitionCount(clusterId);
+        int consumerGroupCount = getConsumerGroupCount(clusterId);
+        int consumerCount = getConsumerCount(clusterId);
+        int storeCount = getStoreCount(clusterId);
+        clusterVo.setBrokerCount(brokerSize);
+        clusterVo.setTopicCount(countVo.getTopicCount());
+        clusterVo.setPartitionCount(countVo.getPartitionCount());
+        clusterVo.setConsumerGroupCount(consumerGroupCount);
+        clusterVo.setConsumerCount(consumerCount);
+        clusterVo.setStoreCount(storeCount);
+        return clusterVo;
+    }
+
+    /**
+     * query borker size
+     *
+     * @param clusterId
+     */
+    public int getBrokerSize(Integer clusterId) {
+        String queryUrl = masterService.getQueryCountUrl(clusterId, TubeConst.BROKER_RUN_STATUS);
+        String queryData = masterService.queryMaster(queryUrl);
+        JsonObject jsonObject = gson.fromJson(queryData, JsonObject.class);
+        JsonElement count = jsonObject.get("count");
+        return gson.fromJson(count, int.class);
+    }
+
+    /**
+     * query topic and partition count
+     *
+     * @param clusterId
+     */
+    public ClusterVo getTopicAndPartitionCount(Integer clusterId) {
+        ClusterVo clusterVo = new ClusterVo();
+        String url = masterService.getQueryCountUrl(clusterId, TubeConst.TOPIC_CONFIG_INFO);
+        String queryMaster = masterService.queryMaster(url);
+        JsonObject jsonObject = gson.fromJson(queryMaster, JsonObject.class);
+        JsonElement data = jsonObject.get("data");
+        JsonElement dataCount = jsonObject.get("dataCount");
+        Integer topicSize = gson.fromJson(dataCount, Integer.class);
+        JsonArray jsonData = gson.fromJson(data, JsonArray.class);
+        int partitionCount = 0;
+        List<TopicQueryRes> topicQueryResList = gson.fromJson(jsonData.toString(),
+                new TypeToken<List<TopicQueryRes>>() {
+                }.getType());
+        for (TopicQueryRes topicQueryRes : topicQueryResList) {
+            String totalCfgNumPart = topicQueryRes.getTotalCfgNumPart();
+            partitionCount = partitionCount + (int) Math.ceil(Double.parseDouble(totalCfgNumPart));
+        }
+        clusterVo.setTopicCount(topicSize);
+        clusterVo.setPartitionCount(partitionCount);
+        return clusterVo;
+    }
+
+    /**
+     * query Consumer group count
+     *
+     * @param clusterId
+     * @return
+     */
+    public int getConsumerGroupCount(Integer clusterId) {
+        String queryUrl = masterService.getQueryCountUrl(clusterId, TubeConst.QUERY_CONSUMER_GROUP_INFO);
+        int consumerGroupCount = 0;
+        String groupData = masterService.queryMaster(queryUrl);
+        JsonObject jsonObject = gson.fromJson(groupData, JsonObject.class);
+        JsonElement data = jsonObject.get("data");
+        JsonArray jsonData = gson.fromJson(data, JsonArray.class);
+        List<ConsumerGroupInfoRes> groupList = gson.fromJson(jsonData.toString(),
+                new TypeToken<List<ConsumerGroupInfoRes>>() {
+                }.getType());
+        for (ConsumerGroupInfoRes groupInfoRes : groupList) {
+            consumerGroupCount = consumerGroupCount + (int) Math.ceil(groupInfoRes.getGroupCount());
+        }
+        return consumerGroupCount;
+    }
+
+    /**
+     * query consumer count
+     */
+    public int getConsumerCount(Integer clusterId) {
+        String queryUrl = masterService.getQueryCountUrl(clusterId, TubeConst.QUERY_CONSUMER_INFO);
+        String queryMaster = masterService.queryMaster(queryUrl);
+        JsonObject jsonObject = gson.fromJson(queryMaster, JsonObject.class);
+        JsonElement data = jsonObject.get("data");
+        JsonArray jsonData = gson.fromJson(data, JsonArray.class);
+        int consumerCount = 0;
+        List<ConsumerInfoRes> topicViewResList = gson.fromJson(jsonData.toString(),
+                new TypeToken<List<ConsumerInfoRes>>() {
+                }.getType());
+        for (ConsumerInfoRes consumerInfoRes : topicViewResList) {
+            consumerCount = (int) Math.ceil(consumerInfoRes.getConsumerNum());
+        }
+        return consumerCount;
+    }
+
+    /**
+     * query store count
+     */
+    public int getStoreCount(Integer clusterId) {
+        String queryUrl = masterService.getQueryCountUrl(clusterId, TubeConst.TOPIC_VIEW);
+        JsonObject jsonObject = gson.fromJson(masterService.queryMaster(queryUrl), JsonObject.class);
+        JsonElement getData = jsonObject.get("data");
+        JsonArray fromJson = gson.fromJson(getData, JsonArray.class);
+        int storeCount = 0;
+        List<TopicViewRes> topicViewResList = gson.fromJson(fromJson.toString(),
+                new TypeToken<List<TopicViewRes>>() {
+                }.getType());
+        for (TopicViewRes topicViewRes : topicViewResList) {
+            storeCount = storeCount + (int) Math.ceil(topicViewRes.getTotalCfgNumStore());
+        }
+        return storeCount;
+    }
+
 }
diff --git a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/cluster/vo/ClusterVo.java b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/cluster/vo/ClusterVo.java
index ab5b87a..500873c 100644
--- a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/cluster/vo/ClusterVo.java
+++ b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/cluster/vo/ClusterVo.java
@@ -26,4 +26,11 @@ public class ClusterVo {
     private Long clusterId;
     private String clusterName;
     private String masterIp;
+    private int reloadBrokerSize;
+    private int brokerCount;
+    private int topicCount;
+    private int storeCount;
+    private int partitionCount;
+    private int consumerGroupCount;
+    private int consumerCount;
 }
diff --git a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/group/result/ConsumerGroupInfoRes.java b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/group/result/ConsumerGroupInfoRes.java
new file mode 100644
index 0000000..71a5ac4
--- /dev/null
+++ b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/group/result/ConsumerGroupInfoRes.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.tubemq.manager.controller.group.result;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ConsumerGroupInfoRes {
+    private String topicName;
+    private boolean isEnable;
+    private String createUser;
+    private String createDate;
+    private List<AuthConsumeGroup> authConsumeGroup;
+    private double groupCount;
+    private List<AuthFilterCondSet> authFilterCondSet;
+    private double filterCount;
+
+    @Data
+    private static class AuthConsumeGroup {
+        private String topicName;
+        private String groupName;
+        private String createUser;
+        private String createDate;
+    }
+
+    @Data
+    private static class AuthFilterCondSet {
+        private String topicName;
+        private String groupName;
+        private double condStatus;
+        private String filterConds;
+        private String createUser;
+        private String createDate;
+    }
+}
diff --git a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/cluster/vo/ClusterVo.java b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/group/result/ConsumerInfoRes.java
similarity index 78%
copy from inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/cluster/vo/ClusterVo.java
copy to inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/group/result/ConsumerInfoRes.java
index ab5b87a..0b606ea 100644
--- a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/cluster/vo/ClusterVo.java
+++ b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/group/result/ConsumerInfoRes.java
@@ -15,15 +15,13 @@
  * limitations under the License.
  */
 
-package org.apache.inlong.tubemq.manager.controller.cluster.vo;
+package org.apache.inlong.tubemq.manager.controller.group.result;
 
 import lombok.Data;
-import lombok.NoArgsConstructor;
 
 @Data
-@NoArgsConstructor
-public class ClusterVo {
-    private Long clusterId;
-    private String clusterName;
-    private String masterIp;
+public class ConsumerInfoRes {
+    private String consumeGroup;
+    private String topicSet;
+    private Double consumerNum;
 }
diff --git a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/topic/result/TopicInfoRes.java b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/topic/result/TopicInfoRes.java
new file mode 100644
index 0000000..f62c2b8
--- /dev/null
+++ b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/topic/result/TopicInfoRes.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.tubemq.manager.controller.topic.result;
+
+import lombok.Data;
+
+@Data
+public class TopicInfoRes {
+    private String topicName;
+    private String topicStatusId;
+    private String brokerId;
+    private String brokerIp;
+    private String brokerPort;
+    private String numPartitions;
+    private String unflushThreshold;
+    private String unflushStringerval;
+    private String unflushDataHold;
+    private String deleteWhen;
+    private String deletePolicy;
+    private boolean acceptPublish;
+    private boolean acceptSubscribe;
+    private String numTopicStores;
+    private String memCacheMsgSizeInMB;
+    private String memCacheFlushStringvl;
+    private String memCacheMsgCntInK;
+    private String maxMsgSizeInMB;
+    private String createUser;
+    private String createDate;
+    private String modifyUser;
+    private String modifyDate;
+    private TopicRunInfo runInfo;
+
+    @Data
+    private static class TopicRunInfo {
+        private boolean acceptPublish;
+        private boolean acceptSubscribe;
+        private String numPartitions;
+        private String numTopicStores;
+        private String brokerManageStatus;
+    }
+}
diff --git a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/topic/result/TopicQueryRes.java b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/topic/result/TopicQueryRes.java
new file mode 100644
index 0000000..22b02a0
--- /dev/null
+++ b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/topic/result/TopicQueryRes.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.tubemq.manager.controller.topic.result;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TopicQueryRes {
+    private String topicName;
+    private List<TopicInfoRes> topicInfo;
+    private String infoCount;
+    private String totalCfgNumPart;
+    private boolean isSrvAcceptPublish;
+    private boolean isSrvAcceptSubscribe;
+    private String totalRunNumPartCount;
+    private TopicAuthInfo authData;
+
+    @Data
+    private static class TopicAuthInfo {
+        private boolean enableAuthControl;
+        private String createUser;
+        private String createDate;
+        private List<AuthConsumeGroupInfo> authConsumeGroup;
+        private String  groupCount;
+        private List<AuthFilterCondSet> authFilterCondSet;
+        private String filterCount;
+
+        @Data
+        private static class AuthConsumeGroupInfo {
+            private String groupName;
+            private String createUser;
+            private String createDate;
+        }
+
+        @Data
+        private static class AuthFilterCondSet {
+            private String groupName;
+            private String condStatus;
+            private String filterConds;
+            private String createUser;
+            private String createDate;
+        }
+    }
+}
diff --git a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/cluster/vo/ClusterVo.java b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/topic/result/TopicViewRes.java
similarity index 67%
copy from inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/cluster/vo/ClusterVo.java
copy to inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/topic/result/TopicViewRes.java
index ab5b87a..31ecf02 100644
--- a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/cluster/vo/ClusterVo.java
+++ b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/controller/topic/result/TopicViewRes.java
@@ -15,15 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.inlong.tubemq.manager.controller.cluster.vo;
+package org.apache.inlong.tubemq.manager.controller.topic.result;
 
 import lombok.Data;
-import lombok.NoArgsConstructor;
 
 @Data
-@NoArgsConstructor
-public class ClusterVo {
-    private Long clusterId;
-    private String clusterName;
-    private String masterIp;
+public class TopicViewRes {
+    private String topicName;
+    private double totalCfgNumStore;
+    private double totalRunNumStore;
+    private double totalCfgNumPart;
+    private double totalRunNumPartCount;
+    private boolean isSrvAcceptPublish;
+    private boolean isSrvAcceptSubscribe;
+    private boolean enableAuthControl;
 }
diff --git a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/service/MasterServiceImpl.java b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/service/MasterServiceImpl.java
index 917c1a4..f9ebd18 100644
--- a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/service/MasterServiceImpl.java
+++ b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/service/MasterServiceImpl.java
@@ -172,4 +172,12 @@ public class MasterServiceImpl implements MasterService {
         return requestMaster(url);
     }
 
+    @Override
+    public String getQueryCountUrl(Integer clusterId, String method) {
+        MasterEntry masterEntry =
+                masterRepository.findMasterEntryByClusterIdEquals(clusterId);
+        return TubeConst.SCHEMA + masterEntry.getIp() + ":" + masterEntry.getWebPort()
+                + method + "&" + "clusterId=" + clusterId;
+    }
+
 }
diff --git a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/service/TubeConst.java b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/service/TubeConst.java
index b7a4287..ef851f9 100644
--- a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/service/TubeConst.java
+++ b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/service/TubeConst.java
@@ -34,6 +34,10 @@ public class TubeConst {
             "/webapi.htm?type=op_modify&method=admin_add_new_topic_record";
     public static final String RELOAD_BROKER =
             "/webapi.htm?type=op_modify&method=admin_reload_broker_configure";
+    public static final String QUERY_CONSUMER_GROUP_INFO =
+            "/webapi.htm?type=op_query&method=admin_query_topic_authorize_control";
+    public static final String QUERY_CONSUMER_INFO =
+            "/webapi.htm?type=op_query&method=admin_query_sub_info";
 
     /**
      * http method type
diff --git a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/service/interfaces/MasterService.java b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/service/interfaces/MasterService.java
index 9886b09..c94b7af 100644
--- a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/service/interfaces/MasterService.java
+++ b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/service/interfaces/MasterService.java
@@ -92,4 +92,6 @@ public interface MasterService {
      * @return
      */
     TubeMQResult checkMasterNodeStatus(String masterIp, Integer masterPort);
+
+    String getQueryCountUrl(Integer clusterId, String method);
 }
diff --git a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/utils/ConvertUtils.java b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/utils/ConvertUtils.java
index 1715013..65b7bae 100644
--- a/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/utils/ConvertUtils.java
+++ b/inlong-tubemq/tubemq-manager/src/main/java/org/apache/inlong/tubemq/manager/utils/ConvertUtils.java
@@ -111,11 +111,19 @@ public class ConvertUtils {
         return StringUtils.join(queryList, "&");
     }
 
-    public static ClusterVo convertToClusterVo(ClusterEntry clusterEntry, MasterEntry masterEntry) {
+    public static ClusterVo convertToClusterVo(ClusterEntry clusterEntry,
+                                               MasterEntry masterEntry, ClusterVo clusterVo) {
         ClusterVo cluster = new ClusterVo();
         cluster.setClusterId(clusterEntry.getClusterId());
         cluster.setMasterIp(masterEntry.getIp());
         cluster.setClusterName(clusterEntry.getClusterName());
+        cluster.setReloadBrokerSize(clusterEntry.getReloadBrokerSize());
+        cluster.setBrokerCount(clusterVo.getBrokerCount());
+        cluster.setTopicCount(clusterVo.getTopicCount());
+        cluster.setPartitionCount(clusterVo.getPartitionCount());
+        cluster.setConsumerGroupCount(clusterVo.getConsumerGroupCount());
+        cluster.setConsumerCount(clusterVo.getConsumerCount());
+        cluster.setStoreCount(clusterVo.getStoreCount());
         return cluster;
     }