diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 2cd7924a..00000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,31 +0,0 @@ -The issue tracker is **ONLY** used for bug report and feature request. - -Any question or RocketMQ proposal please use our [mailing lists](http://rocketmq.apache.org/about/contact/). - -**BUG REPORT** - -1. Please describe the issue you observed: - -- What did you do (The steps to reproduce)? - -- What did you expect to see? - -- What did you see instead? - -2. Please tell us about your environment: - -3. Other information (e.g. detailed explanation, logs, related issues, suggestions how to fix, etc): - -**FEATURE REQUEST** - -1. Please describe the feature you are requesting. - -2. Provide any additional detail on your proposed use case for this feature. - -2. Indicate the importance of this issue to you (blocker, must-have, should-have, nice-to-have). Are you currently using any workarounds to address this issue? - -4. If there are some sub-tasks using -[] for each subtask and create a corresponding issue to map to the sub task: - -- [sub-task1-issue-number](example_sub_issue1_link_here): sub-task1 description here, -- [sub-task2-issue-number](example_sub_issue2_link_here): sub-task2 description here, -- ... \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 00000000..4eb60623 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,112 @@ +# +# 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. +# + +name: Bug Report +title: "[Bug] Bug title " +description: Create a report to help us identify any unintended flaws, errors, or faults. +body: + - type: checkboxes + attributes: + label: Before Creating the Bug Report + options: + - label: > + I found a bug, not just asking a question, which should be created in [GitHub Discussions](https://github.com/apache/rocketmq/discussions) and [GitHub Issues](https://github.com/apache/rocketmq-dashboard/issues). + required: true + - label: > + I have searched the [GitHub Issues](https://github.com/apache/rocketmq/issues) and [GitHub Discussions](https://github.com/apache/rocketmq/discussions) and [GitHub Issues](https://github.com/apache/rocketmq-dashboard/issues) of this repository and believe that this is not a duplicate. + required: true + - label: > + I have confirmed that this bug belongs to the current repository, not other repositories of RocketMQ. + required: true + + - type: textarea + attributes: + label: Runtime platform environment + description: Describe the runtime platform environment. + placeholder: > + OS: (e.g., "Ubuntu 20.04") + OS: (e.g., "Windows Server 2019") + validations: + required: true + + - type: textarea + attributes: + label: RocketMQ version + description: Describe the RocketMQ version. + placeholder: > + branch: (e.g develop|4.9.x) + version: (e.g. 5.1.0|4.9.5) + Git commit id: (e.g. c88b5cfa72e204962929eea105687647146112c6) + validations: + required: true + + - type: textarea + attributes: + label: JDK Version + description: Run or Compiler version. + placeholder: > + Compiler: (e.g., "Oracle JDK 11.0.17") + OS: (e.g., "Ubuntu 20.04") + Runtime (if different from JDK above): (e.g., "Oracle JRE 8u251") + OS (if different from OS compiled on): (e.g., "Windows Server 2019") + validations: + required: false + + - type: textarea + attributes: + label: Describe the Bug + description: Describe what happened. + placeholder: > + A clear and concise description of what the bug is. + validations: + required: true + + - type: textarea + attributes: + label: Steps to Reproduce + description: Describe the steps to reproduce the bug here. + placeholder: > + If possible, provide a recipe for reproducing the error. + validations: + required: true + + - type: textarea + attributes: + label: What Did You Expect to See? + description: You expect to see result. + placeholder: > + A clear and concise description of what you expected to see. + validations: + required: true + + - type: textarea + attributes: + label: What Did You See Instead? + description: You instead to see result. + placeholder: > + A clear and concise description of what you saw instead. + validations: + required: true + + - type: textarea + attributes: + label: Additional Context + description: Additional context. + placeholder: > + Add any other context about the problem here. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..870c2b1d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,23 @@ +# +# 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. +# + + +blank_issues_enabled: false +contact_links: + - name: Ask Question + url: https://github.com/apache/rocketmq/discussions + about: Please go to GitHub Disccusions to ask questions diff --git a/.github/ISSUE_TEMPLATE/doc.yml b/.github/ISSUE_TEMPLATE/doc.yml new file mode 100644 index 00000000..d6991970 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/doc.yml @@ -0,0 +1,55 @@ +# +# 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. +# + +name: Documentation Related +title: "[Doc] Documentation Related " +description: I find some issues related to the documentation. +labels: [ "module/doc" ] +body: + - type: checkboxes + attributes: + label: Search before creation + description: > + Please make sure to search in the [issues](https://github.com/apache/rocketmq/issues) and [GitHub Issues](https://github.com/apache/rocketmq-dashboard/issues) + first to see whether the same issue was reported already. + options: + - label: > + I had searched in the [issues](https://github.com/apache/rocketmq/issues) and [GitHub Issues](https://github.com/apache/rocketmq-dashboard/issues) and found + no similar issues. + required: true + + - type: textarea + attributes: + label: Documentation Related + description: Describe the suggestion about document. + placeholder: > + e.g There is a typo + validations: + required: true + + - type: checkboxes + attributes: + label: Are you willing to submit PR? + description: > + This is absolutely not required, but we are happy to guide you in the contribution process + especially if you already have a good understanding of how to implement the fix. + options: + - label: Yes I am willing to submit a PR! + + - type: markdown + attributes: + value: "Thanks for completing our form!" diff --git a/.github/ISSUE_TEMPLATE/enhancement_request.yml b/.github/ISSUE_TEMPLATE/enhancement_request.yml new file mode 100644 index 00000000..cac503d1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/enhancement_request.yml @@ -0,0 +1,75 @@ +# +# 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. +# + + +name: Enhancement Request +title: "[Enhancement] Enhancement title" +description: Suggest an enhancement for this project +labels: [ "type/enhancement" ] +body: + - type: checkboxes + attributes: + label: Before Creating the Enhancement Request + description: > + Most of issues should be classified as bug or feature request. An issue should be considered as an enhancement when it proposes improvements to + existing functionality or user experience, without necessarily introducing new features or fixing existing bugs. + options: + - label: > + I have confirmed that this should be classified as an enhancement rather than a bug/feature. + required: true + + - type: textarea + attributes: + label: Summary + placeholder: > + A clear and concise description of the enhancement you would like to see in the project. + validations: + required: true + + - type: textarea + attributes: + label: Motivation + placeholder: > + Explain why you believe this enhancement is necessary, and how it benefits the project and community. + Include any specific use cases that you have in mind. + validations: + required: true + + - type: textarea + attributes: + label: Describe the Solution You'd Like + placeholder: > + Describe the enhancement you propose, detailing the change and implementation steps involved. + If you have multiple solutions, please list them separately. + validations: + required: true + + - type: textarea + attributes: + label: Describe Alternatives You've Considered + placeholder: > + List any alternative enhancements or implementations you have considered, and explain why they may not be as effective or appropriate. + validations: + required: true + + - type: textarea + attributes: + label: Additional Context + placeholder: > + Add any relevant context, screenshots, prototypes, or other supplementary information to help illustrate the enhancement. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 00000000..8361b8ae --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,58 @@ +# +# 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. +# + + +name: Feature Request +title: "[Feature] New feature title" +description: Suggest an idea for this project. +labels: [ "type/new feature" ] +body: + - type: textarea + attributes: + label: Is Your Feature Request Related to a Problem? + description: Please Describe It. + placeholder: > + A clear and concise description of what the problem is. + validations: + required: true + + - type: textarea + attributes: + label: Describe the Solution You'd Like + description: Describe how you solved it. + placeholder: > + A clear and concise description of what you want to happen. + validations: + required: true + + - type: textarea + attributes: + label: Describe Alternatives You've Considered + description: Describe your solution + placeholder: > + A clear and concise description of any alternative solutions or features you've considered. + validations: + required: true + + - type: textarea + attributes: + label: Additional Context + description: Additional context. + placeholder: > + Add any other context about the problem here. + validations: + required: false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 143dac89..00000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,20 +0,0 @@ -## What is the purpose of the change - -XXXXX - -## Brief changelog - -XX - -## Verifying this change - -XXXX - -Follow this checklist to help us incorporate your contribution quickly and easily. Notice, `it would be helpful if you could finish the following 5 checklist(the last one is not necessary)before request the community to review your PR`. - -- [x] Make sure there is a [Github issue](https://github.com/apache/rocketmq/issues) filed for the change (usually before you start working on it). Trivial changes like typos do not require a Github issue. Your pull request should address just this issue, without pulling in other changes - one PR resolves one issue. -- [x] Format the pull request title like `[ISSUE #123] Fix UnknownException when host config not exist`. Each commit in the pull request should have a meaningful subject line and body. -- [x] Write a pull request description that is detailed enough to understand what the pull request does, how, and why. -- [x] Write necessary unit-test(over 80% coverage) to verify your logic correction, more mock a little better when cross module dependency exist. If the new feature or significant change is committed, please remember to add integration-test in [test module](https://github.com/apache/rocketmq/tree/master/test). -- [x] Run `mvn -B clean apache-rat:check findbugs:findbugs checkstyle:checkstyle` to make sure basic checks pass. Run `mvn clean install -DskipITs` to make sure unit-test pass. Run `mvn clean test-compile failsafe:integration-test` to make sure integration-test pass. -- [ ] If this contribution is large, please file an [Apache Individual Contributor License Agreement](http://www.apache.org/licenses/#clas). diff --git a/pom.xml b/pom.xml index 2ebb77a4..57cb9d39 100644 --- a/pom.xml +++ b/pom.xml @@ -82,8 +82,8 @@ UTF-8 - 1.8 - 1.8 + 11 + 11 29.0-jre 2.1 diff --git a/src/main/java/org/apache/rocketmq/dashboard/admin/MQAdminFactory.java b/src/main/java/org/apache/rocketmq/dashboard/admin/MQAdminFactory.java index 8bbf19d5..9be920a2 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/admin/MQAdminFactory.java +++ b/src/main/java/org/apache/rocketmq/dashboard/admin/MQAdminFactory.java @@ -16,6 +16,7 @@ */ package org.apache.rocketmq.dashboard.admin; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.rocketmq.acl.common.AclClientRPCHook; @@ -25,13 +26,13 @@ import org.apache.rocketmq.tools.admin.DefaultMQAdminExt; import org.apache.rocketmq.tools.admin.MQAdminExt; +import java.util.Objects; + +@RequiredArgsConstructor @Slf4j public class MQAdminFactory { - private RMQConfigure rmqConfigure; - public MQAdminFactory(RMQConfigure rmqConfigure) { - this.rmqConfigure = rmqConfigure; - } + private final RMQConfigure rmqConfigure; public MQAdminExt getInstance() throws Exception { RPCHook rpcHook = null; @@ -41,8 +42,8 @@ public MQAdminExt getInstance() throws Exception { if (isEnableAcl) { rpcHook = new AclClientRPCHook(new SessionCredentials(accessKey, secretKey)); } - DefaultMQAdminExt mqAdminExt = null; - if (rmqConfigure.getTimeoutMillis() == null) { + DefaultMQAdminExt mqAdminExt; + if (Objects.isNull(rmqConfigure.getTimeoutMillis())) { mqAdminExt = new DefaultMQAdminExt(rpcHook); } else { mqAdminExt = new DefaultMQAdminExt(rpcHook, rmqConfigure.getTimeoutMillis()); @@ -52,6 +53,7 @@ public MQAdminExt getInstance() throws Exception { mqAdminExt.setInstanceName(Long.toString(System.currentTimeMillis())); mqAdminExt.start(); log.info("create MQAdmin instance {} success.", mqAdminExt); + return mqAdminExt; } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/admin/MQAdminPooledObjectFactory.java b/src/main/java/org/apache/rocketmq/dashboard/admin/MQAdminPooledObjectFactory.java index b68f9317..f98546af 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/admin/MQAdminPooledObjectFactory.java +++ b/src/main/java/org/apache/rocketmq/dashboard/admin/MQAdminPooledObjectFactory.java @@ -16,6 +16,8 @@ */ package org.apache.rocketmq.dashboard.admin; +import lombok.RequiredArgsConstructor; +import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; import org.apache.commons.pool2.PooledObject; @@ -24,6 +26,8 @@ import org.apache.rocketmq.common.protocol.body.ClusterInfo; import org.apache.rocketmq.tools.admin.MQAdminExt; +@Setter +@RequiredArgsConstructor @Slf4j public class MQAdminPooledObjectFactory implements PooledObjectFactory { @@ -31,9 +35,8 @@ public class MQAdminPooledObjectFactory implements PooledObjectFactory makeObject() throws Exception { - DefaultPooledObject pooledObject = new DefaultPooledObject<>( - mqAdminFactory.getInstance()); - return pooledObject; + return new DefaultPooledObject<>( + mqAdminFactory.getInstance()); } @Override @@ -67,13 +70,11 @@ public boolean validateObject(PooledObject p) { @Override public void activateObject(PooledObject p) { + // Intentionally left blank } @Override public void passivateObject(PooledObject p) { - } - - public void setMqAdminFactory(MQAdminFactory mqAdminFactory) { - this.mqAdminFactory = mqAdminFactory; + // Intentionally left blank } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/admin/MqAdminExtObjectPool.java b/src/main/java/org/apache/rocketmq/dashboard/admin/MqAdminExtObjectPool.java index 976c0093..2f45cc39 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/admin/MqAdminExtObjectPool.java +++ b/src/main/java/org/apache/rocketmq/dashboard/admin/MqAdminExtObjectPool.java @@ -16,32 +16,35 @@ */ package org.apache.rocketmq.dashboard.admin; +import lombok.RequiredArgsConstructor; import org.apache.commons.pool2.impl.GenericObjectPool; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.apache.rocketmq.dashboard.config.RMQConfigure; import org.apache.rocketmq.tools.admin.MQAdminExt; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MqAdminExtObjectPool { - @Autowired + public static final int DEFAULT_MAX_WAIT_MILLIS = 10000; + public static final int DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS = 20000; + private RMQConfigure rmqConfigure; @Bean public GenericObjectPool mqAdminExtPool() { GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig(); genericObjectPoolConfig.setTestWhileIdle(true); - genericObjectPoolConfig.setMaxWaitMillis(10000); - genericObjectPoolConfig.setTimeBetweenEvictionRunsMillis(20000); + genericObjectPoolConfig.setMaxWaitMillis(DEFAULT_MAX_WAIT_MILLIS); + genericObjectPoolConfig.setTimeBetweenEvictionRunsMillis(DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS); + MQAdminPooledObjectFactory mqAdminPooledObjectFactory = new MQAdminPooledObjectFactory(); MQAdminFactory mqAdminFactory = new MQAdminFactory(rmqConfigure); mqAdminPooledObjectFactory.setMqAdminFactory(mqAdminFactory); - GenericObjectPool genericObjectPool = new GenericObjectPool( - mqAdminPooledObjectFactory, - genericObjectPoolConfig); - return genericObjectPool; + + return new GenericObjectPool<>( + mqAdminPooledObjectFactory, + genericObjectPoolConfig); } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/aspect/admin/MQAdminAspect.java b/src/main/java/org/apache/rocketmq/dashboard/aspect/admin/MQAdminAspect.java index 56f37f69..090ff2c1 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/aspect/admin/MQAdminAspect.java +++ b/src/main/java/org/apache/rocketmq/dashboard/aspect/admin/MQAdminAspect.java @@ -24,7 +24,6 @@ import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Aspect @@ -32,10 +31,10 @@ @Slf4j public class MQAdminAspect { - @Autowired - private GenericObjectPool mqAdminExtPool; + private final GenericObjectPool mqAdminExtPool; - public MQAdminAspect() { + public MQAdminAspect(GenericObjectPool mqAdminExtPool) { + this.mqAdminExtPool = mqAdminExtPool; } @Pointcut("execution(* org.apache.rocketmq.dashboard.service.client.MQAdminExtImpl..*(..))") @@ -46,14 +45,14 @@ public void mQAdminMethodPointCut() { @Around(value = "mQAdminMethodPointCut()") public Object aroundMQAdminMethod(ProceedingJoinPoint joinPoint) throws Throwable { long start = System.currentTimeMillis(); - Object obj = null; + Object obj; try { MQAdminInstance.createMQAdmin(mqAdminExtPool); obj = joinPoint.proceed(); + return obj; } finally { MQAdminInstance.returnMQAdmin(mqAdminExtPool); log.debug("op=look method={} cost={}", joinPoint.getSignature().getName(), System.currentTimeMillis() - start); } - return obj; } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/aspect/admin/annotation/OriginalControllerReturnValue.java b/src/main/java/org/apache/rocketmq/dashboard/aspect/admin/annotation/OriginalControllerReturnValue.java index d3391bd1..81d4c76d 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/aspect/admin/annotation/OriginalControllerReturnValue.java +++ b/src/main/java/org/apache/rocketmq/dashboard/aspect/admin/annotation/OriginalControllerReturnValue.java @@ -17,11 +17,7 @@ package org.apache.rocketmq.dashboard.aspect.admin.annotation; -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; +import java.lang.annotation.*; @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) diff --git a/src/main/java/org/apache/rocketmq/dashboard/config/AuthWebMVCConfigurerAdapter.java b/src/main/java/org/apache/rocketmq/dashboard/config/AuthWebMVCConfigurerAdapter.java index accc5abc..e68c7644 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/config/AuthWebMVCConfigurerAdapter.java +++ b/src/main/java/org/apache/rocketmq/dashboard/config/AuthWebMVCConfigurerAdapter.java @@ -17,11 +17,10 @@ package org.apache.rocketmq.dashboard.config; +import lombok.RequiredArgsConstructor; import org.apache.rocketmq.dashboard.interceptor.AuthInterceptor; import org.apache.rocketmq.dashboard.model.UserInfo; import org.apache.rocketmq.dashboard.util.WebUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Configuration; import org.springframework.core.MethodParameter; import org.springframework.web.bind.support.WebDataBinderFactory; @@ -33,18 +32,16 @@ import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; -import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.List; @Configuration +@RequiredArgsConstructor public class AuthWebMVCConfigurerAdapter extends WebMvcConfigurerAdapter { - @Autowired - @Qualifier("authInterceptor") - private AuthInterceptor authInterceptor; - @Resource - RMQConfigure configure; + private final RMQConfigure configure; + + private final AuthInterceptor authInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { 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 1dcd7df1..24deef17 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,9 @@ */ package org.apache.rocketmq.dashboard.config; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.rocketmq.common.MixAll; import org.slf4j.Logger; @@ -34,60 +37,56 @@ @Configuration @ConfigurationProperties(prefix = "rocketmq.config") +@Slf4j public class RMQConfigure { - private Logger logger = LoggerFactory.getLogger(RMQConfigure.class); //use rocketmq.namesrv.addr first,if it is empty,than use system proerty or system env + @Getter private volatile String namesrvAddr = System.getProperty(MixAll.NAMESRV_ADDR_PROPERTY, System.getenv(MixAll.NAMESRV_ADDR_ENV)); + @Getter private volatile String isVIPChannel = System.getProperty(SEND_MESSAGE_WITH_VIP_CHANNEL_PROPERTY, "true"); + @Setter private String dataPath = "/tmp/rocketmq-console/data"; + @Getter private boolean enableDashBoardCollect; + @Setter + @Getter private boolean loginRequired = false; + @Setter + @Getter private String accessKey; + @Setter + @Getter private String secretKey; + @Setter + @Getter private boolean useTLS = false; + @Setter + @Getter private Long timeoutMillis; - public String getAccessKey() { - return accessKey; - } - - public void setAccessKey(String accessKey) { - this.accessKey = accessKey; - } - - public String getSecretKey() { - return secretKey; - } - - public void setSecretKey(String secretKey) { - this.secretKey = secretKey; - } - - public String getNamesrvAddr() { - return namesrvAddr; - } - public void setNamesrvAddr(String namesrvAddr) { if (StringUtils.isNotBlank(namesrvAddr)) { this.namesrvAddr = namesrvAddr; System.setProperty(MixAll.NAMESRV_ADDR_PROPERTY, namesrvAddr); - logger.info("setNameSrvAddrByProperty nameSrvAddr={}", namesrvAddr); + log.info("setNameSrvAddrByProperty nameSrvAddr={}", namesrvAddr); } } + public boolean isACLEnabled() { return !(StringUtils.isAnyBlank(this.accessKey, this.secretKey) || - StringUtils.isAnyEmpty(this.accessKey, this.secretKey)); + StringUtils.isAnyEmpty(this.accessKey, this.secretKey)); } + public String getRocketMqDashboardDataPath() { return dataPath; } @@ -96,52 +95,16 @@ public String getDashboardCollectData() { return dataPath + File.separator + "dashboard"; } - public void setDataPath(String dataPath) { - this.dataPath = dataPath; - } - - public String getIsVIPChannel() { - return isVIPChannel; - } - public void setIsVIPChannel(String isVIPChannel) { if (StringUtils.isNotBlank(isVIPChannel)) { this.isVIPChannel = isVIPChannel; System.setProperty(SEND_MESSAGE_WITH_VIP_CHANNEL_PROPERTY, isVIPChannel); - logger.info("setIsVIPChannel isVIPChannel={}", isVIPChannel); + log.info("setIsVIPChannel isVIPChannel={}", isVIPChannel); } } - public boolean isEnableDashBoardCollect() { - return enableDashBoardCollect; - } - public void setEnableDashBoardCollect(String enableDashBoardCollect) { - this.enableDashBoardCollect = Boolean.valueOf(enableDashBoardCollect); - } - - public boolean isLoginRequired() { - return loginRequired; - } - - public void setLoginRequired(boolean loginRequired) { - this.loginRequired = loginRequired; - } - - public boolean isUseTLS() { - return useTLS; - } - - public void setUseTLS(boolean useTLS) { - this.useTLS = useTLS; - } - - public Long getTimeoutMillis() { - return timeoutMillis; - } - - public void setTimeoutMillis(Long timeoutMillis) { - this.timeoutMillis = timeoutMillis; + this.enableDashBoardCollect = Boolean.parseBoolean(enableDashBoardCollect); } // Error Page process logic, move to a central configure later diff --git a/src/main/java/org/apache/rocketmq/dashboard/controller/ClusterController.java b/src/main/java/org/apache/rocketmq/dashboard/controller/ClusterController.java index c3e9fd29..cdfc54ba 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/ClusterController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/ClusterController.java @@ -16,33 +16,27 @@ */ package org.apache.rocketmq.dashboard.controller; +import lombok.RequiredArgsConstructor; import org.apache.rocketmq.dashboard.permisssion.Permission; import org.apache.rocketmq.dashboard.service.ClusterService; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.web.bind.annotation.ResponseBody; - -@Controller +@RestController @RequestMapping("/cluster") @Permission +@RequiredArgsConstructor public class ClusterController { - @Resource - private ClusterService clusterService; + private final ClusterService clusterService; - @RequestMapping(value = "/list.query", method = RequestMethod.GET) - @ResponseBody - public Object list() { - return clusterService.list(); + @GetMapping(value = "/list.query") + public ResponseEntity list() { + return ResponseEntity.ok(clusterService.queryClusterList()); } - @RequestMapping(value = "/brokerConfig.query", method = RequestMethod.GET) - @ResponseBody - public Object brokerConfig(@RequestParam String brokerAddr) { - return clusterService.getBrokerConfig(brokerAddr); + @GetMapping(value = "/brokerConfig.query") + public ResponseEntity brokerConfig(@RequestParam String brokerAddress) { + return ResponseEntity.ok(clusterService.getBrokerConfig(brokerAddress)); } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/controller/ConsumerController.java b/src/main/java/org/apache/rocketmq/dashboard/controller/ConsumerController.java index 68becd11..4ff41a6c 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/ConsumerController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/ConsumerController.java @@ -17,104 +17,96 @@ package org.apache.rocketmq.dashboard.controller; import com.google.common.base.Preconditions; -import javax.annotation.Resource; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.rocketmq.common.protocol.body.ConsumerConnection; import org.apache.rocketmq.dashboard.model.ConnectionInfo; +import org.apache.rocketmq.dashboard.model.ConsumerGroupRollBackStat; import org.apache.rocketmq.dashboard.model.request.ConsumerConfigInfo; import org.apache.rocketmq.dashboard.model.request.DeleteSubGroupRequest; import org.apache.rocketmq.dashboard.model.request.ResetOffsetRequest; import org.apache.rocketmq.dashboard.permisssion.Permission; import org.apache.rocketmq.dashboard.service.ConsumerService; import org.apache.rocketmq.dashboard.util.JsonUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; - -@Controller +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Optional; + +@RestController @RequestMapping("/consumer") @Permission +@RequiredArgsConstructor +@Slf4j public class ConsumerController { - private Logger logger = LoggerFactory.getLogger(ConsumerController.class); - @Resource - private ConsumerService consumerService; + private final ConsumerService consumerService; - @RequestMapping(value = "/groupList.query") - @ResponseBody - public Object list(@RequestParam(value = "skipSysGroup", required = false) boolean skipSysGroup) { - return consumerService.queryGroupList(skipSysGroup); + @GetMapping(value = "/groupList.query") + public ResponseEntity list(@RequestParam(value = "skipSysGroup", required = false) Boolean skipSysGroup) { + boolean skipSysGroupFound = Optional.ofNullable(skipSysGroup).orElse(false); + return ResponseEntity.ok(consumerService.queryGroupList(skipSysGroupFound)); } - @RequestMapping(value = "/group.query") - @ResponseBody - public Object groupQuery(@RequestParam String consumerGroup) { - return consumerService.queryGroup(consumerGroup); + @GetMapping(value = "/group.query") + public ResponseEntity groupQuery(@RequestParam String consumerGroup) { + return ResponseEntity.ok(consumerService.queryGroup(consumerGroup)); } - @RequestMapping(value = "/resetOffset.do", method = {RequestMethod.POST}) - @ResponseBody - public Object resetOffset(@RequestBody ResetOffsetRequest resetOffsetRequest) { - logger.info("op=look resetOffsetRequest={}", JsonUtil.obj2String(resetOffsetRequest)); - return consumerService.resetOffset(resetOffsetRequest); + @PostMapping(value = "/resetOffset.do") + public ResponseEntity resetOffset(@RequestBody ResetOffsetRequest resetOffsetRequest) { + return ResponseEntity.ok(callResetOffset(resetOffsetRequest)); } - @RequestMapping(value = "/skipAccumulate.do", method = {RequestMethod.POST}) - @ResponseBody - public Object skipAccumulate(@RequestBody ResetOffsetRequest resetOffsetRequest) { - logger.info("op=look resetOffsetRequest={}", JsonUtil.obj2String(resetOffsetRequest)); - return consumerService.resetOffset(resetOffsetRequest); + @PostMapping(value = "/skipAccumulate.do") + public ResponseEntity skipAccumulate(@RequestBody ResetOffsetRequest resetOffsetRequest) { + return ResponseEntity.ok(callResetOffset(resetOffsetRequest)); } - @RequestMapping(value = "/examineSubscriptionGroupConfig.query") - @ResponseBody - public Object examineSubscriptionGroupConfig(@RequestParam String consumerGroup) { - return consumerService.examineSubscriptionGroupConfig(consumerGroup); + @PostMapping(value = "/examineSubscriptionGroupConfig.query") + public ResponseEntity examineSubscriptionGroupConfig(@RequestParam String consumerGroup) { + return ResponseEntity.ok(consumerService.examineSubscriptionGroupConfig(consumerGroup)); } - @RequestMapping(value = "/deleteSubGroup.do", method = {RequestMethod.POST}) - @ResponseBody - public Object deleteSubGroup(@RequestBody DeleteSubGroupRequest deleteSubGroupRequest) { - return consumerService.deleteSubGroup(deleteSubGroupRequest); + @PostMapping(value = "/deleteSubGroup.do") + public ResponseEntity deleteSubGroup(@RequestBody DeleteSubGroupRequest deleteSubGroupRequest) { + return ResponseEntity.ok(consumerService.deleteSubGroup(deleteSubGroupRequest)); } - @RequestMapping(value = "/createOrUpdate.do", method = {RequestMethod.POST}) - @ResponseBody - public Object consumerCreateOrUpdateRequest(@RequestBody ConsumerConfigInfo consumerConfigInfo) { + @PostMapping(value = "/createOrUpdate.do") + public ResponseEntity consumerCreateOrUpdateRequest(@RequestBody ConsumerConfigInfo consumerConfigInfo) { Preconditions.checkArgument(CollectionUtils.isNotEmpty(consumerConfigInfo.getBrokerNameList()) || CollectionUtils.isNotEmpty(consumerConfigInfo.getClusterNameList()), - "clusterName or brokerName can not be all blank"); - return consumerService.createAndUpdateSubscriptionGroupConfig(consumerConfigInfo); + "clusterName or brokerName can not be all blank"); + return ResponseEntity.ok(consumerService.createAndUpdateSubscriptionGroupConfig(consumerConfigInfo)); } - @RequestMapping(value = "/fetchBrokerNameList.query", method = {RequestMethod.GET}) - @ResponseBody - public Object fetchBrokerNameList(@RequestParam String consumerGroup) { - return consumerService.fetchBrokerNameSetBySubscriptionGroup(consumerGroup); + @GetMapping(value = "/fetchBrokerNameList.query") + public ResponseEntity fetchBrokerNameList(@RequestParam String consumerGroup) { + return ResponseEntity.ok(consumerService.fetchBrokerNameSetBySubscriptionGroup(consumerGroup)); } - @RequestMapping(value = "/queryTopicByConsumer.query") - @ResponseBody - public Object queryConsumerByTopic(@RequestParam String consumerGroup) { - return consumerService.queryConsumeStatsListByGroupName(consumerGroup); + @GetMapping(value = "/queryTopicByConsumer.query") + public ResponseEntity queryConsumerByTopic(@RequestParam String consumerGroup) { + return ResponseEntity.ok(consumerService.queryConsumeStatsListByGroupName(consumerGroup)); } - @RequestMapping(value = "/consumerConnection.query") - @ResponseBody - public Object consumerConnection(@RequestParam(required = false) String consumerGroup) { + @GetMapping(value = "/consumerConnection.query") + public ResponseEntity consumerConnection(@RequestParam(required = false) String consumerGroup) { ConsumerConnection consumerConnection = consumerService.getConsumerConnection(consumerGroup); consumerConnection.setConnectionSet(ConnectionInfo.buildConnectionInfoHashSet(consumerConnection.getConnectionSet())); - return consumerConnection; + return ResponseEntity.ok(consumerConnection); } - @RequestMapping(value = "/consumerRunningInfo.query") - @ResponseBody - public Object getConsumerRunningInfo(@RequestParam String consumerGroup, @RequestParam String clientId, - @RequestParam boolean jstack) { - return consumerService.getConsumerRunningInfo(consumerGroup, clientId, jstack); + @GetMapping(value = "/consumerRunningInfo.query") + public ResponseEntity getConsumerRunningInfo(@RequestParam String consumerGroup, @RequestParam String clientId, + @RequestParam boolean jStack) { + return ResponseEntity.ok(consumerService.getConsumerRunningInfo(consumerGroup, clientId, jStack)); + } + + private Map callResetOffset(ResetOffsetRequest resetOffsetRequest) { + log.info("op=look resetOffsetRequest={}", JsonUtil.objectToString(resetOffsetRequest)); + return consumerService.resetOffset(resetOffsetRequest); } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/controller/DashboardController.java b/src/main/java/org/apache/rocketmq/dashboard/controller/DashboardController.java index 0b46144a..56546e34 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/DashboardController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/DashboardController.java @@ -17,44 +17,37 @@ package org.apache.rocketmq.dashboard.controller; -import javax.annotation.Resource; - import com.google.common.base.Strings; +import lombok.RequiredArgsConstructor; import org.apache.rocketmq.dashboard.permisssion.Permission; import org.apache.rocketmq.dashboard.service.DashboardService; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; -@Controller +@RestController @RequestMapping("/dashboard") @Permission +@RequiredArgsConstructor public class DashboardController { - @Resource - DashboardService dashboardService; + private final DashboardService dashboardService; - @RequestMapping(value = "/broker.query", method = RequestMethod.GET) - @ResponseBody - public Object broker(@RequestParam String date) { - return dashboardService.queryBrokerData(date); + @GetMapping(value = "/broker.query") + public ResponseEntity broker(@RequestParam String date) { + return ResponseEntity.ok(dashboardService.queryBrokerData(date)); } - @RequestMapping(value = "/topic.query", method = RequestMethod.GET) - @ResponseBody - public Object topic(@RequestParam String date, String topicName) { + @GetMapping(value = "/topic.query") + public ResponseEntity topic(@RequestParam String date, String topicName) { if (Strings.isNullOrEmpty(topicName)) { - return dashboardService.queryTopicData(date); + return ResponseEntity.ok(dashboardService.queryTopicData(date)); } - return dashboardService.queryTopicData(date,topicName); + return ResponseEntity.ok(dashboardService.queryTopicData(date, topicName)); } - @RequestMapping(value = "/topicCurrent", method = RequestMethod.GET) - @ResponseBody - public Object topicCurrent() { - return dashboardService.queryTopicCurrentData(); + @GetMapping(value = "/topicCurrent") + public ResponseEntity topicCurrent() { + return ResponseEntity.ok(dashboardService.queryTopicCurrentData()); } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/controller/DlqMessageController.java b/src/main/java/org/apache/rocketmq/dashboard/controller/DlqMessageController.java index 500040d5..75fd9186 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/DlqMessageController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/DlqMessageController.java @@ -17,8 +17,7 @@ package org.apache.rocketmq.dashboard.controller; import com.google.common.collect.Lists; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; import org.apache.rocketmq.common.MixAll; import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.dashboard.exception.ServiceException; @@ -28,35 +27,29 @@ import org.apache.rocketmq.dashboard.service.DlqMessageService; import org.apache.rocketmq.dashboard.util.ExcelUtil; import org.apache.rocketmq.tools.admin.MQAdminExt; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; -@Controller +@RestController @RequestMapping("/dlqMessage") @Permission +@RequiredArgsConstructor public class DlqMessageController { - @Resource - private DlqMessageService dlqMessageService; - - @Resource - private MQAdminExt mqAdminExt; + private final DlqMessageService dlqMessageService; + private final MQAdminExt mqAdminExt; - @RequestMapping(value = "/queryDlqMessageByConsumerGroup.query", method = RequestMethod.POST) - @ResponseBody - public Object queryDlqMessageByConsumerGroup(@RequestBody MessageQuery query) { - return dlqMessageService.queryDlqMessageByPage(query); + @PostMapping(value = "/queryDlqMessageByConsumerGroup.query") + public ResponseEntity queryDlqMessageByConsumerGroup(@RequestBody MessageQuery query) { + return ResponseEntity.ok(dlqMessageService.queryDlqMessageByPage(query)); } @GetMapping(value = "/exportDlqMessage.do") public void exportDlqMessage(HttpServletResponse response, @RequestParam String consumerGroup, - @RequestParam String msgId) { - MessageExt messageExt = null; + @RequestParam String msgId) { + MessageExt messageExt; try { String topic = MixAll.DLQ_GROUP_TOPIC_PREFIX + consumerGroup; messageExt = mqAdminExt.viewMessage(topic, msgId); @@ -67,7 +60,7 @@ public void exportDlqMessage(HttpServletResponse response, @RequestParam String try { ExcelUtil.writeExcel(response, Lists.newArrayList(excelModel), "dlq", "dlq", DlqMessageExcelModel.class); } catch (Exception e) { - throw new ServiceException(-1, String.format("export dlq message failed!")); + throw new ServiceException(-1, "export dlq message failed!"); } } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/controller/LoginController.java b/src/main/java/org/apache/rocketmq/dashboard/controller/LoginController.java index ac76768e..c6c6595e 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/LoginController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/LoginController.java @@ -17,6 +17,8 @@ package org.apache.rocketmq.dashboard.controller; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.dashboard.config.RMQConfigure; import org.apache.rocketmq.dashboard.model.LoginInfo; import org.apache.rocketmq.dashboard.model.LoginResult; @@ -25,55 +27,44 @@ import org.apache.rocketmq.dashboard.service.UserService; import org.apache.rocketmq.dashboard.support.JsonResult; import org.apache.rocketmq.dashboard.util.WebUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.Objects; -@Controller +@RestController @RequestMapping("/login") +@RequiredArgsConstructor +@Slf4j public class LoginController { - private Logger logger = LoggerFactory.getLogger(this.getClass()); - @Resource - private RMQConfigure configure; - - @Autowired - private UserService userService; + private final RMQConfigure configure; + private final UserService userService; @Value("${server.servlet.context-path:/}") private String contextPath; - @RequestMapping(value = "/check.query", method = RequestMethod.GET) - @ResponseBody - public Object check(HttpServletRequest request) { + @GetMapping(value = "/check.query") + public ResponseEntity check(HttpServletRequest request) { LoginInfo loginInfo = new LoginInfo(); - loginInfo.setLogined(WebUtil.getValueFromSession(request, WebUtil.USER_NAME) != null); loginInfo.setLoginRequired(configure.isLoginRequired()); - return loginInfo; + return ResponseEntity.ok(loginInfo); } - @RequestMapping(value = "/login.do", method = RequestMethod.POST) - @ResponseBody - public Object login(@RequestParam("username") String username, - @RequestParam(value = "password") String password, - HttpServletRequest request, - HttpServletResponse response) throws Exception { - logger.info("user:{} login", username); + @PostMapping(value = "/login.do") + public ResponseEntity login(@RequestParam("username") String username, + @RequestParam(value = "password") String password, + HttpServletRequest request, + HttpServletResponse response) throws Exception { + log.info("user:{} login", username); User user = userService.queryByUsernameAndPassword(username, password); - if (user == null) { + if (Objects.isNull(user)) { throw new IllegalArgumentException("Bad username or password!"); } else { user.setPassword(null); @@ -81,13 +72,11 @@ public Object login(@RequestParam("username") String username, WebUtil.setSessionValue(request, WebUtil.USER_INFO, userInfo); WebUtil.setSessionValue(request, WebUtil.USER_NAME, username); userInfo.setSessionId(WebUtil.getSessionId(request)); - LoginResult result = new LoginResult(username, user.getType(), contextPath); - return result; + return ResponseEntity.ok(new LoginResult(username, user.getType(), contextPath)); } } - @RequestMapping(value = "/logout.do", method = RequestMethod.POST) - @ResponseBody + @PostMapping(value = "/logout.do") public JsonResult logout(HttpServletRequest request) { WebUtil.removeSession(request); return new JsonResult<>(contextPath); diff --git a/src/main/java/org/apache/rocketmq/dashboard/controller/MessageController.java b/src/main/java/org/apache/rocketmq/dashboard/controller/MessageController.java index e4dfcd9f..fcc75b7a 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/MessageController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/MessageController.java @@ -17,6 +17,8 @@ package org.apache.rocketmq.dashboard.controller; import com.google.common.collect.Maps; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.common.Pair; import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult; import org.apache.rocketmq.dashboard.model.MessagePage; @@ -26,65 +28,53 @@ import org.apache.rocketmq.dashboard.service.MessageService; import org.apache.rocketmq.dashboard.util.JsonUtil; import org.apache.rocketmq.tools.admin.api.MessageTrack; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; import java.util.List; import java.util.Map; -@Controller +@RestController @RequestMapping("/message") @Permission -public class MessageController { - private Logger logger = LoggerFactory.getLogger(MessageController.class); - @Resource - private MessageService messageService; +@RequiredArgsConstructor +@Slf4j +public class MessageController { - @RequestMapping(value = "/viewMessage.query", method = RequestMethod.GET) - @ResponseBody - public Object viewMessage(@RequestParam(required = false) String topic, @RequestParam String msgId) { + private final MessageService messageService; + + @GetMapping(value = "/viewMessage.query") + public ResponseEntity viewMessage(@RequestParam(required = false) String topic, @RequestParam String msgId) { Map messageViewMap = Maps.newHashMap(); Pair> messageViewListPair = messageService.viewMessage(topic, msgId); messageViewMap.put("messageView", messageViewListPair.getObject1()); messageViewMap.put("messageTrackList", messageViewListPair.getObject2()); - return messageViewMap; + return ResponseEntity.ok(messageViewMap); } @PostMapping("/queryMessagePageByTopic.query") - @ResponseBody - public MessagePage queryMessagePageByTopic(@RequestBody MessageQuery query) { - return messageService.queryMessageByPage(query); + public ResponseEntity queryMessagePageByTopic(@RequestBody MessageQuery query) { + return ResponseEntity.ok(messageService.queryMessageByPage(query)); } - @RequestMapping(value = "/queryMessageByTopicAndKey.query", method = RequestMethod.GET) - @ResponseBody - public Object queryMessageByTopicAndKey(@RequestParam String topic, @RequestParam String key) { - return messageService.queryMessageByTopicAndKey(topic, key); + @GetMapping(value = "/queryMessageByTopicAndKey.query") + public ResponseEntity queryMessageByTopicAndKey(@RequestParam String topic, @RequestParam String key) { + return ResponseEntity.ok(messageService.queryMessageByTopicAndKey(topic, key)); } - @RequestMapping(value = "/queryMessageByTopic.query", method = RequestMethod.GET) - @ResponseBody - public Object queryMessageByTopic(@RequestParam String topic, @RequestParam long begin, + @GetMapping(value = "/queryMessageByTopic.query") + public ResponseEntity queryMessageByTopic(@RequestParam String topic, @RequestParam long begin, @RequestParam long end) { - return messageService.queryMessageByTopic(topic, begin, end); + return ResponseEntity.ok(messageService.queryMessageByTopic(topic, begin, end)); } - @RequestMapping(value = "/consumeMessageDirectly.do", method = RequestMethod.POST) - @ResponseBody - public Object consumeMessageDirectly(@RequestParam String topic, @RequestParam String consumerGroup, + @PostMapping(value = "/consumeMessageDirectly.do") + public ResponseEntity consumeMessageDirectly(@RequestParam String topic, @RequestParam String consumerGroup, @RequestParam String msgId, @RequestParam(required = false) String clientId) { - logger.info("msgId={} consumerGroup={} clientId={}", msgId, consumerGroup, clientId); + log.info("msgId={} consumerGroup={} clientId={}", msgId, consumerGroup, clientId); ConsumeMessageDirectlyResult consumeMessageDirectlyResult = messageService.consumeMessageDirectly(topic, msgId, consumerGroup, clientId); - logger.info("consumeMessageDirectlyResult={}", JsonUtil.obj2String(consumeMessageDirectlyResult)); - return consumeMessageDirectlyResult; + log.info("consumeMessageDirectlyResult={}", JsonUtil.objectToString(consumeMessageDirectlyResult)); + return ResponseEntity.ok(consumeMessageDirectlyResult); } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/controller/MessageTraceController.java b/src/main/java/org/apache/rocketmq/dashboard/controller/MessageTraceController.java index ef3c1b12..4da7baee 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/MessageTraceController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/MessageTraceController.java @@ -18,11 +18,8 @@ package org.apache.rocketmq.dashboard.controller; import com.google.common.collect.Maps; - -import java.util.List; -import java.util.Map; -import javax.annotation.Resource; - +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.common.Pair; import org.apache.rocketmq.dashboard.model.MessageView; import org.apache.rocketmq.dashboard.model.trace.MessageTraceGraph; @@ -30,42 +27,38 @@ import org.apache.rocketmq.dashboard.service.MessageService; import org.apache.rocketmq.dashboard.service.MessageTraceService; import org.apache.rocketmq.tools.admin.api.MessageTrack; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; -@Controller +import java.util.List; +import java.util.Map; + +@RestController @RequestMapping("/messageTrace") @Permission +@RequiredArgsConstructor +@Slf4j public class MessageTraceController { - @Resource - private MessageService messageService; - - @Resource - private MessageTraceService messageTraceService; + private final MessageService messageService; + private final MessageTraceService messageTraceService; - @RequestMapping(value = "/viewMessage.query", method = RequestMethod.GET) - @ResponseBody - public Object viewMessage(@RequestParam(required = false) String topic, @RequestParam String msgId) { + @GetMapping(value = "/viewMessage.query") + public ResponseEntity viewMessage(@RequestParam(required = false) String topic, @RequestParam String msgId) { Map messageViewMap = Maps.newHashMap(); Pair> messageViewListPair = messageService.viewMessage(topic, msgId); messageViewMap.put("messageView", messageViewListPair.getObject1()); - return messageViewMap; + return ResponseEntity.ok(messageViewMap); } - @RequestMapping(value = "/viewMessageTraceDetail.query", method = RequestMethod.GET) - @ResponseBody - public Object viewTraceMessages(@RequestParam String msgId) { - return messageTraceService.queryMessageTraceKey(msgId); + @GetMapping(value = "/viewMessageTraceDetail.query") + public ResponseEntity viewTraceMessages(@RequestParam String msgId) { + return ResponseEntity.ok(messageTraceService.queryMessageTraceKey(msgId)); } - @RequestMapping(value = "/viewMessageTraceGraph.query", method = RequestMethod.GET) - @ResponseBody - public MessageTraceGraph viewMessageTraceGraph(@RequestParam String msgId, - @RequestParam(required = false) String traceTopic) { - return messageTraceService.queryMessageTraceGraph(msgId, traceTopic); + @GetMapping(value = "/viewMessageTraceGraph.query") + public ResponseEntity viewMessageTraceGraph(@RequestParam String msgId, + @RequestParam(required = false) String traceTopic) { + return ResponseEntity.ok(messageTraceService.queryMessageTraceGraph(msgId, traceTopic)); } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/controller/MonitorController.java b/src/main/java/org/apache/rocketmq/dashboard/controller/MonitorController.java index eb1e9795..f2c567a8 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/MonitorController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/MonitorController.java @@ -16,49 +16,41 @@ */ package org.apache.rocketmq.dashboard.controller; -import javax.annotation.Resource; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.dashboard.model.ConsumerMonitorConfig; import org.apache.rocketmq.dashboard.permisssion.Permission; import org.apache.rocketmq.dashboard.service.MonitorService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; -@Controller +@RestController @RequestMapping("/monitor") @Permission +@RequiredArgsConstructor +@Slf4j public class MonitorController { - private Logger logger = LoggerFactory.getLogger(MonitorController.class); - @Resource - private MonitorService monitorService; + private final MonitorService monitorService; - @RequestMapping(value = "/createOrUpdateConsumerMonitor.do", method = {RequestMethod.POST}) - @ResponseBody - public Object createOrUpdateConsumerMonitor(@RequestParam String consumeGroupName, @RequestParam int minCount, - @RequestParam int maxDiffTotal) { - return monitorService.createOrUpdateConsumerMonitor(consumeGroupName, new ConsumerMonitorConfig(minCount, maxDiffTotal)); + @PostMapping(value = "/createOrUpdateConsumerMonitor.do") + public ResponseEntity createOrUpdateConsumerMonitor(@RequestParam String consumeGroupName, @RequestParam int minCount, + @RequestParam int maxDiffTotal) { + return ResponseEntity.ok(monitorService.createOrUpdateConsumerMonitor(consumeGroupName, new ConsumerMonitorConfig(minCount, maxDiffTotal))); } - @RequestMapping(value = "/consumerMonitorConfig.query", method = {RequestMethod.GET}) - @ResponseBody - public Object consumerMonitorConfig() { - return monitorService.queryConsumerMonitorConfig(); + @GetMapping(value = "/consumerMonitorConfig.query") + public ResponseEntity consumerMonitorConfig() { + return ResponseEntity.ok(monitorService.queryConsumerMonitorConfig()); } - @RequestMapping(value = "/consumerMonitorConfigByGroupName.query", method = {RequestMethod.GET}) - @ResponseBody - public Object consumerMonitorConfigByGroupName(@RequestParam String consumeGroupName) { - return monitorService.queryConsumerMonitorConfigByGroupName(consumeGroupName); + @GetMapping(value = "/consumerMonitorConfigByGroupName.query") + public ResponseEntity consumerMonitorConfigByGroupName(@RequestParam String consumeGroupName) { + return ResponseEntity.ok(monitorService.queryConsumerMonitorConfigByGroupName(consumeGroupName)); } - @RequestMapping(value = "/deleteConsumerMonitor.do", method = {RequestMethod.POST}) - @ResponseBody - public Object deleteConsumerMonitor(@RequestParam String consumeGroupName) { - return monitorService.deleteConsumerMonitor(consumeGroupName); + @PostMapping(value = "/deleteConsumerMonitor.do") + public ResponseEntity deleteConsumerMonitor(@RequestParam String consumeGroupName) { + return ResponseEntity.ok(monitorService.deleteConsumerMonitor(consumeGroupName)); } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/controller/NamesvrController.java b/src/main/java/org/apache/rocketmq/dashboard/controller/NamesvrController.java index c3f106b8..02248fbd 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/NamesvrController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/NamesvrController.java @@ -16,26 +16,24 @@ */ package org.apache.rocketmq.dashboard.controller; -import javax.annotation.Resource; +import lombok.RequiredArgsConstructor; import org.apache.rocketmq.dashboard.aspect.admin.annotation.OriginalControllerReturnValue; import org.apache.rocketmq.dashboard.permisssion.Permission; import org.apache.rocketmq.dashboard.service.OpsService; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; -@Controller +@RestController @RequestMapping("/rocketmq") @Permission +@RequiredArgsConstructor public class NamesvrController { - @Resource - private OpsService opsService; - @RequestMapping(value = "/nsaddr", method = RequestMethod.GET) - @ResponseBody + private final OpsService opsService; + + @GetMapping(value = "/nsaddr") @OriginalControllerReturnValue - public Object nsaddr() { - return opsService.getNameSvrList(); + public ResponseEntity nsaddr() { + return ResponseEntity.ok(opsService.getNameSvrList()); } } 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..d35b4abf 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/OpsController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/OpsController.java @@ -16,55 +16,45 @@ */ package org.apache.rocketmq.dashboard.controller; -import javax.annotation.Resource; +import lombok.RequiredArgsConstructor; import org.apache.rocketmq.dashboard.permisssion.Permission; import org.apache.rocketmq.dashboard.service.OpsService; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; -@Controller +@RestController @RequestMapping("/ops") @Permission +@RequiredArgsConstructor public class OpsController { - @Resource - private OpsService opsService; + private final OpsService opsService; - @RequestMapping(value = "/homePage.query", method = RequestMethod.GET) - @ResponseBody - public Object homePage() { - return opsService.homePageInfo(); + @GetMapping(value = "/homePage.query") + public ResponseEntity homePage() { + return ResponseEntity.ok(opsService.homePageInfo()); } - @RequestMapping(value = "/updateNameSvrAddr.do", method = RequestMethod.POST) - @ResponseBody - public Object updateNameSvrAddr(@RequestParam String nameSvrAddrList) { + @PostMapping(value = "/updateNameSvrAddr.do") + public ResponseEntity updateNameSvrAddr(@RequestParam String nameSvrAddrList) { opsService.updateNameSvrAddrList(nameSvrAddrList); - return true; + return ResponseEntity.ok(true); } - @RequestMapping(value = "/updateIsVIPChannel.do", method = RequestMethod.POST) - @ResponseBody - public Object updateIsVIPChannel(@RequestParam String useVIPChannel) { + @PostMapping(value = "/updateIsVIPChannel.do") + public ResponseEntity updateIsVIPChannel(@RequestParam String useVIPChannel) { opsService.updateIsVIPChannel(useVIPChannel); - return true; + return ResponseEntity.ok(true); } - - @RequestMapping(value = "/rocketMqStatus.query", method = RequestMethod.GET) - @ResponseBody - public Object clusterStatus() { - return opsService.rocketMqStatusCheck(); + @GetMapping(value = "/rocketMqStatus.query") + public ResponseEntity clusterStatus() { + return ResponseEntity.ok(opsService.rocketMqStatusCheck()); } - - @RequestMapping(value = "/updateUseTLS.do", method = RequestMethod.POST) - @ResponseBody - public Object updateUseTLS(@RequestParam String useTLS) { + @PostMapping(value = "/updateUseTLS.do") + public ResponseEntity updateUseTLS(@RequestParam String useTLS) { opsService.updateUseTLS(Boolean.parseBoolean(useTLS)); - return true; + return ResponseEntity.ok(true); } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/controller/ProducerController.java b/src/main/java/org/apache/rocketmq/dashboard/controller/ProducerController.java index 9c1d79d8..1d08c5fe 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/ProducerController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/ProducerController.java @@ -16,30 +16,26 @@ */ package org.apache.rocketmq.dashboard.controller; -import javax.annotation.Resource; +import lombok.RequiredArgsConstructor; import org.apache.rocketmq.common.protocol.body.ProducerConnection; import org.apache.rocketmq.dashboard.model.ConnectionInfo; import org.apache.rocketmq.dashboard.permisssion.Permission; import org.apache.rocketmq.dashboard.service.ProducerService; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; -@Controller +@RestController @RequestMapping("/producer") @Permission +@RequiredArgsConstructor public class ProducerController { - @Resource - private ProducerService producerService; + private final ProducerService producerService; - @RequestMapping(value = "/producerConnection.query", method = {RequestMethod.GET}) - @ResponseBody - public Object producerConnection(@RequestParam String producerGroup, @RequestParam String topic) { + @GetMapping(value = "/producerConnection.query") + public ResponseEntity producerConnection(@RequestParam String producerGroup, @RequestParam String topic) { ProducerConnection producerConnection = producerService.getProducerConnection(producerGroup, topic); producerConnection.setConnectionSet(ConnectionInfo.buildConnectionInfoHashSet(producerConnection.getConnectionSet())); - return producerConnection; + return ResponseEntity.ok(producerConnection); } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/controller/TestController.java b/src/main/java/org/apache/rocketmq/dashboard/controller/TestController.java index e50c46ef..e8aeb371 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/TestController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/TestController.java @@ -16,8 +16,9 @@ */ package org.apache.rocketmq.dashboard.controller; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; -import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext; import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus; import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently; import org.apache.rocketmq.client.exception.MQClientException; @@ -25,77 +26,63 @@ import org.apache.rocketmq.client.producer.SendResult; import org.apache.rocketmq.common.consumer.ConsumeFromWhere; import org.apache.rocketmq.common.message.Message; -import org.apache.rocketmq.common.message.MessageExt; -import org.apache.rocketmq.remoting.exception.RemotingException; -import java.util.List; -import javax.annotation.Resource; import org.apache.rocketmq.dashboard.config.RMQConfigure; import org.apache.rocketmq.dashboard.util.JsonUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.*; -@Controller +@RestController @RequestMapping("/test") +@RequiredArgsConstructor +@Slf4j public class TestController { - private Logger logger = LoggerFactory.getLogger(TestController.class); - private String testTopic = "TestTopic"; - @Resource - private RMQConfigure rMQConfigure; + private static final String TEST_TOPIC = "TestTopic"; - @RequestMapping(value = "/runTask.do", method = RequestMethod.GET) - @ResponseBody - public Object list() throws MQClientException, RemotingException, InterruptedException { - DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(testTopic + "Group"); - consumer.setNamesrvAddr(rMQConfigure.getNamesrvAddr()); - consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET); - consumer.subscribe(testTopic, "*"); - consumer.registerMessageListener(new MessageListenerConcurrently() { + private final RMQConfigure rMQConfigure; - @Override - public ConsumeConcurrentlyStatus consumeMessage(List msgs, - ConsumeConcurrentlyContext context) { - logger.info("receiveMessage msgSize={}", msgs.size()); - return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; - } - }); + @GetMapping(value = "/runTask.do") + public Object list() throws MQClientException { + DefaultMQPushConsumer consumer = getDefaultMQPushConsumer(); consumer.start(); - final DefaultMQProducer producer = new DefaultMQProducer(testTopic + "Group"); + final DefaultMQProducer producer = new DefaultMQProducer(TEST_TOPIC + "Group"); producer.setInstanceName(String.valueOf(System.currentTimeMillis())); producer.setNamesrvAddr(rMQConfigure.getNamesrvAddr()); producer.start(); - new Thread(new Runnable() { + new Thread(() -> { - @Override public void run() { - - int i = 0; - while (true) { - try { - Message msg = new Message(testTopic, + int i = 0; + while (true) { + try { + Message msg = new Message(TEST_TOPIC, "TagA" + i, "KEYS" + i, ("Hello RocketMQ " + i).getBytes() - ); - Thread.sleep(1000L); - SendResult sendResult = producer.send(msg); - logger.info("sendMessage={}", JsonUtil.obj2String(sendResult)); - } - catch (Exception e) { - e.printStackTrace(); - try { - Thread.sleep(1000); - } - catch (Exception ignore) { - } + ); + Thread.sleep(1000L); + SendResult sendResult = producer.send(msg); + log.info("sendMessage={}", JsonUtil.objectToString(sendResult)); + } catch (Exception e) { + e.printStackTrace(); + try { + Thread.sleep(1000); + } catch (Exception ignore) { } } } }).start(); return true; } + + private DefaultMQPushConsumer getDefaultMQPushConsumer() throws MQClientException { + DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(TEST_TOPIC + "Group"); + consumer.setNamesrvAddr(rMQConfigure.getNamesrvAddr()); + consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET); + consumer.subscribe(TEST_TOPIC, "*"); + consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> { + log.info("receiveMessage msgSize={}", msgs.size()); + return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; + }); + return consumer; + } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/controller/TopicController.java b/src/main/java/org/apache/rocketmq/dashboard/controller/TopicController.java index ebed69e1..15e90c9d 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/TopicController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/TopicController.java @@ -16,105 +16,87 @@ */ package org.apache.rocketmq.dashboard.controller; -import org.apache.rocketmq.client.exception.MQClientException; -import org.apache.rocketmq.dashboard.permisssion.Permission; -import org.apache.rocketmq.remoting.exception.RemotingException; +import com.google.common.base.Preconditions; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; import org.apache.rocketmq.dashboard.model.request.SendTopicMessageRequest; import org.apache.rocketmq.dashboard.model.request.TopicConfigInfo; +import org.apache.rocketmq.dashboard.permisssion.Permission; import org.apache.rocketmq.dashboard.service.ConsumerService; import org.apache.rocketmq.dashboard.service.TopicService; import org.apache.rocketmq.dashboard.util.JsonUtil; -import com.google.common.base.Preconditions; -import org.apache.commons.collections.CollectionUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.web.bind.annotation.ResponseBody; +import java.util.Optional; -@Controller +@RestController @RequestMapping("/topic") @Permission +@RequiredArgsConstructor +@Slf4j public class TopicController { - private Logger logger = LoggerFactory.getLogger(TopicController.class); - @Resource - private TopicService topicService; + private final TopicService topicService; + private final ConsumerService consumerService; - @Resource - private ConsumerService consumerService; - - @RequestMapping(value = "/list.query", method = RequestMethod.GET) - @ResponseBody - public Object list(@RequestParam(value = "skipSysProcess", required = false) boolean skipSysProcess, - @RequestParam(value = "skipRetryAndDlq", required = false) boolean skipRetryAndDlq) { - return topicService.fetchAllTopicList(skipSysProcess, skipRetryAndDlq); + @GetMapping(value = "/list.query") + public ResponseEntity list(@RequestParam(value = "skipSysProcess", required = false) Boolean skipSysProcess, + @RequestParam(value = "skipRetryAndDlq", required = false) Boolean skipRetryAndDlq) { + boolean skipSysProcessFound = Optional.ofNullable(skipSysProcess).orElse(false); + boolean skipRetryAndDlqFound = Optional.ofNullable(skipRetryAndDlq).orElse(false); + return ResponseEntity.ok(topicService.fetchAllTopicList(skipSysProcessFound, skipRetryAndDlqFound)); } - @RequestMapping(value = "/stats.query", method = RequestMethod.GET) - @ResponseBody - public Object stats(@RequestParam String topic) { - return topicService.stats(topic); + @GetMapping(value = "/stats.query") + public ResponseEntity stats(@RequestParam String topic) { + return ResponseEntity.ok(topicService.stats(topic)); } - @RequestMapping(value = "/route.query", method = RequestMethod.GET) - @ResponseBody - public Object route(@RequestParam String topic) { - return topicService.route(topic); + @GetMapping(value = "/route.query") + public ResponseEntity route(@RequestParam String topic) { + return ResponseEntity.ok(topicService.route(topic)); } - @RequestMapping(value = "/createOrUpdate.do", method = { RequestMethod.POST}) - @ResponseBody - public Object topicCreateOrUpdateRequest(@RequestBody TopicConfigInfo topicCreateOrUpdateRequest) { + @PostMapping(value = "/createOrUpdate.do") + public ResponseEntity topicCreateOrUpdateRequest(@RequestBody TopicConfigInfo topicCreateOrUpdateRequest) { Preconditions.checkArgument(CollectionUtils.isNotEmpty(topicCreateOrUpdateRequest.getBrokerNameList()) || CollectionUtils.isNotEmpty(topicCreateOrUpdateRequest.getClusterNameList()), - "clusterName or brokerName can not be all blank"); - logger.info("op=look topicCreateOrUpdateRequest={}", JsonUtil.obj2String(topicCreateOrUpdateRequest)); + "clusterName or brokerName can not be all blank"); + log.info("op=look topicCreateOrUpdateRequest={}", JsonUtil.objectToString(topicCreateOrUpdateRequest)); topicService.createOrUpdate(topicCreateOrUpdateRequest); - return true; + return ResponseEntity.ok(true); } - @RequestMapping(value = "/queryConsumerByTopic.query") - @ResponseBody - public Object queryConsumerByTopic(@RequestParam String topic) { - return consumerService.queryConsumeStatsListByTopicName(topic); + @GetMapping(value = "/queryConsumerByTopic.query") + public ResponseEntity queryConsumerByTopic(@RequestParam String topic) { + return ResponseEntity.ok(consumerService.queryConsumeStatsListByTopicName(topic)); } - @RequestMapping(value = "/queryTopicConsumerInfo.query") - @ResponseBody - public Object queryTopicConsumerInfo(@RequestParam String topic) { - return topicService.queryTopicConsumerInfo(topic); + @GetMapping(value = "/queryTopicConsumerInfo.query") + public ResponseEntity queryTopicConsumerInfo(@RequestParam String topic) { + return ResponseEntity.ok(topicService.queryTopicConsumerInfo(topic)); } - @RequestMapping(value = "/examineTopicConfig.query") - @ResponseBody - public Object examineTopicConfig(@RequestParam String topic, - @RequestParam(required = false) String brokerName) throws RemotingException, MQClientException, InterruptedException { - return topicService.examineTopicConfig(topic); + @GetMapping(value = "/examineTopicConfig.query") + public ResponseEntity examineTopicConfig(@RequestParam String topic) { + return ResponseEntity.ok(topicService.examineTopicConfig(topic)); } - @RequestMapping(value = "/sendTopicMessage.do", method = {RequestMethod.POST}) - @ResponseBody - public Object sendTopicMessage( - @RequestBody SendTopicMessageRequest sendTopicMessageRequest) throws RemotingException, MQClientException, InterruptedException { - return topicService.sendTopicMessageRequest(sendTopicMessageRequest); + @PostMapping(value = "/sendTopicMessage.do") + public ResponseEntity sendTopicMessage( + @RequestBody SendTopicMessageRequest sendTopicMessageRequest) { + return ResponseEntity.ok(topicService.sendTopicMessageRequest(sendTopicMessageRequest)); } - @RequestMapping(value = "/deleteTopic.do", method = {RequestMethod.POST}) - @ResponseBody - public Object delete(@RequestParam(required = false) String clusterName, @RequestParam String topic) { - return topicService.deleteTopic(topic, clusterName); + @PostMapping(value = "/deleteTopic.do") + public ResponseEntity delete(@RequestParam String topic, @RequestParam(required = false) String clusterName) { + return ResponseEntity.ok(topicService.deleteTopic(topic, clusterName)); } - @RequestMapping(value = "/deleteTopicByBroker.do", method = {RequestMethod.POST}) - @ResponseBody - public Object deleteTopicByBroker(@RequestParam String brokerName, @RequestParam String topic) { - return topicService.deleteTopicInBroker(brokerName, topic); + @PostMapping(value = "/deleteTopicByBroker.do") + public ResponseEntity deleteTopicByBroker(@RequestParam String brokerName, @RequestParam String topic) { + return ResponseEntity.ok(topicService.deleteTopicInBroker(brokerName, topic)); } - } diff --git a/src/main/java/org/apache/rocketmq/dashboard/exception/ServiceException.java b/src/main/java/org/apache/rocketmq/dashboard/exception/ServiceException.java index 7b5ce331..a42cf12c 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/exception/ServiceException.java +++ b/src/main/java/org/apache/rocketmq/dashboard/exception/ServiceException.java @@ -16,16 +16,16 @@ */ package org.apache.rocketmq.dashboard.exception; +import lombok.Getter; + +@Getter public class ServiceException extends RuntimeException { private static final long serialVersionUID = 9213584003139969215L; - private int code; + private final int code; public ServiceException(int code, String message) { super(message); this.code = code; } - public int getCode() { - return code; - } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/filter/HttpBasicAuthorizedFilter.java b/src/main/java/org/apache/rocketmq/dashboard/filter/HttpBasicAuthorizedFilter.java index 10c36714..0fda2202 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/filter/HttpBasicAuthorizedFilter.java +++ b/src/main/java/org/apache/rocketmq/dashboard/filter/HttpBasicAuthorizedFilter.java @@ -17,27 +17,22 @@ package org.apache.rocketmq.dashboard.filter; -import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; @WebFilter(urlPatterns = "/*", filterName = "httpBasicAuthorizedFilter") public class HttpBasicAuthorizedFilter implements Filter { - + @Override public void init(FilterConfig config) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, - FilterChain chain) throws IOException, ServletException { + FilterChain chain) throws IOException, ServletException { HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.setCharacterEncoding("UTF-8"); httpResponse.setContentType("application/json; charset=utf-8"); diff --git a/src/main/java/org/apache/rocketmq/dashboard/interceptor/AuthInterceptor.java b/src/main/java/org/apache/rocketmq/dashboard/interceptor/AuthInterceptor.java index 88b742b2..01a0950f 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/interceptor/AuthInterceptor.java +++ b/src/main/java/org/apache/rocketmq/dashboard/interceptor/AuthInterceptor.java @@ -18,7 +18,6 @@ package org.apache.rocketmq.dashboard.interceptor; import org.apache.rocketmq.dashboard.service.LoginService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; @@ -27,12 +26,11 @@ @Component public class AuthInterceptor extends HandlerInterceptorAdapter { - @Autowired + private LoginService loginService; @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) - throws Exception { + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { return loginService.login(request, response); } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/ConnectionInfo.java b/src/main/java/org/apache/rocketmq/dashboard/model/ConnectionInfo.java index 9070542f..2f739929 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/ConnectionInfo.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/ConnectionInfo.java @@ -17,11 +17,16 @@ package org.apache.rocketmq.dashboard.model; import com.google.common.collect.Sets; -import java.util.Collection; -import java.util.HashSet; +import lombok.Getter; +import lombok.Setter; import org.apache.rocketmq.common.MQVersion; import org.apache.rocketmq.common.protocol.body.Connection; +import java.util.Collection; +import java.util.HashSet; + +@Setter +@Getter public class ConnectionInfo extends Connection { private String versionDesc; @@ -43,11 +48,4 @@ public static HashSet buildConnectionInfoHashSet(Collection getRollbackStatsList() { - return rollbackStatsList; - } - - public void setRollbackStatsList(List rollbackStatsList) { - this.rollbackStatsList = rollbackStatsList; - } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/ConsumerMonitorConfig.java b/src/main/java/org/apache/rocketmq/dashboard/model/ConsumerMonitorConfig.java index b44adc73..8a61b38b 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/ConsumerMonitorConfig.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/ConsumerMonitorConfig.java @@ -16,6 +16,11 @@ */ package org.apache.rocketmq.dashboard.model; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter public class ConsumerMonitorConfig { private int minCount; private int maxDiffTotal; @@ -27,20 +32,4 @@ public ConsumerMonitorConfig(int minCount, int maxDiffTotal) { this.minCount = minCount; this.maxDiffTotal = maxDiffTotal; } - - public int getMinCount() { - return minCount; - } - - public void setMinCount(int minCount) { - this.minCount = minCount; - } - - public int getMaxDiffTotal() { - return maxDiffTotal; - } - - public void setMaxDiffTotal(int maxDiffTotal) { - this.maxDiffTotal = maxDiffTotal; - } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/DlqMessageExcelModel.java b/src/main/java/org/apache/rocketmq/dashboard/model/DlqMessageExcelModel.java index 2476a239..bfb28de3 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/DlqMessageExcelModel.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/DlqMessageExcelModel.java @@ -22,11 +22,14 @@ import com.alibaba.excel.metadata.BaseRowModel; import com.alibaba.excel.util.DateUtils; import com.google.common.base.Charsets; -import java.io.Serializable; -import java.util.Date; import lombok.Data; +import lombok.EqualsAndHashCode; import org.apache.rocketmq.common.message.MessageExt; +import java.io.Serializable; +import java.util.Date; + +@EqualsAndHashCode(callSuper = true) @Data public class DlqMessageExcelModel extends BaseRowModel implements Serializable { diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/GroupConsumeInfo.java b/src/main/java/org/apache/rocketmq/dashboard/model/GroupConsumeInfo.java index 6429ba74..8cc18593 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/GroupConsumeInfo.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/GroupConsumeInfo.java @@ -16,9 +16,13 @@ */ package org.apache.rocketmq.dashboard.model; +import lombok.Getter; +import lombok.Setter; import org.apache.rocketmq.common.protocol.heartbeat.ConsumeType; import org.apache.rocketmq.common.protocol.heartbeat.MessageModel; +@Setter +@Getter public class GroupConsumeInfo implements Comparable { private String group; private String version; @@ -28,46 +32,6 @@ public class GroupConsumeInfo implements Comparable { private int consumeTps; private long diffTotal = -1; - public String getGroup() { - return group; - } - - public void setGroup(String group) { - this.group = group; - } - - public int getCount() { - return count; - } - - public void setCount(int count) { - this.count = count; - } - - public ConsumeType getConsumeType() { - return consumeType; - } - - public void setConsumeType(ConsumeType consumeType) { - this.consumeType = consumeType; - } - - public MessageModel getMessageModel() { - return messageModel; - } - - public void setMessageModel(MessageModel messageModel) { - this.messageModel = messageModel; - } - - public long getDiffTotal() { - return diffTotal; - } - - public void setDiffTotal(long diffTotal) { - this.diffTotal = diffTotal; - } - @Override public int compareTo(GroupConsumeInfo o) { if (this.count != o.count) { @@ -76,19 +40,4 @@ public int compareTo(GroupConsumeInfo o) { return Long.compare(o.diffTotal, this.diffTotal); } - public int getConsumeTps() { - return consumeTps; - } - - public void setConsumeTps(int consumeTps) { - this.consumeTps = consumeTps; - } - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/LoginInfo.java b/src/main/java/org/apache/rocketmq/dashboard/model/LoginInfo.java index bebf40c6..187c4756 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/LoginInfo.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/LoginInfo.java @@ -17,23 +17,13 @@ package org.apache.rocketmq.dashboard.model; +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter public class LoginInfo { private boolean loginRequired; private boolean logined; - public boolean isLoginRequired() { - return loginRequired; - } - - public void setLoginRequired(boolean loginRequired) { - this.loginRequired = loginRequired; - } - - public boolean isLogined() { - return logined; - } - - public void setLogined(boolean logined) { - this.logined = logined; - } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/MessagePage.java b/src/main/java/org/apache/rocketmq/dashboard/model/MessagePage.java index 8d2ba614..69e7490e 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/MessagePage.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/MessagePage.java @@ -17,8 +17,12 @@ package org.apache.rocketmq.dashboard.model; +import lombok.Getter; +import lombok.Setter; import org.springframework.data.domain.Page; +@Setter +@Getter public class MessagePage { private Page page; private String taskId; @@ -28,22 +32,6 @@ public MessagePage(Page page, String taskId) { this.taskId = taskId; } - public Page getPage() { - return page; - } - - public void setPage(Page page) { - this.page = page; - } - - public String getTaskId() { - return taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - @Override public String toString() { return "MessagePage{" + diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/MessagePageTask.java b/src/main/java/org/apache/rocketmq/dashboard/model/MessagePageTask.java index 5cd079f4..23606e28 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/MessagePageTask.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/MessagePageTask.java @@ -16,10 +16,14 @@ */ package org.apache.rocketmq.dashboard.model; +import lombok.Getter; +import lombok.Setter; import org.springframework.data.domain.Page; import java.util.List; +@Setter +@Getter public class MessagePageTask { private Page page; private List queueOffsetInfos; @@ -29,22 +33,6 @@ public MessagePageTask(Page page, List queueOffset this.queueOffsetInfos = queueOffsetInfos; } - public Page getPage() { - return page; - } - - public void setPage(Page page) { - this.page = page; - } - - public List getQueueOffsetInfos() { - return queueOffsetInfos; - } - - public void setQueueOffsetInfos(List queueOffsetInfos) { - this.queueOffsetInfos = queueOffsetInfos; - } - @Override public String toString() { return "MessagePageTask{" + diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/MessageQueryByPage.java b/src/main/java/org/apache/rocketmq/dashboard/model/MessageQueryByPage.java index 48e24202..ed9fad9d 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/MessageQueryByPage.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/MessageQueryByPage.java @@ -17,8 +17,11 @@ package org.apache.rocketmq.dashboard.model; +import lombok.Getter; +import lombok.Setter; import org.springframework.data.domain.PageRequest; +@Setter public class MessageQueryByPage { public static final int DEFAULT_PAGE = 0; @@ -30,11 +33,12 @@ public class MessageQueryByPage { * current page num */ private int pageNum; - private int pageSize; - + @Getter private String topic; + @Getter private long begin; + @Getter private long end; public MessageQueryByPage(int pageNum, int pageSize, String topic, long begin, long end) { @@ -45,38 +49,6 @@ public MessageQueryByPage(int pageNum, int pageSize, String topic, long begin, l this.end = end; } - public void setPageNum(int pageNum) { - this.pageNum = pageNum; - } - - public void setPageSize(int pageSize) { - this.pageSize = pageSize; - } - - public String getTopic() { - return topic; - } - - public void setTopic(String topic) { - this.topic = topic; - } - - public long getBegin() { - return begin; - } - - public void setBegin(long begin) { - this.begin = begin; - } - - public long getEnd() { - return end; - } - - public void setEnd(long end) { - this.end = end; - } - public int getPageNum() { return pageNum <= 0 ? DEFAULT_PAGE : pageNum - 1; } diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/MessageTraceView.java b/src/main/java/org/apache/rocketmq/dashboard/model/MessageTraceView.java index dc855080..de9ff769 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/MessageTraceView.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/MessageTraceView.java @@ -18,6 +18,9 @@ package org.apache.rocketmq.dashboard.model; import com.google.common.base.Charsets; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import org.apache.rocketmq.client.trace.TraceBean; import org.apache.rocketmq.client.trace.TraceContext; import org.apache.rocketmq.common.message.MessageExt; @@ -27,6 +30,9 @@ import java.util.ArrayList; import java.util.List; +@Setter +@Getter +@NoArgsConstructor public class MessageTraceView { private String requestId; private String msgId; @@ -47,13 +53,11 @@ public class MessageTraceView { private boolean fromTransactionCheck; private String traceType; - public MessageTraceView() { - } public static List decodeFromTraceTransData(String key, MessageExt messageExt) { - List messageTraceViewList = new ArrayList(); + List messageTraceViewList = new ArrayList<>(); String messageBody = new String(messageExt.getBody(), Charsets.UTF_8); - if (messageBody == null || messageBody.length() <= 0) { + if (messageBody.isEmpty()) { return messageTraceViewList; } @@ -90,148 +94,4 @@ public static List decodeFromTraceTransData(String key, Messag } return messageTraceViewList; } - - public String getMsgId() { - return msgId; - } - - public void setMsgId(String msgId) { - this.msgId = msgId; - } - - public String getTags() { - return tags; - } - - public void setTags(String tags) { - this.tags = tags; - } - - public String getKeys() { - return keys; - } - - public void setKeys(String keys) { - this.keys = keys; - } - - public String getStoreHost() { - return storeHost; - } - - public void setStoreHost(String storeHost) { - this.storeHost = storeHost; - } - - public int getCostTime() { - return costTime; - } - - public void setCostTime(int costTime) { - this.costTime = costTime; - } - - public String getMsgType() { - return msgType; - } - - public void setMsgType(String msgType) { - this.msgType = msgType; - } - - public String getOffSetMsgId() { - return offSetMsgId; - } - - public void setOffSetMsgId(String offSetMsgId) { - this.offSetMsgId = offSetMsgId; - } - - public long getTimeStamp() { - return timeStamp; - } - - public void setTimeStamp(long timeStamp) { - this.timeStamp = timeStamp; - } - - public String getGroupName() { - return groupName; - } - - public void setGroupName(String groupName) { - this.groupName = groupName; - } - - public String getTopic() { - return topic; - } - - public void setTopic(String topic) { - this.topic = topic; - } - - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } - - public String getClientHost() { - return clientHost; - } - - public void setClientHost(String clientHost) { - this.clientHost = clientHost; - } - - public String getRequestId() { - return requestId; - } - - public void setRequestId(String requestId) { - this.requestId = requestId; - } - - public int getRetryTimes() { - return retryTimes; - } - - public void setRetryTimes(int retryTimes) { - this.retryTimes = retryTimes; - } - - public String getTransactionState() { - return transactionState; - } - - public void setTransactionState(String transactionState) { - this.transactionState = transactionState; - } - - public String getTransactionId() { - return transactionId; - } - - public void setTransactionId(String transactionId) { - this.transactionId = transactionId; - } - - public boolean isFromTransactionCheck() { - return fromTransactionCheck; - } - - public void setFromTransactionCheck(boolean fromTransactionCheck) { - this.fromTransactionCheck = fromTransactionCheck; - } - - public String getTraceType() { - return traceType; - } - - public void setTraceType(String traceType) { - this.traceType = traceType; - } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/MessageView.java b/src/main/java/org/apache/rocketmq/dashboard/model/MessageView.java index 13a9641c..c22dfaa1 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/MessageView.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/MessageView.java @@ -16,8 +16,8 @@ */ package org.apache.rocketmq.dashboard.model; -import org.apache.rocketmq.common.message.MessageExt; import com.google.common.base.Charsets; +import org.apache.rocketmq.common.message.MessageExt; import org.springframework.beans.BeanUtils; import java.net.SocketAddress; @@ -25,7 +25,9 @@ public class MessageView { - /** from MessageExt **/ + /** + * from MessageExt + **/ private int queueId; private int storeSize; private long queueOffset; @@ -41,13 +43,17 @@ public class MessageView { private long preparedTransactionOffset; /**from MessageExt**/ - /** from Message **/ + /** + * from Message + **/ private String topic; private int flag; private Map properties; private String messageBody; // body - /** from Message **/ + /** + * from Message + **/ public static MessageView fromMessageExt(MessageExt messageExt) { MessageView messageView = new MessageView(); diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/QueueOffsetInfo.java b/src/main/java/org/apache/rocketmq/dashboard/model/QueueOffsetInfo.java index 15dae34c..2c348028 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/QueueOffsetInfo.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/QueueOffsetInfo.java @@ -16,8 +16,12 @@ */ package org.apache.rocketmq.dashboard.model; +import lombok.Getter; +import lombok.Setter; import org.apache.rocketmq.common.message.MessageQueue; +@Setter +@Getter public class QueueOffsetInfo { private Integer idx; @@ -40,54 +44,6 @@ public QueueOffsetInfo(Integer idx, Long start, Long end, Long startOffset, Long this.messageQueues = messageQueues; } - public Integer getIdx() { - return idx; - } - - public void setIdx(Integer idx) { - this.idx = idx; - } - - public Long getStart() { - return start; - } - - public void setStart(Long start) { - this.start = start; - } - - public Long getEnd() { - return end; - } - - public void setEnd(Long end) { - this.end = end; - } - - public Long getStartOffset() { - return startOffset; - } - - public void setStartOffset(Long startOffset) { - this.startOffset = startOffset; - } - - public Long getEndOffset() { - return endOffset; - } - - public void setEndOffset(Long endOffset) { - this.endOffset = endOffset; - } - - public MessageQueue getMessageQueues() { - return messageQueues; - } - - public void setMessageQueues(MessageQueue messageQueues) { - this.messageQueues = messageQueues; - } - public void incStartOffset() { this.startOffset++; this.endOffset++; diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/QueueStatInfo.java b/src/main/java/org/apache/rocketmq/dashboard/model/QueueStatInfo.java index 38daddd7..24209d3e 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/QueueStatInfo.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/QueueStatInfo.java @@ -16,10 +16,14 @@ */ package org.apache.rocketmq.dashboard.model; +import lombok.Getter; +import lombok.Setter; import org.apache.rocketmq.common.admin.OffsetWrapper; import org.apache.rocketmq.common.message.MessageQueue; import org.springframework.beans.BeanUtils; +@Setter +@Getter public class QueueStatInfo { private String brokerName; private int queueId; @@ -35,51 +39,4 @@ public static QueueStatInfo fromOffsetTableEntry(MessageQueue key, OffsetWrapper return queueStatInfo; } - public String getClientInfo() { - return clientInfo; - } - - public void setClientInfo(String clientInfo) { - this.clientInfo = clientInfo; - } - - public String getBrokerName() { - return brokerName; - } - - public void setBrokerName(String brokerName) { - this.brokerName = brokerName; - } - - public int getQueueId() { - return queueId; - } - - public void setQueueId(int queueId) { - this.queueId = queueId; - } - - public long getBrokerOffset() { - return brokerOffset; - } - - public void setBrokerOffset(long brokerOffset) { - this.brokerOffset = brokerOffset; - } - - public long getConsumerOffset() { - return consumerOffset; - } - - public void setConsumerOffset(long consumerOffset) { - this.consumerOffset = consumerOffset; - } - - public long getLastTimestamp() { - return lastTimestamp; - } - - public void setLastTimestamp(long lastTimestamp) { - this.lastTimestamp = lastTimestamp; - } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/TopicConsumerInfo.java b/src/main/java/org/apache/rocketmq/dashboard/model/TopicConsumerInfo.java index 0f97ba9c..e4f87366 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/TopicConsumerInfo.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/TopicConsumerInfo.java @@ -17,43 +17,24 @@ package org.apache.rocketmq.dashboard.model; import com.google.common.collect.Lists; +import lombok.Getter; +import lombok.Setter; import java.util.List; +@Getter +@Setter public class TopicConsumerInfo { + private String topic; private long diffTotal; private long lastTimestamp; - private List queueStatInfoList = Lists.newArrayList(); + private final List queueStatInfoList = Lists.newArrayList(); public TopicConsumerInfo(String topic) { this.topic = topic; } - public String getTopic() { - return topic; - } - - public void setTopic(String topic) { - this.topic = topic; - } - - public long getDiffTotal() { - return diffTotal; - } - - public void setDiffTotal(long diffTotal) { - this.diffTotal = diffTotal; - } - - public List getQueueStatInfoList() { - return queueStatInfoList; - } - - public long getLastTimestamp() { - return lastTimestamp; - } - public void appendQueueStatInfo(QueueStatInfo queueStatInfo) { queueStatInfoList.add(queueStatInfo); diffTotal = diffTotal + (queueStatInfo.getBrokerOffset() - queueStatInfo.getConsumerOffset()); diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/User.java b/src/main/java/org/apache/rocketmq/dashboard/model/User.java index e0492978..6bac63ee 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/User.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/User.java @@ -16,8 +16,12 @@ */ package org.apache.rocketmq.dashboard.model; +import lombok.Getter; +import lombok.Setter; import org.hibernate.validator.constraints.Range; +@Setter +@Getter public class User { public static final int ORDINARY = 0; public static final int ADMIN = 1; @@ -39,38 +43,6 @@ public User cloneOne() { return new User(this.name, this.password, this.type); } - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public int getType() { - return type; - } - - public void setType(int type) { - this.type = type; - } - @Override public String toString() { return "User{" + diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/UserInfo.java b/src/main/java/org/apache/rocketmq/dashboard/model/UserInfo.java index fc288af2..35d6aa08 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/UserInfo.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/UserInfo.java @@ -16,6 +16,11 @@ */ package org.apache.rocketmq.dashboard.model; +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter public class UserInfo { public static final String USER_INFO = "userInfo"; private User user; @@ -23,38 +28,6 @@ public class UserInfo { private String ip; private String sessionId; - public long getLoginTime() { - return loginTime; - } - - public void setLoginTime(long loginTime) { - this.loginTime = loginTime; - } - - public String getIp() { - return ip; - } - - public void setIp(String ip) { - this.ip = ip; - } - - public User getUser() { - return user; - } - - public void setUser(User user) { - this.user = user; - } - - public String getSessionId() { - return sessionId; - } - - public void setSessionId(String sessionId) { - this.sessionId = sessionId; - } - @Override public String toString() { return "UserInfo{" + diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/request/ConsumerConfigInfo.java b/src/main/java/org/apache/rocketmq/dashboard/model/request/ConsumerConfigInfo.java index acebafc8..a0ac51dd 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/request/ConsumerConfigInfo.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/request/ConsumerConfigInfo.java @@ -16,13 +16,15 @@ */ package org.apache.rocketmq.dashboard.model.request; +import lombok.Data; import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig; import java.util.List; +@Data public class ConsumerConfigInfo { - private List clusterNameList; + private List clusterNameList; private List brokerNameList; private SubscriptionGroupConfig subscriptionGroupConfig; @@ -34,28 +36,4 @@ public ConsumerConfigInfo(List brokerNameList, SubscriptionGroupConfig s this.subscriptionGroupConfig = subscriptionGroupConfig; } - public List getClusterNameList() { - return clusterNameList; - } - - public void setClusterNameList(List clusterNameList) { - this.clusterNameList = clusterNameList; - } - - public List getBrokerNameList() { - return brokerNameList; - } - - public void setBrokerNameList(List brokerNameList) { - this.brokerNameList = brokerNameList; - } - - public SubscriptionGroupConfig getSubscriptionGroupConfig() { - return subscriptionGroupConfig; - } - - public void setSubscriptionGroupConfig(SubscriptionGroupConfig subscriptionGroupConfig) { - this.subscriptionGroupConfig = subscriptionGroupConfig; - } - } diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/request/DeleteSubGroupRequest.java b/src/main/java/org/apache/rocketmq/dashboard/model/request/DeleteSubGroupRequest.java index 87f33186..31c85db2 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/request/DeleteSubGroupRequest.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/request/DeleteSubGroupRequest.java @@ -16,25 +16,12 @@ */ package org.apache.rocketmq.dashboard.model.request; +import lombok.Data; import java.util.List; +@Data public class DeleteSubGroupRequest { private String groupName; private List brokerNameList; - public String getGroupName() { - return groupName; - } - - public void setGroupName(String groupName) { - this.groupName = groupName; - } - - public List getBrokerNameList() { - return brokerNameList; - } - - public void setBrokerNameList(List brokerNameList) { - this.brokerNameList = brokerNameList; - } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/request/MessageQuery.java b/src/main/java/org/apache/rocketmq/dashboard/model/request/MessageQuery.java index 86b6c9ee..2366e17b 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/request/MessageQuery.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/request/MessageQuery.java @@ -16,6 +16,9 @@ */ package org.apache.rocketmq.dashboard.model.request; +import lombok.Data; + +@Data public class MessageQuery { /** * current page num @@ -32,51 +35,4 @@ public class MessageQuery { private long end; - public int getPageNum() { - return pageNum; - } - - public void setPageNum(int pageNum) { - this.pageNum = pageNum; - } - - public int getPageSize() { - return pageSize; - } - - public void setPageSize(int pageSize) { - this.pageSize = pageSize; - } - - public String getTopic() { - return topic; - } - - public void setTopic(String topic) { - this.topic = topic; - } - - public String getTaskId() { - return taskId; - } - - public void setTaskId(String taskId) { - this.taskId = taskId; - } - - public long getBegin() { - return begin; - } - - public void setBegin(long begin) { - this.begin = begin; - } - - public long getEnd() { - return end; - } - - public void setEnd(long end) { - this.end = end; - } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/request/ResetOffsetRequest.java b/src/main/java/org/apache/rocketmq/dashboard/model/request/ResetOffsetRequest.java index d3f6e5d2..4ed5ed9b 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/request/ResetOffsetRequest.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/request/ResetOffsetRequest.java @@ -16,43 +16,15 @@ */ package org.apache.rocketmq.dashboard.model.request; +import lombok.Data; + import java.util.List; +@Data public class ResetOffsetRequest { private List consumerGroupList; private String topic; private long resetTime; private boolean force; - public List getConsumerGroupList() { - return consumerGroupList; - } - - public void setConsumerGroupList(List consumerGroupList) { - this.consumerGroupList = consumerGroupList; - } - - public String getTopic() { - return topic; - } - - public void setTopic(String topic) { - this.topic = topic; - } - - public long getResetTime() { - return resetTime; - } - - public void setResetTime(long resetTime) { - this.resetTime = resetTime; - } - - public boolean isForce() { - return force; - } - - public void setForce(boolean force) { - this.force = force; - } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/request/TopicConfigInfo.java b/src/main/java/org/apache/rocketmq/dashboard/model/request/TopicConfigInfo.java index 32572fe6..84f66d76 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/request/TopicConfigInfo.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/request/TopicConfigInfo.java @@ -17,81 +17,29 @@ package org.apache.rocketmq.dashboard.model.request; import com.google.common.base.Objects; +import lombok.Data; import java.util.List; +@Data public class TopicConfigInfo { private List clusterNameList; + /** + * -- GETTER -- + * topicConfig + */ private List brokerNameList; - /** topicConfig */ + /** + * topicConfig + */ private String topicName; private int writeQueueNums; private int readQueueNums; private int perm; private boolean order; - public List getClusterNameList() { - return clusterNameList; - } - - public void setClusterNameList(List clusterNameList) { - this.clusterNameList = clusterNameList; - } - - /** topicConfig */ - - - - public List getBrokerNameList() { - return brokerNameList; - } - - public void setBrokerNameList(List brokerNameList) { - this.brokerNameList = brokerNameList; - } - - public String getTopicName() { - return topicName; - } - - public void setTopicName(String topicName) { - this.topicName = topicName; - } - - public int getWriteQueueNums() { - return writeQueueNums; - } - - public void setWriteQueueNums(int writeQueueNums) { - this.writeQueueNums = writeQueueNums; - } - - public int getReadQueueNums() { - return readQueueNums; - } - - public void setReadQueueNums(int readQueueNums) { - this.readQueueNums = readQueueNums; - } - - public int getPerm() { - return perm; - } - - public void setPerm(int perm) { - this.perm = perm; - } - - public boolean isOrder() { - return order; - } - - public void setOrder(boolean order) { - this.order = order; - } - @Override public boolean equals(Object o) { if (this == o) @@ -100,10 +48,10 @@ public boolean equals(Object o) { return false; TopicConfigInfo that = (TopicConfigInfo) o; return writeQueueNums == that.writeQueueNums && - readQueueNums == that.readQueueNums && - perm == that.perm && - order == that.order && - Objects.equal(topicName, that.topicName); + readQueueNums == that.readQueueNums && + perm == that.perm && + order == that.order && + Objects.equal(topicName, that.topicName); } @Override diff --git a/src/main/java/org/apache/rocketmq/dashboard/model/trace/MessageTraceGraph.java b/src/main/java/org/apache/rocketmq/dashboard/model/trace/MessageTraceGraph.java index 527399ef..1267bd18 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/trace/MessageTraceGraph.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/trace/MessageTraceGraph.java @@ -27,5 +27,4 @@ public class MessageTraceGraph { private ProducerNode producerNode; private List subscriptionNodeList; private List messageTraceViews; - } diff --git a/src/main/java/org/apache/rocketmq/dashboard/permisssion/PermissionAspect.java b/src/main/java/org/apache/rocketmq/dashboard/permisssion/PermissionAspect.java index fcbfea2f..65bfe4a6 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/permisssion/PermissionAspect.java +++ b/src/main/java/org/apache/rocketmq/dashboard/permisssion/PermissionAspect.java @@ -16,8 +16,6 @@ */ package org.apache.rocketmq.dashboard.permisssion; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; import org.apache.rocketmq.dashboard.config.RMQConfigure; import org.apache.rocketmq.dashboard.exception.ServiceException; import org.apache.rocketmq.dashboard.model.UserInfo; @@ -31,6 +29,9 @@ import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + @Aspect @Component public class PermissionAspect { diff --git a/src/main/java/org/apache/rocketmq/dashboard/permisssion/UserRoleEnum.java b/src/main/java/org/apache/rocketmq/dashboard/permisssion/UserRoleEnum.java index f430a618..5e2daf86 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/permisssion/UserRoleEnum.java +++ b/src/main/java/org/apache/rocketmq/dashboard/permisssion/UserRoleEnum.java @@ -20,8 +20,8 @@ public enum UserRoleEnum { ADMIN(1, "admin"), ORDINARY(0, "ordinary"); - private int roleType; - private String roleName; + private final int roleType; + private final String roleName; UserRoleEnum(int roleType, String roleName) { this.roleType = roleType; diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/AbstractCommonService.java b/src/main/java/org/apache/rocketmq/dashboard/service/AbstractCommonService.java index 1f85796b..697538ef 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/AbstractCommonService.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/AbstractCommonService.java @@ -16,28 +16,29 @@ */ package org.apache.rocketmq.dashboard.service; -import org.apache.rocketmq.tools.admin.MQAdminExt; import com.google.common.base.Throwables; import com.google.common.collect.Sets; +import org.apache.commons.collections.CollectionUtils; +import org.apache.rocketmq.tools.admin.MQAdminExt; + +import javax.annotation.Resource; import java.util.HashMap; import java.util.List; import java.util.Set; -import javax.annotation.Resource; -import org.apache.commons.collections.CollectionUtils; public abstract class AbstractCommonService { @Resource protected MQAdminExt mqAdminExt; + protected final Set changeToBrokerNameSet(HashMap> clusterAddrTable, - List clusterNameList, List brokerNameList) { + List clusterNameList, List brokerNameList) { Set finalBrokerNameList = Sets.newHashSet(); if (CollectionUtils.isNotEmpty(clusterNameList)) { try { for (String clusterName : clusterNameList) { finalBrokerNameList.addAll(clusterAddrTable.get(clusterName)); } - } - catch (Exception e) { + } catch (Exception e) { throw Throwables.propagate(e); } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/ClusterService.java b/src/main/java/org/apache/rocketmq/dashboard/service/ClusterService.java index ba2a75ec..3b982e6f 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/ClusterService.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/ClusterService.java @@ -21,7 +21,7 @@ import java.util.Properties; public interface ClusterService { - Map list(); + Map queryClusterList(); Properties getBrokerConfig(String brokerAddr); } diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/DashboardCollectService.java b/src/main/java/org/apache/rocketmq/dashboard/service/DashboardCollectService.java index fdee259b..fb21c2d4 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/DashboardCollectService.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/DashboardCollectService.java @@ -17,6 +17,7 @@ package org.apache.rocketmq.dashboard.service; import com.google.common.cache.LoadingCache; + import java.io.File; import java.util.List; import java.util.Map; diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/DashboardService.java b/src/main/java/org/apache/rocketmq/dashboard/service/DashboardService.java index 3dc5041b..8744383e 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/DashboardService.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/DashboardService.java @@ -32,7 +32,7 @@ public interface DashboardService { Map> queryTopicData(String date); /** - * @param date format yyyy-MM-dd + * @param date format yyyy-MM-dd * @param topicName */ List queryTopicData(String date, String topicName); diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/MessageService.java b/src/main/java/org/apache/rocketmq/dashboard/service/MessageService.java index 802ca453..6a91b404 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/MessageService.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/MessageService.java @@ -21,9 +21,9 @@ import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult; import org.apache.rocketmq.dashboard.model.MessagePage; +import org.apache.rocketmq.dashboard.model.MessageView; import org.apache.rocketmq.dashboard.model.request.MessageQuery; import org.apache.rocketmq.tools.admin.api.MessageTrack; -import org.apache.rocketmq.dashboard.model.MessageView; import java.util.List; @@ -39,21 +39,16 @@ public interface MessageService { /** * @param topic * @param begin - * @param end - * org.apache.rocketmq.tools.command.message.PrintMessageSubCommand + * @param end org.apache.rocketmq.tools.command.message.PrintMessageSubCommand */ List queryMessageByTopic(final String topic, final long begin, - final long end); + final long end); List messageTrackDetail(MessageExt msg); ConsumeMessageDirectlyResult consumeMessageDirectly(String topic, String msgId, String consumerGroup, - String clientId); + String clientId); MessagePage queryMessageByPage(MessageQuery query); - - - - } diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/MessageTraceService.java b/src/main/java/org/apache/rocketmq/dashboard/service/MessageTraceService.java index 797fc403..3e7efd95 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/MessageTraceService.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/MessageTraceService.java @@ -17,10 +17,11 @@ package org.apache.rocketmq.dashboard.service; -import java.util.List; import org.apache.rocketmq.dashboard.model.MessageTraceView; import org.apache.rocketmq.dashboard.model.trace.MessageTraceGraph; +import java.util.List; + public interface MessageTraceService { List queryMessageTraceKey(final String key); diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/MonitorService.java b/src/main/java/org/apache/rocketmq/dashboard/service/MonitorService.java index 526bb5ce..afb8bd2c 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/MonitorService.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/MonitorService.java @@ -16,9 +16,10 @@ */ package org.apache.rocketmq.dashboard.service; -import java.util.Map; import org.apache.rocketmq.dashboard.model.ConsumerMonitorConfig; +import java.util.Map; + public interface MonitorService { boolean createOrUpdateConsumerMonitor(String name, ConsumerMonitorConfig config); 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..c9ada34c 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/OpsService.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/OpsService.java @@ -16,9 +16,10 @@ */ package org.apache.rocketmq.dashboard.service; -import java.util.Map; import org.apache.rocketmq.dashboard.service.checker.CheckerType; +import java.util.Map; + public interface OpsService { Map homePageInfo(); @@ -26,7 +27,7 @@ public interface OpsService { String getNameSvrList(); - Map rocketMqStatusCheck(); + Map rocketMqStatusCheck(); boolean updateIsVIPChannel(String useVIPChannel); diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/checker/RocketMqChecker.java b/src/main/java/org/apache/rocketmq/dashboard/service/checker/RocketMqChecker.java index 51b2dffe..799aa14b 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/checker/RocketMqChecker.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/checker/RocketMqChecker.java @@ -17,8 +17,8 @@ package org.apache.rocketmq.dashboard.service.checker; public interface RocketMqChecker { - public Object doCheck(); + Object doCheck(); - public CheckerType checkerType(); + CheckerType checkerType(); } diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/client/MQAdminExtImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/client/MQAdminExtImpl.java index 81e12022..2474d156 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/client/MQAdminExtImpl.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/client/MQAdminExtImpl.java @@ -17,11 +17,6 @@ package org.apache.rocketmq.dashboard.service.client; import com.google.common.base.Throwables; -import java.io.UnsupportedEncodingException; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; import org.apache.rocketmq.client.QueryResult; import org.apache.rocketmq.client.exception.MQBrokerException; import org.apache.rocketmq.client.exception.MQClientException; @@ -37,30 +32,12 @@ import org.apache.rocketmq.common.message.MessageQueue; import org.apache.rocketmq.common.protocol.RequestCode; import org.apache.rocketmq.common.protocol.ResponseCode; -import org.apache.rocketmq.common.protocol.body.BrokerStatsData; -import org.apache.rocketmq.common.protocol.body.ClusterAclVersionInfo; -import org.apache.rocketmq.common.protocol.body.ClusterInfo; -import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult; -import org.apache.rocketmq.common.protocol.body.ConsumeStatsList; -import org.apache.rocketmq.common.protocol.body.ConsumerConnection; -import org.apache.rocketmq.common.protocol.body.ConsumerRunningInfo; -import org.apache.rocketmq.common.protocol.body.GroupList; -import org.apache.rocketmq.common.protocol.body.KVTable; -import org.apache.rocketmq.common.protocol.body.ProducerConnection; -import org.apache.rocketmq.common.protocol.body.QueryConsumeQueueResponseBody; -import org.apache.rocketmq.common.protocol.body.QueueTimeSpan; -import org.apache.rocketmq.common.protocol.body.SubscriptionGroupWrapper; -import org.apache.rocketmq.common.protocol.body.TopicConfigSerializeWrapper; -import org.apache.rocketmq.common.protocol.body.TopicList; +import org.apache.rocketmq.common.protocol.body.*; import org.apache.rocketmq.common.protocol.route.TopicRouteData; import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig; import org.apache.rocketmq.dashboard.util.JsonUtil; import org.apache.rocketmq.remoting.RemotingClient; -import org.apache.rocketmq.remoting.exception.RemotingCommandException; -import org.apache.rocketmq.remoting.exception.RemotingConnectException; -import org.apache.rocketmq.remoting.exception.RemotingException; -import org.apache.rocketmq.remoting.exception.RemotingSendRequestException; -import org.apache.rocketmq.remoting.exception.RemotingTimeoutException; +import org.apache.rocketmq.remoting.exception.*; import org.apache.rocketmq.remoting.protocol.RemotingCommand; import org.apache.rocketmq.tools.admin.MQAdminExt; import org.apache.rocketmq.tools.admin.api.MessageTrack; @@ -69,56 +46,67 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import java.io.UnsupportedEncodingException; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Set; + import static org.apache.rocketmq.remoting.protocol.RemotingSerializable.decode; @Service public class MQAdminExtImpl implements MQAdminExt { - private Logger logger = LoggerFactory.getLogger(MQAdminExtImpl.class); + private final Logger logger = LoggerFactory.getLogger(MQAdminExtImpl.class); public MQAdminExtImpl() { } @Override public void updateBrokerConfig(String brokerAddr, Properties properties) - throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, - UnsupportedEncodingException, InterruptedException, MQBrokerException { + throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, + UnsupportedEncodingException, InterruptedException, MQBrokerException { MQAdminInstance.threadLocalMQAdminExt().updateBrokerConfig(brokerAddr, properties); } @Override public void createAndUpdateTopicConfig(String addr, TopicConfig config) - throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + throws RemotingException, MQBrokerException, InterruptedException, MQClientException { MQAdminInstance.threadLocalMQAdminExt().createAndUpdateTopicConfig(addr, config); } - @Override public void createAndUpdatePlainAccessConfig(String addr, - PlainAccessConfig plainAccessConfig) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { - + @Override + public void createAndUpdatePlainAccessConfig(String addr, + PlainAccessConfig plainAccessConfig) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + } - @Override public void deletePlainAccessConfig(String addr, - String accessKey) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + @Override + public void deletePlainAccessConfig(String addr, + String accessKey) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { } - @Override public void updateGlobalWhiteAddrConfig(String addr, - String globalWhiteAddrs) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + @Override + public void updateGlobalWhiteAddrConfig(String addr, + String globalWhiteAddrs) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { } - @Override public ClusterAclVersionInfo examineBrokerClusterAclVersionInfo( - String addr) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + @Override + public ClusterAclVersionInfo examineBrokerClusterAclVersionInfo( + String addr) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { return null; } - @Override public AclConfig examineBrokerClusterAclConfig( - String addr) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + @Override + public AclConfig examineBrokerClusterAclConfig( + String addr) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { return null; } @Override public void createAndUpdateSubscriptionGroupConfig(String addr, SubscriptionGroupConfig config) - throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + throws RemotingException, MQBrokerException, InterruptedException, MQClientException { MQAdminInstance.threadLocalMQAdminExt().createAndUpdateSubscriptionGroupConfig(addr, config); } @@ -129,8 +117,7 @@ public SubscriptionGroupConfig examineSubscriptionGroupConfig(String addr, Strin RemotingCommand response = null; try { response = remotingClient.invokeSync(addr, request, 3000); - } - catch (Exception err) { + } catch (Exception err) { throw Throwables.propagate(err); } assert response != null; @@ -151,8 +138,7 @@ public TopicConfig examineTopicConfig(String addr, String topic) { RemotingCommand response = null; try { response = remotingClient.invokeSync(addr, request, 3000); - } - catch (Exception err) { + } catch (Exception err) { throw Throwables.propagate(err); } switch (response.getCode()) { @@ -167,59 +153,59 @@ public TopicConfig examineTopicConfig(String addr, String topic) { @Override public TopicStatsTable examineTopicStats(String topic) - throws RemotingException, MQClientException, InterruptedException, MQBrokerException { + throws RemotingException, MQClientException, InterruptedException, MQBrokerException { return MQAdminInstance.threadLocalMQAdminExt().examineTopicStats(topic); } @Override public TopicList fetchAllTopicList() throws RemotingException, MQClientException, InterruptedException { TopicList topicList = MQAdminInstance.threadLocalMQAdminExt().fetchAllTopicList(); - logger.debug("op=look={}", JsonUtil.obj2String(topicList.getTopicList())); + logger.debug("op=look={}", JsonUtil.objectToString(topicList.getTopicList())); return topicList; } @Override public KVTable fetchBrokerRuntimeStats(String brokerAddr) - throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, - InterruptedException, MQBrokerException { + throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, + InterruptedException, MQBrokerException { return MQAdminInstance.threadLocalMQAdminExt().fetchBrokerRuntimeStats(brokerAddr); } @Override public ConsumeStats examineConsumeStats(String consumerGroup) - throws RemotingException, MQClientException, InterruptedException, MQBrokerException { + throws RemotingException, MQClientException, InterruptedException, MQBrokerException { return MQAdminInstance.threadLocalMQAdminExt().examineConsumeStats(consumerGroup); } @Override public ConsumeStats examineConsumeStats(String consumerGroup, String topic) - throws RemotingException, MQClientException, InterruptedException, MQBrokerException { + throws RemotingException, MQClientException, InterruptedException, MQBrokerException { return MQAdminInstance.threadLocalMQAdminExt().examineConsumeStats(consumerGroup, topic); } @Override public ClusterInfo examineBrokerClusterInfo() - throws InterruptedException, MQBrokerException, RemotingTimeoutException, RemotingSendRequestException, - RemotingConnectException { + throws InterruptedException, MQBrokerException, RemotingTimeoutException, RemotingSendRequestException, + RemotingConnectException { return MQAdminInstance.threadLocalMQAdminExt().examineBrokerClusterInfo(); } @Override public TopicRouteData examineTopicRouteInfo(String topic) - throws RemotingException, MQClientException, InterruptedException { + throws RemotingException, MQClientException, InterruptedException { return MQAdminInstance.threadLocalMQAdminExt().examineTopicRouteInfo(topic); } @Override public ConsumerConnection examineConsumerConnectionInfo(String consumerGroup) - throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, - InterruptedException, MQBrokerException, RemotingException, MQClientException { + throws + InterruptedException, MQBrokerException, RemotingException, MQClientException { return MQAdminInstance.threadLocalMQAdminExt().examineConsumerConnectionInfo(consumerGroup); } @Override public ProducerConnection examineProducerConnectionInfo(String producerGroup, String topic) - throws RemotingException, MQClientException, InterruptedException, MQBrokerException { + throws RemotingException, MQClientException, InterruptedException, MQBrokerException { return MQAdminInstance.threadLocalMQAdminExt().examineProducerConnectionInfo(producerGroup, topic); } @@ -230,8 +216,8 @@ public List getNameServerAddressList() { @Override public int wipeWritePermOfBroker(String namesrvAddr, String brokerName) - throws RemotingCommandException, RemotingConnectException, RemotingSendRequestException, - RemotingTimeoutException, InterruptedException, MQClientException { + throws RemotingCommandException, RemotingConnectException, RemotingSendRequestException, + RemotingTimeoutException, InterruptedException, MQClientException { return MQAdminInstance.threadLocalMQAdminExt().wipeWritePermOfBroker(namesrvAddr, brokerName); } @@ -242,32 +228,32 @@ public void putKVConfig(String namespace, String key, String value) { @Override public String getKVConfig(String namespace, String key) - throws RemotingException, MQClientException, InterruptedException { + throws RemotingException, MQClientException, InterruptedException { return MQAdminInstance.threadLocalMQAdminExt().getKVConfig(namespace, key); } @Override public KVTable getKVListByNamespace(String namespace) - throws RemotingException, MQClientException, InterruptedException { + throws RemotingException, MQClientException, InterruptedException { return MQAdminInstance.threadLocalMQAdminExt().getKVListByNamespace(namespace); } @Override public void deleteTopicInBroker(Set addrs, String topic) - throws RemotingException, MQBrokerException, InterruptedException, MQClientException { - logger.info("addrs={} topic={}", JsonUtil.obj2String(addrs), topic); + throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + logger.info("addrs={} topic={}", JsonUtil.objectToString(addrs), topic); MQAdminInstance.threadLocalMQAdminExt().deleteTopicInBroker(addrs, topic); } @Override public void deleteTopicInNameServer(Set addrs, String topic) - throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + throws RemotingException, MQBrokerException, InterruptedException, MQClientException { MQAdminInstance.threadLocalMQAdminExt().deleteTopicInNameServer(addrs, topic); } @Override public void deleteSubscriptionGroup(String addr, String groupName) - throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + throws RemotingException, MQBrokerException, InterruptedException, MQClientException { MQAdminInstance.threadLocalMQAdminExt().deleteSubscriptionGroup(addr, groupName); } @@ -278,88 +264,88 @@ public void deleteSubscriptionGroup(String addr, String groupName, boolean remov @Override public void createAndUpdateKvConfig(String namespace, String key, String value) - throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + throws RemotingException, MQBrokerException, InterruptedException, MQClientException { MQAdminInstance.threadLocalMQAdminExt().createAndUpdateKvConfig(namespace, key, value); } @Override public void deleteKvConfig(String namespace, String key) - throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + throws RemotingException, MQBrokerException, InterruptedException, MQClientException { MQAdminInstance.threadLocalMQAdminExt().deleteKvConfig(namespace, key); } @Override public List resetOffsetByTimestampOld(String consumerGroup, String topic, long timestamp, - boolean force) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + boolean force) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { return MQAdminInstance.threadLocalMQAdminExt().resetOffsetByTimestampOld(consumerGroup, topic, timestamp, force); } @Override public Map resetOffsetByTimestamp(String topic, String group, long timestamp, - boolean isForce) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + boolean isForce) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { return MQAdminInstance.threadLocalMQAdminExt().resetOffsetByTimestamp(topic, group, timestamp, isForce); } @Override public void resetOffsetNew(String consumerGroup, String topic, long timestamp) - throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + throws RemotingException, MQBrokerException, InterruptedException, MQClientException { MQAdminInstance.threadLocalMQAdminExt().resetOffsetNew(consumerGroup, topic, timestamp); } @Override public Map> getConsumeStatus(String topic, String group, - String clientAddr) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + String clientAddr) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { return MQAdminInstance.threadLocalMQAdminExt().getConsumeStatus(topic, group, clientAddr); } @Override public void createOrUpdateOrderConf(String key, String value, boolean isCluster) - throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + throws RemotingException, MQBrokerException, InterruptedException, MQClientException { MQAdminInstance.threadLocalMQAdminExt().createOrUpdateOrderConf(key, value, isCluster); } @Override public GroupList queryTopicConsumeByWho(String topic) - throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, - InterruptedException, MQBrokerException, RemotingException, MQClientException { + throws + InterruptedException, MQBrokerException, RemotingException, MQClientException { return MQAdminInstance.threadLocalMQAdminExt().queryTopicConsumeByWho(topic); } @Override public boolean cleanExpiredConsumerQueue(String cluster) - throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, MQClientException, - InterruptedException { + throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, MQClientException, + InterruptedException { return MQAdminInstance.threadLocalMQAdminExt().cleanExpiredConsumerQueue(cluster); } @Override public boolean cleanExpiredConsumerQueueByAddr(String addr) - throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, MQClientException, - InterruptedException { + throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, MQClientException, + InterruptedException { return MQAdminInstance.threadLocalMQAdminExt().cleanExpiredConsumerQueueByAddr(addr); } @Override public ConsumerRunningInfo getConsumerRunningInfo(String consumerGroup, String clientId, boolean jstack) - throws RemotingException, MQClientException, InterruptedException { + throws RemotingException, MQClientException, InterruptedException { return MQAdminInstance.threadLocalMQAdminExt().getConsumerRunningInfo(consumerGroup, clientId, jstack); } @Override public ConsumeMessageDirectlyResult consumeMessageDirectly(String consumerGroup, String clientId, - String msgId) throws RemotingException, MQClientException, InterruptedException, MQBrokerException { + String msgId) throws RemotingException, MQClientException, InterruptedException, MQBrokerException { return MQAdminInstance.threadLocalMQAdminExt().consumeMessageDirectly(consumerGroup, clientId, msgId); } @Override public List messageTrackDetail(MessageExt msg) - throws RemotingException, MQClientException, InterruptedException, MQBrokerException { + throws RemotingException, MQClientException, InterruptedException, MQBrokerException { return MQAdminInstance.threadLocalMQAdminExt().messageTrackDetail(msg); } @Override public void cloneGroupOffset(String srcGroup, String destGroup, String topic, boolean isOffline) - throws RemotingException, MQClientException, InterruptedException, MQBrokerException { + throws RemotingException, MQClientException, InterruptedException, MQBrokerException { MQAdminInstance.threadLocalMQAdminExt().cloneGroupOffset(srcGroup, destGroup, topic, isOffline); } @@ -370,7 +356,7 @@ public void createTopic(String key, String newTopic, int queueNum) throws MQClie @Override public void createTopic(String key, String newTopic, int queueNum, int topicSysFlag) - throws MQClientException { + throws MQClientException { MQAdminInstance.threadLocalMQAdminExt().createTopic(key, newTopic, queueNum, topicSysFlag); } @@ -396,13 +382,13 @@ public long earliestMsgStoreTime(MessageQueue mq) throws MQClientException { @Override public MessageExt viewMessage(String msgId) - throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + throws RemotingException, MQBrokerException, InterruptedException, MQClientException { return MQAdminInstance.threadLocalMQAdminExt().viewMessage(msgId); } @Override public QueryResult queryMessage(String topic, String key, int maxNum, long begin, long end) - throws MQClientException, InterruptedException { + throws MQClientException, InterruptedException { return MQAdminInstance.threadLocalMQAdminExt().queryMessage(topic, key, maxNum, begin, end); } @@ -422,7 +408,7 @@ public void shutdown() { @Override public List queryConsumeTimeSpan(String topic, - String group) throws InterruptedException, MQBrokerException, RemotingException, MQClientException { + String group) throws InterruptedException, MQBrokerException, RemotingException, MQClientException { return MQAdminInstance.threadLocalMQAdminExt().queryConsumeTimeSpan(topic, group); } @@ -432,120 +418,124 @@ public List queryConsumeTimeSpan(String topic, //https://github.com/apache/incubator-rocketmq/pull/69 @Override public MessageExt viewMessage(String topic, - String msgId) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + String msgId) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { logger.info("MessageClientIDSetter.getNearlyTimeFromID(msgId)={} msgId={}", MessageClientIDSetter.getNearlyTimeFromID(msgId), msgId); try { return viewMessage(msgId); - } - catch (Exception e) { + } catch (Exception e) { } MQAdminImpl mqAdminImpl = MQAdminInstance.threadLocalMqClientInstance().getMQAdminImpl(); - QueryResult qr = Reflect.on(mqAdminImpl).call("queryMessage", topic, msgId, 32, - MessageClientIDSetter.getNearlyTimeFromID(msgId).getTime() - 1000 * 60 * 60 * 13L, Long.MAX_VALUE, true).get(); - if (qr != null && qr.getMessageList() != null && qr.getMessageList().size() > 0) { - return qr.getMessageList().get(0); - } - else { - return null; + QueryResult queryMessage = Reflect.on(mqAdminImpl).call("queryMessage", topic, msgId, 32, + MessageClientIDSetter.getNearlyTimeFromID(msgId).getTime() - 1000 * 60 * 60 * 13L, Long.MAX_VALUE, true).get(); + if (queryMessage != null + && queryMessage.getMessageList() != null + && !queryMessage.getMessageList().isEmpty()) { + return queryMessage.getMessageList().get(0); } + return null; } @Override public ConsumeMessageDirectlyResult consumeMessageDirectly(String consumerGroup, String clientId, String topic, - String msgId) throws RemotingException, MQClientException, InterruptedException, MQBrokerException { + String msgId) throws RemotingException, MQClientException, InterruptedException, MQBrokerException { return MQAdminInstance.threadLocalMQAdminExt().consumeMessageDirectly(consumerGroup, clientId, topic, msgId); } @Override public Properties getBrokerConfig( - String brokerAddr) throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, UnsupportedEncodingException, InterruptedException, MQBrokerException { + String brokerAddr) throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, UnsupportedEncodingException, InterruptedException, MQBrokerException { return MQAdminInstance.threadLocalMQAdminExt().getBrokerConfig(brokerAddr); } @Override public TopicList fetchTopicsByCLuster( - String clusterName) throws RemotingException, MQClientException, InterruptedException { + String clusterName) throws RemotingException, MQClientException, InterruptedException { return MQAdminInstance.threadLocalMQAdminExt().fetchTopicsByCLuster(clusterName); } @Override public boolean cleanUnusedTopic( - String cluster) throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, MQClientException, InterruptedException { + String cluster) throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, MQClientException, InterruptedException { return MQAdminInstance.threadLocalMQAdminExt().cleanUnusedTopic(cluster); } @Override public boolean cleanUnusedTopicByAddr( - String addr) throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, MQClientException, InterruptedException { + String addr) throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, MQClientException, InterruptedException { return MQAdminInstance.threadLocalMQAdminExt().cleanUnusedTopicByAddr(addr); } @Override public BrokerStatsData viewBrokerStatsData(String brokerAddr, String statsName, - String statsKey) throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, MQClientException, InterruptedException { + String statsKey) throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, MQClientException, InterruptedException { return MQAdminInstance.threadLocalMQAdminExt().viewBrokerStatsData(brokerAddr, statsName, statsKey); } @Override public Set getClusterList( - String topic) throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, MQClientException, InterruptedException { + String topic) throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, MQClientException, InterruptedException { return MQAdminInstance.threadLocalMQAdminExt().getClusterList(topic); } @Override public ConsumeStatsList fetchConsumeStatsInBroker(String brokerAddr, boolean isOrder, - long timeoutMillis) throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, MQClientException, InterruptedException { + long timeoutMillis) throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, MQClientException, InterruptedException { return MQAdminInstance.threadLocalMQAdminExt().fetchConsumeStatsInBroker(brokerAddr, isOrder, timeoutMillis); } @Override public Set getTopicClusterList( - String topic) throws InterruptedException, MQBrokerException, MQClientException, RemotingException { + String topic) throws InterruptedException, MQBrokerException, MQClientException, RemotingException { return MQAdminInstance.threadLocalMQAdminExt().getTopicClusterList(topic); } @Override public SubscriptionGroupWrapper getAllSubscriptionGroup(String brokerAddr, - long timeoutMillis) throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException, MQBrokerException { + long timeoutMillis) throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException, MQBrokerException { return MQAdminInstance.threadLocalMQAdminExt().getAllSubscriptionGroup(brokerAddr, timeoutMillis); } @Override public TopicConfigSerializeWrapper getAllTopicGroup(String brokerAddr, - long timeoutMillis) throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException, MQBrokerException { + long timeoutMillis) throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException, MQBrokerException { return MQAdminInstance.threadLocalMQAdminExt().getAllTopicGroup(brokerAddr, timeoutMillis); } @Override public void updateConsumeOffset(String brokerAddr, String consumeGroup, MessageQueue mq, - long offset) throws RemotingException, InterruptedException, MQBrokerException { + long offset) throws RemotingException, InterruptedException, MQBrokerException { MQAdminInstance.threadLocalMQAdminExt().updateConsumeOffset(brokerAddr, consumeGroup, mq, offset); } // 4.0.0 added - @Override public void updateNameServerConfig(Properties properties, - List list) throws InterruptedException, RemotingConnectException, UnsupportedEncodingException, RemotingSendRequestException, RemotingTimeoutException, MQClientException, MQBrokerException { + @Override + public void updateNameServerConfig(Properties properties, + List list) throws InterruptedException, RemotingConnectException, UnsupportedEncodingException, RemotingSendRequestException, RemotingTimeoutException, MQClientException, MQBrokerException { } - @Override public Map getNameServerConfig( - List list) throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException, MQClientException, UnsupportedEncodingException { + @Override + public Map getNameServerConfig( + List list) throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException, MQClientException, UnsupportedEncodingException { return null; } - @Override public QueryConsumeQueueResponseBody queryConsumeQueue(String brokerAddr, String topic, - int queueId, long index, int count, - String consumerGroup) throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException, MQClientException { + @Override + public QueryConsumeQueueResponseBody queryConsumeQueue(String brokerAddr, String topic, + int queueId, long index, int count, + String consumerGroup) throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException, MQClientException { return null; } - @Override public boolean resumeCheckHalfMessage( - String msgId) throws RemotingException, MQClientException, InterruptedException, MQBrokerException { + @Override + public boolean resumeCheckHalfMessage( + String msgId) throws RemotingException, MQClientException, InterruptedException, MQBrokerException { return false; } - @Override public boolean resumeCheckHalfMessage(String topic, - String msgId) throws RemotingException, MQClientException, InterruptedException, MQBrokerException { + @Override + public boolean resumeCheckHalfMessage(String topic, + String msgId) throws RemotingException, MQClientException, InterruptedException, MQBrokerException { return false; } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/AbstractFileStore.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/AbstractFileStore.java index 045b9903..31d6c5d5 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/AbstractFileStore.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/AbstractFileStore.java @@ -16,26 +16,30 @@ */ package org.apache.rocketmq.dashboard.service.impl; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.dashboard.config.RMQConfigure; import org.apache.rocketmq.srvutil.FileWatchService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + +@Slf4j +@RequiredArgsConstructor public abstract class AbstractFileStore { - public final Logger log = LoggerFactory.getLogger(this.getClass()); - public String filePath; + public final String filePath; - public AbstractFileStore(RMQConfigure configure, String fileName) { + protected AbstractFileStore(RMQConfigure configure, String fileName) { filePath = configure.getRocketMqDashboardDataPath() + File.separator + fileName; if (!new File(filePath).exists()) { // Use the default path InputStream inputStream = getClass().getResourceAsStream("/" + fileName); if (inputStream == null) { - log.error(String.format("Can not found the file %s in Spring Boot jar", fileName)); + log.error(String.format("can not found the file %s in Spring Boot jar", fileName)); System.exit(1); } else { try { @@ -65,7 +69,7 @@ private void load() { private boolean watch() { try { - FileWatchService fileWatchService = new FileWatchService(new String[] {filePath}, new FileWatchService.Listener() { + FileWatchService fileWatchService = new FileWatchService(new String[]{filePath}, new FileWatchService.Listener() { @Override public void onChanged(String path) { log.info("The file changed, reload the context"); diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/ClusterServiceImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/ClusterServiceImpl.java index c57f7e18..2ee88401 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/ClusterServiceImpl.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/ClusterServiceImpl.java @@ -17,14 +17,14 @@ package org.apache.rocketmq.dashboard.service.impl; +import com.google.common.base.Throwables; +import com.google.common.collect.Maps; import org.apache.rocketmq.common.protocol.body.ClusterInfo; import org.apache.rocketmq.common.protocol.body.KVTable; import org.apache.rocketmq.common.protocol.route.BrokerData; -import org.apache.rocketmq.tools.admin.MQAdminExt; import org.apache.rocketmq.dashboard.service.ClusterService; import org.apache.rocketmq.dashboard.util.JsonUtil; -import com.google.common.base.Throwables; -import com.google.common.collect.Maps; +import org.apache.rocketmq.tools.admin.MQAdminExt; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -35,16 +35,16 @@ @Service public class ClusterServiceImpl implements ClusterService { - private Logger logger = LoggerFactory.getLogger(ClusterServiceImpl.class); + private final Logger logger = LoggerFactory.getLogger(ClusterServiceImpl.class); @Resource private MQAdminExt mqAdminExt; @Override - public Map list() { + public Map queryClusterList() { try { Map resultMap = Maps.newHashMap(); ClusterInfo clusterInfo = mqAdminExt.examineBrokerClusterInfo(); - logger.info("op=look_clusterInfo {}", JsonUtil.obj2String(clusterInfo)); + logger.info("op=look_clusterInfo {}", JsonUtil.objectToString(clusterInfo)); Map> brokerServer = Maps.newHashMap(); for (BrokerData brokerData : clusterInfo.getBrokerAddrTable().values()) { Map brokerMasterSlaveMap = Maps.newHashMap(); @@ -57,19 +57,16 @@ public Map list() { resultMap.put("clusterInfo", clusterInfo); resultMap.put("brokerServer", brokerServer); return resultMap; - } - catch (Exception err) { + } catch (Exception err) { throw Throwables.propagate(err); } } - @Override public Properties getBrokerConfig(String brokerAddr) { try { return mqAdminExt.getBrokerConfig(brokerAddr); - } - catch (Exception e) { + } catch (Exception e) { throw Throwables.propagate(e); } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/ConsumerServiceImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/ConsumerServiceImpl.java index 4e6c6375..4b4b2691 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/ConsumerServiceImpl.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/ConsumerServiceImpl.java @@ -23,12 +23,6 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.rocketmq.client.exception.MQClientException; @@ -38,12 +32,7 @@ import org.apache.rocketmq.common.admin.RollbackStats; import org.apache.rocketmq.common.message.MessageQueue; import org.apache.rocketmq.common.protocol.ResponseCode; -import org.apache.rocketmq.common.protocol.body.ClusterInfo; -import org.apache.rocketmq.common.protocol.body.Connection; -import org.apache.rocketmq.common.protocol.body.ConsumerConnection; -import org.apache.rocketmq.common.protocol.body.ConsumerRunningInfo; -import org.apache.rocketmq.common.protocol.body.GroupList; -import org.apache.rocketmq.common.protocol.body.SubscriptionGroupWrapper; +import org.apache.rocketmq.common.protocol.body.*; import org.apache.rocketmq.common.protocol.route.BrokerData; import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig; import org.apache.rocketmq.dashboard.model.ConsumerGroupRollBackStat; @@ -59,12 +48,13 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import java.util.*; +import java.util.stream.Collectors; + import static com.google.common.base.Throwables.propagate; @Service public class ConsumerServiceImpl extends AbstractCommonService implements ConsumerService { - private Logger logger = LoggerFactory.getLogger(ConsumerServiceImpl.class); - private static final Set SYSTEM_GROUP_SET = new HashSet<>(); static { @@ -78,6 +68,8 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum SYSTEM_GROUP_SET.add(MixAll.CID_SYS_RMQ_TRANS); } + private final Logger logger = LoggerFactory.getLogger(ConsumerServiceImpl.class); + @Override public List queryGroupList(boolean skipSysGroup) { Set consumerGroupSet = Sets.newHashSet(); @@ -87,8 +79,7 @@ public List queryGroupList(boolean skipSysGroup) { SubscriptionGroupWrapper subscriptionGroupWrapper = mqAdminExt.getAllSubscriptionGroup(brokerData.selectBrokerAddr(), 3000L); consumerGroupSet.addAll(subscriptionGroupWrapper.getSubscriptionGroupTable().keySet()); } - } - catch (Exception err) { + } catch (Exception err) { throw Throwables.propagate(err); } List groupConsumeInfoList = Lists.newArrayList(); @@ -114,23 +105,21 @@ public GroupConsumeInfo queryGroup(String consumerGroup) { ConsumeStats consumeStats = null; try { consumeStats = mqAdminExt.examineConsumeStats(consumerGroup); - } - catch (Exception e) { + } catch (Exception e) { logger.warn("examineConsumeStats exception to consumerGroup {}, response [{}]", consumerGroup, e.getMessage()); } ConsumerConnection consumerConnection = null; try { consumerConnection = mqAdminExt.examineConsumerConnectionInfo(consumerGroup); - } - catch (Exception e) { + } catch (Exception e) { logger.warn("examineConsumeStats exception to consumerGroup {}, response [{}]", consumerGroup, e.getMessage()); } groupConsumeInfo.setGroup(consumerGroup); if (consumeStats != null) { - groupConsumeInfo.setConsumeTps((int)consumeStats.getConsumeTps()); + groupConsumeInfo.setConsumeTps((int) consumeStats.getConsumeTps()); groupConsumeInfo.setDiffTotal(consumeStats.computeTotalDiff()); } @@ -140,10 +129,9 @@ public GroupConsumeInfo queryGroup(String consumerGroup) { groupConsumeInfo.setConsumeType(consumerConnection.getConsumeType()); groupConsumeInfo.setVersion(MQVersion.getVersionDesc(consumerConnection.computeMinVersion())); } - } - catch (Exception e) { + } catch (Exception e) { logger.warn("examineConsumeStats or examineConsumerConnectionInfo exception, " - + consumerGroup, e); + + consumerGroup, e); } return groupConsumeInfo; } @@ -158,8 +146,7 @@ public List queryConsumeStatsList(final String topic, String ConsumeStats consumeStats = null; try { consumeStats = mqAdminExt.examineConsumeStats(groupName, topic); - } - catch (Exception e) { + } catch (Exception e) { throw propagate(e); } List mqList = Lists.newArrayList(Iterables.filter(consumeStats.getOffsetTable().keySet(), new Predicate() { @@ -196,8 +183,7 @@ private Map getClientConnection(String groupName) { results.put(messageQueue, clinetId); } } - } - catch (Exception err) { + } catch (Exception err) { logger.error("op=getClientConnection_error", err); } return results; @@ -212,14 +198,12 @@ private Map getClientConnection(String groupName) { List topicConsumerInfoList = null; try { topicConsumerInfoList = queryConsumeStatsList(topic, group); - } - catch (Exception ignore) { + } catch (Exception ignore) { } group2ConsumerInfoMap.put(group, CollectionUtils.isEmpty(topicConsumerInfoList) ? new TopicConsumerInfo(topic) : topicConsumerInfoList.get(0)); } return group2ConsumerInfoMap; - } - catch (Exception e) { + } catch (Exception e) { throw propagate(e); } } @@ -230,7 +214,7 @@ public Map resetOffset(ResetOffsetRequest res for (String consumerGroup : resetOffsetRequest.getConsumerGroupList()) { try { Map rollbackStatsMap = - mqAdminExt.resetOffsetByTimestamp(resetOffsetRequest.getTopic(), consumerGroup, resetOffsetRequest.getResetTime(), resetOffsetRequest.isForce()); + mqAdminExt.resetOffsetByTimestamp(resetOffsetRequest.getTopic(), consumerGroup, resetOffsetRequest.getResetTime(), resetOffsetRequest.isForce()); ConsumerGroupRollBackStat consumerGroupRollBackStat = new ConsumerGroupRollBackStat(true); List rollbackStatsList = consumerGroupRollBackStat.getRollbackStatsList(); for (Map.Entry rollbackStatsEntty : rollbackStatsMap.entrySet()) { @@ -241,8 +225,7 @@ public Map resetOffset(ResetOffsetRequest res rollbackStatsList.add(rollbackStats); } groupRollbackStats.put(consumerGroup, consumerGroupRollBackStat); - } - catch (MQClientException e) { + } catch (MQClientException e) { if (ResponseCode.CONSUMER_NOT_ONLINE == e.getResponseCode()) { try { ConsumerGroupRollBackStat consumerGroupRollBackStat = new ConsumerGroupRollBackStat(true); @@ -250,17 +233,14 @@ public Map resetOffset(ResetOffsetRequest res consumerGroupRollBackStat.setRollbackStatsList(rollbackStatsList); groupRollbackStats.put(consumerGroup, consumerGroupRollBackStat); continue; - } - catch (Exception err) { + } catch (Exception err) { logger.error("op=resetOffset_which_not_online_error", err); } - } - else { + } else { logger.error("op=resetOffset_error", e); } groupRollbackStats.put(consumerGroup, new ConsumerGroupRollBackStat(false, e.getMessage())); - } - catch (Exception e) { + } catch (Exception e) { logger.error("op=resetOffset_error", e); groupRollbackStats.put(consumerGroup, new ConsumerGroupRollBackStat(false, e.getMessage())); } @@ -281,8 +261,7 @@ public List examineSubscriptionGroupConfig(String group) { } consumerConfigInfoList.add(new ConsumerConfigInfo(Lists.newArrayList(brokerName), subscriptionGroupConfig)); } - } - catch (Exception e) { + } catch (Exception e) { throw propagate(e); } return consumerConfigInfoList; @@ -296,8 +275,7 @@ public boolean deleteSubGroup(DeleteSubGroupRequest deleteSubGroupRequest) { logger.info("addr={} groupName={}", clusterInfo.getBrokerAddrTable().get(brokerName).selectBrokerAddr(), deleteSubGroupRequest.getGroupName()); mqAdminExt.deleteSubscriptionGroup(clusterInfo.getBrokerAddrTable().get(brokerName).selectBrokerAddr(), deleteSubGroupRequest.getGroupName()); } - } - catch (Exception e) { + } catch (Exception e) { throw propagate(e); } return true; @@ -308,11 +286,10 @@ public boolean createAndUpdateSubscriptionGroupConfig(ConsumerConfigInfo consume try { ClusterInfo clusterInfo = mqAdminExt.examineBrokerClusterInfo(); for (String brokerName : changeToBrokerNameSet(clusterInfo.getClusterAddrTable(), - consumerConfigInfo.getClusterNameList(), consumerConfigInfo.getBrokerNameList())) { + consumerConfigInfo.getClusterNameList(), consumerConfigInfo.getBrokerNameList())) { mqAdminExt.createAndUpdateSubscriptionGroupConfig(clusterInfo.getBrokerAddrTable().get(brokerName).selectBrokerAddr(), consumerConfigInfo.getSubscriptionGroupConfig()); } - } - catch (Exception err) { + } catch (Exception err) { throw Throwables.propagate(err); } return true; @@ -326,8 +303,7 @@ public Set fetchBrokerNameSetBySubscriptionGroup(String group) { for (ConsumerConfigInfo consumerConfigInfo : consumerConfigInfoList) { brokerNameSet.addAll(consumerConfigInfo.getBrokerNameList()); } - } - catch (Exception e) { + } catch (Exception e) { throw Throwables.propagate(e); } return brokerNameSet; @@ -338,8 +314,7 @@ public Set fetchBrokerNameSetBySubscriptionGroup(String group) { public ConsumerConnection getConsumerConnection(String consumerGroup) { try { return mqAdminExt.examineConsumerConnectionInfo(consumerGroup); - } - catch (Exception e) { + } catch (Exception e) { throw Throwables.propagate(e); } } @@ -348,8 +323,7 @@ public ConsumerConnection getConsumerConnection(String consumerGroup) { public ConsumerRunningInfo getConsumerRunningInfo(String consumerGroup, String clientId, boolean jstack) { try { return mqAdminExt.getConsumerRunningInfo(consumerGroup, clientId, jstack); - } - catch (Exception e) { + } catch (Exception e) { throw Throwables.propagate(e); } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/DashboardCollectServiceImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/DashboardCollectServiceImpl.java index fa8f0736..3b60b1ae 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/DashboardCollectServiceImpl.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/DashboardCollectServiceImpl.java @@ -21,80 +21,76 @@ import com.google.common.base.Charsets; import com.google.common.base.Throwables; import com.google.common.base.Ticker; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; -import com.google.common.cache.RemovalListener; -import com.google.common.cache.RemovalNotification; +import com.google.common.cache.*; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.io.Files; -import java.io.File; -import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.Set; -import javax.annotation.Resource; import org.apache.rocketmq.dashboard.config.RMQConfigure; import org.apache.rocketmq.dashboard.service.DashboardCollectService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.Set; + @Service public class DashboardCollectServiceImpl implements DashboardCollectService { + private final static Logger log = LoggerFactory.getLogger(DashboardCollectServiceImpl.class); @Resource private RMQConfigure configure; - - private final static Logger log = LoggerFactory.getLogger(DashboardCollectServiceImpl.class); - - private LoadingCache> brokerMap = CacheBuilder.newBuilder() - .maximumSize(1000) - .concurrencyLevel(10) - .recordStats() - .ticker(Ticker.systemTicker()) - .removalListener(new RemovalListener() { - @Override - public void onRemoval(RemovalNotification notification) { - log.debug(notification.getKey() + " was removed, cause is " + notification.getCause()); - } - }) - .build( - new CacheLoader>() { + private final LoadingCache> brokerMap = CacheBuilder.newBuilder() + .maximumSize(1000) + .concurrencyLevel(10) + .recordStats() + .ticker(Ticker.systemTicker()) + .removalListener(new RemovalListener() { @Override - public List load(String key) { - List list = Lists.newArrayList(); - return list; + public void onRemoval(RemovalNotification notification) { + log.debug(notification.getKey() + " was removed, cause is " + notification.getCause()); } - } - ); + }) + .build( + new CacheLoader>() { + @Override + public List load(String key) { + List list = Lists.newArrayList(); + return list; + } + } + ); - private LoadingCache> topicMap = CacheBuilder.newBuilder() - .maximumSize(1000) - .concurrencyLevel(10) - .recordStats() - .ticker(Ticker.systemTicker()) - .removalListener(new RemovalListener() { - @Override - public void onRemoval(RemovalNotification notification) { - log.debug(notification.getKey() + " was removed, cause is " + notification.getCause()); - } - }) - .build( - new CacheLoader>() { + private final LoadingCache> topicMap = CacheBuilder.newBuilder() + .maximumSize(1000) + .concurrencyLevel(10) + .recordStats() + .ticker(Ticker.systemTicker()) + .removalListener(new RemovalListener() { @Override - public List load(String key) { - List list = Lists.newArrayList(); - return list; + public void onRemoval(RemovalNotification notification) { + log.debug(notification.getKey() + " was removed, cause is " + notification.getCause()); } - } - ); + }) + .build( + new CacheLoader>() { + @Override + public List load(String key) { + List list = Lists.newArrayList(); + return list; + } + } + ); @Override public LoadingCache> getBrokerMap() { return brokerMap; } + @Override public LoadingCache> getTopicMap() { return topicMap; @@ -105,8 +101,7 @@ public Map> jsonDataFile2map(File file) { List strings; try { strings = Files.readLines(file, Charsets.UTF_8); - } - catch (IOException e) { + } catch (IOException e) { throw Throwables.propagate(e); } StringBuffer sb = new StringBuffer(); diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/DashboardServiceImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/DashboardServiceImpl.java index b2885e4c..591105db 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/DashboardServiceImpl.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/DashboardServiceImpl.java @@ -18,21 +18,23 @@ package org.apache.rocketmq.dashboard.service.impl; import com.google.common.collect.Lists; +import org.apache.rocketmq.dashboard.service.DashboardCollectService; +import org.apache.rocketmq.dashboard.service.DashboardService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; -import javax.annotation.Resource; -import org.apache.rocketmq.dashboard.service.DashboardCollectService; -import org.apache.rocketmq.dashboard.service.DashboardService; -import org.springframework.stereotype.Service; @Service public class DashboardServiceImpl implements DashboardService { @Resource private DashboardCollectService dashboardCollectService; + /** * @param date format yyyy-MM-dd */ @@ -47,7 +49,7 @@ public Map> queryTopicData(String date) { } /** - * @param date format yyyy-MM-dd + * @param date format yyyy-MM-dd * @param topicName */ @Override diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/DlqMessageServiceImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/DlqMessageServiceImpl.java index 6fb822a7..0d3fc486 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/DlqMessageServiceImpl.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/DlqMessageServiceImpl.java @@ -18,9 +18,6 @@ package org.apache.rocketmq.dashboard.service.impl; import com.google.common.base.Throwables; -import java.util.ArrayList; -import java.util.List; -import javax.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.common.MixAll; @@ -35,6 +32,10 @@ import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + @Service @Slf4j public class DlqMessageServiceImpl implements DlqMessageService { @@ -55,7 +56,7 @@ public MessagePage queryDlqMessageByPage(MessageQuery query) { } catch (MQClientException e) { // If the %DLQ%Group does not exist, the message returns null if (topic.startsWith(MixAll.DLQ_GROUP_TOPIC_PREFIX) - && e.getResponseCode() == ResponseCode.TOPIC_NOT_EXIST) { + && e.getResponseCode() == ResponseCode.TOPIC_NOT_EXIST) { return new MessagePage(new PageImpl<>(messageViews, page, 0), query.getTaskId()); } else { throw Throwables.propagate(e); diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/LoginServiceImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/LoginServiceImpl.java index c4a07c92..c10c26cc 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/LoginServiceImpl.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/LoginServiceImpl.java @@ -32,6 +32,7 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; @Service public class LoginServiceImpl implements LoginService { @@ -57,11 +58,7 @@ public boolean login(HttpServletRequest request, HttpServletResponse response) { protected void auth(HttpServletRequest request, HttpServletResponse response) { try { String url = WebUtil.getUrl(request); - try { - url = URLEncoder.encode(url, "UTF-8"); - } catch (UnsupportedEncodingException e) { - logger.error("url encode:{}", url, e); - } + url = URLEncoder.encode(url, StandardCharsets.UTF_8); logger.debug("redirect url : {}", url); WebUtil.redirect(response, request, "/#/login?redirect=" + url); } catch (IOException e) { diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/MessageServiceImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/MessageServiceImpl.java index 020548ea..e9f8ff0c 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/MessageServiceImpl.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/MessageServiceImpl.java @@ -41,11 +41,7 @@ import org.apache.rocketmq.common.protocol.body.ConsumerConnection; import org.apache.rocketmq.dashboard.config.RMQConfigure; import org.apache.rocketmq.dashboard.exception.ServiceException; -import org.apache.rocketmq.dashboard.model.QueueOffsetInfo; -import org.apache.rocketmq.dashboard.model.MessageView; -import org.apache.rocketmq.dashboard.model.MessagePage; -import org.apache.rocketmq.dashboard.model.MessagePageTask; -import org.apache.rocketmq.dashboard.model.MessageQueryByPage; +import org.apache.rocketmq.dashboard.model.*; import org.apache.rocketmq.dashboard.model.request.MessageQuery; import org.apache.rocketmq.dashboard.service.MessageService; import org.apache.rocketmq.remoting.RPCHook; @@ -59,33 +55,25 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.Collections; -import java.util.List; -import java.util.Comparator; -import java.util.ArrayList; -import java.util.Set; -import java.util.Collection; -import java.util.Date; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Service public class MessageServiceImpl implements MessageService { - private Logger logger = LoggerFactory.getLogger(MessageServiceImpl.class); - private static final Cache> CACHE = CacheBuilder.newBuilder() .maximumSize(10000) .expireAfterWrite(60, TimeUnit.MINUTES) .build(); - - @Autowired - private RMQConfigure configure; /** * @see org.apache.rocketmq.store.config.MessageStoreConfig maxMsgsNumBatch = 64; * @see org.apache.rocketmq.store.index.IndexService maxNum = Math.min(maxNum, this.defaultMessageStore.getMessageStoreConfig().getMaxMsgsNumBatch()); */ private final static int QUERY_MESSAGE_MAX_NUM = 64; + private final Logger logger = LoggerFactory.getLogger(MessageServiceImpl.class); + @Autowired + private RMQConfigure configure; @Resource private MQAdminExt mqAdminExt; @@ -153,7 +141,7 @@ public MessageView apply(MessageExt messageExt) { @Override public boolean apply(MessageView messageView) { if (messageView.getStoreTimestamp() < begin || messageView.getStoreTimestamp() > end) { - logger.info("begin={} end={} time not in range {} {}", begin, end, messageView.getStoreTimestamp(), new Date(messageView.getStoreTimestamp()).toString()); + logger.info("begin={} end={} time not in range {} {}", begin, end, messageView.getStoreTimestamp(), new Date(messageView.getStoreTimestamp())); } return messageView.getStoreTimestamp() >= begin && messageView.getStoreTimestamp() <= end; } @@ -399,7 +387,7 @@ private Page queryMessageByTaskPage(MessageQueryByPage query, List< DefaultMQPullConsumer consumer = buildDefaultMQPullConsumer(rpcHook, configure.isUseTLS()); List messageViews = new ArrayList<>(); - long offset = query.getPageNum() * query.getPageSize(); + long offset = (long) query.getPageNum() * query.getPageSize(); long total = 0; try { @@ -460,7 +448,7 @@ private Page queryMessageByTaskPage(MessageQueryByPage query, List< private int moveStartOffset(List queueOffsets, MessageQueryByPage query) { int size = queueOffsets.size(); int next = 0; - long offset = query.getPageNum() * query.getPageSize(); + long offset = (long) query.getPageNum() * query.getPageSize(); if (offset == 0) { return next; } diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/MessageTraceServiceImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/MessageTraceServiceImpl.java index b3f3dc46..4ac46203 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/MessageTraceServiceImpl.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/MessageTraceServiceImpl.java @@ -18,16 +18,8 @@ package org.apache.rocketmq.dashboard.service.impl; import com.google.common.base.Function; -import com.google.common.collect.Lists; - import com.google.common.base.Throwables; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import javax.annotation.Resource; - +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.commons.lang3.StringUtils; import org.apache.rocketmq.client.trace.TraceType; @@ -36,11 +28,7 @@ import org.apache.rocketmq.common.topic.TopicValidator; import org.apache.rocketmq.dashboard.config.RMQConfigure; import org.apache.rocketmq.dashboard.model.MessageTraceView; -import org.apache.rocketmq.dashboard.model.trace.ProducerNode; -import org.apache.rocketmq.dashboard.model.trace.MessageTraceGraph; -import org.apache.rocketmq.dashboard.model.trace.SubscriptionNode; -import org.apache.rocketmq.dashboard.model.trace.TraceNode; -import org.apache.rocketmq.dashboard.model.trace.MessageTraceStatusEnum; +import org.apache.rocketmq.dashboard.model.trace.*; import org.apache.rocketmq.dashboard.service.MessageTraceService; import org.apache.rocketmq.tools.admin.MQAdminExt; import org.slf4j.Logger; @@ -49,15 +37,19 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + @Service public class MessageTraceServiceImpl implements MessageTraceService { - private Logger logger = LoggerFactory.getLogger(MessageTraceServiceImpl.class); - private final static int QUERY_MESSAGE_MAX_NUM = 64; - private final static String UNKNOWN_GROUP_NAME = "%UNKNOWN_GROUP%"; private final static int MESSAGE_TRACE_MISSING_VALUE = -1; + private final Logger logger = LoggerFactory.getLogger(MessageTraceServiceImpl.class); @Resource private MQAdminExt mqAdminExt; @@ -135,21 +127,21 @@ private TraceNode buildTransactionNode(MessageTraceView messageTraceView) { } private List buildSubscriptionNodeList( - Map> requestIdTracePairMap) { + Map> requestIdTracePairMap) { Map> subscriptionTraceNodeMap = Maps.newHashMap(); for (Pair traceNodePair : requestIdTracePairMap.values()) { List traceNodeList = subscriptionTraceNodeMap - .computeIfAbsent(buildGroupName(traceNodePair), (o) -> Lists.newArrayList()); + .computeIfAbsent(buildGroupName(traceNodePair), (o) -> Lists.newArrayList()); traceNodeList.add(buildConsumeMessageTraceNode(traceNodePair)); } return subscriptionTraceNodeMap.entrySet().stream() - .map((Function>, SubscriptionNode>) subscriptionEntry -> { - List traceNodeList = subscriptionEntry.getValue(); - SubscriptionNode subscriptionNode = new SubscriptionNode(); - subscriptionNode.setSubscriptionGroup(subscriptionEntry.getKey()); - subscriptionNode.setConsumeNodeList(sortTraceNodeListByBeginTimestamp(traceNodeList)); - return subscriptionNode; - }).collect(Collectors.toList()); + .map((Function>, SubscriptionNode>) subscriptionEntry -> { + List traceNodeList = subscriptionEntry.getValue(); + SubscriptionNode subscriptionNode = new SubscriptionNode(); + subscriptionNode.setSubscriptionGroup(subscriptionEntry.getKey()); + subscriptionNode.setConsumeNodeList(sortTraceNodeListByBeginTimestamp(traceNodeList)); + return subscriptionNode; + }).collect(Collectors.toList()); } private E getTraceValue(Pair traceNodePair, Function function) { @@ -208,7 +200,7 @@ private TraceNode buildConsumeMessageTraceNode(Pair> messageTraceViewGroupMap) { Pair messageTracePair = messageTraceViewGroupMap - .computeIfAbsent(messageTraceView.getRequestId(), (o) -> new Pair<>(null, null)); + .computeIfAbsent(messageTraceView.getRequestId(), (o) -> new Pair<>(null, null)); switch (TraceType.valueOf(messageTraceView.getTraceType())) { case SubBefore: messageTracePair.setObject1(messageTraceView); diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/MonitorServiceImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/MonitorServiceImpl.java index ea4dd58c..3445ef4b 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/MonitorServiceImpl.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/MonitorServiceImpl.java @@ -18,12 +18,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.base.Throwables; -import java.io.File; -import java.io.IOException; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import javax.annotation.PostConstruct; -import javax.annotation.Resource; import org.apache.rocketmq.common.MixAll; import org.apache.rocketmq.dashboard.config.RMQConfigure; import org.apache.rocketmq.dashboard.model.ConsumerMonitorConfig; @@ -31,6 +25,13 @@ import org.apache.rocketmq.dashboard.util.JsonUtil; import org.springframework.stereotype.Service; +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.io.File; +import java.io.IOException; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + @Service public class MonitorServiceImpl implements MonitorService { @@ -74,14 +75,13 @@ private String getConsumerMonitorConfigDataPathBackUp() { } private void writeToFile(String path, Object data) { - writeDataJsonToFile(path, JsonUtil.obj2String(data)); + writeDataJsonToFile(path, JsonUtil.objectToString(data)); } private void writeDataJsonToFile(String path, String dataStr) { try { MixAll.string2File(dataStr, path); - } - catch (Exception e) { + } catch (Exception e) { throw Throwables.propagate(e); } } @@ -95,7 +95,7 @@ private void loadData() throws IOException { if (content == null) { return; } - configMap = JsonUtil.string2Obj(content, new TypeReference>() { + configMap = JsonUtil.stringToObject(content, new TypeReference>() { }); } } 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 2d98e12f..276a64b8 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 @@ -18,9 +18,6 @@ import com.google.common.base.Splitter; import com.google.common.collect.Maps; -import java.util.List; -import java.util.Map; -import javax.annotation.Resource; import org.apache.commons.pool2.impl.GenericObjectPool; import org.apache.rocketmq.dashboard.config.RMQConfigure; import org.apache.rocketmq.dashboard.service.AbstractCommonService; @@ -31,6 +28,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + @Service public class OpsServiceImpl extends AbstractCommonService implements OpsService { @@ -73,7 +74,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; diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/PermissionServiceImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/PermissionServiceImpl.java index 9f69fd02..37e16741 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/PermissionServiceImpl.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/PermissionServiceImpl.java @@ -17,12 +17,7 @@ package org.apache.rocketmq.dashboard.service.impl; import com.alibaba.fastjson.JSONObject; -import java.io.FileReader; -import java.io.InputStream; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import javax.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.dashboard.config.RMQConfigure; import org.apache.rocketmq.dashboard.exception.ServiceException; import org.apache.rocketmq.dashboard.model.UserInfo; @@ -32,10 +27,18 @@ import org.springframework.stereotype.Service; import org.yaml.snakeyaml.Yaml; +import javax.annotation.Resource; +import java.io.FileReader; +import java.io.InputStream; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + import static org.apache.rocketmq.dashboard.permisssion.UserRoleEnum.ADMIN; import static org.apache.rocketmq.dashboard.permisssion.UserRoleEnum.ORDINARY; @Service +@Slf4j public class PermissionServiceImpl implements PermissionService, InitializingBean { @Resource @@ -71,7 +74,7 @@ public boolean checkUrlAvailable(UserInfo userInfo, String url) { public static class PermissionFileStore extends AbstractFileStore { private static final String FILE_NAME = "role-permission.yml"; - private static Map/**accessUrls**/> rolePerms = new ConcurrentHashMap<>(); + private static final Map/**accessUrls**/> rolePerms = new ConcurrentHashMap<>(); public PermissionFileStore(RMQConfigure configure) { super(configure, FILE_NAME); diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/ProducerServiceImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/ProducerServiceImpl.java index 3ce408bc..eba6bd9e 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/ProducerServiceImpl.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/ProducerServiceImpl.java @@ -18,12 +18,13 @@ package org.apache.rocketmq.dashboard.service.impl; import com.google.common.base.Throwables; -import javax.annotation.Resource; import org.apache.rocketmq.common.protocol.body.ProducerConnection; import org.apache.rocketmq.dashboard.service.ProducerService; import org.apache.rocketmq.tools.admin.MQAdminExt; import org.springframework.stereotype.Service; +import javax.annotation.Resource; + @Service public class ProducerServiceImpl implements ProducerService { @Resource @@ -33,8 +34,7 @@ public class ProducerServiceImpl implements ProducerService { public ProducerConnection getProducerConnection(String producerGroup, String topic) { try { return mqAdminExt.examineProducerConnectionInfo(producerGroup, topic); - } - catch (Exception e) { + } catch (Exception e) { throw Throwables.propagate(e); } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/TopicServiceImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/TopicServiceImpl.java index b6197b74..c100d4d2 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/TopicServiceImpl.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/TopicServiceImpl.java @@ -20,7 +20,6 @@ import com.google.common.base.Throwables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; import org.apache.rocketmq.acl.common.AclClientRPCHook; import org.apache.rocketmq.acl.common.SessionCredentials; @@ -55,6 +54,7 @@ import java.util.List; import java.util.Set; import java.util.concurrent.ArrayBlockingQueue; +import java.util.stream.Collectors; @Service public class TopicServiceImpl extends AbstractCommonService implements TopicService { @@ -68,18 +68,18 @@ public TopicList fetchAllTopicList(boolean skipSysProcess, boolean skipRetryAndD TopicList allTopics = mqAdminExt.fetchAllTopicList(); TopicList sysTopics = getSystemTopicList(); Set topics = - allTopics.getTopicList().stream().map(topic -> { - if (!skipSysProcess && sysTopics.getTopicList().contains(topic)) { - topic = String.format("%s%s", "%SYS%", topic); - } - return topic; - }).filter(topic -> { - if (skipRetryAndDlq) { - return !(topic.startsWith(MixAll.RETRY_GROUP_TOPIC_PREFIX) - || topic.startsWith(MixAll.DLQ_GROUP_TOPIC_PREFIX)); - } - return true; - }).collect(Collectors.toSet()); + allTopics.getTopicList().stream().map(topic -> { + if (!skipSysProcess && sysTopics.getTopicList().contains(topic)) { + topic = String.format("%s%s", "%SYS%", topic); + } + return topic; + }).filter(topic -> { + if (skipRetryAndDlq) { + return !(topic.startsWith(MixAll.RETRY_GROUP_TOPIC_PREFIX) + || topic.startsWith(MixAll.DLQ_GROUP_TOPIC_PREFIX)); + } + return true; + }).collect(Collectors.toSet()); allTopics.getTopicList().clear(); allTopics.getTopicList().addAll(topics); return allTopics; @@ -122,7 +122,7 @@ public void createOrUpdate(TopicConfigInfo topicCreateOrUpdateRequest) { try { ClusterInfo clusterInfo = mqAdminExt.examineBrokerClusterInfo(); for (String brokerName : changeToBrokerNameSet(clusterInfo.getClusterAddrTable(), - topicCreateOrUpdateRequest.getClusterNameList(), topicCreateOrUpdateRequest.getBrokerNameList())) { + topicCreateOrUpdateRequest.getClusterNameList(), topicCreateOrUpdateRequest.getBrokerNameList())) { mqAdminExt.createAndUpdateTopicConfig(clusterInfo.getBrokerAddrTable().get(brokerName).selectBrokerAddr(), topicConfig); } } catch (Exception err) { @@ -166,7 +166,7 @@ public boolean deleteTopic(String topic, String clusterName) { Set nameServerSet = null; if (StringUtils.isNotBlank(configure.getNamesrvAddr())) { String[] ns = configure.getNamesrvAddr().split(";"); - nameServerSet = new HashSet(Arrays.asList(ns)); + nameServerSet = new HashSet<>(Arrays.asList(ns)); } mqAdminExt.deleteTopicInNameServer(nameServerSet, topic); } catch (Exception err) { @@ -242,8 +242,8 @@ public SendResult sendTopicMessageRequest(SendTopicMessageRequest sendTopicMessa AclClientRPCHook rpcHook = null; if (configure.isACLEnabled()) { rpcHook = new AclClientRPCHook(new SessionCredentials( - configure.getAccessKey(), - configure.getSecretKey() + configure.getAccessKey(), + configure.getSecretKey() )); } producer = buildDefaultMQProducer(MixAll.SELF_TEST_PRODUCER_GROUP, rpcHook, sendTopicMessageRequest.isTraceEnabled()); @@ -252,9 +252,9 @@ public SendResult sendTopicMessageRequest(SendTopicMessageRequest sendTopicMessa try { producer.start(); Message msg = new Message(sendTopicMessageRequest.getTopic(), - sendTopicMessageRequest.getTag(), - sendTopicMessageRequest.getKey(), - sendTopicMessageRequest.getMessageBody().getBytes() + sendTopicMessageRequest.getTag(), + sendTopicMessageRequest.getKey(), + sendTopicMessageRequest.getMessageBody().getBytes() ); return producer.send(msg); } catch (Exception e) { diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/UserServiceImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/UserServiceImpl.java index 5e628e45..60e0653c 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/UserServiceImpl.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/UserServiceImpl.java @@ -17,6 +17,7 @@ package org.apache.rocketmq.dashboard.service.impl; +import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.dashboard.config.RMQConfigure; import org.apache.rocketmq.dashboard.exception.ServiceException; import org.apache.rocketmq.dashboard.model.User; @@ -34,6 +35,7 @@ import java.util.concurrent.ConcurrentHashMap; @Service +@Slf4j public class UserServiceImpl implements UserService, InitializingBean { @Resource private RMQConfigure configure; @@ -60,7 +62,7 @@ public void afterPropertiesSet() throws Exception { public static class FileBasedUserInfoStore extends AbstractFileStore { private static final String FILE_NAME = "users.properties"; - private static Map userMap = new ConcurrentHashMap<>(); + private static final Map userMap = new ConcurrentHashMap<>(); public FileBasedUserInfoStore(RMQConfigure configure) { super(configure, FILE_NAME); diff --git a/src/main/java/org/apache/rocketmq/dashboard/support/GlobalExceptionHandler.java b/src/main/java/org/apache/rocketmq/dashboard/support/GlobalExceptionHandler.java index c7d915e0..b91461a5 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/support/GlobalExceptionHandler.java +++ b/src/main/java/org/apache/rocketmq/dashboard/support/GlobalExceptionHandler.java @@ -17,7 +17,7 @@ package org.apache.rocketmq.dashboard.support; -import javax.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.dashboard.exception.ServiceException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,9 +25,11 @@ import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; +import javax.servlet.http.HttpServletRequest; + @ControllerAdvice(basePackages = "org.apache.rocketmq.dashboard") +@Slf4j public class GlobalExceptionHandler { - private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ExceptionHandler(value = Exception.class) @ResponseBody @@ -35,12 +37,11 @@ public JsonResult jsonErrorHandler(HttpServletRequest req, Exception ex) JsonResult value = null; if (ex != null) { if (ex instanceof ServiceException) { - logger.error("Occur service exception: {}", ex.getMessage()); - value = new JsonResult(((ServiceException) ex).getCode(), ex.getMessage()); - } - else { - logger.error("op=global_exception_handler_print_error", ex); - value = new JsonResult(-1, ex.getMessage() == null ? ex.toString() : ex.getMessage()); + log.error("Occur service exception: {}", ex.getMessage()); + value = new JsonResult<>(((ServiceException) ex).getCode(), ex.getMessage()); + } else { + log.error("op=global_exception_handler_print_error", ex); + value = new JsonResult<>(-1, ex.getMessage() == null ? ex.toString() : ex.getMessage()); } } return value; diff --git a/src/main/java/org/apache/rocketmq/dashboard/support/GlobalRestfulResponseBodyAdvice.java b/src/main/java/org/apache/rocketmq/dashboard/support/GlobalRestfulResponseBodyAdvice.java index fd275284..dddc51a8 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/support/GlobalRestfulResponseBodyAdvice.java +++ b/src/main/java/org/apache/rocketmq/dashboard/support/GlobalRestfulResponseBodyAdvice.java @@ -17,10 +17,8 @@ package org.apache.rocketmq.dashboard.support; -import java.lang.annotation.Annotation; +import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.dashboard.aspect.admin.annotation.OriginalControllerReturnValue; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; @@ -29,25 +27,25 @@ import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; +import java.lang.annotation.Annotation; + @ControllerAdvice(basePackages = "org.apache.rocketmq.dashboard") +@Slf4j public class GlobalRestfulResponseBodyAdvice implements ResponseBodyAdvice { - private Logger logger = LoggerFactory.getLogger(GlobalRestfulResponseBodyAdvice.class); - @Override public Object beforeBodyWrite( - Object obj, MethodParameter methodParameter, MediaType mediaType, - Class> converterType, - ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { + Object obj, MethodParameter methodParameter, MediaType mediaType, + Class> converterType, + ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { Annotation originalControllerReturnValue = methodParameter.getMethodAnnotation(OriginalControllerReturnValue.class); if (originalControllerReturnValue != null) { return obj; } JsonResult value; if (obj instanceof JsonResult) { - value = (JsonResult)obj; - } - else { + value = (JsonResult) obj; + } else { value = new JsonResult(obj); } return value; @@ -55,7 +53,6 @@ public Object beforeBodyWrite( @Override public boolean supports(MethodParameter returnType, Class> converterType) { - return true; } diff --git a/src/main/java/org/apache/rocketmq/dashboard/task/DashboardCollectTask.java b/src/main/java/org/apache/rocketmq/dashboard/task/DashboardCollectTask.java index c09568d7..1565f3a4 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/task/DashboardCollectTask.java +++ b/src/main/java/org/apache/rocketmq/dashboard/task/DashboardCollectTask.java @@ -17,55 +17,58 @@ package org.apache.rocketmq.dashboard.task; import com.google.common.base.Stopwatch; -import org.apache.rocketmq.common.protocol.body.ClusterInfo; -import org.apache.rocketmq.common.protocol.body.GroupList; -import org.apache.rocketmq.common.protocol.body.KVTable; -import org.apache.rocketmq.common.protocol.body.TopicList; +import com.google.common.base.Throwables; +import com.google.common.cache.LoadingCache; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.io.Files; +import lombok.NoArgsConstructor; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.common.MixAll; +import org.apache.rocketmq.common.protocol.body.*; import org.apache.rocketmq.common.protocol.route.BrokerData; import org.apache.rocketmq.common.protocol.route.TopicRouteData; import org.apache.rocketmq.common.topic.TopicValidator; +import org.apache.rocketmq.dashboard.config.RMQConfigure; +import org.apache.rocketmq.dashboard.service.DashboardCollectService; +import org.apache.rocketmq.dashboard.util.JsonUtil; import org.apache.rocketmq.store.stats.BrokerStatsManager; import org.apache.rocketmq.tools.admin.MQAdminExt; import org.apache.rocketmq.tools.command.stats.StatsAllSubCommand; -import com.google.common.base.Throwables; -import com.google.common.cache.LoadingCache; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.io.Files; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + import java.io.File; import java.io.IOException; import java.math.BigDecimal; +import java.math.RoundingMode; import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.concurrent.ExecutionException; -import javax.annotation.Resource; -import org.apache.rocketmq.common.MixAll; -import org.apache.rocketmq.common.protocol.body.BrokerStatsData; -import org.apache.rocketmq.dashboard.config.RMQConfigure; -import org.apache.rocketmq.dashboard.service.DashboardCollectService; -import org.apache.rocketmq.dashboard.util.JsonUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; @Component +@Slf4j public class DashboardCollectTask { + private Date currentDate = new Date(); - @Resource + private MQAdminExt mqAdminExt; - @Resource + private RMQConfigure rmqConfigure; - @Resource private DashboardCollectService dashboardCollectService; - private final static Logger log = LoggerFactory.getLogger(DashboardCollectTask.class); + public DashboardCollectTask() {} + + @Autowired + public DashboardCollectTask(MQAdminExt mqAdminExt, RMQConfigure rmqConfigure, DashboardCollectService dashboardCollectService) { + this.mqAdminExt = mqAdminExt; + this.rmqConfigure = rmqConfigure; + this.dashboardCollectService = dashboardCollectService; + } @Scheduled(cron = "30 0/1 * * * ?") public void collectTopic() { @@ -81,8 +84,8 @@ public void collectTopic() { this.addSystemTopic(); for (String topic : topicSet) { if (topic.startsWith(MixAll.RETRY_GROUP_TOPIC_PREFIX) - || topic.startsWith(MixAll.DLQ_GROUP_TOPIC_PREFIX) - || TopicValidator.isSystemTopic(topic)) { + || topic.startsWith(MixAll.DLQ_GROUP_TOPIC_PREFIX) + || TopicValidator.isSystemTopic(topic)) { continue; } TopicRouteData topicRouteData = mqAdminExt.examineTopicRouteInfo(topic); @@ -102,15 +105,14 @@ public void collectTopic() { if (masterAddr != null) { try { stopwatch.start(); - log.info("start time: {}", stopwatch.toString()); + log.info("start time: {}", stopwatch); BrokerStatsData bsd = mqAdminExt.viewBrokerStatsData(masterAddr, BrokerStatsManager.TOPIC_PUT_NUMS, topic); stopwatch.stop(); - log.info("stop time : {}", stopwatch.toString()); + log.info("stop time : {}", stopwatch); inTPS += bsd.getStatsMinute().getTps(); inMsgCntToday += StatsAllSubCommand.compute24HourSum(bsd); - } - catch (Exception e) { + } catch (Exception e) { stopwatch.reset(); log.warn("Exception caught: mqAdminExt get broker stats data TOPIC_PUT_NUMS failed"); log.warn("Response [{}] ", e.getMessage()); @@ -129,8 +131,7 @@ public void collectTopic() { BrokerStatsData bsd = mqAdminExt.viewBrokerStatsData(masterAddr, BrokerStatsManager.GROUP_GET_NUMS, statsKey); outTPS += bsd.getStatsMinute().getTps(); outMsgCntToday += StatsAllSubCommand.compute24HourSum(bsd); - } - catch (Exception e) { + } catch (Exception e) { log.warn("Exception caught: mqAdminExt get broker stats data GROUP_GET_NUMS failed"); log.warn("Response [{}] ", e.getMessage()); } @@ -142,22 +143,20 @@ public void collectTopic() { List list; try { list = dashboardCollectService.getTopicMap().get(topic); - } - catch (ExecutionException e) { + } catch (ExecutionException e) { throw Throwables.propagate(e); } if (null == list) { list = Lists.newArrayList(); } - list.add(date.getTime() + "," + new BigDecimal(inTPS).setScale(5, BigDecimal.ROUND_HALF_UP) + "," + inMsgCntToday + "," + new BigDecimal(outTPS).setScale(5, BigDecimal.ROUND_HALF_UP) + "," + outMsgCntToday); + list.add(date.getTime() + "," + new BigDecimal(inTPS).setScale(5, RoundingMode.HALF_UP) + "," + inMsgCntToday + "," + new BigDecimal(outTPS).setScale(5, RoundingMode.HALF_UP) + "," + outMsgCntToday); dashboardCollectService.getTopicMap().put(topic, list); } - log.debug("Topic Collected Data in memory = {}" + JsonUtil.obj2String(dashboardCollectService.getTopicMap().asMap())); - } - catch (Exception err) { + log.debug("Topic Collected Data in memory = {}" + JsonUtil.objectToString(dashboardCollectService.getTopicMap().asMap())); + } catch (Exception err) { throw Throwables.propagate(err); } } @@ -170,17 +169,7 @@ public void collectBroker() { try { Date date = new Date(); ClusterInfo clusterInfo = mqAdminExt.examineBrokerClusterInfo(); - Set> clusterEntries = clusterInfo.getBrokerAddrTable().entrySet(); - - Map addresses = Maps.newHashMap(); - for (Map.Entry clusterEntry : clusterEntries) { - HashMap addrs = clusterEntry.getValue().getBrokerAddrs(); - Set> addrsEntries = addrs.entrySet(); - for (Map.Entry addrEntry : addrsEntries) { - addresses.put(addrEntry.getValue(), clusterEntry.getKey() + ":" + addrEntry.getKey()); - } - } - Set> entries = addresses.entrySet(); + Set> entries = getEntries(clusterInfo); for (Map.Entry entry : entries) { List list = dashboardCollectService.getBrokerMap().get(entry.getValue()); if (null == list) { @@ -195,29 +184,41 @@ public void collectBroker() { for (String tps : tpsArray) { totalTps = totalTps.add(new BigDecimal(tps)); } - BigDecimal averageTps = totalTps.divide(new BigDecimal(tpsArray.length), 5, BigDecimal.ROUND_HALF_UP); + BigDecimal averageTps = totalTps.divide(new BigDecimal(tpsArray.length), 5, RoundingMode.HALF_UP); list.add(date.getTime() + "," + averageTps.toString()); dashboardCollectService.getBrokerMap().put(entry.getValue(), list); } - log.debug("Broker Collected Data in memory = {}" + JsonUtil.obj2String(dashboardCollectService.getBrokerMap().asMap())); - } - catch (Exception e) { + log.debug("Broker Collected Data in memory = {}" + JsonUtil.objectToString(dashboardCollectService.getBrokerMap().asMap())); + } catch (Exception e) { throw Throwables.propagate(e); } } + private static Set> getEntries(ClusterInfo clusterInfo) { + Set> clusterEntries = clusterInfo.getBrokerAddrTable().entrySet(); + + Map addresses = Maps.newHashMap(); + for (Map.Entry clusterEntry : clusterEntries) { + HashMap addrs = clusterEntry.getValue().getBrokerAddrs(); + Set> addrsEntries = addrs.entrySet(); + for (Map.Entry addrEntry : addrsEntries) { + addresses.put(addrEntry.getValue(), clusterEntry.getKey() + ":" + addrEntry.getKey()); + } + } + Set> entries = addresses.entrySet(); + return entries; + } + private KVTable fetchBrokerRuntimeStats(String brokerAddr, Integer retryTime) { if (retryTime == 0) { return null; } try { return mqAdminExt.fetchBrokerRuntimeStats(brokerAddr); - } - catch (Exception e) { + } catch (Exception e) { try { Thread.sleep(1000); - } - catch (InterruptedException e1) { + } catch (InterruptedException e1) { throw Throwables.propagate(e1); } fetchBrokerRuntimeStats(brokerAddr, retryTime - 1); @@ -247,16 +248,14 @@ public void saveData() { Map> topicFileMap; if (brokerFile.exists()) { brokerFileMap = dashboardCollectService.jsonDataFile2map(brokerFile); - } - else { + } else { brokerFileMap = Maps.newHashMap(); Files.createParentDirs(brokerFile); } if (topicFile.exists()) { topicFileMap = dashboardCollectService.jsonDataFile2map(topicFile); - } - else { + } else { topicFileMap = Maps.newHashMap(); Files.createParentDirs(topicFile); } @@ -266,23 +265,21 @@ public void saveData() { writeFile(dashboardCollectService.getBrokerMap(), brokerFileMap, brokerFile); writeFile(dashboardCollectService.getTopicMap(), topicFileMap, topicFile); - log.debug("Broker Collected Data in memory = {}" + JsonUtil.obj2String(dashboardCollectService.getBrokerMap().asMap())); - log.debug("Topic Collected Data in memory = {}" + JsonUtil.obj2String(dashboardCollectService.getTopicMap().asMap())); + log.debug("Broker Collected Data in memory = {}" + JsonUtil.objectToString(dashboardCollectService.getBrokerMap().asMap())); + log.debug("Topic Collected Data in memory = {}" + JsonUtil.objectToString(dashboardCollectService.getTopicMap().asMap())); - } - catch (IOException e) { + } catch (IOException e) { throw Throwables.propagate(e); } } private void writeFile(LoadingCache> map, Map> fileMap, - File file) throws IOException { + File file) throws IOException { Map> newMap = map.asMap(); Map> resultMap = Maps.newHashMap(); if (fileMap.size() == 0) { resultMap = newMap; - } - else { + } else { for (Map.Entry> entry : fileMap.entrySet()) { List oldList = entry.getValue(); List newList = newMap.get(entry.getKey()); @@ -299,7 +296,7 @@ private void writeFile(LoadingCache> map, Map appendData(List newTpsList, List oldTpsList) { diff --git a/src/main/java/org/apache/rocketmq/dashboard/task/MonitorTask.java b/src/main/java/org/apache/rocketmq/dashboard/task/MonitorTask.java index 710929b0..cefa44b0 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/task/MonitorTask.java +++ b/src/main/java/org/apache/rocketmq/dashboard/task/MonitorTask.java @@ -16,33 +16,32 @@ */ package org.apache.rocketmq.dashboard.task; -import java.util.Map; -import javax.annotation.Resource; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.dashboard.model.ConsumerMonitorConfig; import org.apache.rocketmq.dashboard.model.GroupConsumeInfo; import org.apache.rocketmq.dashboard.service.ConsumerService; import org.apache.rocketmq.dashboard.service.MonitorService; import org.apache.rocketmq.dashboard.util.JsonUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; +import java.util.Map; + @Component +@RequiredArgsConstructor +@Slf4j public class MonitorTask { - private Logger logger = LoggerFactory.getLogger(MonitorTask.class); - @Resource - private MonitorService monitorService; + private final MonitorService monitorService; - @Resource - private ConsumerService consumerService; + private final ConsumerService consumerService; -// @Scheduled(cron = "* * * * * ?") + // @Scheduled(cron = "* * * * * ?") public void scanProblemConsumeGroup() { for (Map.Entry configEntry : monitorService.queryConsumerMonitorConfig().entrySet()) { GroupConsumeInfo consumeInfo = consumerService.queryGroup(configEntry.getKey()); if (consumeInfo.getCount() < configEntry.getValue().getMinCount() || consumeInfo.getDiffTotal() > configEntry.getValue().getMaxDiffTotal()) { - logger.info("op=look consumeInfo {}", JsonUtil.obj2String(consumeInfo)); // notify the alert system + log.info("op=look consumeInfo {}", JsonUtil.objectToString(consumeInfo)); // notify the alert system } } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/util/ExcelUtil.java b/src/main/java/org/apache/rocketmq/dashboard/util/ExcelUtil.java index e95d165d..58b83ec5 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/util/ExcelUtil.java +++ b/src/main/java/org/apache/rocketmq/dashboard/util/ExcelUtil.java @@ -21,19 +21,21 @@ import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.metadata.style.WriteFont; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; +import org.apache.poi.ss.usermodel.HorizontalAlignment; + +import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.List; -import javax.servlet.http.HttpServletResponse; -import org.apache.poi.ss.usermodel.HorizontalAlignment; public class ExcelUtil { public static void writeExcel(HttpServletResponse response, List data, String fileName, - String sheetName, Class clazz) throws Exception { + String sheetName, Class clazz) throws Exception { WriteCellStyle headWriteCellStyle = new WriteCellStyle(); WriteFont writeFont = new WriteFont(); - writeFont.setFontHeightInPoints((short)12); + writeFont.setFontHeightInPoints((short) 12); writeFont.setFontName("Microsoft YaHei UI"); headWriteCellStyle.setWriteFont(writeFont); headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); @@ -43,11 +45,11 @@ public static void writeExcel(HttpServletResponse response, List: {}\nError: {}"; static { objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); @@ -51,103 +49,99 @@ private JsonUtil() { objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); } - public static void writeValue(Writer writer, Object obj) { + private JsonUtil() { + // Prevent instantiation + } + + public static void writeValue(Writer writer, Object object) { try { - objectMapper.writeValue(writer, obj); - } - catch (IOException e) { + objectMapper.writeValue(writer, object); + } catch (IOException e) { Throwables.propagateIfPossible(e); } } - public static String obj2String(T src) { - if (src == null) { + public static String objectToString(T source) { + if (source == null) { return null; } try { - return src instanceof String ? (String)src : objectMapper.writeValueAsString(src); - } - catch (Exception e) { - logger.error("Parse Object to String error src=" + src, e); + return source instanceof String ? (String) source : objectMapper.writeValueAsString(source); + } catch (Exception e) { + log.error("Parse Object to String error src={}", source, e); return null; } } - public static byte[] obj2Byte(T src) { - if (src == null) { + public static byte[] objectToByte(T source) { + if (source == null) { return null; } try { - return src instanceof byte[] ? (byte[])src : objectMapper.writeValueAsBytes(src); - } - catch (Exception e) { - logger.error("Parse Object to byte[] error", e); + return source instanceof byte[] ? (byte[]) source : objectMapper.writeValueAsBytes(source); + } catch (Exception e) { + log.error("Parse Object to byte[] error", e); return null; } } - public static T string2Obj(String str, Class clazz) { + public static T stringToObject(String str, Class clazz) { if (Strings.isNullOrEmpty(str) || clazz == null) { return null; } str = escapesSpecialChar(str); try { - return clazz.equals(String.class) ? (T)str : objectMapper.readValue(str, clazz); - } - catch (Exception e) { - logger.error("Parse String to Object error\nString: {}\nClass: {}\nError: {}", str, clazz.getName(), e); + return clazz.equals(String.class) ? (T) str : objectMapper.readValue(str, clazz); + } catch (Exception e) { + log.error(PARSE_STRING_ERROR_MESSAGE, str, clazz.getName(), e.getMessage()); return null; } } - public static T byte2Obj(byte[] bytes, Class clazz) { + public static T byteToObject(byte[] bytes, Class clazz) { if (bytes == null || clazz == null) { return null; } try { - return clazz.equals(byte[].class) ? (T)bytes : objectMapper.readValue(bytes, clazz); - } - catch (Exception e) { - logger.error("Parse byte[] to Object error\nbyte[]: {}\nClass: {}\nError: {}", bytes, clazz.getName(), e); + return clazz.equals(byte[].class) ? (T) bytes : objectMapper.readValue(bytes, clazz); + } catch (Exception e) { + log.error(PARSE_STRING_ERROR_MESSAGE, bytes, clazz.getName(), e.getMessage()); return null; } } - public static T string2Obj(String str, TypeReference typeReference) { + public static T stringToObject(String str, TypeReference typeReference) { if (Strings.isNullOrEmpty(str) || typeReference == null) { return null; } str = escapesSpecialChar(str); try { - return (T)(typeReference.getType().equals(String.class) ? str : objectMapper.readValue(str, typeReference)); - } - catch (Exception e) { - logger.error("Parse String to Object error\nString: {}\nTypeReference: {}\nError: {}", str, - typeReference.getType(), e); + return (T) (typeReference.getType().equals(String.class) ? str : objectMapper.readValue(str, typeReference)); + } catch (Exception e) { + log.error(PARSE_STRING_ERROR_MESSAGE, str, typeReference.getType(), e.getMessage()); return null; } } - public static T byte2Obj(byte[] bytes, TypeReference typeReference) { + public static T byteToObject(byte[] bytes, TypeReference typeReference) { if (bytes == null || typeReference == null) { return null; } try { - return (T)(typeReference.getType().equals(byte[].class) ? bytes : objectMapper.readValue(bytes, - typeReference)); - } - catch (Exception e) { - logger.error("Parse byte[] to Object error\nbyte[]: {}\nTypeReference: {}\nError: {}", bytes, - typeReference.getType(), e); + return (T) (typeReference.getType().equals(byte[].class) ? bytes : objectMapper.readValue(bytes, + typeReference)); + } catch (Exception e) { + log.error(PARSE_STRING_ERROR_MESSAGE, bytes, + typeReference.getType(), e.getMessage()); return null; } } - public static T map2Obj(Map map, Class clazz) { - String str = obj2String(map); - return string2Obj(str, clazz); + public static T mapToObj(Map map, Class clazz) { + String str = objectToString(map); + return stringToObject(str, clazz); } private static String escapesSpecialChar(String str) { diff --git a/src/main/java/org/apache/rocketmq/dashboard/util/MatcherUtil.java b/src/main/java/org/apache/rocketmq/dashboard/util/MatcherUtil.java index b7a8cc98..7695ceab 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/util/MatcherUtil.java +++ b/src/main/java/org/apache/rocketmq/dashboard/util/MatcherUtil.java @@ -21,11 +21,11 @@ public class MatcherUtil { public static boolean match(String accessUrl, String reqPath) { - String regPath = getRegPath(accessUrl); + String regPath = getRegexPath(accessUrl); return Pattern.compile(regPath).matcher(reqPath).matches(); } - private static String getRegPath(String path) { + private static String getRegexPath(String path) { char[] chars = path.toCharArray(); int len = chars.length; StringBuilder sb = new StringBuilder(); diff --git a/src/main/java/org/apache/rocketmq/dashboard/util/MsgTraceDecodeUtil.java b/src/main/java/org/apache/rocketmq/dashboard/util/MsgTraceDecodeUtil.java index db724b86..68ee3525 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/util/MsgTraceDecodeUtil.java +++ b/src/main/java/org/apache/rocketmq/dashboard/util/MsgTraceDecodeUtil.java @@ -17,9 +17,6 @@ package org.apache.rocketmq.dashboard.util; -import java.util.ArrayList; -import java.util.List; - import org.apache.rocketmq.client.producer.LocalTransactionState; import org.apache.rocketmq.client.trace.TraceBean; import org.apache.rocketmq.client.trace.TraceConstants; @@ -29,6 +26,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.ArrayList; +import java.util.List; + import static org.apache.rocketmq.client.trace.TraceType.Pub; public class MsgTraceDecodeUtil { diff --git a/src/main/java/org/apache/rocketmq/dashboard/util/WebUtil.java b/src/main/java/org/apache/rocketmq/dashboard/util/WebUtil.java index 49e3fc7f..7c3f2fb1 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/util/WebUtil.java +++ b/src/main/java/org/apache/rocketmq/dashboard/util/WebUtil.java @@ -33,6 +33,11 @@ public class WebUtil { public static final String USER_NAME = "username"; public static final String NEED_LOGIN = "needLogin"; + + private WebUtil() { + // Prevent instantiation + } + /** * Obtain ServletRequest header value * @@ -107,7 +112,7 @@ public static Object getValueFromSession(HttpServletRequest request, String key) HttpSession session = request.getSession(false); if (session != null) { - return session.getAttribute(key); + return session.getAttribute(key); } return null; diff --git a/src/test/java/org/apache/rocketmq/dashboard/admin/MQAdminAspectTest.java b/src/test/java/org/apache/rocketmq/dashboard/admin/MQAdminAspectTest.java index a76dc6c2..82208bb7 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/admin/MQAdminAspectTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/admin/MQAdminAspectTest.java @@ -26,24 +26,35 @@ import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.reflect.MethodSignature; import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +@RunWith(MockitoJUnitRunner.class) public class MQAdminAspectTest { + @Mock + private GenericObjectPool mqAdminExtPool; + + @Mock + private ProceedingJoinPoint joinPoint; + + @Mock + private MethodSignature signature; + + @Mock + private Method method; + @Test public void testAroundMQAdminMethod() throws Throwable { - MQAdminAspect mqAdminAspect = new MQAdminAspect(); - ProceedingJoinPoint joinPoint = mock(ProceedingJoinPoint.class); - MethodSignature signature = mock(MethodSignature.class); - Method method = mock(Method.class); - when(signature.getMethod()).thenReturn(method); + + MQAdminAspect mqAdminAspect = new MQAdminAspect(mqAdminExtPool); when(joinPoint.getSignature()).thenReturn(signature); - GenericObjectPool mqAdminExtPool = mock(GenericObjectPool.class); when(mqAdminExtPool.borrowObject()) .thenThrow(new RuntimeException("borrowObject exception")) .thenReturn(new DefaultMQAdminExt()); diff --git a/src/test/java/org/apache/rocketmq/dashboard/admin/MQAdminExtImplTest.java b/src/test/java/org/apache/rocketmq/dashboard/admin/MQAdminExtImplTest.java index 28a898d3..862f5793 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/admin/MQAdminExtImplTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/admin/MQAdminExtImplTest.java @@ -78,6 +78,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; @@ -108,7 +109,7 @@ public class MQAdminExtImplTest { @Mock private RemotingClient remotingClient; - private String brokerAddr = "127.0.0.1:10911"; + private final String brokerAddr = "127.0.0.1:10911"; @Before public void init() throws Exception { @@ -139,7 +140,7 @@ public void testUpdateBrokerConfig() throws Exception { } catch (Exception e) { hasException = true; assertThat(e).isInstanceOf(MQBrokerException.class); - assertThat(((MQBrokerException) e).getResponseCode()).isEqualTo(0); + assertThat(((MQBrokerException) e).getResponseCode()).isZero(); } assertTrue(hasException); } @@ -181,7 +182,7 @@ public void testExamineBrokerClusterAclConfig() throws Exception { } @Test - public void testQueryConsumerStatus() throws Exception { + public void testQueryConsumerStatus() { assertNotNull(mqAdminExtImpl); } @@ -207,7 +208,7 @@ public void testExamineSubscriptionGroupConfig() throws Exception { try { mqAdminExtImpl.examineSubscriptionGroupConfig(brokerAddr, "topic_test"); } catch (Exception e) { - Assert.assertEquals(e.getMessage(), "invokeSync exception"); + Assert.assertEquals("invokeSync exception", e.getMessage()); } // responseCode is not success @@ -219,7 +220,7 @@ public void testExamineSubscriptionGroupConfig() throws Exception { } // GET_ALL_SUBSCRIPTIONGROUP_CONFIG success SubscriptionGroupConfig subscriptionGroupConfig = mqAdminExtImpl.examineSubscriptionGroupConfig(brokerAddr, "group_test"); - Assert.assertEquals(subscriptionGroupConfig.getGroupName(), "group_test"); + Assert.assertEquals("group_test", subscriptionGroupConfig.getGroupName()); } @Test @@ -238,7 +239,7 @@ public void testExamineTopicConfig() throws Exception { try { mqAdminExtImpl.examineTopicConfig(brokerAddr, "topic_test"); } catch (Exception e) { - Assert.assertEquals(e.getMessage(), "invokeSync exception"); + Assert.assertEquals("invokeSync exception", e.getMessage()); } // responseCode is not success try { @@ -271,274 +272,220 @@ public void testExamineAllTopicConfig() throws Exception { @Test public void testFetchAllTopicList() throws Exception { + when(defaultMQAdminExt.fetchAllTopicList()).thenReturn(new TopicList()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.fetchAllTopicList()).thenReturn(new TopicList()); - } TopicList topicList = mqAdminExtImpl.fetchAllTopicList(); - Assert.assertNotNull(topicList); + assertNotNull(topicList); } @Test public void testFetchBrokerRuntimeStats() throws Exception { + when(defaultMQAdminExt.fetchBrokerRuntimeStats(anyString())).thenReturn(new KVTable()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.fetchBrokerRuntimeStats(anyString())).thenReturn(new KVTable()); - } KVTable kvTable = mqAdminExtImpl.fetchBrokerRuntimeStats(brokerAddr); Assert.assertNotNull(kvTable); } @Test public void testExamineConsumeStats() throws Exception { + when(defaultMQAdminExt.examineConsumeStats(anyString())).thenReturn(MockObjectUtil.createConsumeStats()); + when(defaultMQAdminExt.examineConsumeStats(anyString(), anyString())).thenReturn(MockObjectUtil.createConsumeStats()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.examineConsumeStats(anyString())).thenReturn(MockObjectUtil.createConsumeStats()); - when(defaultMQAdminExt.examineConsumeStats(anyString(), anyString())).thenReturn(MockObjectUtil.createConsumeStats()); - } ConsumeStats consumeStats = mqAdminExtImpl.examineConsumeStats("group_test"); ConsumeStats consumeStatsWithTopic = mqAdminExtImpl.examineConsumeStats("group_test", "topic_test"); - Assert.assertNotNull(consumeStats); - Assert.assertEquals(consumeStats.getOffsetTable().size(), 2); - Assert.assertNotNull(consumeStatsWithTopic); - Assert.assertEquals(consumeStatsWithTopic.getOffsetTable().size(), 2); + assertNotNull(consumeStats); + assertEquals(2, consumeStats.getOffsetTable().size()); + assertNotNull(consumeStatsWithTopic); + assertEquals(2, consumeStatsWithTopic.getOffsetTable().size()); } @Test public void testExamineBrokerClusterInfo() throws Exception { + when(defaultMQAdminExt.examineBrokerClusterInfo()).thenReturn(MockObjectUtil.createClusterInfo()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.examineBrokerClusterInfo()).thenReturn(MockObjectUtil.createClusterInfo()); - } ClusterInfo clusterInfo = mqAdminExtImpl.examineBrokerClusterInfo(); - Assert.assertNotNull(clusterInfo); - Assert.assertEquals(clusterInfo.getBrokerAddrTable().size(), 1); - Assert.assertEquals(clusterInfo.getClusterAddrTable().size(), 1); + assertNotNull(clusterInfo); + assertEquals(1, clusterInfo.getBrokerAddrTable().size()); + assertEquals(1, clusterInfo.getClusterAddrTable().size()); } @Test public void testExamineTopicRouteInfo() throws Exception { + when(defaultMQAdminExt.examineTopicRouteInfo(anyString())).thenReturn(MockObjectUtil.createTopicRouteData()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.examineTopicRouteInfo(anyString())).thenReturn(MockObjectUtil.createTopicRouteData()); - } TopicRouteData topicRouteData = mqAdminExtImpl.examineTopicRouteInfo("topic_test"); Assert.assertNotNull(topicRouteData); } @Test public void testExamineConsumerConnectionInfo() throws Exception { + when(defaultMQAdminExt.examineConsumerConnectionInfo(anyString())).thenReturn(new ConsumerConnection()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.examineConsumerConnectionInfo(anyString())).thenReturn(new ConsumerConnection()); - } ConsumerConnection consumerConnection = mqAdminExtImpl.examineConsumerConnectionInfo("group_test"); - Assert.assertNotNull(consumerConnection); + assertNotNull(consumerConnection); } @Test public void testExamineProducerConnectionInfo() throws Exception { + when(defaultMQAdminExt.examineProducerConnectionInfo(anyString(), anyString())).thenReturn(new ProducerConnection()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.examineProducerConnectionInfo(anyString(), anyString())).thenReturn(new ProducerConnection()); - } ProducerConnection producerConnection = mqAdminExtImpl.examineProducerConnectionInfo("group_test", "topic_test"); - Assert.assertNotNull(producerConnection); + assertNotNull(producerConnection); } @Test public void testGetNameServerAddressList() { + when(defaultMQAdminExt.getNameServerAddressList()).thenReturn(Lists.asList("127.0.0.1:9876", new String[] {"127.0.0.2:9876"})); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.getNameServerAddressList()).thenReturn(Lists.asList("127.0.0.1:9876", new String[] {"127.0.0.2:9876"})); - } List list = mqAdminExtImpl.getNameServerAddressList(); - Assert.assertEquals(list.size(), 2); + assertEquals(2, list.size()); } @Test public void testWipeWritePermOfBroker() throws Exception { + when(defaultMQAdminExt.wipeWritePermOfBroker(anyString(), anyString())).thenReturn(6); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.wipeWritePermOfBroker(anyString(), anyString())).thenReturn(6); - } int result = mqAdminExtImpl.wipeWritePermOfBroker("127.0.0.1:9876", "broker-a"); - Assert.assertEquals(result, 6); + assertEquals(6, result); } @Test - public void testPutKVConfig() throws Exception { + public void testPutKVConfig() { + doNothing().when(defaultMQAdminExt).putKVConfig(anyString(), anyString(), anyString()); assertNotNull(mqAdminExtImpl); - { - doNothing().when(defaultMQAdminExt).putKVConfig(anyString(), anyString(), anyString()); - } mqAdminExtImpl.putKVConfig("namespace", "key", "value"); } @Test public void testGetKVConfig() throws Exception { + when(defaultMQAdminExt.getKVConfig(anyString(), anyString())).thenReturn("value"); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.getKVConfig(anyString(), anyString())).thenReturn("value"); - } String value = mqAdminExtImpl.getKVConfig("namespace", "key"); - Assert.assertEquals(value, "value"); + assertEquals("value", value); } @Test public void testGetKVListByNamespace() throws Exception { + when(defaultMQAdminExt.getKVListByNamespace(anyString())).thenReturn(new KVTable()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.getKVListByNamespace(anyString())).thenReturn(new KVTable()); - } KVTable kvTable = mqAdminExtImpl.getKVListByNamespace("namespace"); - Assert.assertNotNull(kvTable); + assertNotNull(kvTable); } @Test public void testDeleteTopicInBroker() throws Exception { + doNothing().when(defaultMQAdminExt).deleteTopicInBroker(any(), anyString()); assertNotNull(mqAdminExtImpl); - { - doNothing().when(defaultMQAdminExt).deleteTopicInBroker(any(), anyString()); - } mqAdminExtImpl.deleteTopicInBroker(Sets.newHashSet("127.0.0.1:10911"), "topic_test"); } @Test public void testDeleteTopicInNameServer() throws Exception { + doNothing().when(defaultMQAdminExt).deleteTopicInNameServer(any(), anyString()); assertNotNull(mqAdminExtImpl); - { - doNothing().when(defaultMQAdminExt).deleteTopicInNameServer(any(), anyString()); - } mqAdminExtImpl.deleteTopicInNameServer(Sets.newHashSet("127.0.0.1:9876", "127.0.0.2:9876"), "topic_test"); } @Test public void testDeleteSubscriptionGroup() throws Exception { + doNothing().when(defaultMQAdminExt).deleteSubscriptionGroup(anyString(), anyString()); assertNotNull(mqAdminExtImpl); - { - doNothing().when(defaultMQAdminExt).deleteSubscriptionGroup(anyString(), anyString()); - } mqAdminExtImpl.deleteSubscriptionGroup(brokerAddr, "group_test"); } @Test public void testCreateAndUpdateKvConfig() throws Exception { + doNothing().when(defaultMQAdminExt).createAndUpdateKvConfig(anyString(), anyString(), anyString()); assertNotNull(mqAdminExtImpl); - { - doNothing().when(defaultMQAdminExt).createAndUpdateKvConfig(anyString(), anyString(), anyString()); - } mqAdminExtImpl.createAndUpdateKvConfig("namespace", "key", "value"); } @Test public void testDeleteKvConfig() throws Exception { + doNothing().when(defaultMQAdminExt).deleteKvConfig(anyString(), anyString()); assertNotNull(mqAdminExtImpl); - { - doNothing().when(defaultMQAdminExt).deleteKvConfig(anyString(), anyString()); - } mqAdminExtImpl.deleteKvConfig("namespace", "key"); } @Test - public void testDeleteConsumerOffset() throws Exception { + public void testDeleteConsumerOffset() { assertNotNull(mqAdminExtImpl); } @Test public void testResetOffsetByTimestampOld() throws Exception { + when(defaultMQAdminExt.resetOffsetByTimestampOld(anyString(), anyString(), anyLong(), anyBoolean())).thenReturn(new ArrayList<>()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.resetOffsetByTimestampOld(anyString(), anyString(), anyLong(), anyBoolean())).thenReturn(new ArrayList()); - } List stats = mqAdminExtImpl.resetOffsetByTimestampOld("group_test", "topic_test", 1628495765398L, false); Assert.assertNotNull(stats); } @Test public void testResetOffsetByTimestamp() throws Exception { + when(defaultMQAdminExt.resetOffsetByTimestamp(anyString(), anyString(), anyLong(), anyBoolean())).thenReturn(new HashMap<>()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.resetOffsetByTimestamp(anyString(), anyString(), anyLong(), anyBoolean())).thenReturn(new HashMap()); - } Map map = mqAdminExtImpl.resetOffsetByTimestamp("group_test", "topic_test", 1628495765398L, false); Assert.assertNotNull(map); } @Test public void testResetOffsetNew() throws Exception { + doNothing().when(defaultMQAdminExt).resetOffsetNew(anyString(), anyString(), anyLong()); assertNotNull(mqAdminExtImpl); - { - doNothing().when(defaultMQAdminExt).resetOffsetNew(anyString(), anyString(), anyLong()); - } mqAdminExtImpl.resetOffsetNew("group_test", "topic_test", 1628495765398L); } @Test public void testGetConsumeStatus() throws Exception { + when(defaultMQAdminExt.getConsumeStatus(anyString(), anyString(), anyString())).thenReturn(new HashMap<>()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.getConsumeStatus(anyString(), anyString(), anyString())).thenReturn(new HashMap>()); - } mqAdminExtImpl.getConsumeStatus("topic_test", "group_test", ""); } @Test public void testCreateOrUpdateOrderConf() throws Exception { + doNothing().when(defaultMQAdminExt).createOrUpdateOrderConf(anyString(), anyString(), anyBoolean()); assertNotNull(mqAdminExtImpl); - { - doNothing().when(defaultMQAdminExt).createOrUpdateOrderConf(anyString(), anyString(), anyBoolean()); - } mqAdminExtImpl.createOrUpdateOrderConf("key", "value", false); } @Test public void testQueryTopicConsumeByWho() throws Exception { + when(defaultMQAdminExt.queryTopicConsumeByWho(anyString())).thenReturn(new GroupList()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.queryTopicConsumeByWho(anyString())).thenReturn(new GroupList()); - } GroupList groupList = mqAdminExtImpl.queryTopicConsumeByWho("topic_test"); Assert.assertNotNull(groupList); } @Test public void testCleanExpiredConsumerQueue() throws Exception { + when(defaultMQAdminExt.cleanExpiredConsumerQueue(anyString())).thenReturn(true); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.cleanExpiredConsumerQueue(anyString())).thenReturn(true); - } boolean result = mqAdminExtImpl.cleanExpiredConsumerQueue("DefaultCluster"); - Assert.assertEquals(result, true); + assertTrue(result); } @Test public void testCleanExpiredConsumerQueueByAddr() throws Exception { + when(defaultMQAdminExt.cleanExpiredConsumerQueueByAddr(anyString())).thenReturn(true); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.cleanExpiredConsumerQueueByAddr(anyString())).thenReturn(true); - } boolean result = mqAdminExtImpl.cleanExpiredConsumerQueueByAddr("DefaultCluster"); - Assert.assertEquals(result, true); + assertTrue(result); } @Test public void testGetConsumerRunningInfo() throws Exception { + when(defaultMQAdminExt.getConsumerRunningInfo(anyString(), anyString(), anyBoolean())).thenReturn(new ConsumerRunningInfo()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.getConsumerRunningInfo(anyString(), anyString(), anyBoolean())).thenReturn(new ConsumerRunningInfo()); - } ConsumerRunningInfo consumerRunningInfo = mqAdminExtImpl.getConsumerRunningInfo("group_test", "", true); Assert.assertNotNull(consumerRunningInfo); } @Test public void testConsumeMessageDirectly() throws Exception { + when(defaultMQAdminExt.consumeMessageDirectly(anyString(), anyString(), anyString())).thenReturn(new ConsumeMessageDirectlyResult()); + when(defaultMQAdminExt.consumeMessageDirectly(anyString(), anyString(), anyString(), anyString())).thenReturn(new ConsumeMessageDirectlyResult()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.consumeMessageDirectly(anyString(), anyString(), anyString())).thenReturn(new ConsumeMessageDirectlyResult()); - when(defaultMQAdminExt.consumeMessageDirectly(anyString(), anyString(), anyString(), anyString())).thenReturn(new ConsumeMessageDirectlyResult()); - } ConsumeMessageDirectlyResult result1 = mqAdminExtImpl.consumeMessageDirectly("group_test", "", "7F000001ACC018B4AAC2116AF6500000"); ConsumeMessageDirectlyResult result2 = mqAdminExtImpl.consumeMessageDirectly("group_test", "", "topic_test", "7F000001ACC018B4AAC2116AF6500000"); Assert.assertNotNull(result1); @@ -547,90 +494,72 @@ public void testConsumeMessageDirectly() throws Exception { @Test public void testMessageTrackDetail() throws Exception { + when(defaultMQAdminExt.messageTrackDetail(any())).thenReturn(new ArrayList<>()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.messageTrackDetail(any())).thenReturn(new ArrayList()); - } List tracks = mqAdminExtImpl.messageTrackDetail(new MessageExt()); Assert.assertNotNull(tracks); } @Test public void testCloneGroupOffset() throws Exception { + doNothing().when(defaultMQAdminExt).cloneGroupOffset(anyString(), anyString(), anyString(), anyBoolean()); assertNotNull(mqAdminExtImpl); - { - doNothing().when(defaultMQAdminExt).cloneGroupOffset(anyString(), anyString(), anyString(), anyBoolean()); - } mqAdminExtImpl.cloneGroupOffset("group_test", "group_test1", "topic_test", false); } @Test public void testCreateTopic() throws Exception { + doNothing().when(defaultMQAdminExt).createTopic(anyString(), anyString(), anyInt()); + doNothing().when(defaultMQAdminExt).createTopic(anyString(), anyString(), anyInt(), anyInt()); assertNotNull(mqAdminExtImpl); - { - doNothing().when(defaultMQAdminExt).createTopic(anyString(), anyString(), anyInt()); - doNothing().when(defaultMQAdminExt).createTopic(anyString(), anyString(), anyInt(), anyInt()); - } mqAdminExtImpl.createTopic("key", "topic_test", 8); mqAdminExtImpl.createTopic("key", "topic_test", 8, 1); } @Test public void testSearchOffset() throws Exception { + when(defaultMQAdminExt.searchOffset(any(), anyLong())).thenReturn(Long.MAX_VALUE); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.searchOffset(any(), anyLong())).thenReturn(Long.MAX_VALUE); - } long offset = mqAdminExtImpl.searchOffset(new MessageQueue(), 1628495765398L); - Assert.assertEquals(offset, Long.MAX_VALUE); + Assert.assertEquals(Long.MAX_VALUE, offset); } @Test public void testMaxOffset() throws Exception { + when(defaultMQAdminExt.maxOffset(any())).thenReturn(Long.MAX_VALUE); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.maxOffset(any())).thenReturn(Long.MAX_VALUE); - } long offset = mqAdminExtImpl.maxOffset(new MessageQueue()); - Assert.assertEquals(offset, Long.MAX_VALUE); + Assert.assertEquals(Long.MAX_VALUE, offset); } @Test public void testMinOffset() throws Exception { + when(defaultMQAdminExt.minOffset(any())).thenReturn(Long.MIN_VALUE); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.minOffset(any())).thenReturn(Long.MIN_VALUE); - } long offset = mqAdminExtImpl.minOffset(new MessageQueue()); - Assert.assertEquals(offset, Long.MIN_VALUE); + Assert.assertEquals(Long.MIN_VALUE, offset); } @Test public void testEarliestMsgStoreTime() throws Exception { + when(defaultMQAdminExt.earliestMsgStoreTime(any())).thenReturn(1628495765398L); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.earliestMsgStoreTime(any())).thenReturn(1628495765398L); - } long storeTime = mqAdminExtImpl.earliestMsgStoreTime(new MessageQueue()); - Assert.assertEquals(storeTime, 1628495765398L); + Assert.assertEquals(1628495765398L, storeTime); } @Test public void testViewMessage() throws Exception { + when(defaultMQAdminExt.viewMessage(anyString())).thenReturn(new MessageExt()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.viewMessage(anyString())).thenReturn(new MessageExt()); - } MessageExt messageExt = mqAdminExtImpl.viewMessage("7F000001ACC018B4AAC2116AF6500000"); Assert.assertNotNull(messageExt); } @Test public void testQueryMessage() throws Exception { + when(defaultMQAdminExt.queryMessage(anyString(), anyString(), anyInt(), anyLong(), anyLong())).thenReturn(mock(QueryResult.class)); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.queryMessage(anyString(), anyString(), anyInt(), anyLong(), anyLong())).thenReturn(mock(QueryResult.class)); - } QueryResult result = mqAdminExtImpl.queryMessage("topic_test", "key", 32, 1627804565000L, System.currentTimeMillis()); Assert.assertNotNull(result); } @@ -657,123 +586,99 @@ public void testShutdown() { @Test public void testQueryConsumeTimeSpan() throws Exception { + when(defaultMQAdminExt.queryConsumeTimeSpan(anyString(), anyString())).thenReturn(new ArrayList<>()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.queryConsumeTimeSpan(anyString(), anyString())).thenReturn(new ArrayList()); - } List timeSpans = mqAdminExtImpl.queryConsumeTimeSpan("topic_test", "group_test"); Assert.assertNotNull(timeSpans); } @Test public void testViewMessage2() throws Exception { + when(MQAdminInstance.threadLocalMqClientInstance().getMQAdminImpl()).thenReturn(mock(MQAdminImpl.class)); + when(defaultMQAdminExt.viewMessage(anyString())).thenThrow(new RuntimeException("viewMessage exception")); assertNotNull(mqAdminExtImpl); - { - when(MQAdminInstance.threadLocalMqClientInstance().getMQAdminImpl()).thenReturn(mock(MQAdminImpl.class)); - when(defaultMQAdminExt.viewMessage(anyString())).thenThrow(new RuntimeException("viewMessage exception")); - } mqAdminExtImpl.viewMessage("topic_test", "7F000001ACC018B4AAC2116AF6500000"); } @Test public void testGetBrokerConfig() throws Exception { + when(defaultMQAdminExt.getBrokerConfig(anyString())).thenReturn(new Properties()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.getBrokerConfig(anyString())).thenReturn(new Properties()); - } Properties brokerConfig = mqAdminExtImpl.getBrokerConfig(brokerAddr); Assert.assertNotNull(brokerConfig); } @Test public void testFetchTopicsByCLuster() throws Exception { + when(defaultMQAdminExt.fetchTopicsByCLuster(anyString())).thenReturn(new TopicList()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.fetchTopicsByCLuster(anyString())).thenReturn(new TopicList()); - } TopicList topicList = mqAdminExtImpl.fetchTopicsByCLuster("DefaultCluster"); Assert.assertNotNull(topicList); } @Test public void testCleanUnusedTopic() throws Exception { + when(defaultMQAdminExt.cleanUnusedTopic(anyString())).thenReturn(true); + when(defaultMQAdminExt.cleanUnusedTopicByAddr(anyString())).thenReturn(true); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.cleanUnusedTopic(anyString())).thenReturn(true); - when(defaultMQAdminExt.cleanUnusedTopicByAddr(anyString())).thenReturn(true); - } Boolean result1 = mqAdminExtImpl.cleanUnusedTopic("DefaultCluster"); Boolean result2 = mqAdminExtImpl.cleanUnusedTopic(brokerAddr); - Assert.assertEquals(result1, true); - Assert.assertEquals(result2, true); + Assert.assertEquals(true, result1); + Assert.assertEquals(true, result2); } @Test public void testViewBrokerStatsData() throws Exception { + when(defaultMQAdminExt.viewBrokerStatsData(anyString(), anyString(), anyString())).thenReturn(new BrokerStatsData()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.viewBrokerStatsData(anyString(), anyString(), anyString())).thenReturn(new BrokerStatsData()); - } BrokerStatsData brokerStatsData = mqAdminExtImpl.viewBrokerStatsData(brokerAddr, BrokerStatsManager.TOPIC_PUT_NUMS, "topic_test"); Assert.assertNotNull(brokerStatsData); } @Test public void testGetClusterList() throws Exception { + when(defaultMQAdminExt.getClusterList(anyString())).thenReturn(new HashSet<>()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.getClusterList(anyString())).thenReturn(new HashSet<>()); - } Set clusterList = mqAdminExtImpl.getClusterList("topic_test"); Assert.assertNotNull(clusterList); } @Test public void testFetchConsumeStatsInBroker() throws Exception { + when(defaultMQAdminExt.fetchConsumeStatsInBroker(anyString(), anyBoolean(), anyLong())).thenReturn(new ConsumeStatsList()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.fetchConsumeStatsInBroker(anyString(), anyBoolean(), anyLong())).thenReturn(new ConsumeStatsList()); - } ConsumeStatsList consumeStatsList = mqAdminExtImpl.fetchConsumeStatsInBroker(brokerAddr, false, System.currentTimeMillis()); Assert.assertNotNull(consumeStatsList); } @Test public void testGetTopicClusterList() throws Exception { + when(defaultMQAdminExt.fetchTopicsByCLuster(anyString())).thenReturn(new TopicList()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.fetchTopicsByCLuster(anyString())).thenReturn(new TopicList()); - } TopicList topicList = mqAdminExtImpl.fetchTopicsByCLuster("DefaultCluster"); Assert.assertNotNull(topicList); } @Test public void testGetAllSubscriptionGroup() throws Exception { + when(defaultMQAdminExt.getAllSubscriptionGroup(anyString(), anyLong())).thenReturn(new SubscriptionGroupWrapper()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.getAllSubscriptionGroup(anyString(), anyLong())).thenReturn(new SubscriptionGroupWrapper()); - } SubscriptionGroupWrapper wrapper = mqAdminExtImpl.getAllSubscriptionGroup(brokerAddr, 5000L); Assert.assertNotNull(wrapper); } @Test public void testGetAllTopicGroup() throws Exception { + when(defaultMQAdminExt.getAllTopicGroup(anyString(), anyLong())).thenReturn(new TopicConfigSerializeWrapper()); assertNotNull(mqAdminExtImpl); - { - when(defaultMQAdminExt.getAllTopicGroup(anyString(), anyLong())).thenReturn(new TopicConfigSerializeWrapper()); - } TopicConfigSerializeWrapper wrapper = mqAdminExtImpl.getAllTopicGroup(brokerAddr, 5000L); Assert.assertNotNull(wrapper); } @Test public void testUpdateConsumeOffset() throws Exception { + doNothing().when(defaultMQAdminExt).updateConsumeOffset(anyString(), anyString(), any(), anyLong()); assertNotNull(mqAdminExtImpl); - { - doNothing().when(defaultMQAdminExt).updateConsumeOffset(anyString(), anyString(), any(), anyLong()); - } mqAdminExtImpl.updateConsumeOffset(brokerAddr, "group_test", new MessageQueue(), 10000L); } 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 e63caf3e..0c9c1f22 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/config/RMQConfigureTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/config/RMQConfigureTest.java @@ -20,9 +20,7 @@ import java.io.File; import org.junit.Assert; import org.junit.Test; -import org.springframework.boot.web.server.ErrorPage; import org.springframework.boot.web.server.ErrorPageRegistrar; -import org.springframework.boot.web.server.ErrorPageRegistry; public class RMQConfigureTest { @@ -44,23 +42,20 @@ public void testSet() { @Test public void testGet() { testSet(); - Assert.assertEquals(rmqConfigure.getAccessKey(), "rocketmq"); - Assert.assertEquals(rmqConfigure.getSecretKey(), "12345678"); + Assert.assertEquals("rocketmq", rmqConfigure.getAccessKey()); + Assert.assertEquals("12345678", rmqConfigure.getSecretKey()); Assert.assertTrue(rmqConfigure.isACLEnabled()); Assert.assertTrue(rmqConfigure.isUseTLS()); - Assert.assertEquals(rmqConfigure.getDashboardCollectData(), "/tmp/rocketmq-console/data/test" + File.separator + "dashboard"); - Assert.assertEquals(rmqConfigure.getRocketMqDashboardDataPath(), "/tmp/rocketmq-console/data/test"); - Assert.assertEquals(rmqConfigure.getIsVIPChannel(), "true"); + Assert.assertEquals("/tmp/rocketmq-console/data/test" + File.separator + "dashboard", rmqConfigure.getDashboardCollectData()); + Assert.assertEquals("/tmp/rocketmq-console/data/test", rmqConfigure.getRocketMqDashboardDataPath()); + Assert.assertEquals("true", rmqConfigure.getIsVIPChannel()); Assert.assertTrue(rmqConfigure.isEnableDashBoardCollect()); Assert.assertTrue(rmqConfigure.isLoginRequired()); - Assert.assertEquals(rmqConfigure.getNamesrvAddr(), "127.0.0.1:9876"); - Assert.assertEquals(rmqConfigure.getTimeoutMillis().longValue(), 3000L); + Assert.assertEquals("127.0.0.1:9876", rmqConfigure.getNamesrvAddr()); + Assert.assertEquals(3000L, rmqConfigure.getTimeoutMillis().longValue()); ErrorPageRegistrar registrar = rmqConfigure.errorPageRegistrar(); - registrar.registerErrorPages(new ErrorPageRegistry() { - @Override - public void addErrorPages(ErrorPage... errorPages) { + registrar.registerErrorPages(errorPages -> { - } }); } } 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 e1fcb137..2f7e051b 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/controller/BaseControllerTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/controller/BaseControllerTest.java @@ -52,7 +52,7 @@ public abstract class BaseControllerTest extends BaseTest { protected abstract Object getTestController(); @Before - public void beforeInit() throws Exception { + public void beforeInit() { MockitoAnnotations.initMocks(this); autoInjection(); createMockMvc(); diff --git a/src/test/java/org/apache/rocketmq/dashboard/controller/ClusterControllerTest.java b/src/test/java/org/apache/rocketmq/dashboard/controller/ClusterControllerTest.java index e9b99951..bffe683f 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/controller/ClusterControllerTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/controller/ClusterControllerTest.java @@ -70,7 +70,7 @@ public void testBrokerConfig() throws Exception { when(mqAdminExt.getBrokerConfig(anyString())).thenReturn(properties); } requestBuilder = MockMvcRequestBuilders.get(url); - requestBuilder.param("brokerAddr", "127.0.0.1:10911"); + requestBuilder.param("brokerAddress", "127.0.0.1:10911"); perform = mockMvc.perform(requestBuilder); perform.andExpect(status().isOk()) .andExpect(jsonPath("$.data.brokerName").value("broker-a")) diff --git a/src/test/java/org/apache/rocketmq/dashboard/controller/ConsumerControllerTest.java b/src/test/java/org/apache/rocketmq/dashboard/controller/ConsumerControllerTest.java index 87c3cc0c..3388522f 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/controller/ConsumerControllerTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/controller/ConsumerControllerTest.java @@ -170,7 +170,7 @@ public void testFetchBrokerNameList() throws Exception { @Test public void testExamineSubscriptionGroupConfig() throws Exception { final String url = "/consumer/examineSubscriptionGroupConfig.query"; - requestBuilder = MockMvcRequestBuilders.get(url); + requestBuilder = MockMvcRequestBuilders.post(url); requestBuilder.param("consumerGroup", "group_test"); perform = mockMvc.perform(requestBuilder); perform.andExpect(status().isOk()) @@ -251,7 +251,7 @@ public void testGetConsumerRunningInfo() throws Exception { requestBuilder = MockMvcRequestBuilders.get(url); requestBuilder.param("consumerGroup", "group_test"); requestBuilder.param("clientId", "group_test"); - requestBuilder.param("jstack", "true"); + requestBuilder.param("jStack", "true"); perform = mockMvc.perform(requestBuilder); perform.andExpect(status().isOk()) .andExpect(jsonPath("$.data.jstack").value("test")); diff --git a/src/test/java/org/apache/rocketmq/dashboard/controller/DashboardControllerTest.java b/src/test/java/org/apache/rocketmq/dashboard/controller/DashboardControllerTest.java index b7568855..4af0705e 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/controller/DashboardControllerTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/controller/DashboardControllerTest.java @@ -174,7 +174,7 @@ private File createBrokerTestCollectDataFile(String date) throws Exception { brokerData.add((new Date().getTime() + i * 60 * 1000) + "," + tps.toString()); } resultMap.put("broker-a:0", brokerData); - Files.write(JsonUtil.obj2String(resultMap).getBytes(), brokerFile); + Files.write(JsonUtil.objectToString(resultMap).getBytes(), brokerFile); return brokerFile; } @@ -195,7 +195,7 @@ private File createTopicTestCollectDataFile(String date) throws Exception { topicData.add(sb.toString()); } resultMap.put("topic_test", topicData); - Files.write(JsonUtil.obj2String(resultMap).getBytes(), topicFile); + Files.write(JsonUtil.objectToString(resultMap).getBytes(), topicFile); return topicFile; } } diff --git a/src/test/java/org/apache/rocketmq/dashboard/controller/LoginControllerTest.java b/src/test/java/org/apache/rocketmq/dashboard/controller/LoginControllerTest.java index 538bdca3..ba8b6f98 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/controller/LoginControllerTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/controller/LoginControllerTest.java @@ -76,7 +76,7 @@ public void testLogin() throws Exception { = new UserServiceImpl.FileBasedUserInfoStore(configure); User user = store.queryByName(username); Assert.assertNotNull(user); - Assert.assertEquals(user.getPassword(), rightPwd); + Assert.assertEquals(rightPwd, user.getPassword()); ReflectionTestUtils.setField(userService, "fileBasedUserInfoStore", store); } diff --git a/src/test/java/org/apache/rocketmq/dashboard/controller/MonitorControllerTest.java b/src/test/java/org/apache/rocketmq/dashboard/controller/MonitorControllerTest.java index 54b6a634..d90be5d9 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/controller/MonitorControllerTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/controller/MonitorControllerTest.java @@ -73,7 +73,7 @@ public void testCreateOrUpdateConsumerMonitor() throws Exception { perform = mockMvc.perform(requestBuilder); Map map = - JsonUtil.string2Obj(MixAll.file2String(filePath), + JsonUtil.stringToObject(MixAll.file2String(filePath), new TypeReference>() { }); Assert.assertEquals(map.size(), 2); @@ -113,7 +113,7 @@ public void testDeleteConsumerMonitor() throws Exception { perform = mockMvc.perform(requestBuilder); Map map = - JsonUtil.string2Obj(MixAll.file2String(filePath), + JsonUtil.stringToObject(MixAll.file2String(filePath), new TypeReference>() { }); Assert.assertEquals(map.size(), 1); diff --git a/src/test/java/org/apache/rocketmq/dashboard/controller/NamesvrControllerTest.java b/src/test/java/org/apache/rocketmq/dashboard/controller/NamesvrControllerTest.java index f40c990b..8cb75327 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/controller/NamesvrControllerTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/controller/NamesvrControllerTest.java @@ -41,7 +41,7 @@ public void testNsaddr() throws Exception { requestBuilder = MockMvcRequestBuilders.get(url); perform = mockMvc.perform(requestBuilder); String namesrvAddr = perform.andReturn().getResponse().getContentAsString(); - Assert.assertEquals(namesrvAddr, "127.0.0.1:9876"); + Assert.assertEquals("127.0.0.1:9876", namesrvAddr); } @Override protected Object getTestController() { 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 f8647559..86835e65 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/controller/OpsControllerTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/controller/OpsControllerTest.java @@ -80,7 +80,7 @@ public void testUpdateNameSvrAddr() throws Exception { perform = mockMvc.perform(requestBuilder); perform.andExpect(status().isOk()) .andExpect(jsonPath("$.data").value(true)); - Assert.assertEquals(configure.getNamesrvAddr(), "127.0.0.1:9876"); + Assert.assertEquals("127.0.0.1:9876", configure.getNamesrvAddr()); } @Test diff --git a/src/test/java/org/apache/rocketmq/dashboard/permission/PermissionAspectTest.java b/src/test/java/org/apache/rocketmq/dashboard/permission/PermissionAspectTest.java index 34dfe8e1..5a3f4a4f 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/permission/PermissionAspectTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/permission/PermissionAspectTest.java @@ -78,7 +78,7 @@ public void testCheckPermission() throws Throwable { try { permissionAspect.checkPermission(joinPoint); } catch (Throwable throwable) { - Assert.assertEquals(throwable.getMessage(), "user not login"); + Assert.assertEquals("user not login", throwable.getMessage()); } // userRole is admin UserInfo info = new UserInfo(); @@ -97,7 +97,7 @@ public void testCheckPermission() throws Throwable { try { permissionAspect.checkPermission(joinPoint); } catch (Throwable throwable) { - Assert.assertEquals(throwable.getMessage(), "no permission"); + Assert.assertEquals("no permission", throwable.getMessage()); } // no permission @@ -119,7 +119,7 @@ public void testFileBasedPermissionStoreWatch() throws Exception { new PermissionServiceImpl.PermissionFileStore(configure); rolePerms.put("ordinary", accessUrls); // Update file and flush to yaml file - Files.write(JsonUtil.obj2String(rolePerms).getBytes(), file); + Files.write(JsonUtil.objectToString(rolePerms).getBytes(), file); Thread.sleep(1000); if (file != null && file.exists()) { file.delete(); @@ -131,7 +131,7 @@ private File createTestFile(Map map) throws Exception { File file = new File(fileName); file.delete(); file.createNewFile(); - Files.write(JsonUtil.obj2String(map).getBytes(), file); + Files.write(JsonUtil.objectToString(map).getBytes(), file); return file; } } diff --git a/src/test/java/org/apache/rocketmq/dashboard/task/DashboardCollectTaskTest.java b/src/test/java/org/apache/rocketmq/dashboard/task/DashboardCollectTaskTest.java index b8dfc258..859d26d8 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/task/DashboardCollectTaskTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/task/DashboardCollectTaskTest.java @@ -119,18 +119,18 @@ public void testCollectTopic() throws Exception { try { dashboardCollectTask.collectTopic(); } catch (Exception e) { - Assert.assertEquals(e.getMessage(), "fetchAllTopicList exception"); + Assert.assertEquals("fetchAllTopicList exception", e.getMessage()); } for (int i = 0; i < taskExecuteNum; i++) { dashboardCollectTask.collectTopic(); } LoadingCache> map = dashboardCollectService.getTopicMap(); - Assert.assertEquals(map.size(), 1); + Assert.assertEquals(1, map.size()); Assert.assertEquals(map.get("topic_test").size(), taskExecuteNum); dashboardCollectTask.saveData(); - Assert.assertEquals(topicFile.exists(), true); + Assert.assertTrue(topicFile.exists()); Map> topicData = - JsonUtil.string2Obj(MixAll.file2String(topicFile), + JsonUtil.stringToObject(MixAll.file2String(topicFile), new TypeReference>>() { }); Assert.assertEquals(topicData.get("topic_test").size(), taskExecuteNum); @@ -156,20 +156,20 @@ public void testCollectBroker() throws Exception { try { dashboardCollectTask.collectBroker(); } catch (Exception e) { - Assert.assertEquals(e.getMessage(), "fetchBrokerRuntimeStats exception"); + Assert.assertEquals("fetchBrokerRuntimeStats exception", e.getMessage()); } for (int i = 0; i < taskExecuteNum; i++) { dashboardCollectTask.collectBroker(); } LoadingCache> map = dashboardCollectService.getBrokerMap(); - Assert.assertEquals(map.size(), 1); + Assert.assertEquals(1, map.size()); Assert.assertEquals(map.get("broker-a" + ":" + MixAll.MASTER_ID).size(), taskExecuteNum); mockBrokerFileExistBeforeSaveData(); dashboardCollectTask.saveData(); - Assert.assertEquals(brokerFile.exists(), true); + Assert.assertTrue(brokerFile.exists()); Map> brokerData = - JsonUtil.string2Obj(MixAll.file2String(brokerFile), + JsonUtil.stringToObject(MixAll.file2String(brokerFile), new TypeReference>>() { }); Assert.assertEquals(brokerData.get("broker-a" + ":" + MixAll.MASTER_ID).size(), taskExecuteNum + 2); @@ -189,6 +189,6 @@ private void mockBrokerFileExistBeforeSaveData() throws Exception { Map> map = new HashMap<>(); map.put("broker-a" + ":" + MixAll.MASTER_ID, Lists.asList("1000", new String[] {"1000"})); map.put("broker-b" + ":" + MixAll.MASTER_ID, Lists.asList("1000", new String[] {"1000"})); - MixAll.string2File(JsonUtil.obj2String(map), brokerFile.getAbsolutePath()); + MixAll.string2File(JsonUtil.objectToString(map), brokerFile.getAbsolutePath()); } } diff --git a/src/test/java/org/apache/rocketmq/dashboard/testbase/RocketMQConsoleTestBase.java b/src/test/java/org/apache/rocketmq/dashboard/testbase/RocketMQConsoleTestBase.java index 9814f663..2cf47f2b 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/testbase/RocketMQConsoleTestBase.java +++ b/src/test/java/org/apache/rocketmq/dashboard/testbase/RocketMQConsoleTestBase.java @@ -130,7 +130,7 @@ protected void startTestMQConsumer() { @Override public ConsumeConcurrentlyStatus consumeMessage(List msgs, ConsumeConcurrentlyContext context) { - consoleTestBaseLog.info("op=consumeMessage message={}", JsonUtil.obj2String(msgs)); + consoleTestBaseLog.info("op=consumeMessage message={}", JsonUtil.objectToString(msgs)); return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } }); diff --git a/src/test/java/org/apache/rocketmq/dashboard/util/JsonUtilTest.java b/src/test/java/org/apache/rocketmq/dashboard/util/JsonUtilTest.java new file mode 100644 index 00000000..f37f7d38 --- /dev/null +++ b/src/test/java/org/apache/rocketmq/dashboard/util/JsonUtilTest.java @@ -0,0 +1,118 @@ +/* + * 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. + */ +package org.apache.rocketmq.dashboard.util; + +import com.fasterxml.jackson.core.type.TypeReference; +import org.junit.jupiter.api.Test; + +import java.io.StringWriter; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class JsonUtilTest { + + static class TestObj { + public String name; + public int value; + + public TestObj() {} + public TestObj(String name, int value) { + this.name = name; + this.value = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof TestObj)) return false; + TestObj testObj = (TestObj) o; + return value == testObj.value && name.equals(testObj.name); + } + } + + @Test + void writeValue() { + TestObj obj = new TestObj("foo", 42); + StringWriter writer = new StringWriter(); + JsonUtil.writeValue(writer, obj); + String json = writer.toString(); + assertTrue(json.contains("\"name\":\"foo\"")); + assertTrue(json.contains("\"value\":42")); + } + + @Test + void objectToString_and_stringToObject() { + TestObj obj = new TestObj("bar", 7); + String json = JsonUtil.objectToString(obj); + assertNotNull(json); + TestObj result = JsonUtil.stringToObject(json, TestObj.class); + assertEquals(obj, result); + } + + @Test + void objectToByte_and_byteToObject() { + TestObj obj = new TestObj("baz", 99); + byte[] bytes = JsonUtil.objectToByte(obj); + assertNotNull(bytes); + TestObj result = JsonUtil.byteToObject(bytes, TestObj.class); + assertEquals(obj, result); + } + + @Test + void stringToObject_withTypeReference() { + Map map = new HashMap<>(); + map.put("a", 1); + String json = JsonUtil.objectToString(map); + TypeReference> typeRef = new TypeReference<>() {}; + Map result = JsonUtil.stringToObject(json, typeRef); + assertEquals(map, result); + } + + @Test + void byteToObject_withTypeReference() { + Map map = new HashMap<>(); + map.put("x", "y"); + byte[] bytes = JsonUtil.objectToByte(map); + TypeReference> typeRef = new TypeReference<>() {}; + Map result = JsonUtil.byteToObject(bytes, typeRef); + assertEquals(map, result); + } + + @Test + void mapToObj() { + Map map = new HashMap<>(); + map.put("name", "hello"); + map.put("value", "123"); + TestObj obj = JsonUtil.mapToObj(map, TestObj.class); + assertEquals("hello", obj.name); + assertEquals(123, obj.value); + } + + @Test + void nullAndEdgeCases() { + assertNull(JsonUtil.objectToString(null)); + assertNull(JsonUtil.objectToByte(null)); + assertNull(JsonUtil.stringToObject(null, TestObj.class)); + assertNull(JsonUtil.stringToObject("", TestObj.class)); + assertNull(JsonUtil.byteToObject(null, TestObj.class)); + assertNull(JsonUtil.stringToObject(null, (TypeReference) null)); + assertNull(JsonUtil.byteToObject(null, (TypeReference) null)); + assertNull(JsonUtil.mapToObj(null, TestObj.class)); + } +} \ No newline at end of file diff --git a/src/test/java/org/apache/rocketmq/dashboard/util/MatcherUtilTest.java b/src/test/java/org/apache/rocketmq/dashboard/util/MatcherUtilTest.java index cd2151c5..1ee83576 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/util/MatcherUtilTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/util/MatcherUtilTest.java @@ -23,12 +23,12 @@ public class MatcherUtilTest { @Test public void testMatch() { - boolean b = MatcherUtil.match("/topic/*.query", "/topic/route.query"); - boolean b1 = MatcherUtil.match("/**/**.do", "/consumer/route.do"); - boolean b2 = MatcherUtil.match("/*", "/topic/qqq/route.do"); - Assert.assertTrue(b); - Assert.assertTrue(b1); - Assert.assertFalse(b2); + boolean result1 = MatcherUtil.match("/topic/*.query", "/topic/route.query"); + boolean result2 = MatcherUtil.match("/**/**.do", "/consumer/route.do"); + boolean result3 = MatcherUtil.match("/*", "/topic/qqq/route.do"); + Assert.assertTrue(result1); + Assert.assertTrue(result2); + Assert.assertFalse(result3); } } diff --git a/src/test/java/org/apache/rocketmq/dashboard/util/MockObjectUtil.java b/src/test/java/org/apache/rocketmq/dashboard/util/MockObjectUtil.java index 89a67645..82b8695c 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/util/MockObjectUtil.java +++ b/src/test/java/org/apache/rocketmq/dashboard/util/MockObjectUtil.java @@ -171,13 +171,12 @@ public static ConsumerConnection createConsumerConnection() { SubscriptionData subscriptionData = new SubscriptionData(); subscriptionTable.put("topic_test", subscriptionData); - ConsumeType consumeType = ConsumeType.CONSUME_ACTIVELY; MessageModel messageModel = MessageModel.CLUSTERING; ConsumeFromWhere consumeFromWhere = ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET; consumerConnection.setConnectionSet(connections); consumerConnection.setSubscriptionTable(subscriptionTable); - consumerConnection.setConsumeType(consumeType); + consumerConnection.setConsumeType(ConsumeType.CONSUME_ACTIVELY); consumerConnection.setMessageModel(messageModel); consumerConnection.setConsumeFromWhere(consumeFromWhere); return consumerConnection; diff --git a/src/test/java/org/apache/rocketmq/dashboard/util/MsgTraceDecodeUtilTest.java b/src/test/java/org/apache/rocketmq/dashboard/util/MsgTraceDecodeUtilTest.java index c5bbfeb4..b2291ce0 100644 --- a/src/test/java/org/apache/rocketmq/dashboard/util/MsgTraceDecodeUtilTest.java +++ b/src/test/java/org/apache/rocketmq/dashboard/util/MsgTraceDecodeUtilTest.java @@ -66,120 +66,120 @@ public void init() { @Test public void testDecodePubTraceMessage() { List contexts = MsgTraceDecodeUtil.decoderFromTraceDataString(null); - Assert.assertEquals(contexts.size(), 0); - String pubTraceData_V1 = new String(pubTraceDataBase); - List traceContextListV1 = MsgTraceDecodeUtil.decoderFromTraceDataString(pubTraceData_V1); - Assert.assertEquals(traceContextListV1.size(), 1); - Assert.assertEquals(traceContextListV1.get(0).getTraceType().toString(), "Pub"); - Assert.assertEquals(traceContextListV1.get(0).isSuccess(), true); - Assert.assertEquals(traceContextListV1.get(0).getTraceBeans().get(0).getMsgId(), "0A741C02622500000000080cc6980189"); - Assert.assertEquals(traceContextListV1.get(0).getTraceBeans().get(0).getOffsetMsgId(), ""); - Assert.assertEquals(traceContextListV1.get(0).getTraceBeans().get(0).getStoreHost(), "10.10.10.10:30911"); + Assert.assertEquals(0, contexts.size()); + String pubTraceDataV1 = new String(pubTraceDataBase); + List traceContextListV1 = MsgTraceDecodeUtil.decoderFromTraceDataString(pubTraceDataV1); + Assert.assertEquals(1, traceContextListV1.size()); + Assert.assertEquals("Pub", traceContextListV1.get(0).getTraceType().toString()); + Assert.assertTrue(traceContextListV1.get(0).isSuccess()); + Assert.assertEquals("0A741C02622500000000080cc6980189", traceContextListV1.get(0).getTraceBeans().get(0).getMsgId()); + Assert.assertEquals("", traceContextListV1.get(0).getTraceBeans().get(0).getOffsetMsgId()); + Assert.assertEquals("10.10.10.10:30911", traceContextListV1.get(0).getTraceBeans().get(0).getStoreHost()); Assert.assertEquals(traceContextListV1.get(0).getTraceBeans().get(0).getClientHost(), UtilAll.ipToIPv4Str(UtilAll.getIP())); - String pubTraceData_V2 = new StringBuilder(pubTraceDataBase) + String pubTraceDataV2 = new StringBuilder(pubTraceDataBase) .append("false").append(TraceConstants.CONTENT_SPLITOR) .toString(); - List traceContextListV2 = MsgTraceDecodeUtil.decoderFromTraceDataString(pubTraceData_V2); - Assert.assertEquals(traceContextListV2.size(), 1); - Assert.assertEquals(traceContextListV2.get(0).getTraceType().toString(), "Pub"); - Assert.assertEquals(traceContextListV2.get(0).isSuccess(), false); - Assert.assertEquals(traceContextListV2.get(0).getTraceBeans().get(0).getMsgId(), "0A741C02622500000000080cc6980189"); - Assert.assertEquals(traceContextListV2.get(0).getTraceBeans().get(0).getOffsetMsgId(), ""); - Assert.assertEquals(traceContextListV2.get(0).getTraceBeans().get(0).getStoreHost(), "10.10.10.10:30911"); + List traceContextListV2 = MsgTraceDecodeUtil.decoderFromTraceDataString(pubTraceDataV2); + Assert.assertEquals(1, traceContextListV2.size()); + Assert.assertEquals("Pub", traceContextListV2.get(0).getTraceType().toString()); + Assert.assertFalse(traceContextListV2.get(0).isSuccess()); + Assert.assertEquals("0A741C02622500000000080cc6980189", traceContextListV2.get(0).getTraceBeans().get(0).getMsgId()); + Assert.assertEquals("", traceContextListV2.get(0).getTraceBeans().get(0).getOffsetMsgId()); + Assert.assertEquals("10.10.10.10:30911", traceContextListV2.get(0).getTraceBeans().get(0).getStoreHost()); Assert.assertEquals(traceContextListV2.get(0).getTraceBeans().get(0).getClientHost(), UtilAll.ipToIPv4Str(UtilAll.getIP())); - String pubTraceData_V3 = new StringBuilder(pubTraceDataBase) + String pubTraceDataV3 = new StringBuilder(pubTraceDataBase) .append("0A741D02000078BF000000000132F7C9").append(TraceConstants.CONTENT_SPLITOR) .append("true").append(TraceConstants.CONTENT_SPLITOR) .toString(); - List traceContextListV3 = MsgTraceDecodeUtil.decoderFromTraceDataString(pubTraceData_V3); - Assert.assertEquals(traceContextListV3.size(), 1); - Assert.assertEquals(traceContextListV3.get(0).getTraceType().toString(), "Pub"); - Assert.assertEquals(traceContextListV3.get(0).isSuccess(), true); - Assert.assertEquals(traceContextListV3.get(0).getTraceBeans().get(0).getMsgId(), "0A741C02622500000000080cc6980189"); - Assert.assertEquals(traceContextListV3.get(0).getTraceBeans().get(0).getOffsetMsgId(), "0A741D02000078BF000000000132F7C9"); - Assert.assertEquals(traceContextListV3.get(0).getTraceBeans().get(0).getStoreHost(), "10.10.10.10:30911"); + List traceContextListV3 = MsgTraceDecodeUtil.decoderFromTraceDataString(pubTraceDataV3); + Assert.assertEquals(1, traceContextListV3.size()); + Assert.assertEquals("Pub", traceContextListV3.get(0).getTraceType().toString()); + Assert.assertTrue(traceContextListV3.get(0).isSuccess()); + Assert.assertEquals("0A741C02622500000000080cc6980189", traceContextListV3.get(0).getTraceBeans().get(0).getMsgId()); + Assert.assertEquals("0A741D02000078BF000000000132F7C9", traceContextListV3.get(0).getTraceBeans().get(0).getOffsetMsgId()); + Assert.assertEquals("10.10.10.10:30911", traceContextListV3.get(0).getTraceBeans().get(0).getStoreHost()); Assert.assertEquals(traceContextListV3.get(0).getTraceBeans().get(0).getClientHost(), UtilAll.ipToIPv4Str(UtilAll.getIP())); - String pubTraceData_V4 = new StringBuilder(pubTraceDataBase) + String pubTraceDataV4 = new StringBuilder(pubTraceDataBase) .append("0A741D02000078BF000000000132F7C9").append(TraceConstants.CONTENT_SPLITOR) .append("true").append(TraceConstants.CONTENT_SPLITOR) .append("10.10.10.11").append(TraceConstants.CONTENT_SPLITOR) .toString(); - List traceContextListV4 = MsgTraceDecodeUtil.decoderFromTraceDataString(pubTraceData_V4); - Assert.assertEquals(traceContextListV4.size(), 1); - Assert.assertEquals(traceContextListV4.get(0).getTraceType().toString(), "Pub"); - Assert.assertEquals(traceContextListV4.get(0).isSuccess(), true); - Assert.assertEquals(traceContextListV4.get(0).getTraceBeans().get(0).getMsgId(), "0A741C02622500000000080cc6980189"); - Assert.assertEquals(traceContextListV4.get(0).getTraceBeans().get(0).getOffsetMsgId(), "0A741D02000078BF000000000132F7C9"); - Assert.assertEquals(traceContextListV4.get(0).getTraceBeans().get(0).getStoreHost(), "10.10.10.10:30911"); - Assert.assertEquals(traceContextListV4.get(0).getTraceBeans().get(0).getClientHost(), "10.10.10.11"); + List traceContextListV4 = MsgTraceDecodeUtil.decoderFromTraceDataString(pubTraceDataV4); + Assert.assertEquals(1, traceContextListV4.size()); + Assert.assertEquals("Pub", traceContextListV4.get(0).getTraceType().toString()); + Assert.assertTrue(traceContextListV4.get(0).isSuccess()); + Assert.assertEquals("0A741C02622500000000080cc6980189", traceContextListV4.get(0).getTraceBeans().get(0).getMsgId()); + Assert.assertEquals("0A741D02000078BF000000000132F7C9", traceContextListV4.get(0).getTraceBeans().get(0).getOffsetMsgId()); + Assert.assertEquals("10.10.10.10:30911", traceContextListV4.get(0).getTraceBeans().get(0).getStoreHost()); + Assert.assertEquals("10.10.10.11", traceContextListV4.get(0).getTraceBeans().get(0).getClientHost()); - String pubTraceData_default = new StringBuilder(pubTraceDataBase) + String pubTraceDataDefault = new StringBuilder(pubTraceDataBase) .append("0A741D02000078BF000000000132F7C9").append(TraceConstants.CONTENT_SPLITOR) .append("true").append(TraceConstants.CONTENT_SPLITOR) .append("10.10.10.11").append(TraceConstants.CONTENT_SPLITOR) .append("10.10.10.11").append(TraceConstants.CONTENT_SPLITOR) .toString(); - List traceContextList = MsgTraceDecodeUtil.decoderFromTraceDataString(pubTraceData_default); - Assert.assertEquals(traceContextList.size(), 1); - Assert.assertEquals(traceContextList.get(0).getTraceType().toString(), "Pub"); - Assert.assertEquals(traceContextList.get(0).isSuccess(), true); - Assert.assertEquals(traceContextList.get(0).getTraceBeans().get(0).getMsgId(), "0A741C02622500000000080cc6980189"); - Assert.assertEquals(traceContextList.get(0).getTraceBeans().get(0).getOffsetMsgId(), "0A741D02000078BF000000000132F7C9"); - Assert.assertEquals(traceContextList.get(0).getTraceBeans().get(0).getStoreHost(), "10.10.10.10:30911"); - Assert.assertEquals(traceContextList.get(0).getTraceBeans().get(0).getClientHost(), "10.10.10.11"); + List traceContextList = MsgTraceDecodeUtil.decoderFromTraceDataString(pubTraceDataDefault); + Assert.assertEquals(1, traceContextList.size()); + Assert.assertEquals("Pub", traceContextList.get(0).getTraceType().toString()); + Assert.assertTrue(traceContextList.get(0).isSuccess()); + Assert.assertEquals("0A741C02622500000000080cc6980189", traceContextList.get(0).getTraceBeans().get(0).getMsgId()); + Assert.assertEquals("0A741D02000078BF000000000132F7C9", traceContextList.get(0).getTraceBeans().get(0).getOffsetMsgId()); + Assert.assertEquals("10.10.10.10:30911", traceContextList.get(0).getTraceBeans().get(0).getStoreHost()); + Assert.assertEquals("10.10.10.11", traceContextList.get(0).getTraceBeans().get(0).getClientHost()); } @Test public void testDecodeSubTraceMessage() { - String subTraceData_V1 = new String(subTraceDataBase); - List traceContextListV1 = MsgTraceDecodeUtil.decoderFromTraceDataString(subTraceData_V1); - Assert.assertEquals(traceContextListV1.size(), 2); - Assert.assertEquals(traceContextListV1.get(0).getTraceType().toString(), "SubBefore"); - Assert.assertEquals(traceContextListV1.get(0).isSuccess(), true); - Assert.assertEquals(traceContextListV1.get(0).getTraceBeans().get(0).getMsgId(), "0A741C02622500000000080cc698003f"); - Assert.assertEquals(traceContextListV1.get(0).getTraceBeans().get(0).getRetryTimes(), 2); + String subTraceDataV1 = new String(subTraceDataBase); + List traceContextListV1 = MsgTraceDecodeUtil.decoderFromTraceDataString(subTraceDataV1); + Assert.assertEquals(2, traceContextListV1.size()); + Assert.assertEquals("SubBefore", traceContextListV1.get(0).getTraceType().toString()); + Assert.assertTrue(traceContextListV1.get(0).isSuccess()); + Assert.assertEquals("0A741C02622500000000080cc698003f", traceContextListV1.get(0).getTraceBeans().get(0).getMsgId()); + Assert.assertEquals(2, traceContextListV1.get(0).getTraceBeans().get(0).getRetryTimes()); // FIXME bad case for compatibility backward // Assert.assertEquals(traceContextListV1.get(0).getTraceBeans().get(0).getClientHost(), "10.10.10.11@39960"); - Assert.assertEquals(traceContextListV1.get(1).getTraceType().toString(), "SubAfter"); - Assert.assertEquals(traceContextListV1.get(1).isSuccess(), false); - Assert.assertEquals(traceContextListV1.get(1).getTraceBeans().get(0).getMsgId(), "0A741C02622500000000080cc698003f"); + Assert.assertEquals("SubAfter", traceContextListV1.get(1).getTraceType().toString()); + Assert.assertFalse(traceContextListV1.get(1).isSuccess()); + Assert.assertEquals("0A741C02622500000000080cc698003f", traceContextListV1.get(1).getTraceBeans().get(0).getMsgId()); - String subTraceData_V2 = new StringBuilder(subTraceDataBase) + String subTraceDataV2 = new StringBuilder(subTraceDataBase) .append("4").append(TraceConstants.CONTENT_SPLITOR) .toString(); - List traceContextListV2 = MsgTraceDecodeUtil.decoderFromTraceDataString(subTraceData_V2); - Assert.assertEquals(traceContextListV2.size(), 2); - Assert.assertEquals(traceContextListV2.get(1).getTraceType().toString(), "SubAfter"); - Assert.assertEquals(traceContextListV2.get(1).isSuccess(), false); - Assert.assertEquals(traceContextListV2.get(1).getTraceBeans().get(0).getMsgId(), "0A741C02622500000000080cc698003f"); - Assert.assertEquals(traceContextListV2.get(1).getContextCode(), 4); + List traceContextListV2 = MsgTraceDecodeUtil.decoderFromTraceDataString(subTraceDataV2); + Assert.assertEquals(2, traceContextListV2.size()); + Assert.assertEquals("SubAfter", traceContextListV2.get(1).getTraceType().toString()); + Assert.assertFalse(traceContextListV2.get(1).isSuccess()); + Assert.assertEquals("0A741C02622500000000080cc698003f", traceContextListV2.get(1).getTraceBeans().get(0).getMsgId()); + Assert.assertEquals(4, traceContextListV2.get(1).getContextCode()); - String subTraceData_V3 = new StringBuilder(subTraceDataBase) + String subTraceDataV3 = new StringBuilder(subTraceDataBase) .append("4").append(TraceConstants.CONTENT_SPLITOR) .append("1614666740499").append(TraceConstants.CONTENT_SPLITOR) .append("test_consumer_group").append(TraceConstants.CONTENT_SPLITOR) .toString(); - List traceContextListV3 = MsgTraceDecodeUtil.decoderFromTraceDataString(subTraceData_V3); - Assert.assertEquals(traceContextListV3.size(), 2); - Assert.assertEquals(traceContextListV3.get(1).getTraceType().toString(), "SubAfter"); - Assert.assertEquals(traceContextListV3.get(1).isSuccess(), false); - Assert.assertEquals(traceContextListV3.get(1).getTraceBeans().get(0).getMsgId(), "0A741C02622500000000080cc698003f"); - Assert.assertEquals(traceContextListV3.get(1).getGroupName(), "test_consumer_group"); + List traceContextListV3 = MsgTraceDecodeUtil.decoderFromTraceDataString(subTraceDataV3); + Assert.assertEquals(2, traceContextListV3.size()); + Assert.assertEquals("SubAfter", traceContextListV3.get(1).getTraceType().toString()); + Assert.assertFalse(traceContextListV3.get(1).isSuccess()); + Assert.assertEquals("0A741C02622500000000080cc698003f", traceContextListV3.get(1).getTraceBeans().get(0).getMsgId()); + Assert.assertEquals("test_consumer_group", traceContextListV3.get(1).getGroupName()); - String subTraceData_default = new StringBuilder(subTraceDataBase) + String subTraceDataDefault = new StringBuilder(subTraceDataBase) .append("4").append(TraceConstants.CONTENT_SPLITOR) .append("1614666740499").append(TraceConstants.CONTENT_SPLITOR) .append("test_consumer_group").append(TraceConstants.CONTENT_SPLITOR) .append("test_consumer_group").append(TraceConstants.CONTENT_SPLITOR) .toString(); - List traceContextList = MsgTraceDecodeUtil.decoderFromTraceDataString(subTraceData_default); - Assert.assertEquals(traceContextList.size(), 2); - Assert.assertEquals(traceContextList.get(1).getTraceType().toString(), "SubAfter"); - Assert.assertEquals(traceContextList.get(1).isSuccess(), false); - Assert.assertEquals(traceContextList.get(1).getTraceBeans().get(0).getMsgId(), "0A741C02622500000000080cc698003f"); - Assert.assertEquals(traceContextList.get(1).getGroupName(), "test_consumer_group"); + List traceContextList = MsgTraceDecodeUtil.decoderFromTraceDataString(subTraceDataDefault); + Assert.assertEquals(2, traceContextList.size()); + Assert.assertEquals("SubAfter", traceContextList.get(1).getTraceType().toString()); + Assert.assertFalse(traceContextList.get(1).isSuccess()); + Assert.assertEquals("0A741C02622500000000080cc698003f", traceContextList.get(1).getTraceBeans().get(0).getMsgId()); + Assert.assertEquals("test_consumer_group", traceContextList.get(1).getGroupName()); } }