From e7cb315050a4af753ea361969e89ea11b4e33cd4 Mon Sep 17 00:00:00 2001 From: Akai <91858554+1294566108@users.noreply.github.com> Date: Tue, 11 Jun 2024 10:53:36 +0800 Subject: [PATCH] =?UTF-8?q?Support=20FIFO-Type=20SubGroup=20Add=E3=80=81Up?= =?UTF-8?q?date=20and=20Query=20For=20V5=20(#204)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Support dashboard v4-v5 switch And query for v5 topic * Modify tag name * Support subGroup FIFO Type Query and Update --------- Co-authored-by: yuanziwei --- .../dashboard/model/GroupConsumeInfo.java | 10 ++ .../service/impl/ConsumerServiceImpl.java | 11 ++ src/main/resources/static/src/consumer.js | 29 ++++- src/main/resources/static/src/controller.js | 5 +- .../resources/static/view/pages/consumer.html | 112 ++++++++++++++++++ 5 files changed, 159 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/GroupConsumeInfo.java b/src/main/java/org/apache/rocketmq/dashboard/model/GroupConsumeInfo.java index 5c86572..0d19af9 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/GroupConsumeInfo.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/GroupConsumeInfo.java @@ -27,6 +27,8 @@ public class GroupConsumeInfo implements Comparable { private MessageModel messageModel; private int consumeTps; private long diffTotal = -1; + private String subGroupType = "NORMAL"; + public String getGroup() { return group; @@ -91,4 +93,12 @@ public class GroupConsumeInfo implements Comparable { public void setVersion(String version) { this.version = version; } + + public String getSubGroupType() { + return subGroupType; + } + + public void setSubGroupType(String subGroupType) { + this.subGroupType = subGroupType; + } } 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 9fb51d6..a1cf9ff 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 @@ -177,6 +177,10 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum } ConsumerConnection consumerConnection = null; + boolean isFifoType = examineSubscriptionGroupConfig(consumerGroup) + .stream().map(ConsumerConfigInfo::getSubscriptionGroupConfig) + .allMatch(SubscriptionGroupConfig::isConsumeMessageOrderly); + try { consumerConnection = mqAdminExt.examineConsumerConnectionInfo(consumerGroup); } @@ -185,6 +189,13 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum } groupConsumeInfo.setGroup(consumerGroup); + if (SYSTEM_GROUP_SET.contains(consumerGroup)) { + groupConsumeInfo.setSubGroupType("SYSTEM"); + } else if (isFifoType) { + groupConsumeInfo.setSubGroupType("FIFO"); + } else { + groupConsumeInfo.setSubGroupType("NORMAL"); + } if (consumeStats != null) { groupConsumeInfo.setConsumeTps((int)consumeStats.getConsumeTps()); diff --git a/src/main/resources/static/src/consumer.js b/src/main/resources/static/src/consumer.js index 6641dd8..8c0833e 100644 --- a/src/main/resources/static/src/consumer.js +++ b/src/main/resources/static/src/consumer.js @@ -45,6 +45,7 @@ module.controller('consumerController', ['$scope', 'ngDialog', '$http', 'Notific $scope.writeOperationEnabled = $scope.userRole == null ? true : ($scope.userRole == 1 ? true : false); $scope.filterNormal = true; $scope.filterSystem = false; + $scope.filterFIFO = false; $scope.doSort = function () {// todo how to change this fe's code ? (it's dirty) if ($scope.sortKey == 'diffTotal') { @@ -75,7 +76,10 @@ module.controller('consumerController', ['$scope', 'ngDialog', '$http', 'Notific $http({ method: "GET", - url: "consumer/groupList.query" + url: "consumer/groupList.query", + params: { + skipSysGroup: false, + } }).success(function (resp) { if (resp.status == 0) { $scope.allConsumerGrouopList = resp.data; @@ -135,16 +139,28 @@ module.controller('consumerController', ['$scope', 'ngDialog', '$http', 'Notific $scope.filterList(1); }); - $scope.filterByType = function (str) { + $scope.$watch('filterFIFO', function () { + $scope.filterList(1); + }); + + $scope.filterByType = function (str, type,version) { if ($scope.filterSystem) { - if (str.startsWith("%S")) { + if (type === "SYSTEM") { return true } } if ($scope.filterNormal) { - if (str.startsWith("%") == false) { + if (type === "NORMAL") { return true } + if(!version && type === "FIFO"){ + return true; + } + } + if ($scope.filterFIFO) { + if (type === "FIFO") { + return true; + } } return false; }; @@ -154,7 +170,7 @@ module.controller('consumerController', ['$scope', 'ngDialog', '$http', 'Notific var canShowList = []; $scope.allConsumerGrouopList.forEach(function (element) { console.log(element) - if ($scope.filterByType(element.group)) { + if ($scope.filterByType(element.group, element.subGroupType, $scope.rmqVersion)) { if (element.group.toLowerCase().indexOf(lowExceptStr) != -1) { canShowList.push(element); } @@ -189,6 +205,7 @@ module.controller('consumerController', ['$scope', 'ngDialog', '$http', 'Notific subscriptionGroupConfig: { groupName: "", consumeEnable: true, + consumeMessageOrderly: false, consumeFromMinEnable: true, consumeBroadcastEnable: true, retryQueueNums: 1, @@ -211,7 +228,7 @@ module.controller('consumerController', ['$scope', 'ngDialog', '$http', 'Notific // Refresh topic list $scope.refreshConsumerData(); }, - template: 'consumerModifyDialog', + template: $scope.rmqVersion ? 'consumerModifyDialogForV5' : 'consumerModifyDialog', controller: 'consumerModifyDialogController', data: { consumerRequestList: request, diff --git a/src/main/resources/static/src/controller.js b/src/main/resources/static/src/controller.js index 4a861c4..1d71c67 100644 --- a/src/main/resources/static/src/controller.js +++ b/src/main/resources/static/src/controller.js @@ -15,7 +15,7 @@ * limitations under the License. */ app.controller('AppCtrl', ['$scope','$window','$translate','$http','Notification', function ($scope,$window,$translate, $http, Notification) { - $scope.rmqVersion = localStorage.getItem("isV5") === "true" ? true : false; + $scope.rmqVersion = localStorage.getItem("isV5"); $scope.changeTranslate = function(langKey){ $translate.use(langKey); @@ -23,7 +23,8 @@ app.controller('AppCtrl', ['$scope','$window','$translate','$http','Notification $scope.changeRMQVersion = function (version) { $scope.rmqVersion = version === 5; - localStorage.setItem("isV5", $scope.rmqVersion); + var v = version === 5; + localStorage.setItem("isV5", v); } $scope.logout = function(){ diff --git a/src/main/resources/static/view/pages/consumer.html b/src/main/resources/static/view/pages/consumer.html index 3a9ec17..47fddad 100644 --- a/src/main/resources/static/view/pages/consumer.html +++ b/src/main/resources/static/view/pages/consumer.html @@ -26,6 +26,8 @@ {{'NORMAL' | translate}} + {{'FIFO' | translate}} + {{'SYSTEM' | translate}}