diff --git a/src/main/java/org/apache/rocketmq/dashboard/controller/ConsumerController.java b/src/main/java/org/apache/rocketmq/dashboard/controller/ConsumerController.java index f636945..68becd1 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/ConsumerController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/ConsumerController.java @@ -47,8 +47,8 @@ public class ConsumerController { @RequestMapping(value = "/groupList.query") @ResponseBody - public Object list() { - return consumerService.queryGroupList(); + public Object list(@RequestParam(value = "skipSysGroup", required = false) boolean skipSysGroup) { + return consumerService.queryGroupList(skipSysGroup); } @RequestMapping(value = "/group.query") diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/ConsumerService.java b/src/main/java/org/apache/rocketmq/dashboard/service/ConsumerService.java index 2c18f98..6f4965c 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/ConsumerService.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/ConsumerService.java @@ -31,7 +31,7 @@ import java.util.Map; import java.util.Set; public interface ConsumerService { - List queryGroupList(); + List queryGroupList(boolean skipSysGroup); GroupConsumeInfo queryGroup(String consumerGroup); diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/ConsumerServiceImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/ConsumerServiceImpl.java index 37073d7..4e6c637 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/ConsumerServiceImpl.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/ConsumerServiceImpl.java @@ -24,13 +24,16 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.common.MQVersion; +import org.apache.rocketmq.common.MixAll; import org.apache.rocketmq.common.admin.ConsumeStats; import org.apache.rocketmq.common.admin.RollbackStats; import org.apache.rocketmq.common.message.MessageQueue; @@ -62,8 +65,21 @@ import static com.google.common.base.Throwables.propagate; public class ConsumerServiceImpl extends AbstractCommonService implements ConsumerService { private Logger logger = LoggerFactory.getLogger(ConsumerServiceImpl.class); + private static final Set SYSTEM_GROUP_SET = new HashSet<>(); + + static { + SYSTEM_GROUP_SET.add(MixAll.TOOLS_CONSUMER_GROUP); + SYSTEM_GROUP_SET.add(MixAll.FILTERSRV_CONSUMER_GROUP); + SYSTEM_GROUP_SET.add(MixAll.SELF_TEST_CONSUMER_GROUP); + SYSTEM_GROUP_SET.add(MixAll.ONS_HTTP_PROXY_GROUP); + SYSTEM_GROUP_SET.add(MixAll.CID_ONSAPI_PULL_GROUP); + SYSTEM_GROUP_SET.add(MixAll.CID_ONSAPI_PERMISSION_GROUP); + SYSTEM_GROUP_SET.add(MixAll.CID_ONSAPI_OWNER_GROUP); + SYSTEM_GROUP_SET.add(MixAll.CID_SYS_RMQ_TRANS); + } + @Override - public List queryGroupList() { + public List queryGroupList(boolean skipSysGroup) { Set consumerGroupSet = Sets.newHashSet(); try { ClusterInfo clusterInfo = mqAdminExt.examineBrokerClusterInfo(); @@ -79,6 +95,14 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum for (String consumerGroup : consumerGroupSet) { groupConsumeInfoList.add(queryGroup(consumerGroup)); } + if (!skipSysGroup) { + groupConsumeInfoList.stream().map(group -> { + if (SYSTEM_GROUP_SET.contains(group.getGroup())) { + group.setGroup(String.format("%s%s", "%SYS%", group.getGroup())); + } + return group; + }).collect(Collectors.toList()); + } Collections.sort(groupConsumeInfoList); return groupConsumeInfoList; } diff --git a/src/main/resources/static/src/consumer.js b/src/main/resources/static/src/consumer.js index 0059192..6641dd8 100644 --- a/src/main/resources/static/src/consumer.js +++ b/src/main/resources/static/src/consumer.js @@ -43,6 +43,8 @@ module.controller('consumerController', ['$scope', 'ngDialog', '$http', 'Notific }; $scope.userRole = $window.sessionStorage.getItem("userrole"); $scope.writeOperationEnabled = $scope.userRole == null ? true : ($scope.userRole == 1 ? true : false); + $scope.filterNormal = true; + $scope.filterSystem = false; $scope.doSort = function () {// todo how to change this fe's code ? (it's dirty) if ($scope.sortKey == 'diffTotal') { @@ -125,13 +127,37 @@ module.controller('consumerController', ['$scope', 'ngDialog', '$http', 'Notific $scope.filterList(1) }); + $scope.$watch('filterNormal', function () { + $scope.filterList(1); + }); + + $scope.$watch('filterSystem', function () { + $scope.filterList(1); + }); + + $scope.filterByType = function (str) { + if ($scope.filterSystem) { + if (str.startsWith("%S")) { + return true + } + } + if ($scope.filterNormal) { + if (str.startsWith("%") == false) { + return true + } + } + return false; + }; + $scope.filterList = function (currentPage) { var lowExceptStr = $scope.filterStr.toLowerCase(); var canShowList = []; $scope.allConsumerGrouopList.forEach(function (element) { console.log(element) - if (element.group.toLowerCase().indexOf(lowExceptStr) != -1) { - canShowList.push(element); + if ($scope.filterByType(element.group)) { + if (element.group.toLowerCase().indexOf(lowExceptStr) != -1) { + canShowList.push(element); + } } }); $scope.paginationConf.totalItems = canShowList.length; diff --git a/src/main/resources/static/view/pages/consumer.html b/src/main/resources/static/view/pages/consumer.html index b973ad8..1f952a8 100644 --- a/src/main/resources/static/view/pages/consumer.html +++ b/src/main/resources/static/view/pages/consumer.html @@ -24,27 +24,25 @@ -
- -
-
- -
-
- - {{'AUTO_REFRESH' | translate}} - -
+ {{'NORMAL' | translate}} + + {{'SYSTEM' | translate}} + + + + + {{'AUTO_REFRESH' | translate}} +
- +
@@ -55,15 +53,17 @@ - - + + - - +
{{ 'SUBSCRIPTION_GROUP' | translate}} {{ 'QUANTITY' | translate}}{{ 'DELAY' | translate}} {{ 'OPERATION' | translate}}
{{consumerGroup.group}}
+ {{sysFlag?consumerGroup.group.substring(5):consumerGroup.group}} {{consumerGroup.count}} {{consumerGroup.version}} {{consumerGroup.consumeType}} {{consumerGroup.messageModel}} {{consumerGroup.consumeTps}} {{consumerGroup.diffTotal}} + @@ -284,7 +284,7 @@
- +
@@ -292,7 +292,7 @@
- +
+
Total {{paginationConf.totalItems}} Messages
-
Total {{paginationConf.totalItems}} Messages
-
+
@@ -65,7 +65,7 @@ {{ 'SEARCH' | translate}}
- +
@@ -91,84 +91,87 @@ +
Only Return 64 Messages
-
Only Return 64 Messages
- -
-
- -
-
-
- +
+ +
+ +
+
+
+ +
+
+
+ +
-
-
- - -
- - -
Message ID Tag
- - - - - - - - - - - - - - -
Message IDTagKeyStoreTimeOperation
{{item.msgId}}{{item.properties.TAGS}}{{item.properties.KEYS}}{{item.storeTimestamp | date:'yyyy-MM-dd HH:mm:ss'}} - - -
+ + + + + + + + + + + + + + + + + +
Message IDTagKeyStoreTimeOperation
{{item.msgId}}{{item.properties.TAGS}}{{item.properties.KEYS}}{{item.storeTimestamp | date:'yyyy-MM-dd HH:mm:ss'}} + + +
+
topic can't be empty if you producer client version>=v3.5.8
-
-
- -
-
-
- +
+ +
+
-
-
- - -
- - +
+
+ +
+
+
+ + +
+ + +
diff --git a/src/main/resources/static/view/pages/messageTrace.html b/src/main/resources/static/view/pages/messageTrace.html index 8f317ac..24b906f 100644 --- a/src/main/resources/static/view/pages/messageTrace.html +++ b/src/main/resources/static/view/pages/messageTrace.html @@ -15,8 +15,8 @@ ~ limitations under the License. -->
-
{{topic}}{{topic}}