You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by zh...@apache.org on 2022/01/04 10:02:14 UTC

[rocketmq-dashboard] branch master updated: [ISSUE #58] enable the service to support multiple namesrvs (#59)

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

zhangyang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git


The following commit(s) were added to refs/heads/master by this push:
     new 2d8bf00  [ISSUE #58] enable the service to support multiple namesrvs (#59)
2d8bf00 is described below

commit 2d8bf001b3caa5784947c94352f2235360b31e7c
Author: cserwen <cs...@163.com>
AuthorDate: Tue Jan 4 18:02:08 2022 +0800

    [ISSUE #58] enable the service to support multiple namesrvs (#59)
    
    * enable the service to support multiple namesrvs
    
    * use @ to split the namesrv of different clusters
    
    Co-authored-by: dengzhiwen1 <de...@xiaomi.com>
---
 .../apache/rocketmq/dashboard/config/RMQConfigure.java | 18 ++++++++++++++++++
 .../dashboard/service/impl/OpsServiceImpl.java         |  3 ++-
 src/main/resources/application.properties              |  5 +++--
 src/main/resources/static/src/ops.js                   |  3 ++-
 src/main/resources/static/view/pages/ops.html          |  8 +++++---
 .../dashboard/controller/BaseControllerTest.java       |  1 +
 6 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/src/main/java/org/apache/rocketmq/dashboard/config/RMQConfigure.java b/src/main/java/org/apache/rocketmq/dashboard/config/RMQConfigure.java
index 1dcd7df..d9149ef 100644
--- a/src/main/java/org/apache/rocketmq/dashboard/config/RMQConfigure.java
+++ b/src/main/java/org/apache/rocketmq/dashboard/config/RMQConfigure.java
@@ -16,6 +16,7 @@
  */
 package org.apache.rocketmq.dashboard.config;
 
+import com.google.common.base.Splitter;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.rocketmq.common.MixAll;
 import org.slf4j.Logger;
@@ -29,6 +30,7 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.http.HttpStatus;
 
 import java.io.File;
+import java.util.List;
 
 import static org.apache.rocketmq.client.ClientConfig.SEND_MESSAGE_WITH_VIP_CHANNEL_PROPERTY;
 
@@ -57,6 +59,8 @@ public class RMQConfigure {
 
     private Long timeoutMillis;
 
+    private String namesrvAddrs;
+
     public String getAccessKey() {
         return accessKey;
     }
@@ -77,6 +81,20 @@ public class RMQConfigure {
         return namesrvAddr;
     }
 
+    public String getNamesrvAddrs() {
+        return namesrvAddrs;
+    }
+
+    public void setNamesrvAddrs(String namesrvAddrs) {
+        if (StringUtils.isNotBlank(namesrvAddrs)) {
+            this.namesrvAddrs = namesrvAddrs;
+            List<String> nameSrvAddrList = Splitter.on("@").splitToList(this.namesrvAddrs);
+            if (!nameSrvAddrList.isEmpty()) {
+                this.setNamesrvAddr(nameSrvAddrList.get(0));
+            }
+        }
+    }
+
     public void setNamesrvAddr(String namesrvAddr) {
         if (StringUtils.isNotBlank(namesrvAddr)) {
             this.namesrvAddr = namesrvAddr;
diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/OpsServiceImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/OpsServiceImpl.java
index 2d98e12..1b92ac1 100644
--- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/OpsServiceImpl.java
+++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/OpsServiceImpl.java
@@ -46,7 +46,8 @@ public class OpsServiceImpl extends AbstractCommonService implements OpsService
     @Override
     public Map<String, Object> homePageInfo() {
         Map<String, Object> homePageInfoMap = Maps.newHashMap();
-        homePageInfoMap.put("namesvrAddrList", Splitter.on(";").splitToList(configure.getNamesrvAddr()));
+        homePageInfoMap.put("currentNamesrv", configure.getNamesrvAddr());
+        homePageInfoMap.put("namesvrAddrList", Splitter.on("@").splitToList(configure.getNamesrvAddrs()));
         homePageInfoMap.put("useVIPChannel", Boolean.valueOf(configure.getIsVIPChannel()));
         homePageInfoMap.put("useTLS", configure.isUseTLS());
         return homePageInfoMap;
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 335ac69..b0a6be0 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -31,8 +31,9 @@ spring.http.encoding.enabled=true
 spring.http.encoding.force=true
 logging.level.root=INFO
 logging.config=classpath:logback.xml
-#if this value is empty,use env value rocketmq.config.namesrvAddr  NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
-rocketmq.config.namesrvAddr=
+#if this value is empty,use env value rocketmq.config.namesrvAddr  NAMESRV_ADDR | now, default localhost:9876
+#use @ to distinct the namesrv of different clusters
+rocketmq.config.namesrvAddrs=
 #if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
 rocketmq.config.isVIPChannel=
 #timeout for mqadminExt, default 5000ms
diff --git a/src/main/resources/static/src/ops.js b/src/main/resources/static/src/ops.js
index 8aab329..c539080 100644
--- a/src/main/resources/static/src/ops.js
+++ b/src/main/resources/static/src/ops.js
@@ -30,6 +30,7 @@ app.controller('opsController', ['$scope', '$location', '$http', 'Notification',
             $scope.namesvrAddrList = resp.data.namesvrAddrList;
             $scope.useVIPChannel = resp.data.useVIPChannel;
             $scope.useTLS = resp.data.useTLS;
+            $scope.selectedNamesrv = resp.data.currentNamesrv;
         } else {
             Notification.error({message: resp.errMsg, delay: 2000});
         }
@@ -43,7 +44,7 @@ app.controller('opsController', ['$scope', '$location', '$http', 'Notification',
         $http({
             method: "POST",
             url: "ops/updateNameSvrAddr.do",
-            params: {nameSvrAddrList: $scope.namesvrAddrList.join(";")}
+            params: {nameSvrAddrList: $scope.selectedNamesrv}
         }).success(function (resp) {
             if (resp.status == 0) {
                 Notification.info({message: "SUCCESS", delay: 2000});
diff --git a/src/main/resources/static/view/pages/ops.html b/src/main/resources/static/view/pages/ops.html
index 8dc0f4d..55ba6b9 100644
--- a/src/main/resources/static/view/pages/ops.html
+++ b/src/main/resources/static/view/pages/ops.html
@@ -17,9 +17,11 @@
 <div class="container-fluid" id="deployHistoryList">
     <div class="page-content">
         <h2 class="md-title">NameServerAddressList</h2>
-        <div class="pull-left">
-            <md-chips ng-model="namesvrAddrList" md-on-add="eleChange(namesvrAddrList)"
-                      md-on-remove="eleChange(namesvrAddrList)" readonly="inputReadonly" md-removable="ctrl.removable"></md-chips>
+        <div class="pull-left" style="min-width: 400px; max-width: 500px; padding: 10px 10px 10px 0">
+            <select ng-model="selectedNamesrv" chosen
+                    ng-options="x for x in namesvrAddrList"
+                    ng-change="updateNameSvrAddr()"
+                    required></select>
         </div>
         <div class="pull-left">
             <button class="btn btn-raised btn-sm btn-primary" type="button" ng-show="{{writeOperationEnabled}}"
diff --git a/src/test/java/org/apache/rocketmq/dashboard/controller/BaseControllerTest.java b/src/test/java/org/apache/rocketmq/dashboard/controller/BaseControllerTest.java
index e1fcb13..1061a3c 100644
--- a/src/test/java/org/apache/rocketmq/dashboard/controller/BaseControllerTest.java
+++ b/src/test/java/org/apache/rocketmq/dashboard/controller/BaseControllerTest.java
@@ -62,6 +62,7 @@ public abstract class BaseControllerTest extends BaseTest {
         when(configure.getAccessKey()).thenReturn("12345678");
         when(configure.getSecretKey()).thenReturn("rocketmq");
         when(configure.getNamesrvAddr()).thenReturn("127.0.0.1:9876");
+        when(configure.getNamesrvAddrs()).thenReturn("127.0.0.1:9876");
         when(configure.isACLEnabled()).thenReturn(true);
         when(configure.isUseTLS()).thenReturn(false);
     }