From b4e562fb05a4128a38646604544949740f427fe1 Mon Sep 17 00:00:00 2001 From: zhangjidi2016 Date: Mon, 10 Jan 2022 11:00:06 +0800 Subject: [PATCH] [ISSUE #58]Supports adding namesrvAddr cluster management --- .../dashboard/controller/OpsController.java | 13 ++++++++++-- .../dashboard/service/OpsService.java | 2 ++ .../service/impl/OpsServiceImpl.java | 12 ++++++++++- src/main/resources/static/src/ops.js | 21 +++++++++++++++++++ src/main/resources/static/view/pages/ops.html | 9 ++++++++ .../controller/BaseControllerTest.java | 2 +- .../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 bd365cb3..6a564473 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 Object updateNameSvrAddr(@RequestParam String nameSvrAddrList) { 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 Object updateIsVIPChannel(@RequestParam String useVIPChannel) { 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 4394f442..ea1b85e2 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 cb882f72..368df740 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 Map rocketMqStatusCheck() { 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 boolean updateUseTLS(boolean useTLS) { mqAdminExtPool.clear(); return true; } + + @Override + public void addNameSvrAddr(String namesrvAddr) { + List 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 c5390804..034db9b1 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 55ba6b93..8e0f4bc9 100644 --- a/src/main/resources/static/view/pages/ops.html +++ b/src/main/resources/static/view/pages/ops.html @@ -28,6 +28,15 @@

NameServerAddressList

ng-click="updateNameSvrAddr()">{{'UPDATE' | translate}} +
+
+ + + +
+


IsUseVIPChannel

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 c3b89aef..4a859227 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 @@ protected void mockRmqConfigure() { 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 ce3ce0e3..1a2e819b 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.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 void testUpdateNameSvrAddr() throws Exception { 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";