diff --git a/pom.xml b/pom.xml index e318d92..78fa7b7 100644 --- a/pom.xml +++ b/pom.xml @@ -103,6 +103,7 @@ 2.2.10 4.2 4.12 + 1.30 @@ -264,6 +265,11 @@ ${junit.version} test + + org.yaml + snakeyaml + ${snakeyaml.version} + 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 d9149ef..991a2d8 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/config/RMQConfigure.java +++ b/src/main/java/org/apache/rocketmq/dashboard/config/RMQConfigure.java @@ -16,7 +16,8 @@ */ package org.apache.rocketmq.dashboard.config; -import com.google.common.base.Splitter; +import java.util.ArrayList; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.rocketmq.common.MixAll; import org.slf4j.Logger; @@ -59,7 +60,7 @@ public class RMQConfigure { private Long timeoutMillis; - private String namesrvAddrs; + private List namesrvAddrs = new ArrayList<>(); public String getAccessKey() { return accessKey; @@ -81,17 +82,14 @@ public class RMQConfigure { return namesrvAddr; } - public String getNamesrvAddrs() { + public List getNamesrvAddrs() { return namesrvAddrs; } - public void setNamesrvAddrs(String namesrvAddrs) { - if (StringUtils.isNotBlank(namesrvAddrs)) { - this.namesrvAddrs = namesrvAddrs; - List nameSrvAddrList = Splitter.on("@").splitToList(this.namesrvAddrs); - if (!nameSrvAddrList.isEmpty()) { - this.setNamesrvAddr(nameSrvAddrList.get(0)); - } + public void setNamesrvAddrs(List namesrvAddrs) { + this.namesrvAddrs = namesrvAddrs; + if (CollectionUtils.isNotEmpty(namesrvAddrs)) { + this.setNamesrvAddr(namesrvAddrs.get(0)); } } 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 1b92ac1..cb882f7 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 @@ -16,7 +16,6 @@ */ package org.apache.rocketmq.dashboard.service.impl; -import com.google.common.base.Splitter; import com.google.common.collect.Maps; import java.util.List; import java.util.Map; @@ -47,7 +46,7 @@ public class OpsServiceImpl extends AbstractCommonService implements OpsService public Map homePageInfo() { Map homePageInfoMap = Maps.newHashMap(); homePageInfoMap.put("currentNamesrv", configure.getNamesrvAddr()); - homePageInfoMap.put("namesvrAddrList", Splitter.on("@").splitToList(configure.getNamesrvAddrs())); + homePageInfoMap.put("namesvrAddrList", 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 deleted file mode 100644 index b0a6be0..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,55 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -server.address=0.0.0.0 -server.port=8080 - -### SSL setting -#server.ssl.key-store=classpath:rmqcngkeystore.jks -#server.ssl.key-store-password=rocketmq -#server.ssl.keyStoreType=PKCS12 -#server.ssl.keyAlias=rmqcngkey - -#spring.application.index=true -spring.application.name=rocketmq-dashboard -spring.http.encoding.charset=UTF-8 -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, 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 -rocketmq.config.timeoutMillis= -#rocketmq-console's data path:dashboard/monitor -rocketmq.config.dataPath=/tmp/rocketmq-console/data -#set it false if you don't want use dashboard.default true -rocketmq.config.enableDashBoardCollect=true -#set the message track trace topic if you don't want use the default one -rocketmq.config.msgTrackTopicName= -rocketmq.config.ticketKey=ticket - -#Must create userInfo file: ${rocketmq.config.dataPath}/users.properties if the login is required -rocketmq.config.loginRequired=false - -#set the accessKey and secretKey if you used acl -#rocketmq.config.accessKey= -#rocketmq.config.secretKey= -rocketmq.config.useTLS=false diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..4a6a207 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,63 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +server: + port: 8080 + servlet: + encoding: + charset: UTF-8 + enabled: true + force: true +## SSL setting +# ssl: +# key-store: classpath:rmqcngkeystore.jks +# key-store-password: rocketmq +# key-store-type: PKCS12 +# key-alias: rmqcngkey + +spring: + application: + name: rocketmq-dashboard + +logging: + config: classpath:logback.xml + +rocketmq: + config: + # if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, default localhost:9876 + # configure multiple namesrv addresses to manage multiple different clusters + namesrvAddrs: + - 127.0.0.1:9876 + - 127.0.0.2:9876 + # if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true + isVIPChannel: + # timeout for mqadminExt, default 5000ms + timeoutMillis: + # rocketmq-console's data path:dashboard/monitor + dataPath: /tmp/rocketmq-console/data + # set it false if you don't want use dashboard.default true + enableDashBoardCollect: true + # set the message track trace topic if you don't want use the default one + msgTrackTopicName: + ticketKey: ticket + # must create userInfo file: ${rocketmq.config.dataPath}/users.properties if the login is required + loginRequired: false + useTLS: false + # set the accessKey and secretKey if you used acl + accessKey: # if version > 4.4.0 + secretKey: # if version > 4.4.0 + diff --git a/src/test/java/org/apache/rocketmq/dashboard/config/RMQConfigureTest.java b/src/test/java/org/apache/rocketmq/dashboard/config/RMQConfigureTest.java index e63caf3..0f7cad7 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/config/RMQConfigureTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/config/RMQConfigureTest.java @@ -17,6 +17,7 @@ package org.apache.rocketmq.dashboard.config; +import com.google.common.collect.Lists; import java.io.File; import org.junit.Assert; import org.junit.Test; @@ -39,6 +40,7 @@ public class RMQConfigureTest { rmqConfigure.setLoginRequired(true); rmqConfigure.setNamesrvAddr("127.0.0.1:9876"); rmqConfigure.setTimeoutMillis(3000L); + rmqConfigure.setNamesrvAddrs(Lists.asList("127.0.0.1:9876", new String[] {"127.0.0.2:9876"})); } @Test @@ -54,6 +56,7 @@ public class RMQConfigureTest { Assert.assertTrue(rmqConfigure.isEnableDashBoardCollect()); Assert.assertTrue(rmqConfigure.isLoginRequired()); Assert.assertEquals(rmqConfigure.getNamesrvAddr(), "127.0.0.1:9876"); + Assert.assertEquals(rmqConfigure.getNamesrvAddrs().size(), 2); Assert.assertEquals(rmqConfigure.getTimeoutMillis().longValue(), 3000L); ErrorPageRegistrar registrar = rmqConfigure.errorPageRegistrar(); registrar.registerErrorPages(new ErrorPageRegistry() { 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 1061a3c..c3b89ae 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/controller/BaseControllerTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/controller/BaseControllerTest.java @@ -17,6 +17,7 @@ package org.apache.rocketmq.dashboard.controller; +import com.google.common.collect.Lists; import org.apache.rocketmq.dashboard.BaseTest; import org.apache.rocketmq.dashboard.config.RMQConfigure; import org.apache.rocketmq.dashboard.support.GlobalExceptionHandler; @@ -62,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("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.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 f864755..ce3ce0e 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/controller/OpsControllerTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/controller/OpsControllerTest.java @@ -64,7 +64,7 @@ public class OpsControllerTest extends BaseControllerTest { .andExpect(jsonPath("$.data").isMap()) .andExpect(jsonPath("$.data.useVIPChannel").value(false)) .andExpect(jsonPath("$.data.namesvrAddrList").isArray()) - .andExpect(jsonPath("$.data.namesvrAddrList", hasSize(1))) + .andExpect(jsonPath("$.data.namesvrAddrList", hasSize(2))) .andExpect(jsonPath("$.data.namesvrAddrList[0]").value("127.0.0.1:9876")); } @@ -96,7 +96,6 @@ public class OpsControllerTest extends BaseControllerTest { .andExpect(jsonPath("$.data").value(true)); } - @Test public void testUpdateUseTLS() throws Exception { final String url = "/ops/updateUseTLS.do";