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/04/08 07:43:26 UTC

[rocketmq-dashboard] branch master updated: [ISSUE #58]Supports adding namesrvAddr cluster management (#66)

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

zhangjidi2016 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 daa181c  [ISSUE #58]Supports adding namesrvAddr cluster management (#66)
daa181c is described below

commit daa181ccfdce84db62662e9917a77f40481dad8e
Author: zhangjidi2016 <10...@qq.com>
AuthorDate: Fri Apr 8 15:43:21 2022 +0800

    [ISSUE #58]Supports adding namesrvAddr cluster management (#66)
    
    Co-authored-by: zhangjidi2016 <zh...@cmss.chinamobile.com>
---
 .../dashboard/controller/OpsController.java         | 13 +++++++++++--
 .../rocketmq/dashboard/service/OpsService.java      |  2 ++
 .../dashboard/service/impl/OpsServiceImpl.java      | 12 +++++++++++-
 src/main/resources/static/src/ops.js                | 21 +++++++++++++++++++++
 src/main/resources/static/view/pages/ops.html       |  9 +++++++++
 .../dashboard/controller/BaseControllerTest.java    |  2 +-
 .../dashboard/controller/OpsControllerTest.java     | 15 +++++++++++++++
 7 files changed, 70 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/apache/rocketmq/dashboard/controller/OpsController.java b/src/main/java/org/apache/rocketmq/dashboard/controller/OpsController.java
index bd365cb..6a56447 100644
--- a/src/main/java/org/apache/rocketmq/dashboard/controller/OpsController.java
+++ b/src/main/java/org/apache/rocketmq/dashboard/controller/OpsController.java
@@ -16,7 +16,9 @@
  */
 package org.apache.rocketmq.dashboard.controller;
 
+import com.google.common.base.Preconditions;
 import javax.annotation.Resource;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.rocketmq.dashboard.permisssion.Permission;
 import org.apache.rocketmq.dashboard.service.OpsService;
 import org.springframework.stereotype.Controller;
@@ -46,6 +48,15 @@ public class OpsController {
         return true;
     }
 
+    @RequestMapping(value = "/addNameSvrAddr.do", method = RequestMethod.POST)
+    @ResponseBody
+    public Object addNameSvrAddr(@RequestParam String newNamesrvAddr) {
+        Preconditions.checkArgument(StringUtils.isNotEmpty(newNamesrvAddr),
+            "namesrvAddr can not be blank");
+        opsService.addNameSvrAddr(newNamesrvAddr);
+        return true;
+    }
+
     @RequestMapping(value = "/updateIsVIPChannel.do", method = RequestMethod.POST)
     @ResponseBody
     public Object updateIsVIPChannel(@RequestParam String useVIPChannel) {
@@ -53,14 +64,12 @@ public class OpsController {
         return true;
     }
 
-
     @RequestMapping(value = "/rocketMqStatus.query", method = RequestMethod.GET)
     @ResponseBody
     public Object clusterStatus() {
         return opsService.rocketMqStatusCheck();
     }
 
-
     @RequestMapping(value = "/updateUseTLS.do", method = RequestMethod.POST)
     @ResponseBody
     public Object updateUseTLS(@RequestParam String useTLS) {
diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/OpsService.java b/src/main/java/org/apache/rocketmq/dashboard/service/OpsService.java
index 4394f44..ea1b85e 100644
--- a/src/main/java/org/apache/rocketmq/dashboard/service/OpsService.java
+++ b/src/main/java/org/apache/rocketmq/dashboard/service/OpsService.java
@@ -31,4 +31,6 @@ public interface OpsService {
     boolean updateIsVIPChannel(String useVIPChannel);
 
     boolean updateUseTLS(boolean useTLS);
+
+    void addNameSvrAddr(String 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 cb882f7..368df74 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
@@ -73,7 +73,8 @@ public class OpsServiceImpl extends AbstractCommonService implements OpsService
         return checkResultMap;
     }
 
-    @Override public boolean updateIsVIPChannel(String useVIPChannel) {
+    @Override
+    public boolean updateIsVIPChannel(String useVIPChannel) {
         configure.setIsVIPChannel(useVIPChannel);
         mqAdminExtPool.clear();
         return true;
@@ -85,4 +86,13 @@ public class OpsServiceImpl extends AbstractCommonService implements OpsService
         mqAdminExtPool.clear();
         return true;
     }
+
+    @Override
+    public void addNameSvrAddr(String namesrvAddr) {
+        List<String> namesrvAddrs = configure.getNamesrvAddrs();
+        if (namesrvAddrs != null && !namesrvAddrs.contains(namesrvAddr)) {
+            namesrvAddrs.add(namesrvAddr);
+        }
+        configure.setNamesrvAddrs(namesrvAddrs);
+    }
 }
diff --git a/src/main/resources/static/src/ops.js b/src/main/resources/static/src/ops.js
index c539080..034db9b 100644
--- a/src/main/resources/static/src/ops.js
+++ b/src/main/resources/static/src/ops.js
@@ -22,6 +22,7 @@ app.controller('opsController', ['$scope', '$location', '$http', 'Notification',
     $scope.userRole = $window.sessionStorage.getItem("userrole");
     $scope.writeOperationEnabled =  $scope.userRole == null ? true : ($scope.userRole == 1 ? true : false);
     $scope.inputReadonly = !$scope.writeOperationEnabled;
+    $scope.newNamesrvAddr = "";
     $http({
         method: "GET",
         url: "ops/homePage.query"
@@ -53,6 +54,26 @@ app.controller('opsController', ['$scope', '$location', '$http', 'Notification',
             }
         });
     };
+
+    $scope.addNameSvrAddr = function () {
+        $http({
+            method: "POST",
+            url: "ops/addNameSvrAddr.do",
+            params: {newNamesrvAddr: $scope.newNamesrvAddr}
+        }).success(function (resp) {
+            if (resp.status == 0) {
+                if ($scope.namesvrAddrList.indexOf($scope.newNamesrvAddr) == -1) {
+                    $scope.namesvrAddrList.push($scope.newNamesrvAddr);
+                }
+                $("#namesrvAddr").val("");
+                $scope.newNamesrvAddr = "";
+                Notification.info({message: "SUCCESS", delay: 2000});
+            } else {
+                Notification.error({message: resp.errMsg, delay: 2000});
+            }
+        });
+    };
+
     $scope.updateIsVIPChannel = function () {
         $http({
             method: "POST",
diff --git a/src/main/resources/static/view/pages/ops.html b/src/main/resources/static/view/pages/ops.html
index 55ba6b9..8e0f4bc 100644
--- a/src/main/resources/static/view/pages/ops.html
+++ b/src/main/resources/static/view/pages/ops.html
@@ -28,6 +28,15 @@
                     ng-click="updateNameSvrAddr()">{{'UPDATE' | translate}}
             </button>
         </div>
+        <form class="form-inline pull-left" style="margin-left: 20px" ng-show="{{writeOperationEnabled}}">
+            <div class="form-group" style="margin: 0">
+                <label for="namesrvAddr">NamesrvAddr:</label>
+                <input id="namesrvAddr" class="form-control" style="width: 300px; margin: 0 10px 0 10px" type="text" ng-model="newNamesrvAddr" required/>
+                <button class="btn btn-raised btn-sm btn-primary" type="button"
+                        ng-click="addNameSvrAddr()"> {{ 'ADD' | translate}}
+                </button>
+            </div>
+        </form>
         <br/>
         <br/>
         <h2 class="md-title">IsUseVIPChannel</h2>
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 c3b89ae..4a85922 100644
--- a/src/test/java/org/apache/rocketmq/dashboard/controller/BaseControllerTest.java
+++ b/src/test/java/org/apache/rocketmq/dashboard/controller/BaseControllerTest.java
@@ -63,7 +63,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(Lists.asList("127.0.0.1:9876", new String[] {"127.0.0.2:9876"}));
+        when(configure.getNamesrvAddrs()).thenReturn(Lists.newArrayList("127.0.0.1:9876", "127.0.0.2:9876"));
         when(configure.isACLEnabled()).thenReturn(true);
         when(configure.isUseTLS()).thenReturn(false);
     }
diff --git a/src/test/java/org/apache/rocketmq/dashboard/controller/OpsControllerTest.java b/src/test/java/org/apache/rocketmq/dashboard/controller/OpsControllerTest.java
index ce3ce0e..1a2e819 100644
--- a/src/test/java/org/apache/rocketmq/dashboard/controller/OpsControllerTest.java
+++ b/src/test/java/org/apache/rocketmq/dashboard/controller/OpsControllerTest.java
@@ -35,6 +35,7 @@ import org.springframework.test.util.ReflectionTestUtils;
 import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
 
 import static org.hamcrest.Matchers.hasSize;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doNothing;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
@@ -83,6 +84,20 @@ public class OpsControllerTest extends BaseControllerTest {
         Assert.assertEquals(configure.getNamesrvAddr(), "127.0.0.1:9876");
     }
 
+    @Test
+    public void testAddNameSvrAddr() throws Exception {
+        final String url = "/ops/addNameSvrAddr.do";
+        {
+            doNothing().when(configure).setNamesrvAddrs(any());
+        }
+        requestBuilder = MockMvcRequestBuilders.post(url);
+        requestBuilder.param("newNamesrvAddr", "127.0.0.3:9876");
+        perform = mockMvc.perform(requestBuilder);
+        perform.andExpect(status().isOk())
+            .andExpect(jsonPath("$.data").value(true));
+        Assert.assertEquals(configure.getNamesrvAddrs().size(), 3);
+    }
+
     @Test
     public void testUpdateIsVIPChannel() throws Exception {
         final String url = "/ops/updateIsVIPChannel.do";