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";