From ff73529a757c6a1394478b4dea16277e39b9c355 Mon Sep 17 00:00:00 2001 From: Crazylychee <110229037+Crazylychee@users.noreply.github.com> Date: Sat, 5 Jul 2025 20:50:36 +0800 Subject: [PATCH] [ISSUE #330] Format code and update the doc (#334) --- frontend-new/README.md | 9 +- frontend-new/public/index.html | 14 +- frontend-new/src/App.jsx | 8 +- frontend-new/src/App.test.js | 8 +- .../components/DlqMessageDetailViewDialog.jsx | 18 +- .../components/MessageDetailViewDialog.jsx | 66 ++-- .../MessageTraceDetailViewDialog.jsx | 203 +++++++++--- frontend-new/src/components/Navbar.jsx | 76 ++--- .../src/components/acl/ResourceInput.jsx | 30 +- .../src/components/acl/SubjectInput.jsx | 20 +- .../components/consumer/ClientInfoModal.jsx | 26 +- .../consumer/ConsumerConfigItem.jsx | 20 +- .../consumer/ConsumerConfigModal.jsx | 2 +- .../consumer/ConsumerDetailModal.jsx | 24 +- .../consumer/DeleteConsumerModal.jsx | 20 +- .../topic/ConsumerResetOffsetDialog.jsx | 12 +- .../components/topic/ConsumerViewDialog.jsx | 26 +- .../topic/ResetOffsetResultDialog.jsx | 14 +- .../src/components/topic/RouterViewDialog.jsx | 18 +- .../src/components/topic/SendResultDialog.jsx | 7 +- .../topic/SendTopicMessageDialog.jsx | 14 +- .../topic/SkipMessageAccumulateDialog.jsx | 17 +- .../src/components/topic/StatsViewDialog.jsx | 8 +- .../components/topic/TopicModifyDialog.jsx | 4 +- .../topic/TopicSingleModifyForm.jsx | 155 ++++----- frontend-new/src/i18n/LanguageContext.js | 11 +- frontend-new/src/i18n/index.js | 302 +++++++++--------- frontend-new/src/index.css | 10 +- frontend-new/src/index.js | 6 +- frontend-new/src/pages/Consumer/consumer.jsx | 8 +- frontend-new/src/pages/Login/login.jsx | 6 +- frontend-new/src/pages/Ops/ops.jsx | 8 +- frontend-new/src/pages/Proxy/proxy.jsx | 48 +-- frontend-new/src/pages/Topic/topic.jsx | 7 +- frontend-new/src/reportWebVitals.js | 18 +- frontend-new/src/router/index.jsx | 2 +- .../src/store/context/ThemeContext.js | 8 +- frontend-new/src/store/index.js | 2 +- .../src/store/reducers/themeReducer.js | 2 +- pom.xml | 7 +- .../dashboard/admin/MQAdminExtCallback.java | 25 -- .../admin/MQAdminPooledObjectFactory.java | 2 +- .../dashboard/admin/MqAdminExtObjectPool.java | 4 +- .../config/CollectExecutorConfig.java | 26 +- .../dashboard/config/RMQConfigure.java | 8 +- .../controller/ConsumerController.java | 6 +- .../controller/DashboardController.java | 2 +- .../controller/MessageTraceController.java | 2 +- .../controller/MonitorController.java | 2 +- .../dashboard/controller/OpsController.java | 2 +- .../dashboard/controller/ProxyController.java | 1 + .../dashboard/controller/TestController.java | 17 +- .../dashboard/controller/TopicController.java | 10 +- .../filter/HttpBasicAuthorizedFilter.java | 1 - .../rocketmq/dashboard/model/MessageView.java | 12 +- .../model/request/TopicConfigInfo.java | 25 +- .../service/AbstractCommonService.java | 6 +- .../dashboard/service/AclService.java | 2 +- .../dashboard/service/ConsumerService.java | 2 +- .../dashboard/service/DashboardService.java | 2 +- .../dashboard/service/MessageService.java | 9 +- .../dashboard/service/OpsService.java | 2 +- .../dashboard/service/ProxyService.java | 2 +- .../service/client/MQAdminExtImpl.java | 160 +++++----- .../service/impl/ConsumerServiceImpl.java | 2 +- .../impl/DashboardCollectServiceImpl.java | 72 ++--- .../service/impl/DashboardServiceImpl.java | 3 +- .../service/impl/DlqMessageServiceImpl.java | 6 +- .../service/impl/MessageServiceImpl.java | 26 +- .../service/impl/MessageTraceServiceImpl.java | 20 +- .../service/impl/MonitorServiceImpl.java | 3 +- .../service/impl/ProducerServiceImpl.java | 3 +- .../service/impl/TopicServiceImpl.java | 4 +- .../service/impl/UserServiceImpl.java | 15 +- .../support/AutoCloseConsumerWrapper.java | 9 +- .../support/GlobalExceptionHandler.java | 3 +- .../GlobalRestfulResponseBodyAdvice.java | 11 +- .../dashboard/task/CollectTaskRunnble.java | 2 +- .../dashboard/task/DashboardCollectTask.java | 31 +- .../rocketmq/dashboard/task/MonitorTask.java | 2 +- .../rocketmq/dashboard/util/ExcelUtil.java | 6 +- .../rocketmq/dashboard/util/JsonUtil.java | 39 +-- .../rocketmq/dashboard/util/WebUtil.java | 2 +- src/main/resources/logback.xml | 56 ++-- src/main/resources/users.properties | 9 +- 85 files changed, 1012 insertions(+), 906 deletions(-) delete mode 100644 src/main/java/org/apache/rocketmq/dashboard/admin/MQAdminExtCallback.java diff --git a/frontend-new/README.md b/frontend-new/README.md index 58beeac..ffde571 100644 --- a/frontend-new/README.md +++ b/frontend-new/README.md @@ -6,19 +6,14 @@ This project was bootstrapped with [Create React App](https://github.com/faceboo In the project directory, you can run: -### `npm start` +### `npm run start` Runs the app in the development mode.\ -Open [http://localhost:3000](http://localhost:3000) to view it in your browser. +Open [http://localhost:3003](http://localhost:3000) to view it in your browser. The page will reload when you make changes.\ You may also see any lint errors in the console. -### `npm test` - -Launches the test runner in the interactive watch mode.\ -See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. - ### `npm run build` Builds the app for production to the `build` folder.\ diff --git a/frontend-new/public/index.html b/frontend-new/public/index.html index a09cb89..2208f39 100644 --- a/frontend-new/public/index.html +++ b/frontend-new/public/index.html @@ -18,13 +18,13 @@ - - - - - - - RocketMQ Dashboard + + + + + + + RocketMQ Dashboard diff --git a/frontend-new/src/App.jsx b/frontend-new/src/App.jsx index fdb5e8c..ebe402b 100644 --- a/frontend-new/src/App.jsx +++ b/frontend-new/src/App.jsx @@ -17,19 +17,19 @@ import React from 'react'; import AppRouter from './router'; // 你 router/index.jsx 导出的组件 -import { ToastContainer } from 'react-toastify'; +import {ToastContainer} from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; import {ConfigProvider} from "antd"; import {useTheme} from "./store/context/ThemeContext"; function App() { - const {currentTheme} = useTheme(); + const {currentTheme} = useTheme(); return ( <> - - + + ); diff --git a/frontend-new/src/App.test.js b/frontend-new/src/App.test.js index 39bbcbd..d99e39e 100644 --- a/frontend-new/src/App.test.js +++ b/frontend-new/src/App.test.js @@ -15,11 +15,11 @@ * limitations under the License. */ -import { render, screen } from '@testing-library/react'; +import {render, screen} from '@testing-library/react'; import App from './App'; test('renders learn react link', () => { - render(); - const linkElement = screen.getByText(/learn react/i); - expect(linkElement).toBeInTheDocument(); + render(); + const linkElement = screen.getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); }); diff --git a/frontend-new/src/components/DlqMessageDetailViewDialog.jsx b/frontend-new/src/components/DlqMessageDetailViewDialog.jsx index cb109cd..bef6fcd 100644 --- a/frontend-new/src/components/DlqMessageDetailViewDialog.jsx +++ b/frontend-new/src/components/DlqMessageDetailViewDialog.jsx @@ -16,20 +16,20 @@ */ import React from 'react'; -import { Form, Input, Typography, Modal } from 'antd'; +import {Form, Input, Typography} from 'antd'; import moment from 'moment'; -import { useLanguage } from '../i18n/LanguageContext'; // 根据实际路径调整 +import {useLanguage} from '../i18n/LanguageContext'; // 根据实际路径调整 -const { Text } = Typography; +const {Text} = Typography; -const DlqMessageDetailViewDialog = ({ ngDialogData }) => { - const { t } = useLanguage(); +const DlqMessageDetailViewDialog = ({ngDialogData}) => { + const {t} = useLanguage(); const messageView = ngDialogData?.messageView || {}; return ( -
-
+
+ {messageView.msgId} @@ -39,7 +39,7 @@ const DlqMessageDetailViewDialog = ({ ngDialogData }) => { @@ -61,7 +61,7 @@ const DlqMessageDetailViewDialog = ({ ngDialogData }) => { diff --git a/frontend-new/src/components/MessageDetailViewDialog.jsx b/frontend-new/src/components/MessageDetailViewDialog.jsx index 09c72d4..144c3c6 100644 --- a/frontend-new/src/components/MessageDetailViewDialog.jsx +++ b/frontend-new/src/components/MessageDetailViewDialog.jsx @@ -16,16 +16,16 @@ */ import React from 'react'; -import { Modal, Button, Typography, Descriptions, Tag, Spin, notification } from 'antd'; +import {Button, Descriptions, Modal, notification, Spin, Tag, Typography} from 'antd'; import moment from 'moment'; -import { ExclamationCircleOutlined, SyncOutlined } from '@ant-design/icons'; -import { useLanguage } from '../i18n/LanguageContext'; -import { remoteApi } from '../api/remoteApi/remoteApi'; // 确保这个路径正确 +import {SyncOutlined} from '@ant-design/icons'; +import {useLanguage} from '../i18n/LanguageContext'; +import {remoteApi} from '../api/remoteApi/remoteApi'; // 确保这个路径正确 -const { Text, Paragraph } = Typography; +const {Text, Paragraph} = Typography; -const MessageDetailViewDialog = ({ visible, onCancel, messageId, topic, onResendMessage }) => { - const { t } = useLanguage(); +const MessageDetailViewDialog = ({visible, onCancel, messageId, topic, onResendMessage}) => { + const {t} = useLanguage(); const [loading, setLoading] = React.useState(true); const [messageDetail, setMessageDetail] = React.useState(null); const [error, setError] = React.useState(null); @@ -89,17 +89,21 @@ const MessageDetailViewDialog = ({ visible, onCancel, messageId, topic, onResend > {error && ( - + {error} )} {messageDetail ? ( // 确保 messageDetail 存在时才渲染内容 <> {/* 消息信息部分 */} - {t.MESSAGE_INFO}} bordered column={2} size="small" style={{ marginBottom: 20 }}> - {messageDetail.messageView.topic} - {messageDetail.messageView.msgId} - {messageDetail.messageView.storeHost} + {t.MESSAGE_INFO}} bordered column={2} size="small" + style={{marginBottom: 20}}> + {messageDetail.messageView.topic} + {messageDetail.messageView.msgId} + {messageDetail.messageView.storeHost} {messageDetail.messageView.bornHost} {moment(messageDetail.messageView.storeTimestamp).format("YYYY-MM-DD HH:mm:ss")} @@ -108,26 +112,33 @@ const MessageDetailViewDialog = ({ visible, onCancel, messageId, topic, onResend {moment(messageDetail.messageView.bornTimestamp).format("YYYY-MM-DD HH:mm:ss")} {messageDetail.messageView.queueId} - {messageDetail.messageView.queueOffset} - {messageDetail.messageView.storeSize} bytes - {messageDetail.messageView.reconsumeTimes} + {messageDetail.messageView.queueOffset} + {messageDetail.messageView.storeSize} bytes + {messageDetail.messageView.reconsumeTimes} {messageDetail.messageView.bodyCRC} {messageDetail.messageView.sysFlag} {messageDetail.messageView.flag} - {messageDetail.messageView.preparedTransactionOffset} + {messageDetail.messageView.preparedTransactionOffset} {/* 消息属性部分 */} {Object.keys(messageDetail.messageView.properties).length > 0 && ( - {t.MESSAGE_PROPERTIES}} bordered column={1} size="small" style={{ marginBottom: 20 }}> + {t.MESSAGE_PROPERTIES}} bordered column={1} + size="small" style={{marginBottom: 20}}> {Object.entries(messageDetail.messageView.properties).map(([key, value]) => ( - {value} + {value} ))} )} {/* 消息体部分 */} - {t.MESSAGE_BODY}} bordered column={1} size="small" style={{ marginBottom: 20 }}> + {t.MESSAGE_BODY}} bordered column={1} size="small" + style={{marginBottom: 20}}> 0 ? ( <> {t.MESSAGE_TRACKING} -
+
{messageDetail.messageTrackList.map((track, index) => ( - + {track.consumerGroup} @@ -165,10 +177,10 @@ const MessageDetailViewDialog = ({ visible, onCancel, messageId, topic, onResend @@ -181,7 +193,10 @@ const MessageDetailViewDialog = ({ visible, onCancel, messageId, topic, onResend ellipsis={{ rows: 2, // 默认显示2行 expandable: true, - symbol: {t.READ_MORE}, // 蓝色展开文本 + symbol: {t.READ_MORE}, // 蓝色展开文本 }} > {track.exceptionDesc} @@ -198,7 +213,8 @@ const MessageDetailViewDialog = ({ visible, onCancel, messageId, topic, onResend ) : ( // 当 messageDetail 为 null 时,可以显示一个占位符或者不显示内容 - !loading && !error && {t.NO_MESSAGE_DETAIL_AVAILABLE} + !loading && !error && + {t.NO_MESSAGE_DETAIL_AVAILABLE} )} diff --git a/frontend-new/src/components/MessageTraceDetailViewDialog.jsx b/frontend-new/src/components/MessageTraceDetailViewDialog.jsx index f3b09da..9477a4b 100644 --- a/frontend-new/src/components/MessageTraceDetailViewDialog.jsx +++ b/frontend-new/src/components/MessageTraceDetailViewDialog.jsx @@ -15,15 +15,15 @@ * limitations under the License. */ -import React, { useEffect, useRef } from 'react'; -import { Form, Input, Typography, Collapse, Table, Tag } from 'antd'; +import React, {useEffect, useRef} from 'react'; +import {Collapse, Form, Input, Table, Tag, Typography} from 'antd'; import moment from 'moment'; -import { useLanguage } from '../i18n/LanguageContext'; +import {useLanguage} from '../i18n/LanguageContext'; import Paragraph from "antd/es/skeleton/Paragraph"; import * as echarts from 'echarts'; // Import ECharts -const { Text } = Typography; -const { Panel } = Collapse; +const {Text} = Typography; +const {Panel} = Collapse; // Constants for styling and formatting, derived from the example const SUCCESS_COLOR = '#75d874'; @@ -36,8 +36,8 @@ const TIME_FORMAT_PATTERN = "YYYY-MM-DD HH:mm:ss.SSS"; const DEFAULT_DISPLAY_DURATION = 10 * 1000; const TRANSACTION_CHECK_COST_TIME = 50; // transactionTraceNode do not have costTime, assume it cost 50ms -const MessageTraceDetailViewDialog = ({ ngDialogData }) => { - const { t } = useLanguage(); +const MessageTraceDetailViewDialog = ({ngDialogData}) => { + const {t} = useLanguage(); const messageTraceGraphRef = useRef(null); const producerNode = ngDialogData?.producerNode; @@ -125,6 +125,7 @@ const MessageTraceDetailViewDialog = ({ ngDialogData }) => { } return `Cost Time: ${formatCostTimeStr(costTime)}
` } + function buildTimeStamp(timestamp) { if (timestamp < 0) { return 'N/A'; @@ -323,94 +324,181 @@ const MessageTraceDetailViewDialog = ({ ngDialogData }) => { // ... (rest of your existing component code) const transactionColumns = [ - { title: t.TIMESTAMP, dataIndex: 'beginTimestamp', key: 'beginTimestamp', align: 'center', render: (text) => moment(text).format('YYYY-MM-DD HH:mm:ss.SSS') }, - { title: t.TRANSACTION_STATE, dataIndex: 'transactionState', key: 'transactionState', align: 'center', render: (text) => {text} }, - { title: t.FROM_TRANSACTION_CHECK, dataIndex: 'fromTransactionCheck', key: 'fromTransactionCheck', align: 'center', render: (text) => (text ? {t.YES} : {t.NO}) }, - { title: t.CLIENT_HOST, dataIndex: 'clientHost', key: 'clientHost', align: 'center' }, - { title: t.STORE_HOST, dataIndex: 'storeHost', key: 'storeHost', align: 'center' }, + { + title: t.TIMESTAMP, + dataIndex: 'beginTimestamp', + key: 'beginTimestamp', + align: 'center', + render: (text) => moment(text).format('YYYY-MM-DD HH:mm:ss.SSS') + }, + { + title: t.TRANSACTION_STATE, + dataIndex: 'transactionState', + key: 'transactionState', + align: 'center', + render: (text) => {text} + }, + { + title: t.FROM_TRANSACTION_CHECK, + dataIndex: 'fromTransactionCheck', + key: 'fromTransactionCheck', + align: 'center', + render: (text) => (text ? {t.YES} : {t.NO}) + }, + {title: t.CLIENT_HOST, dataIndex: 'clientHost', key: 'clientHost', align: 'center'}, + {title: t.STORE_HOST, dataIndex: 'storeHost', key: 'storeHost', align: 'center'}, ]; const consumeColumns = [ - { title: t.BEGIN_TIMESTAMP, dataIndex: 'beginTimestamp', key: 'beginTimestamp', align: 'center', render: (text) => text < 0 ? 'N/A' : moment(text).format('YYYY-MM-DD HH:mm:ss.SSS') }, - { title: t.END_TIMESTAMP, dataIndex: 'endTimestamp', key: 'endTimestamp', align: 'center', render: (text) => text < 0 ? 'N/A' : moment(text).format('YYYY-MM-DD HH:mm:ss.SSS') }, - { title: t.COST_TIME, dataIndex: 'costTime', key: 'costTime', align: 'center', render: (text) => text < 0 ? 'N/A' : `${text === 0 ? '<1' : text}ms` }, - { title: t.STATUS, dataIndex: 'status', key: 'status', align: 'center', render: (text) => {text} }, - { title: t.RETRY_TIMES, dataIndex: 'retryTimes', key: 'retryTimes', align: 'center', render: (text) => text < 0 ? 'N/A' : text }, - { title: t.CLIENT_HOST, dataIndex: 'clientHost', key: 'clientHost', align: 'center' }, - { title: t.STORE_HOST, dataIndex: 'storeHost', key: 'storeHost', align: 'center' }, + { + title: t.BEGIN_TIMESTAMP, + dataIndex: 'beginTimestamp', + key: 'beginTimestamp', + align: 'center', + render: (text) => text < 0 ? 'N/A' : moment(text).format('YYYY-MM-DD HH:mm:ss.SSS') + }, + { + title: t.END_TIMESTAMP, + dataIndex: 'endTimestamp', + key: 'endTimestamp', + align: 'center', + render: (text) => text < 0 ? 'N/A' : moment(text).format('YYYY-MM-DD HH:mm:ss.SSS') + }, + { + title: t.COST_TIME, + dataIndex: 'costTime', + key: 'costTime', + align: 'center', + render: (text) => text < 0 ? 'N/A' : `${text === 0 ? '<1' : text}ms` + }, + { + title: t.STATUS, + dataIndex: 'status', + key: 'status', + align: 'center', + render: (text) => {text} + }, + { + title: t.RETRY_TIMES, + dataIndex: 'retryTimes', + key: 'retryTimes', + align: 'center', + render: (text) => text < 0 ? 'N/A' : text + }, + {title: t.CLIENT_HOST, dataIndex: 'clientHost', key: 'clientHost', align: 'center'}, + {title: t.STORE_HOST, dataIndex: 'storeHost', key: 'storeHost', align: 'center'}, ]; return ( -
-
+
+
- {t.MESSAGE_TRACE_GRAPH}} key="messageTraceGraph"> -
+ {t.MESSAGE_TRACE_GRAPH}} key="messageTraceGraph"> +
{/* ECharts message trace graph will be rendered here */} {(!producerNode && subscriptionNodeList.length === 0) && ( - {t.TRACE_GRAPH_PLACEHOLDER} + {t.TRACE_GRAPH_PLACEHOLDER} )}
-
+
- {t.SEND_MESSAGE_TRACE}} key="sendMessageTrace"> + {t.SEND_MESSAGE_TRACE}} key="sendMessageTrace"> {!producerNode ? ( - {t.NO_PRODUCER_TRACE_DATA} + {t.NO_PRODUCER_TRACE_DATA} ) : ( -
- - {t.SEND_MESSAGE_INFO} : ( {t.MESSAGE_ID} {producerNode.msgId} ) +
+ + {t.SEND_MESSAGE_INFO} : ( {t.MESSAGE_ID} {producerNode.msgId} ) -
+
{t.TOPIC}}> - + {t.PRODUCER_GROUP}}> - + {t.MESSAGE_KEY}}> - + {t.TAG}}> - + {t.BEGIN_TIMESTAMP}}> - + {t.END_TIMESTAMP}}> - + {t.COST_TIME}}> - + {t.MSG_TYPE}}> - + {t.CLIENT_HOST}}> - + {t.STORE_HOST}}> - + {t.RETRY_TIMES}}> - + {t.OFFSET_MSG_ID}}> - +
{producerNode.transactionNodeList && producerNode.transactionNodeList.length > 0 && ( -
- {t.CHECK_TRANSACTION_INFO}: +
+ {t.CHECK_TRANSACTION_INFO}: { bordered pagination={false} size="middle" - scroll={{ x: 'max-content' }} + scroll={{x: 'max-content'}} /> )} @@ -428,22 +516,31 @@ const MessageTraceDetailViewDialog = ({ ngDialogData }) => { -
+
- {t.CONSUME_MESSAGE_TRACE}} key="consumeMessageTrace"> + {t.CONSUME_MESSAGE_TRACE}} key="consumeMessageTrace"> {subscriptionNodeList.length === 0 ? ( - {t.NO_CONSUMER_TRACE_DATA} + {t.NO_CONSUMER_TRACE_DATA} ) : ( -
+
{subscriptionNodeList.map(subscriptionNode => ( {t.SUBSCRIPTION_GROUP}: {subscriptionNode.subscriptionGroup}} + header={{t.SUBSCRIPTION_GROUP}: {subscriptionNode.subscriptionGroup}} key={subscriptionNode.subscriptionGroup} >
{ bordered pagination={false} size="middle" - scroll={{ x: 'max-content' }} + scroll={{x: 'max-content'}} /> diff --git a/frontend-new/src/components/Navbar.jsx b/frontend-new/src/components/Navbar.jsx index b718aee..befc4cd 100644 --- a/frontend-new/src/components/Navbar.jsx +++ b/frontend-new/src/components/Navbar.jsx @@ -16,29 +16,29 @@ */ import React, {useEffect, useState} from 'react'; -import { Layout, Menu, Dropdown, Button, Drawer, Grid, Space } from 'antd'; -import {GlobalOutlined, DownOutlined, UserOutlined, MenuOutlined, BgColorsOutlined} from '@ant-design/icons'; -import { useLocation, useNavigate } from 'react-router-dom'; -import { useLanguage } from '../i18n/LanguageContext'; +import {Button, Drawer, Dropdown, Grid, Layout, Menu, Space} from 'antd'; +import {BgColorsOutlined, DownOutlined, GlobalOutlined, MenuOutlined, UserOutlined} from '@ant-design/icons'; +import {useLocation, useNavigate} from 'react-router-dom'; +import {useLanguage} from '../i18n/LanguageContext'; import {useTheme} from "../store/context/ThemeContext"; import {remoteApi} from "../api/remoteApi/remoteApi"; -const { Header } = Layout; -const { useBreakpoint } = Grid; // Used to determine screen breakpoints +const {Header} = Layout; +const {useBreakpoint} = Grid; // Used to determine screen breakpoints -const Navbar = ({ rmqVersion = true, showAcl = true}) => { +const Navbar = ({rmqVersion = true, showAcl = true}) => { const location = useLocation(); const navigate = useNavigate(); - const { lang, setLang, t } = useLanguage(); + const {lang, setLang, t} = useLanguage(); const screens = useBreakpoint(); // Get current screen size breakpoints - const { currentThemeName, setCurrentThemeName } = useTheme(); + const {currentThemeName, setCurrentThemeName} = useTheme(); const [userName, setUserName] = useState(null); const [drawerVisible, setDrawerVisible] = useState(false); // Controls drawer visibility // Get selected menu item key based on current route path const getPath = () => location.pathname.replace('/', ''); - const handleMenuClick = ({ key }) => { + const handleMenuClick = ({key}) => { navigate(`/${key}`); setDrawerVisible(false); // Close drawer after clicking a menu item }; @@ -63,13 +63,13 @@ const Navbar = ({ rmqVersion = true, showAcl = true}) => { const storedUsername = window.localStorage.getItem("username"); if (storedUsername) { setUserName(storedUsername); - }else { + } else { setUserName(null); } }, []); const langMenu = ( - setLang(key)}> + setLang(key)}> {t.ENGLISH} {t.CHINESE} @@ -82,7 +82,7 @@ const Navbar = ({ rmqVersion = true, showAcl = true}) => { ); const themeMenu = ( - setCurrentThemeName(key)}> + setCurrentThemeName(key)}> {t.BLUE} ({t.DEFAULT}) {t.PINK} {t.GREEN} @@ -92,17 +92,17 @@ const Navbar = ({ rmqVersion = true, showAcl = true}) => { // Menu item configuration const menuItems = [ - { key: 'ops', label: t.OPS }, - ...(rmqVersion ? [{ key: 'proxy', label: t.PROXY }] : []), - { key: '', label: t.DASHBOARD }, // Dashboard corresponds to root path - { key: 'cluster', label: t.CLUSTER }, - { key: 'topic', label: t.TOPIC }, - { key: 'consumer', label: t.CONSUMER }, - { key: 'producer', label: t.PRODUCER }, - { key: 'message', label: t.MESSAGE }, - { key: 'dlqMessage', label: t.DLQ_MESSAGE }, - { key: 'messageTrace', label: t.MESSAGETRACE }, - ...(showAcl ? [{ key: 'acl', label: t.WHITE_LIST }] : []), + {key: 'ops', label: t.OPS}, + ...(rmqVersion ? [{key: 'proxy', label: t.PROXY}] : []), + {key: '', label: t.DASHBOARD}, // Dashboard corresponds to root path + {key: 'cluster', label: t.CLUSTER}, + {key: 'topic', label: t.TOPIC}, + {key: 'consumer', label: t.CONSUMER}, + {key: 'producer', label: t.PRODUCER}, + {key: 'message', label: t.MESSAGE}, + {key: 'dlqMessage', label: t.DLQ_MESSAGE}, + {key: 'messageTrace', label: t.MESSAGETRACE}, + ...(showAcl ? [{key: 'acl', label: t.ACL_MANAGEMENT}] : []), ]; // Determine if it's a small screen (e.g., less than md) @@ -120,7 +120,7 @@ const Navbar = ({ rmqVersion = true, showAcl = true}) => { padding: isExtraSmallScreen ? '0 16px' : '0 24px', // Smaller padding on extra small screens }} > -
+
{ mode="horizontal" items={menuItems} theme="dark" // Use dark theme to match Header background - style={{ flex: 1, minWidth: 0 }} // Allow menu items to adapt width + style={{flex: 1, minWidth: 0}} // Allow menu items to adapt width /> )}
- {/* Adjust spacing for buttons */} + {/* Adjust spacing for buttons */} {/* Theme switch button */} - - {userName && ( {/* 使用一个可点击的元素作为 Dropdown 的唯一子元素 */} - e.preventDefault()} style={{ display: 'flex', alignItems: 'center' }}> - {/* 添加一些间距 */} + e.preventDefault()} style={{display: 'flex', alignItems: 'center'}}> + {/* 添加一些间距 */} {userName} - + )} @@ -175,9 +175,9 @@ const Navbar = ({ rmqVersion = true, showAcl = true}) => { {isSmallScreen && ( // Display hamburger icon on small screens , ]} > -
+
{ +const ResetOffsetResultDialog = ({visible, onClose, result, t}) => { return ( { ]} > {result && Object.entries(result).map(([groupName, groupData]) => ( -
+
{
You Should Check It Yourself
) : (
({ key: index, item }))} - columns={[{ dataIndex: 'item', key: 'item' }]} + dataSource={groupData.rollbackStatsList.map((item, index) => ({key: index, item}))} + columns={[{dataIndex: 'item', key: 'item'}]} pagination={false} rowKey="key" size="small" diff --git a/frontend-new/src/components/topic/RouterViewDialog.jsx b/frontend-new/src/components/topic/RouterViewDialog.jsx index aebb899..59546cc 100644 --- a/frontend-new/src/components/topic/RouterViewDialog.jsx +++ b/frontend-new/src/components/topic/RouterViewDialog.jsx @@ -15,10 +15,10 @@ * limitations under the License. */ -import { Button, Modal, Table } from "antd"; +import {Button, Modal, Table} from "antd"; import React from "react"; -const RouterViewDialog = ({ visible, onClose, topic, routeData, t }) => { +const RouterViewDialog = ({visible, onClose, topic, routeData, t}) => { const brokerColumns = [ { title: 'Broker', @@ -30,10 +30,14 @@ const RouterViewDialog = ({ visible, onClose, topic, routeData, t }) => { key: 'brokerAddrs', render: (_, record) => (
({ key, idx: key, address: value }))} + dataSource={Object.entries(record.brokerAddrs || []).map(([key, value]) => ({ + key, + idx: key, + address: value + }))} columns={[ - { title: 'Index', dataIndex: 'idx', key: 'idx' }, - { title: 'Address', dataIndex: 'address', key: 'address' }, + {title: 'Index', dataIndex: 'idx', key: 'idx'}, + {title: 'Address', dataIndex: 'address', key: 'address'}, ]} pagination={false} bordered @@ -82,7 +86,7 @@ const RouterViewDialog = ({ visible, onClose, topic, routeData, t }) => {

Broker Datas:

{routeData?.brokerDatas?.map((item, index) => ( -
+
{ ))} -
+

{t.QUEUE_DATAS}:

{ +const SendResultDialog = ({visible, onClose, result, t}) => { return ( { : [] } columns={[ - { dataIndex: 'label', key: 'label' }, + {dataIndex: 'label', key: 'label'}, { dataIndex: 'value', key: 'value', - render: (text) =>
{text}
, + render: (text) =>
{text}
, }, ]} pagination={false} @@ -61,5 +61,4 @@ const SendResultDialog = ({ visible, onClose, result, t }) => { }; - export default SendResultDialog; diff --git a/frontend-new/src/components/topic/SendTopicMessageDialog.jsx b/frontend-new/src/components/topic/SendTopicMessageDialog.jsx index 002634d..5efaefc 100644 --- a/frontend-new/src/components/topic/SendTopicMessageDialog.jsx +++ b/frontend-new/src/components/topic/SendTopicMessageDialog.jsx @@ -76,24 +76,24 @@ const SendTopicMessageDialog = ({ , ]} > - + - + - + - + - + - +
diff --git a/frontend-new/src/components/topic/SkipMessageAccumulateDialog.jsx b/frontend-new/src/components/topic/SkipMessageAccumulateDialog.jsx index cd28a6e..4d6e045 100644 --- a/frontend-new/src/components/topic/SkipMessageAccumulateDialog.jsx +++ b/frontend-new/src/components/topic/SkipMessageAccumulateDialog.jsx @@ -15,10 +15,17 @@ * limitations under the License. */ -import { Button, Form, message, Modal, Select } from "antd"; -import React, { useEffect, useState } from "react"; +import {Button, Form, message, Modal, Select} from "antd"; +import React, {useEffect, useState} from "react"; -const SkipMessageAccumulateDialog = ({ visible, onClose, topic, allConsumerGroupList, handleSkipMessageAccumulate, t }) => { +const SkipMessageAccumulateDialog = ({ + visible, + onClose, + topic, + allConsumerGroupList, + handleSkipMessageAccumulate, + t + }) => { const [form] = Form.useForm(); const [selectedConsumerGroup, setSelectedConsumerGroup] = useState([]); @@ -52,14 +59,14 @@ const SkipMessageAccumulateDialog = ({ visible, onClose, topic, allConsumerGroup , ]} > - + ({value: name, label: name}))} + /> + + + ({ value: name, label: name }))} - /> + + + + + + + + + + + + {!initialData.sysFlag && writeOperationEnabled && ( + + - - - - - - - - - - - - - {!initialData.sysFlag && writeOperationEnabled && ( - - - - )} - - - - + )} + + + + ); }; diff --git a/frontend-new/src/i18n/LanguageContext.js b/frontend-new/src/i18n/LanguageContext.js index cc8f982..96592da 100644 --- a/frontend-new/src/i18n/LanguageContext.js +++ b/frontend-new/src/i18n/LanguageContext.js @@ -15,20 +15,21 @@ * limitations under the License. */ -import React, { createContext, useState, useContext } from 'react'; -import { translations } from '../i18n'; +import React, {createContext, useContext, useState} from 'react'; +import {translations} from '../i18n'; const LanguageContext = createContext({ lang: 'en', - setLang: () => {}, + setLang: () => { + }, t: translations['en'], // 当前语言的文本资源 }); -export const LanguageProvider = ({ children }) => { +export const LanguageProvider = ({children}) => { const [lang, setLang] = useState('en'); const t = translations[lang] || translations['en']; return ( - + {children} ); diff --git a/frontend-new/src/i18n/index.js b/frontend-new/src/i18n/index.js index dfede17..612af61 100644 --- a/frontend-new/src/i18n/index.js +++ b/frontend-new/src/i18n/index.js @@ -47,10 +47,10 @@ export const translations = { "FETCH_TOPIC_FAILED": "获取主题列表失败", "CONFIRM_DELETE": "确认删除", "CANCEL": "取消", - "SELECT_DELETE_BROKERS":"请选择在哪个Broker删除消费者组", - "DELETE_CONSUMER_GROUP":"删除消费者组", + "SELECT_DELETE_BROKERS": "请选择在哪个Broker删除消费者组", + "DELETE_CONSUMER_GROUP": "删除消费者组", "ENGLISH": "英文", - "ADD_CONSUMER":"添加消费者", + "ADD_CONSUMER": "添加消费者", "CHINESE": "简体中文", "CANNOT_BE_EMPTY": "不能为空", "TITLE": "RocketMQ仪表板", @@ -70,16 +70,16 @@ export const translations = { "CLUSTER_DETAIL": "集群详情", "COMMIT": "提交", "TOPIC": "主题", - "SUBSCRIPTION_GROUP":"订阅组", - "PRODUCER_GROUP":"生产组", - "CONSUMER":"消费者", - "PRODUCER":"生产者", - "MESSAGE":"消息", - "MESSAGE_DETAIL":"消息详情", - "RESEND_MESSAGE":"重新发送", - "VIEW_EXCEPTION":"查看异常", - "DLQ_MESSAGE":"死信消息", - "MESSAGETRACE":"消息轨迹", + "SUBSCRIPTION_GROUP": "订阅组", + "PRODUCER_GROUP": "生产组", + "CONSUMER": "消费者", + "PRODUCER": "生产者", + "MESSAGE": "消息", + "MESSAGE_DETAIL": "消息详情", + "RESEND_MESSAGE": "重新发送", + "VIEW_EXCEPTION": "查看异常", + "DLQ_MESSAGE": "死信消息", + "MESSAGETRACE": "消息轨迹", "OPERATION": "操作", "ADD": "新增", "UPDATE": "更新", @@ -89,7 +89,7 @@ export const translations = { "CONFIG": "配置", "SEND_MSG": "发送消息", "RESET_CUS_OFFSET": "重置消费位点", - "SKIP_MESSAGE_ACCUMULATE":"跳过堆积", + "SKIP_MESSAGE_ACCUMULATE": "跳过堆积", "DELETE": "删除", "CHANGE_LANG": "更换语言", "CHANGE_VERSION": "更换版本", @@ -100,73 +100,72 @@ export const translations = { "TRANSACTION": "事务", "UNSPECIFIED": "未指定", "DLQ": "死信", - "QUANTITY":"数量", - "TYPE":"类型", - "MODE":"模式", - "DELAY":"延迟", - "DASHBOARD":"驾驶舱", - "CONSUME_DETAIL":"消费详情", - "CLIENT":"终端", - "LAST_CONSUME_TIME":"最后消费时间", - "TIME":"时间点", - "RESET":"重置", - "DATE":"日期", - "NO_DATA":"暂无数据", - "SEARCH":"搜索", - "BEGIN":"开始", - "END":"结束", - "TOPIC_CHANGE":"修改主题", - "SEND":"发送", - "SUBSCRIPTION_CHANGE":"修改订阅", - "QUEUE":"队列", - "MIN_OFFSET":"最小位点", - "MAX_OFFSET":"最大位点", - "LAST_UPDATE_TIME_STAMP":"上次更新时间", - "QUEUE_DATAS":"队列信息", - "READ_QUEUE_NUMS":"读队列数量", - "WRITE_QUEUE_NUMS":"写队列数量", - "PERM":"perm", - "TAG":"标签", - "KEY":"值", - "MESSAGE_BODY":"消息主体", - "TOPIC_NAME":"主题名", - "ORDER":"顺序", - "CONSUMER_CLIENT":"消费者终端", - "BROKER_OFFSET":"代理者位点", - "CONSUMER_OFFSET":"消费者位点", - "DIFF_TOTAL":"差值", - "LAST_TIME_STAMP":"上次时间", - "RESET_OFFSET":"重置位点", - "CLUSTER_NAME":"集群名", - "OPS":"运维", - "PROXY":"代理", - "AUTO_REFRESH":"自动刷新", - "REFRESH":"刷新", - "LOGOUT":"退出", - "LOGIN":"登录", - "USER_NAME":"用户名", - "PASSWORD":"密码", - "SYSTEM":"系统", - "WELCOME":"您好,欢迎使用RocketMQ仪表盘", - "ENABLE_MESSAGE_TRACE":"开启消息轨迹", - "MESSAGE_TRACE_DETAIL":"消息轨迹详情", - "TRACE_TOPIC":"消息轨迹主题", - "SELECT_TRACE_TOPIC":"选择消息轨迹主题", + "QUANTITY": "数量", + "TYPE": "类型", + "MODE": "模式", + "DELAY": "延迟", + "DASHBOARD": "驾驶舱", + "CONSUME_DETAIL": "消费详情", + "CLIENT": "终端", + "LAST_CONSUME_TIME": "最后消费时间", + "TIME": "时间点", + "RESET": "重置", + "DATE": "日期", + "NO_DATA": "暂无数据", + "SEARCH": "搜索", + "BEGIN": "开始", + "END": "结束", + "TOPIC_CHANGE": "修改主题", + "SEND": "发送", + "SUBSCRIPTION_CHANGE": "修改订阅", + "QUEUE": "队列", + "MIN_OFFSET": "最小位点", + "MAX_OFFSET": "最大位点", + "LAST_UPDATE_TIME_STAMP": "上次更新时间", + "QUEUE_DATAS": "队列信息", + "READ_QUEUE_NUMS": "读队列数量", + "WRITE_QUEUE_NUMS": "写队列数量", + "PERM": "perm", + "TAG": "标签", + "KEY": "值", + "MESSAGE_BODY": "消息主体", + "TOPIC_NAME": "主题名", + "ORDER": "顺序", + "CONSUMER_CLIENT": "消费者终端", + "BROKER_OFFSET": "代理者位点", + "CONSUMER_OFFSET": "消费者位点", + "DIFF_TOTAL": "差值", + "LAST_TIME_STAMP": "上次时间", + "RESET_OFFSET": "重置位点", + "CLUSTER_NAME": "集群名", + "OPS": "运维", + "PROXY": "代理", + "AUTO_REFRESH": "自动刷新", + "REFRESH": "刷新", + "LOGOUT": "退出", + "LOGIN": "登录", + "USER_NAME": "用户名", + "PASSWORD": "密码", + "SYSTEM": "系统", + "WELCOME": "您好,欢迎使用RocketMQ仪表盘", + "ENABLE_MESSAGE_TRACE": "开启消息轨迹", + "MESSAGE_TRACE_DETAIL": "消息轨迹详情", + "TRACE_TOPIC": "消息轨迹主题", + "SELECT_TRACE_TOPIC": "选择消息轨迹主题", "EXPORT": "导出", "NO_MATCH_RESULT": "没有查到符合条件的结果", "BATCH_RESEND": "批量重发", "BATCH_EXPORT": "批量导出", - "WHITE_LIST":"白名单", - "ACCOUNT_INFO":"账户信息", - "IS_ADMIN":"是否管理员", - "DEFAULT_TOPIC_PERM":"topic默认权限", - "DEFAULT_GROUP_PERM":"消费组默认权限", - "TOPIC_PERM":"topic权限", - "GROUP_PERM":"消费组权限", - "SYNCHRONIZE":"同步", - "SHOW":"显示", - "HIDE":"隐藏", - "MESSAGE_TYPE":"消息类型", + "ACCOUNT_INFO": "账户信息", + "IS_ADMIN": "是否管理员", + "DEFAULT_TOPIC_PERM": "topic默认权限", + "DEFAULT_GROUP_PERM": "消费组默认权限", + "TOPIC_PERM": "topic权限", + "GROUP_PERM": "消费组权限", + "SYNCHRONIZE": "同步", + "SHOW": "显示", + "HIDE": "隐藏", + "MESSAGE_TYPE": "消息类型", "MESSAGE_TYPE_UNSPECIFIED": "未指定,为普通消息", "MESSAGE_TYPE_NORMAL": "普通消息", "MESSAGE_TYPE_FIFO": "顺序消息", @@ -294,7 +293,7 @@ export const translations = { "SELECT_TOPIC_PLACEHOLDER": "Please select topic", "MESSAGE_ID_TOPIC_HINT": "Message ID Topic", "TOPIC_ADD": "Add Topic", - "SKIP_MESSAGE_ACCUMULATE":"Skip Message Accumulate", + "SKIP_MESSAGE_ACCUMULATE": "Skip Message Accumulate", "OPERATION_FAILED": "Operation Failed", "FORM_VALIDATION_FAILED": "Form Validation Failed", "ADD_CONSUMER": "Add Consumer", @@ -325,7 +324,7 @@ export const translations = { "ADDRESS": "Address", "VERSION": "Version", "PRO_MSG_TPS": "Produce Message TPS", - "CUS_MSG_TPS": "Consume Message TPS", + "CUS_MSG_TPS": "Consumer Message TPS", "YESTERDAY_PRO_COUNT": "Yesterday Produce Count", "YESTERDAY_CUS_COUNT": "Yesterday Consume Count", "TODAY_PRO_COUNT": "Today Produce Count", @@ -335,16 +334,16 @@ export const translations = { "CLUSTER": "Cluster", "CLUSTER_DETAIL": "Cluster Detail", "TOPIC": "Topic", - "SUBSCRIPTION_GROUP":"SubscriptionGroup", - "PRODUCER_GROUP":"ProducerGroup", - "CONSUMER":"Consumer", - "PRODUCER":"Producer", - "MESSAGE":"Message", - "MESSAGE_DETAIL":"Message Detail", - "RESEND_MESSAGE":"Resend Message", - "VIEW_EXCEPTION":"View Exception", - "MESSAGETRACE":"MessageTrace", - "DLQ_MESSAGE":"DLQMessage", + "SUBSCRIPTION_GROUP": "SubscriptionGroup", + "PRODUCER_GROUP": "ProducerGroup", + "CONSUMER": "Consumer", + "PRODUCER": "Producer", + "MESSAGE": "Message", + "MESSAGE_DETAIL": "Message Detail", + "RESEND_MESSAGE": "Resend Message", + "VIEW_EXCEPTION": "View Exception", + "MESSAGETRACE": "MessageTrace", + "DLQ_MESSAGE": "DLQMessage", "COMMIT": "Commit", "OPERATION": "Operation", "ADD": "Add", @@ -365,73 +364,72 @@ export const translations = { "TRANSACTION": "TRANSACTION", "UNSPECIFIED": "UNSPECIFIED", "DLQ": "DLQ", - "QUANTITY":"Quantity", - "TYPE":"Type", - "MODE":"Mode", - "DELAY":"Delay", - "DASHBOARD":"Dashboard", - "CONSUME_DETAIL":"CONSUME DETAIL", - "CLIENT":"CLIENT", - "LAST_CONSUME_TIME":"LastConsumeTime", - "TIME":"Time", - "RESET":"RESET", - "DATE":"Date", - "NO_DATA":"NO DATA", - "SEARCH":"Search", - "BEGIN":"Begin", - "END":"End", - "TOPIC_CHANGE":"Topic Change", - "SEND":"Send", - "SUBSCRIPTION_CHANGE":"Subscription Change", - "QUEUE":"Queue", - "MIN_OFFSET":"minOffset", - "MAX_OFFSET":"maxOffset", - "LAST_UPDATE_TIME_STAMP":"lastUpdateTimeStamp", - "QUEUE_DATAS":"queueDatas", - "READ_QUEUE_NUMS":"readQueueNums", - "WRITE_QUEUE_NUMS":"writeQueueNums", - "PERM":"perm", - "TAG":"Tag", - "KEY":"Key", - "MESSAGE_BODY":"Message Body", - "TOPIC_NAME":"topicName", - "ORDER":"order", - "CONSUMER_CLIENT":"consumerClient", - "BROKER_OFFSET":"brokerOffset", - "CONSUMER_OFFSET":"consumerOffset", - "DIFF_TOTAL":"diffTotal", - "LAST_TIME_STAMP":"lastTimeStamp", - "RESET_OFFSET":"resetOffset", - "CLUSTER_NAME":"clusterName", - "OPS":"OPS", - "PROXY":"Proxy", - "AUTO_REFRESH":"AUTO_REFRESH", - "REFRESH":"REFRESH", - "LOGOUT":"Logout", - "LOGIN":"Login", - "USER_NAME":"Username", - "PASSWORD":"Password", - "SYSTEM":"SYSTEM", - "WELCOME":"Hi, welcome using RocketMQ Dashboard", - "ENABLE_MESSAGE_TRACE":"Enable Message Trace", - "MESSAGE_TRACE_DETAIL":"Message Trace Detail", - "TRACE_TOPIC":"TraceTopic", - "SELECT_TRACE_TOPIC":"selectTraceTopic", + "QUANTITY": "Quantity", + "TYPE": "Type", + "MODE": "Mode", + "DELAY": "Delay", + "DASHBOARD": "Dashboard", + "CONSUME_DETAIL": "CONSUME DETAIL", + "CLIENT": "CLIENT", + "LAST_CONSUME_TIME": "LastConsumeTime", + "TIME": "Time", + "RESET": "RESET", + "DATE": "Date", + "NO_DATA": "NO DATA", + "SEARCH": "Search", + "BEGIN": "Begin", + "END": "End", + "TOPIC_CHANGE": "Topic Change", + "SEND": "Send", + "SUBSCRIPTION_CHANGE": "Subscription Change", + "QUEUE": "Queue", + "MIN_OFFSET": "minOffset", + "MAX_OFFSET": "maxOffset", + "LAST_UPDATE_TIME_STAMP": "lastUpdateTimeStamp", + "QUEUE_DATAS": "queueDatas", + "READ_QUEUE_NUMS": "readQueueNums", + "WRITE_QUEUE_NUMS": "writeQueueNums", + "PERM": "perm", + "TAG": "Tag", + "KEY": "Key", + "MESSAGE_BODY": "Message Body", + "TOPIC_NAME": "topicName", + "ORDER": "order", + "CONSUMER_CLIENT": "consumerClient", + "BROKER_OFFSET": "brokerOffset", + "CONSUMER_OFFSET": "consumerOffset", + "DIFF_TOTAL": "diffTotal", + "LAST_TIME_STAMP": "lastTimeStamp", + "RESET_OFFSET": "resetOffset", + "CLUSTER_NAME": "clusterName", + "OPS": "OPS", + "PROXY": "Proxy", + "AUTO_REFRESH": "AUTO_REFRESH", + "REFRESH": "REFRESH", + "LOGOUT": "Logout", + "LOGIN": "Login", + "USER_NAME": "Username", + "PASSWORD": "Password", + "SYSTEM": "SYSTEM", + "WELCOME": "Hi, welcome using RocketMQ Dashboard", + "ENABLE_MESSAGE_TRACE": "Enable Message Trace", + "MESSAGE_TRACE_DETAIL": "Message Trace Detail", + "TRACE_TOPIC": "TraceTopic", + "SELECT_TRACE_TOPIC": "selectTraceTopic", "EXPORT": "export", "NO_MATCH_RESULT": "no match result", "BATCH_RESEND": "batchReSend", "BATCH_EXPORT": "batchExport", - "WHITE_LIST":"White List", - "ACCOUNT_INFO":"Account Info", - "IS_ADMIN":"Is Admin", - "DEFAULT_TOPIC_PERM":"Default Topic Permission", - "DEFAULT_GROUP_PERM":"Default Group Permission", - "TOPIC_PERM":"Topic Permission", - "GROUP_PERM":"Group Permission", - "SYNCHRONIZE":"Synchronize Data", - "SHOW":"Show", - "HIDE":"Hide", - "MESSAGE_TYPE":"messageType", + "ACCOUNT_INFO": "Account Info", + "IS_ADMIN": "Is Admin", + "DEFAULT_TOPIC_PERM": "Default Topic Permission", + "DEFAULT_GROUP_PERM": "Default Group Permission", + "TOPIC_PERM": "Topic Permission", + "GROUP_PERM": "Group Permission", + "SYNCHRONIZE": "Synchronize Data", + "SHOW": "Show", + "HIDE": "Hide", + "MESSAGE_TYPE": "messageType", "MESSAGE_TYPE_UNSPECIFIED": "UNSPECIFIED, is NORMAL", "MESSAGE_TYPE_NORMAL": "NORMAL", "MESSAGE_TYPE_FIFO": "FIFO", diff --git a/frontend-new/src/index.css b/frontend-new/src/index.css index 7a51ec5..f5fcc89 100644 --- a/frontend-new/src/index.css +++ b/frontend-new/src/index.css @@ -16,15 +16,15 @@ */ body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace; } diff --git a/frontend-new/src/index.js b/frontend-new/src/index.js index 9e3d64a..6b6f01a 100644 --- a/frontend-new/src/index.js +++ b/frontend-new/src/index.js @@ -19,7 +19,7 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import App from './App'; -import { App as AntdApp } from 'antd'; +import {App as AntdApp} from 'antd'; import reportWebVitals from './reportWebVitals'; import {LanguageProvider} from "./i18n/LanguageContext"; import {Provider} from "react-redux"; @@ -27,17 +27,15 @@ import store from './store'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( - - + - ); // If you want to start measuring performance in your app, pass a function diff --git a/frontend-new/src/pages/Consumer/consumer.jsx b/frontend-new/src/pages/Consumer/consumer.jsx index d67efa8..63d461e 100644 --- a/frontend-new/src/pages/Consumer/consumer.jsx +++ b/frontend-new/src/pages/Consumer/consumer.jsx @@ -44,7 +44,7 @@ const ConsumerGroupList = () => { const [isAddConfig, setIsAddConfig] = useState(false); const [showDeleteModal, setShowDeleteModal] = useState(false); const [messageApi, msgContextHolder] = message.useMessage(); - const [notificationApi,notificationContextHolder] = notification.useNotification(); + const [notificationApi, notificationContextHolder] = notification.useNotification(); const [paginationConf, setPaginationConf] = useState({ current: 1, @@ -63,9 +63,9 @@ const ConsumerGroupList = () => { const response = await remoteApi.queryConsumerGroupList(false); if (response.status === 0) { setAllConsumerGroupList(response.data); - if(currentPage!=null){ + if (currentPage != null) { filterList(currentPage, response.data); - }else{ + } else { filterList(1, response.data); } } else { @@ -380,7 +380,7 @@ const ConsumerGroupList = () => { filterList(pagination.current, allConsumerGroupList); }; - const closeConfigModal = () =>{ + const closeConfigModal = () => { setShowConfig(false); setIsAddConfig(false); } diff --git a/frontend-new/src/pages/Login/login.jsx b/frontend-new/src/pages/Login/login.jsx index 0ff4db2..8e0f3db 100644 --- a/frontend-new/src/pages/Login/login.jsx +++ b/frontend-new/src/pages/Login/login.jsx @@ -16,17 +16,17 @@ */ import React from 'react'; -import { Form, Input, Button, message, Typography } from 'antd'; +import {Button, Form, Input, message, Typography} from 'antd'; import {remoteApi} from "../../api/remoteApi/remoteApi"; -const { Title } = Typography; +const {Title} = Typography; const Login = () => { const [form] = Form.useForm(); const [messageApi, msgContextHolder] = message.useMessage(); const onFinish = async (values) => { - const { username, password } = values; + const {username, password} = values; remoteApi.login(username, password).then((res) => { if (res.status === 0) { messageApi.success('登录成功'); diff --git a/frontend-new/src/pages/Ops/ops.jsx b/frontend-new/src/pages/Ops/ops.jsx index 246c590..79b562a 100644 --- a/frontend-new/src/pages/Ops/ops.jsx +++ b/frontend-new/src/pages/Ops/ops.jsx @@ -15,12 +15,12 @@ * limitations under the License. */ -import React, { useState, useEffect } from 'react'; -import { Select, Button, Switch, Input, Typography, Space, message } from 'antd'; +import React, {useEffect, useState} from 'react'; +import {Button, Input, message, Select, Space, Switch, Typography} from 'antd'; import {remoteApi} from '../../api/remoteApi/remoteApi'; -const { Title } = Typography; -const { Option } = Select; +const {Title} = Typography; +const {Option} = Select; const Ops = () => { const [namesrvAddrList, setNamesrvAddrList] = useState([]); diff --git a/frontend-new/src/pages/Proxy/proxy.jsx b/frontend-new/src/pages/Proxy/proxy.jsx index ab9a359..3dda85b 100644 --- a/frontend-new/src/pages/Proxy/proxy.jsx +++ b/frontend-new/src/pages/Proxy/proxy.jsx @@ -15,16 +15,16 @@ * limitations under the License. */ -import React, { useState, useEffect } from 'react'; -import { Modal, Button, Select, Input, Card, Row, Col, notification, Spin } from 'antd'; -import { useLanguage } from '../../i18n/LanguageContext'; -import { remoteApi } from "../../api/remoteApi/remoteApi"; +import React, {useEffect, useState} from 'react'; +import {Button, Card, Col, Input, Modal, notification, Row, Select, Spin} from 'antd'; +import {useLanguage} from '../../i18n/LanguageContext'; +import {remoteApi} from "../../api/remoteApi/remoteApi"; -const { Option } = Select; +const {Option} = Select; const ProxyManager = () => { - const { t } = useLanguage(); + const {t} = useLanguage(); const [loading, setLoading] = useState(false); const [proxyAddrList, setProxyAddrList] = useState([]); @@ -47,7 +47,7 @@ const ProxyManager = () => { remoteApi.queryProxyHomePage((resp) => { setLoading(false); if (resp.status === 0) { - const { proxyAddrList, currentProxyAddr } = resp.data; + const {proxyAddrList, currentProxyAddr} = resp.data; setProxyAddrList(proxyAddrList || []); setSelectedProxy(currentProxyAddr || (proxyAddrList && proxyAddrList.length > 0 ? proxyAddrList[0] : '')); @@ -58,7 +58,7 @@ const ProxyManager = () => { } } else { - notificationApi.error({ message: resp.errMsg || t.FETCH_PROXY_LIST_FAILED, duration: 2 }); + notificationApi.error({message: resp.errMsg || t.FETCH_PROXY_LIST_FAILED, duration: 2}); } }); }, [t]); @@ -71,7 +71,10 @@ const ProxyManager = () => { const handleAddProxyAddr = () => { if (!newProxyAddr.trim()) { - notificationApi.warning({ message: t.INPUT_PROXY_ADDR_REQUIRED || "Please input a new proxy address.", duration: 2 }); + notificationApi.warning({ + message: t.INPUT_PROXY_ADDR_REQUIRED || "Please input a new proxy address.", + duration: 2 + }); return; } setLoading(true); @@ -82,28 +85,28 @@ const ProxyManager = () => { setProxyAddrList(prevList => [...prevList, newProxyAddr.trim()]); } setNewProxyAddr(''); - notificationApi.info({ message: t.SUCCESS || "SUCCESS", duration: 2 }); + notificationApi.info({message: t.SUCCESS || "SUCCESS", duration: 2}); } else { - notificationApi.error({ message: resp.errMsg || t.ADD_PROXY_FAILED, duration: 2 }); + notificationApi.error({message: resp.errMsg || t.ADD_PROXY_FAILED, duration: 2}); } }); }; return ( -
+
+
ProxyServerAddressList
} bordered={false} > -
+ setNewProxyAddr(e.target.value)} placeholder={t.INPUT_PROXY_ADDR} @@ -149,25 +152,26 @@ const ProxyManager = () => { onCancel={() => setShowModal(false)} title={`${t.PROXY_CONFIG} [${selectedProxy}]`} footer={ -
+
} width={800} - bodyStyle={{ maxHeight: '60vh', overflowY: 'auto' }} + bodyStyle={{maxHeight: '60vh', overflowY: 'auto'}} > -
+
{Object.entries(allProxyConfig).length > 0 ? ( Object.entries(allProxyConfig).map(([key, value]) => ( - + )) ) : ( - + )} diff --git a/frontend-new/src/pages/Topic/topic.jsx b/frontend-new/src/pages/Topic/topic.jsx index aa41d0d..8a3abc9 100644 --- a/frontend-new/src/pages/Topic/topic.jsx +++ b/frontend-new/src/pages/Topic/topic.jsx @@ -173,7 +173,6 @@ const DeployHistoryList = () => { }; - const filterList = (currentPage) => { const lowExceptStr = filterStr.toLowerCase(); const canShowList = allTopicList.filter((topic, index) => { @@ -223,7 +222,7 @@ const DeployHistoryList = () => { try { if (isUpdate) { - // topic 已经是字符串 + // topic 已经是字符串 const configResult = await remoteApi.getTopicConfig(topic); if (configResult.status === 0) { const dataToSet = Array.isArray(configResult.data) ? configResult.data : [configResult.data]; @@ -257,7 +256,7 @@ const DeployHistoryList = () => { return; } - if(!isUpdate){ + if (!isUpdate) { const clusterResult = await remoteApi.getClusterList(); if (clusterResult.status === 0) { setAllClusterNameList(Object.keys(clusterResult.data.clusterInfo.clusterAddrTable)); @@ -276,7 +275,7 @@ const DeployHistoryList = () => { if (result.status === 0) { messageApi.success(t.TOPIC_OPERATION_SUCCESS); closeAddUpdateDialog(); - if(!isUpdateMode) { + if (!isUpdateMode) { await getTopicList() } } else { diff --git a/frontend-new/src/reportWebVitals.js b/frontend-new/src/reportWebVitals.js index 36281f2..5540044 100644 --- a/frontend-new/src/reportWebVitals.js +++ b/frontend-new/src/reportWebVitals.js @@ -16,15 +16,15 @@ */ const reportWebVitals = onPerfEntry => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } + if (onPerfEntry && onPerfEntry instanceof Function) { + import('web-vitals').then(({getCLS, getFID, getFCP, getLCP, getTTFB}) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }); + } }; export default reportWebVitals; diff --git a/frontend-new/src/router/index.jsx b/frontend-new/src/router/index.jsx index 9408532..bbf2814 100644 --- a/frontend-new/src/router/index.jsx +++ b/frontend-new/src/router/index.jsx @@ -64,7 +64,7 @@ const AppRouter = () => { useEffect(() => { remoteApi.setRedirectHandler(() => { - navigate('/login', { replace: true }); + navigate('/login', {replace: true}); }); }, [navigate]); diff --git a/frontend-new/src/store/context/ThemeContext.js b/frontend-new/src/store/context/ThemeContext.js index 7f2ce65..7249876 100644 --- a/frontend-new/src/store/context/ThemeContext.js +++ b/frontend-new/src/store/context/ThemeContext.js @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { useEffect } from 'react'; -import { useSelector, useDispatch } from 'react-redux'; -import { themes, defaultTheme } from '../../assets/styles/theme'; -import { setTheme } from '../actions/themeActions'; +import {useEffect} from 'react'; +import {useDispatch, useSelector} from 'react-redux'; +import {defaultTheme, themes} from '../../assets/styles/theme'; +import {setTheme} from '../actions/themeActions'; export const useTheme = () => { // 从 Redux store 中取出 currentThemeName diff --git a/frontend-new/src/store/index.js b/frontend-new/src/store/index.js index f303f5d..8cf73ff 100644 --- a/frontend-new/src/store/index.js +++ b/frontend-new/src/store/index.js @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { createStore,combineReducers } from 'redux'; +import {combineReducers, createStore} from 'redux'; import themeReducer from './reducers/themeReducer'; // 组合所有的 reducers diff --git a/frontend-new/src/store/reducers/themeReducer.js b/frontend-new/src/store/reducers/themeReducer.js index 9e131ab..5601f94 100644 --- a/frontend-new/src/store/reducers/themeReducer.js +++ b/frontend-new/src/store/reducers/themeReducer.js @@ -15,7 +15,7 @@ * limitations under the License. */ -import { SET_THEME } from '../actions/themeActions'; +import {SET_THEME} from '../actions/themeActions'; const getInitialTheme = () => { return localStorage.getItem('appTheme') || 'default'; diff --git a/pom.xml b/pom.xml index 6107e7d..0726fdf 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,8 @@ ~ limitations under the License. --> - + org.apache @@ -432,7 +433,7 @@ - install node + install node install-node-and-npm @@ -469,7 +470,7 @@ - + diff --git a/src/main/java/org/apache/rocketmq/dashboard/admin/MQAdminExtCallback.java b/src/main/java/org/apache/rocketmq/dashboard/admin/MQAdminExtCallback.java deleted file mode 100644 index 324b82d..0000000 --- a/src/main/java/org/apache/rocketmq/dashboard/admin/MQAdminExtCallback.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.rocketmq.dashboard.admin; - -import org.apache.rocketmq.tools.admin.MQAdminExt; - -@FunctionalInterface -public interface MQAdminExtCallback { - T doInMQAdminExt(MQAdminExt mqAdminExt) throws Exception; -} 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 0c495be..78b7655 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/admin/MQAdminPooledObjectFactory.java +++ b/src/main/java/org/apache/rocketmq/dashboard/admin/MQAdminPooledObjectFactory.java @@ -32,7 +32,7 @@ public class MQAdminPooledObjectFactory implements PooledObjectFactory makeObject() throws Exception { DefaultPooledObject pooledObject = new DefaultPooledObject<>( - mqAdminFactory.getInstance()); + mqAdminFactory.getInstance()); return pooledObject; } 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 976c009..ba5e9c4 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/admin/MqAdminExtObjectPool.java +++ b/src/main/java/org/apache/rocketmq/dashboard/admin/MqAdminExtObjectPool.java @@ -40,8 +40,8 @@ public class MqAdminExtObjectPool { MQAdminFactory mqAdminFactory = new MQAdminFactory(rmqConfigure); mqAdminPooledObjectFactory.setMqAdminFactory(mqAdminFactory); GenericObjectPool genericObjectPool = new GenericObjectPool( - mqAdminPooledObjectFactory, - genericObjectPoolConfig); + mqAdminPooledObjectFactory, + genericObjectPoolConfig); return genericObjectPool; } } diff --git a/src/main/java/org/apache/rocketmq/dashboard/config/CollectExecutorConfig.java b/src/main/java/org/apache/rocketmq/dashboard/config/CollectExecutorConfig.java index d72b62a..dad8245 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/config/CollectExecutorConfig.java +++ b/src/main/java/org/apache/rocketmq/dashboard/config/CollectExecutorConfig.java @@ -41,20 +41,20 @@ public class CollectExecutorConfig { @Bean(name = "collectExecutor") public ExecutorService collectExecutor(CollectExecutorConfig collectExecutorConfig) { ExecutorService collectExecutor = new ThreadPoolExecutor( - collectExecutorConfig.getCoreSize(), - collectExecutorConfig.getMaxSize(), - collectExecutorConfig.getKeepAliveTime(), - TimeUnit.MILLISECONDS, - new LinkedBlockingDeque<>(collectExecutorConfig.getQueueSize()), - new ThreadFactory() { - private final AtomicLong threadIndex = new AtomicLong(0); + collectExecutorConfig.getCoreSize(), + collectExecutorConfig.getMaxSize(), + collectExecutorConfig.getKeepAliveTime(), + TimeUnit.MILLISECONDS, + new LinkedBlockingDeque<>(collectExecutorConfig.getQueueSize()), + new ThreadFactory() { + private final AtomicLong threadIndex = new AtomicLong(0); - @Override - public Thread newThread(Runnable r) { - return new Thread(r, "collectTopicThread_" + this.threadIndex.incrementAndGet()); - } - }, - new ThreadPoolExecutor.DiscardOldestPolicy() + @Override + public Thread newThread(Runnable r) { + return new Thread(r, "collectTopicThread_" + this.threadIndex.incrementAndGet()); + } + }, + new ThreadPoolExecutor.DiscardOldestPolicy() ); return collectExecutor; } 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 7bec055..78e5a77 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/config/RMQConfigure.java +++ b/src/main/java/org/apache/rocketmq/dashboard/config/RMQConfigure.java @@ -91,6 +91,10 @@ public class RMQConfigure { @Getter private Integer clientCallbackExecutorThreads = 4; + @Setter + @Getter + private String authMode = "file"; + public void setProxyAddrs(List proxyAddrs) { this.proxyAddrs = proxyAddrs; if (CollectionUtils.isNotEmpty(proxyAddrs)) { @@ -112,10 +116,12 @@ public class RMQConfigure { logger.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; } 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 fdf51bf..6d62e3e 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/ConsumerController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/ConsumerController.java @@ -54,7 +54,7 @@ public class ConsumerController { @RequestMapping(value = "/group.refresh") @ResponseBody public Object refresh(String address, - String consumerGroup) { + String consumerGroup) { return consumerService.refreshGroup(address, consumerGroup); } @@ -100,7 +100,7 @@ public class ConsumerController { @ResponseBody public Object consumerCreateOrUpdateRequest(@RequestBody ConsumerConfigInfo consumerConfigInfo) { Preconditions.checkArgument(CollectionUtils.isNotEmpty(consumerConfigInfo.getBrokerNameList()) || CollectionUtils.isNotEmpty(consumerConfigInfo.getClusterNameList()), - "clusterName or brokerName can not be all blank"); + "clusterName or brokerName can not be all blank"); return consumerService.createAndUpdateSubscriptionGroupConfig(consumerConfigInfo); } @@ -127,7 +127,7 @@ public class ConsumerController { @RequestMapping(value = "/consumerRunningInfo.query") @ResponseBody public Object getConsumerRunningInfo(@RequestParam String consumerGroup, @RequestParam String clientId, - @RequestParam boolean jstack) { + @RequestParam boolean jstack) { return consumerService.getConsumerRunningInfo(consumerGroup, clientId, jstack); } } 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 6ea911e..6b3f1a8 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/DashboardController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/DashboardController.java @@ -47,7 +47,7 @@ public class DashboardController { if (Strings.isNullOrEmpty(topicName)) { return dashboardService.queryTopicData(date); } - return dashboardService.queryTopicData(date,topicName); + return dashboardService.queryTopicData(date, topicName); } @RequestMapping(value = "/topicCurrent.query", method = RequestMethod.GET) 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 f2b04af..fa76ea5 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/MessageTraceController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/MessageTraceController.java @@ -64,7 +64,7 @@ public class MessageTraceController { @RequestMapping(value = "/viewMessageTraceGraph.query", method = RequestMethod.GET) @ResponseBody public MessageTraceGraph viewMessageTraceGraph(@RequestParam String msgId, - @RequestParam(required = false) String traceTopic) { + @RequestParam(required = false) String traceTopic) { return 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 224ae04..53aecdf 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/MonitorController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/MonitorController.java @@ -40,7 +40,7 @@ public class MonitorController { @RequestMapping(value = "/createOrUpdateConsumerMonitor.do", method = {RequestMethod.POST}) @ResponseBody public Object createOrUpdateConsumerMonitor(@RequestParam String consumeGroupName, @RequestParam int minCount, - @RequestParam int maxDiffTotal) { + @RequestParam int maxDiffTotal) { return monitorService.createOrUpdateConsumerMonitor(consumeGroupName, new ConsumerMonitorConfig(minCount, maxDiffTotal)); } 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 601a679..3270961 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/OpsController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/OpsController.java @@ -52,7 +52,7 @@ public class OpsController { @ResponseBody public Object addNameSvrAddr(@RequestParam String newNamesrvAddr) { Preconditions.checkArgument(StringUtils.isNotEmpty(newNamesrvAddr), - "namesrvAddr can not be blank"); + "namesrvAddr can not be blank"); opsService.addNameSvrAddr(newNamesrvAddr); return true; } diff --git a/src/main/java/org/apache/rocketmq/dashboard/controller/ProxyController.java b/src/main/java/org/apache/rocketmq/dashboard/controller/ProxyController.java index ca8c4c8..589eaea 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/ProxyController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/ProxyController.java @@ -31,6 +31,7 @@ import org.springframework.web.bind.annotation.ResponseBody; public class ProxyController { @Resource private ProxyService proxyService; + @RequestMapping(value = "/homePage.query", method = RequestMethod.GET) @ResponseBody public Object homePage() { 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 43938c7..3da1f07 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/TestController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/TestController.java @@ -59,7 +59,7 @@ public class TestController { @Override public ConsumeConcurrentlyStatus consumeMessage(List msgs, - ConsumeConcurrentlyContext context) { + ConsumeConcurrentlyContext context) { logger.info("receiveMessage msgSize={}", msgs.size()); return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } @@ -72,26 +72,25 @@ public class TestController { new Thread(new Runnable() { - @Override public void run() { + @Override + public void run() { int i = 0; while (true) { try { Message msg = new Message(testTopic, - "TagA" + i, - "KEYS" + i, - ("Hello RocketMQ " + i).getBytes() + "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) { + } catch (Exception e) { e.printStackTrace(); try { Thread.sleep(1000); - } - catch (Exception ignore) { + } catch (Exception ignore) { } } } 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 7b9f4e1..a64be06 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/controller/TopicController.java +++ b/src/main/java/org/apache/rocketmq/dashboard/controller/TopicController.java @@ -51,7 +51,7 @@ public class TopicController { @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) { + @RequestParam(value = "skipRetryAndDlq", required = false) boolean skipRetryAndDlq) { return topicService.fetchAllTopicList(skipSysProcess, skipRetryAndDlq); } @@ -75,11 +75,11 @@ public class TopicController { } - @RequestMapping(value = "/createOrUpdate.do", method = { RequestMethod.POST}) + @RequestMapping(value = "/createOrUpdate.do", method = {RequestMethod.POST}) @ResponseBody public Object topicCreateOrUpdateRequest(@RequestBody TopicConfigInfo topicCreateOrUpdateRequest) { Preconditions.checkArgument(CollectionUtils.isNotEmpty(topicCreateOrUpdateRequest.getBrokerNameList()) || CollectionUtils.isNotEmpty(topicCreateOrUpdateRequest.getClusterNameList()), - "clusterName or brokerName can not be all blank"); + "clusterName or brokerName can not be all blank"); logger.info("op=look topicCreateOrUpdateRequest={}", JsonUtil.obj2String(topicCreateOrUpdateRequest)); topicService.createOrUpdate(topicCreateOrUpdateRequest); return true; @@ -100,14 +100,14 @@ public class TopicController { @RequestMapping(value = "/examineTopicConfig.query") @ResponseBody public Object examineTopicConfig(@RequestParam String topic, - @RequestParam(required = false) String brokerName) throws RemotingException, MQClientException, InterruptedException { + @RequestParam(required = false) String brokerName) throws RemotingException, MQClientException, InterruptedException { return topicService.examineTopicConfig(topic); } @RequestMapping(value = "/sendTopicMessage.do", method = {RequestMethod.POST}) @ResponseBody public Object sendTopicMessage( - @RequestBody SendTopicMessageRequest sendTopicMessageRequest) throws RemotingException, MQClientException, InterruptedException { + @RequestBody SendTopicMessageRequest sendTopicMessageRequest) throws RemotingException, MQClientException, InterruptedException { return topicService.sendTopicMessageRequest(sendTopicMessageRequest); } 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 3e25a68..132a0d5 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/filter/HttpBasicAuthorizedFilter.java +++ b/src/main/java/org/apache/rocketmq/dashboard/filter/HttpBasicAuthorizedFilter.java @@ -29,7 +29,6 @@ import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; - @WebFilter(urlPatterns = "/*", filterName = "httpBasicAuthorizedFilter") public class HttpBasicAuthorizedFilter implements Filter { 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 edd56e0..c22dfaa 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/model/MessageView.java +++ b/src/main/java/org/apache/rocketmq/dashboard/model/MessageView.java @@ -25,7 +25,9 @@ import java.util.Map; 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/request/TopicConfigInfo.java b/src/main/java/org/apache/rocketmq/dashboard/model/request/TopicConfigInfo.java index 6b9eb67..1089716 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 @@ -15,6 +15,7 @@ * limitations under the License. */ package org.apache.rocketmq.dashboard.model.request; + import com.google.common.base.Objects; import java.util.List; @@ -24,7 +25,9 @@ public class TopicConfigInfo { private List clusterNameList; private List brokerNameList; - /** topicConfig */ + /** + * topicConfig + */ private String topicName; private int writeQueueNums; private int readQueueNums; @@ -32,6 +35,7 @@ public class TopicConfigInfo { private boolean order; private String messageType; + public List getClusterNameList() { return clusterNameList; } @@ -40,8 +44,9 @@ public class TopicConfigInfo { this.clusterNameList = clusterNameList; } - /** topicConfig */ - + /** + * topicConfig + */ public List getBrokerNameList() { @@ -102,8 +107,6 @@ public class TopicConfigInfo { } - - @Override public boolean equals(Object o) { if (this == o) @@ -112,16 +115,16 @@ public class TopicConfigInfo { return false; TopicConfigInfo that = (TopicConfigInfo) o; return writeQueueNums == that.writeQueueNums && - readQueueNums == that.readQueueNums && - perm == that.perm && - order == that.order && - Objects.equal(topicName, that.topicName) && - Objects.equal(messageType, that.messageType); + readQueueNums == that.readQueueNums && + perm == that.perm && + order == that.order && + Objects.equal(topicName, that.topicName) && + Objects.equal(messageType, that.messageType); } @Override public int hashCode() { - return Objects.hashCode(topicName, writeQueueNums, readQueueNums, perm, order,messageType); + return Objects.hashCode(topicName, writeQueueNums, readQueueNums, perm, order, messageType); } } 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 b1b097c..1833b76 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/AbstractCommonService.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/AbstractCommonService.java @@ -29,16 +29,16 @@ import java.util.Set; public abstract class AbstractCommonService { @Resource protected MQAdminExt mqAdminExt; + protected final Set changeToBrokerNameSet(Map> 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) { Throwables.throwIfUnchecked(e); throw new RuntimeException(e); } diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/AclService.java b/src/main/java/org/apache/rocketmq/dashboard/service/AclService.java index 9386331..fcc340c 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/AclService.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/AclService.java @@ -39,5 +39,5 @@ public interface AclService { void deleteAcl(String brokerAddress, String subject, String resource); - void updateAcl(PolicyRequest policyRequest); + void updateAcl(PolicyRequest policyRequest); } diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/ConsumerService.java b/src/main/java/org/apache/rocketmq/dashboard/service/ConsumerService.java index 9a80df3..93c8448 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/ConsumerService.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/ConsumerService.java @@ -31,7 +31,7 @@ import java.util.Map; import java.util.Set; public interface ConsumerService { - List queryGroupList(boolean skipSysGroup,String address); + List queryGroupList(boolean skipSysGroup, String address); GroupConsumeInfo queryGroup(String consumerGroup, String address); 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 3dc5041..8744383 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 ce738fe..6d3c9ab 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/MessageService.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/MessageService.java @@ -39,21 +39,18 @@ 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/OpsService.java b/src/main/java/org/apache/rocketmq/dashboard/service/OpsService.java index 4d7fd0a..a03343d 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/OpsService.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/OpsService.java @@ -27,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/ProxyService.java b/src/main/java/org/apache/rocketmq/dashboard/service/ProxyService.java index 2a64680..6f18cd4 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/ProxyService.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/ProxyService.java @@ -24,5 +24,5 @@ public interface ProxyService { void updateProxyAddrList(String proxyAddr); - Map getProxyHomePage(); + Map getProxyHomePage(); } 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 c1e5fd1..57e689f 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 @@ -94,19 +94,20 @@ public class MQAdminExtImpl implements MQAdminExt { private Logger logger = LoggerFactory.getLogger(MQAdminExtImpl.class); - public MQAdminExtImpl() {} + public MQAdminExtImpl() { + } @Override public void updateBrokerConfig(String brokerAddr, Properties properties) - throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, - UnsupportedEncodingException, InterruptedException, MQBrokerException, MQClientException { + throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, + UnsupportedEncodingException, InterruptedException, MQBrokerException, MQClientException { 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); } @@ -118,7 +119,7 @@ public class MQAdminExtImpl implements MQAdminExt { @Override public void createAndUpdateSubscriptionGroupConfig(String addr, SubscriptionGroupConfig config) - throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + throws RemotingException, MQBrokerException, InterruptedException, MQClientException { MQAdminInstance.threadLocalMQAdminExt().createAndUpdateSubscriptionGroupConfig(addr, config); } @@ -134,8 +135,7 @@ public class MQAdminExtImpl implements MQAdminExt { RemotingCommand response = null; try { response = remotingClient.invokeSync(addr, request, 8000); - } - catch (Exception err) { + } catch (Exception err) { Throwables.throwIfUnchecked(err); throw new RuntimeException(err); } @@ -178,7 +178,7 @@ public class MQAdminExtImpl implements MQAdminExt { @Override public TopicStatsTable examineTopicStats(String topic) - throws RemotingException, MQClientException, InterruptedException, MQBrokerException { + throws RemotingException, MQClientException, InterruptedException, MQBrokerException { return MQAdminInstance.threadLocalMQAdminExt().examineTopicStats(topic); } @@ -191,14 +191,14 @@ public class MQAdminExtImpl implements MQAdminExt { @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); } @@ -209,7 +209,7 @@ public class MQAdminExtImpl implements MQAdminExt { @Override public ConsumeStats examineConsumeStats(String consumerGroup, String topic) - throws RemotingException, MQClientException, InterruptedException, MQBrokerException { + throws RemotingException, MQClientException, InterruptedException, MQBrokerException { return MQAdminInstance.threadLocalMQAdminExt().examineConsumeStats(consumerGroup, topic); } @@ -220,27 +220,27 @@ public class MQAdminExtImpl implements MQAdminExt { @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 RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, + 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); } @@ -251,14 +251,14 @@ public class MQAdminExtImpl implements MQAdminExt { @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); } @Override public int addWritePermOfBroker(String namesrvAddr, - String brokerName) throws RemotingCommandException, RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, InterruptedException, MQClientException { + String brokerName) throws RemotingCommandException, RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, InterruptedException, MQClientException { return MQAdminInstance.threadLocalMQAdminExt().addWritePermOfBroker(namesrvAddr, brokerName); } @@ -269,62 +269,62 @@ public class MQAdminExtImpl implements MQAdminExt { @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 { + throws RemotingException, MQBrokerException, InterruptedException, MQClientException { logger.info("addrs={} topic={}", JsonUtil.obj2String(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); } @Override public void deleteSubscriptionGroup(String addr, String groupName, boolean removeOffset) - throws RemotingException, MQBrokerException, InterruptedException, MQClientException { + throws RemotingException, MQBrokerException, InterruptedException, MQClientException { MQAdminInstance.threadLocalMQAdminExt().deleteSubscriptionGroup(addr, groupName, removeOffset); } @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); } @@ -335,59 +335,59 @@ public class MQAdminExtImpl implements MQAdminExt { @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 RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, + 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 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); } @@ -398,7 +398,7 @@ public class MQAdminExtImpl implements MQAdminExt { @Override public void createTopic(String key, String newTopic, int queueNum, int topicSysFlag, Map attributes) - throws MQClientException { + throws MQClientException { MQAdminInstance.threadLocalMQAdminExt().createTopic(key, newTopic, queueNum, topicSysFlag, attributes); } @@ -424,7 +424,7 @@ public class MQAdminExtImpl implements MQAdminExt { @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); } @@ -444,7 +444,7 @@ public class MQAdminExtImpl implements MQAdminExt { @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); } @@ -454,7 +454,7 @@ public class MQAdminExtImpl implements MQAdminExt { //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); MQAdminImpl mqAdminImpl = MQAdminInstance.threadLocalMqClientInstance().getMQAdminImpl(); Set clusterList = MQAdminInstance.threadLocalMQAdminExt().getTopicClusterList(topic); @@ -478,7 +478,7 @@ public class MQAdminExtImpl implements MQAdminExt { @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); } @@ -489,96 +489,99 @@ public class MQAdminExtImpl implements MQAdminExt { @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 SubscriptionGroupWrapper getUserSubscriptionGroup(String brokerAddr, - long timeoutMillis) throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException, MQBrokerException { + long timeoutMillis) throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException, MQBrokerException { return MQAdminInstance.threadLocalMQAdminExt().getUserSubscriptionGroup(brokerAddr, timeoutMillis); } @Override public TopicConfigSerializeWrapper getAllTopicConfig(String brokerAddr, - long timeoutMillis) throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException, MQBrokerException { + long timeoutMillis) throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException, MQBrokerException { return MQAdminInstance.threadLocalMQAdminExt().getAllTopicConfig(brokerAddr, timeoutMillis); } @Override public TopicConfigSerializeWrapper getUserTopicConfig(String brokerAddr, boolean specialTopic, - long timeoutMillis) throws InterruptedException, RemotingException, MQBrokerException, MQClientException { + long timeoutMillis) throws InterruptedException, RemotingException, MQBrokerException, MQClientException { return MQAdminInstance.threadLocalMQAdminExt().getUserTopicConfig(brokerAddr, specialTopic, 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; } @@ -588,8 +591,9 @@ public class MQAdminExtImpl implements MQAdminExt { } - @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; } @@ -602,7 +606,7 @@ public class MQAdminExtImpl implements MQAdminExt { @Override public void removeBrokerFromContainer(String brokerContainerAddr, String clusterName, String brokerName, - long brokerId) throws InterruptedException, MQBrokerException, RemotingTimeoutException, + long brokerId) throws InterruptedException, MQBrokerException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException { // TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'removeBrokerFromContainer'"); @@ -624,7 +628,7 @@ public class MQAdminExtImpl implements MQAdminExt { @Override public ConsumeStats examineConsumeStats(String brokerAddr, String consumerGroup, String topicName, - long timeoutMillis) throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException, + long timeoutMillis) throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException, MQBrokerException { // TODO Auto-generated method stub return MQAdminInstance.threadLocalMQAdminExt().examineConsumeStats(brokerAddr, consumerGroup, topicName, timeoutMillis); @@ -717,7 +721,7 @@ public class MQAdminExtImpl implements MQAdminExt { @Override public ConsumerRunningInfo getConsumerRunningInfo(String consumerGroup, String clientId, boolean jstack, - boolean metrics) throws RemotingException, MQClientException, InterruptedException { + boolean metrics) throws RemotingException, MQClientException, InterruptedException { // TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'getConsumerRunningInfo'"); } @@ -731,7 +735,7 @@ public class MQAdminExtImpl implements MQAdminExt { @Override public void setMessageRequestMode(String brokerAddr, String topic, String consumerGroup, MessageRequestMode mode, - int popWorkGroupSize, long timeoutMillis) throws InterruptedException, RemotingTimeoutException, + int popWorkGroupSize, long timeoutMillis) throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException, MQClientException { // TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'setMessageRequestMode'"); @@ -746,14 +750,14 @@ public class MQAdminExtImpl implements MQAdminExt { @Override public void resetOffsetByQueueId(String brokerAddr, String consumerGroup, String topicName, int queueId, - long resetOffset) throws RemotingException, InterruptedException, MQBrokerException { + long resetOffset) throws RemotingException, InterruptedException, MQBrokerException { // TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'resetOffsetByQueueId'"); } @Override public void createStaticTopic(String addr, String defaultTopic, TopicConfig topicConfig, - TopicQueueMappingDetail mappingDetail, boolean force) + TopicQueueMappingDetail mappingDetail, boolean force) throws RemotingException, InterruptedException, MQBrokerException { // TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'createStaticTopic'"); @@ -761,7 +765,7 @@ public class MQAdminExtImpl implements MQAdminExt { @Override public GroupForbidden updateAndGetGroupReadForbidden(String brokerAddr, String groupName, String topicName, - Boolean readable) throws RemotingException, InterruptedException, MQBrokerException { + Boolean readable) throws RemotingException, InterruptedException, MQBrokerException { // TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'updateAndGetGroupReadForbidden'"); } @@ -831,7 +835,7 @@ public class MQAdminExtImpl implements MQAdminExt { @Override public void cleanControllerBrokerData(String controllerAddr, String clusterName, String brokerName, - String brokerAddr, boolean isCleanLivingBroker) + String brokerAddr, boolean isCleanLivingBroker) throws RemotingException, InterruptedException, MQBrokerException { // TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'cleanControllerBrokerData'"); 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 ab61a71..93b39e7 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 @@ -212,7 +212,6 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum } else { consumeInfo.setSubGroupType(subscriptionGroupTable.get(consumerGroup).isConsumeMessageOrderly() ? "FIFO" : "NORMAL"); } - consumeInfo.setGroup(consumerGroup); consumeInfo.setUpdateTime(new Date()); groupConsumeInfoList.add(consumeInfo); } catch (Exception e) { @@ -270,6 +269,7 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum logger.warn("examineConsumeStats or examineConsumerConnectionInfo exception, " + consumerGroup, e); } + groupConsumeInfo.setGroup(consumerGroup); return groupConsumeInfo; } 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 f6c8f6b..0500615 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 @@ -51,51 +51,52 @@ public class DashboardCollectServiceImpl implements DashboardCollectService { 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>() { + .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>() { + .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; @@ -106,8 +107,7 @@ public class DashboardCollectServiceImpl implements DashboardCollectService { List strings; try { strings = Files.readLines(file, Charsets.UTF_8); - } - catch (IOException e) { + } catch (IOException e) { Throwables.throwIfUnchecked(e); throw new RuntimeException(e); } 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 ae8c31d..c106943 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 @@ -34,6 +34,7 @@ public class DashboardServiceImpl implements DashboardService { @Resource private DashboardCollectService dashboardCollectService; + /** * @param date format yyyy-MM-dd */ @@ -48,7 +49,7 @@ public class DashboardServiceImpl implements DashboardService { } /** - * @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 e21ff00..540270b 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 @@ -60,7 +60,7 @@ public class DlqMessageServiceImpl implements DlqMessageService { } 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 { Throwables.throwIfUnchecked(e); @@ -78,8 +78,8 @@ public class DlqMessageServiceImpl implements DlqMessageService { List batchResendResults = new LinkedList<>(); for (DlqMessageRequest dlqMessage : dlqMessages) { ConsumeMessageDirectlyResult result = messageService.consumeMessageDirectly(dlqMessage.getTopicName(), - dlqMessage.getMsgId(), dlqMessage.getConsumerGroup(), - dlqMessage.getClientId()); + dlqMessage.getMsgId(), dlqMessage.getConsumerGroup(), + dlqMessage.getClientId()); DlqMessageResendResult resendResult = new DlqMessageResendResult(result, dlqMessage.getMsgId()); batchResendResults.add(resendResult); } 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 584ba10..69a2b2c 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 @@ -33,7 +33,6 @@ import org.apache.rocketmq.client.consumer.DefaultMQPullConsumer; import org.apache.rocketmq.client.consumer.PullResult; import org.apache.rocketmq.client.consumer.PullStatus; import org.apache.rocketmq.client.exception.MQClientException; -import org.apache.rocketmq.common.MixAll; import org.apache.rocketmq.common.Pair; import org.apache.rocketmq.common.message.MessageClientIDSetter; import org.apache.rocketmq.common.message.MessageExt; @@ -74,6 +73,9 @@ import java.util.stream.Collectors; @Service public class MessageServiceImpl implements MessageService { + @Resource + private AutoCloseConsumerWrapper autoCloseConsumerWrapper; + private Logger logger = LoggerFactory.getLogger(MessageServiceImpl.class); private static final Cache> CACHE = CacheBuilder.newBuilder() @@ -128,8 +130,8 @@ public class MessageServiceImpl implements MessageService { if (isEnableAcl) { rpcHook = new AclClientRPCHook(new SessionCredentials(configure.getAccessKey(), configure.getSecretKey())); } - AutoCloseConsumerWrapper consumerWrapper = new AutoCloseConsumerWrapper(); - DefaultMQPullConsumer consumer = consumerWrapper.getConsumer(rpcHook, configure.isUseTLS()); + + DefaultMQPullConsumer consumer = autoCloseConsumerWrapper.getConsumer(rpcHook, configure.isUseTLS()); List messageViewList = Lists.newArrayList(); try { String subExpression = "*"; @@ -262,8 +264,8 @@ public class MessageServiceImpl implements MessageService { if (isEnableAcl) { rpcHook = new AclClientRPCHook(new SessionCredentials(configure.getAccessKey(), configure.getSecretKey())); } - AutoCloseConsumerWrapper consumerWrapper = new AutoCloseConsumerWrapper(); - DefaultMQPullConsumer consumer = consumerWrapper.getConsumer(rpcHook, configure.isUseTLS()); + + DefaultMQPullConsumer consumer = autoCloseConsumerWrapper.getConsumer(rpcHook, configure.isUseTLS()); long total = 0; List queueOffsetInfos = new ArrayList<>(); @@ -402,8 +404,8 @@ public class MessageServiceImpl implements MessageService { if (isEnableAcl) { rpcHook = new AclClientRPCHook(new SessionCredentials(configure.getAccessKey(), configure.getSecretKey())); } - AutoCloseConsumerWrapper consumerWrapper = new AutoCloseConsumerWrapper(); - DefaultMQPullConsumer consumer = consumerWrapper.getConsumer(rpcHook, configure.isUseTLS()); + + DefaultMQPullConsumer consumer = autoCloseConsumerWrapper.getConsumer(rpcHook, configure.isUseTLS()); List messageViews = new ArrayList<>(); long offset = query.getPageNum() * query.getPageSize(); @@ -541,9 +543,9 @@ public class MessageServiceImpl implements MessageService { } } - public DefaultMQPullConsumer buildDefaultMQPullConsumer(RPCHook rpcHook, boolean useTLS) { - DefaultMQPullConsumer consumer = new DefaultMQPullConsumer(MixAll.TOOLS_CONSUMER_GROUP, rpcHook); - consumer.setUseTLS(useTLS); - return consumer; - } +// public DefaultMQPullConsumer buildDefaultMQPullConsumer(RPCHook rpcHook, boolean useTLS) { +// DefaultMQPullConsumer consumer = new DefaultMQPullConsumer(MixAll.TOOLS_CONSUMER_GROUP, rpcHook); +// consumer.setUseTLS(useTLS); +// return consumer; +// } } 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 b07025c..ecfc753 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 @@ -133,21 +133,21 @@ public class MessageTraceServiceImpl implements MessageTraceService { } 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) { @@ -206,7 +206,7 @@ public class MessageTraceServiceImpl implements MessageTraceService { private void putIntoMessageTraceViewGroupMap(MessageTraceView messageTraceView, Map> 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 3bdd98e..dcdf100 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 @@ -81,8 +81,7 @@ public class MonitorServiceImpl implements MonitorService { private void writeDataJsonToFile(String path, String dataStr) { try { MixAll.string2File(dataStr, path); - } - catch (Exception e) { + } catch (Exception e) { Throwables.throwIfUnchecked(e); throw new RuntimeException(e); } 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 85433f8..90d1318 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 @@ -33,8 +33,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) { Throwables.throwIfUnchecked(e); throw new RuntimeException(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 39a9bf1..e1e7ac1 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 @@ -127,7 +127,7 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ try { TopicConfigSerializeWrapper topicConfigSerializeWrapper = mqAdminExt.getAllTopicConfig(brokerAddr.getBrokerAddrs().get(0L), 10000L); for (TopicConfig topicConfig : topicConfigSerializeWrapper.getTopicConfigTable().values()) { - TopicTypeMeta topicType = classifyTopicType(topicConfig.getTopicName(), topicConfigSerializeWrapper.getTopicConfigTable().get(topicConfig.getTopicName()).getAttributes(),sysTopics.getTopicList()); + TopicTypeMeta topicType = classifyTopicType(topicConfig.getTopicName(), topicConfigSerializeWrapper.getTopicConfigTable().get(topicConfig.getTopicName()).getAttributes(), sysTopics.getTopicList()); if (names.contains(topicType.getTopicName())) { continue; } @@ -149,7 +149,7 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ return new TopicTypeList(names, messageTypes); } - private TopicTypeMeta classifyTopicType(String topicName, Map attributes, Set sysTopics) { + private TopicTypeMeta classifyTopicType(String topicName, Map attributes, Set sysTopics) { TopicTypeMeta topicType = new TopicTypeMeta(); topicType.setTopicName(topicName); 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 4b8e191..4cf4940 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,29 +17,26 @@ package org.apache.rocketmq.dashboard.service.impl; -import jakarta.annotation.Resource; import org.apache.rocketmq.auth.authentication.enums.UserType; import org.apache.rocketmq.dashboard.admin.UserMQAdminPoolManager; -import org.apache.rocketmq.dashboard.config.RMQConfigure; import org.apache.rocketmq.dashboard.model.User; import org.apache.rocketmq.dashboard.service.UserService; -import org.apache.rocketmq.dashboard.service.provider.UserInfoProvider; +import org.apache.rocketmq.dashboard.service.strategy.UserContext; import org.apache.rocketmq.remoting.protocol.body.UserInfo; import org.apache.rocketmq.tools.admin.MQAdminExt; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + @Service public class UserServiceImpl implements UserService { private static final Logger log = LoggerFactory.getLogger(UserServiceImpl.class); - @Resource - private RMQConfigure configure; @Autowired - private UserInfoProvider userInfoProvider; + private UserContext userContext; @Autowired private UserMQAdminPoolManager userMQAdminPoolManager; @@ -47,7 +44,7 @@ public class UserServiceImpl implements UserService { @Override public User queryByName(String name) { - UserInfo userInfo = userInfoProvider.getUserInfoByUsername(name); + UserInfo userInfo = userContext.queryByUsername(name); if (userInfo == null) { return null; } diff --git a/src/main/java/org/apache/rocketmq/dashboard/support/AutoCloseConsumerWrapper.java b/src/main/java/org/apache/rocketmq/dashboard/support/AutoCloseConsumerWrapper.java index ce2d034..967b6f6 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/support/AutoCloseConsumerWrapper.java +++ b/src/main/java/org/apache/rocketmq/dashboard/support/AutoCloseConsumerWrapper.java @@ -23,6 +23,7 @@ import org.apache.rocketmq.common.MixAll; import org.apache.rocketmq.remoting.RPCHook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; import java.time.Duration; import java.time.Instant; @@ -32,9 +33,10 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; +@Component public class AutoCloseConsumerWrapper { - private final Logger logger = LoggerFactory.getLogger(GlobalRestfulResponseBodyAdvice.class); + private final Logger logger = LoggerFactory.getLogger(AutoCloseConsumerWrapper.class); private static final AtomicReference CONSUMER_REF = new AtomicReference<>(); private final AtomicBoolean isTaskScheduled = new AtomicBoolean(false); @@ -77,7 +79,10 @@ public class AutoCloseConsumerWrapper { protected DefaultMQPullConsumer createNewConsumer(RPCHook rpcHook, Boolean useTLS) { return new DefaultMQPullConsumer(MixAll.TOOLS_CONSUMER_GROUP, rpcHook) { - { setUseTLS(useTLS); } }; + { + setUseTLS(useTLS); + } + }; } private void startIdleCheckTask() { 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 1b46da2..ddc3fcf 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/support/GlobalExceptionHandler.java +++ b/src/main/java/org/apache/rocketmq/dashboard/support/GlobalExceptionHandler.java @@ -37,8 +37,7 @@ public class GlobalExceptionHandler { if (ex instanceof ServiceException) { logger.error("Occur service exception: {}", ex.getMessage()); value = new JsonResult(((ServiceException) ex).getCode(), ex.getMessage()); - } - else { + } else { logger.error("op=global_exception_handler_print_error", ex); value = new JsonResult(-1, ex.getMessage() == null ? ex.toString() : ex.getMessage()); } 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 ec8dbef..bcbc411 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/support/GlobalRestfulResponseBodyAdvice.java +++ b/src/main/java/org/apache/rocketmq/dashboard/support/GlobalRestfulResponseBodyAdvice.java @@ -37,18 +37,17 @@ public class GlobalRestfulResponseBodyAdvice implements ResponseBodyAdvice> 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; diff --git a/src/main/java/org/apache/rocketmq/dashboard/task/CollectTaskRunnble.java b/src/main/java/org/apache/rocketmq/dashboard/task/CollectTaskRunnble.java index c0e5cc0..ad56ea2 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/task/CollectTaskRunnble.java +++ b/src/main/java/org/apache/rocketmq/dashboard/task/CollectTaskRunnble.java @@ -44,7 +44,7 @@ public class CollectTaskRunnble implements Runnable { private DashboardCollectService dashboardCollectService; public CollectTaskRunnble(String topic, MQAdminExt mqAdminExt, - DashboardCollectService dashboardCollectService) { + DashboardCollectService dashboardCollectService) { this.topic = topic; this.mqAdminExt = mqAdminExt; this.dashboardCollectService = dashboardCollectService; 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 2691d7c..ae50f5f 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/task/DashboardCollectTask.java +++ b/src/main/java/org/apache/rocketmq/dashboard/task/DashboardCollectTask.java @@ -80,15 +80,14 @@ public class DashboardCollectTask { 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; } CollectTaskRunnble collectTask = new CollectTaskRunnble(topic, mqAdminExt, dashboardCollectService); collectExecutor.submit(collectTask); } - } - catch (Exception err) { + } catch (Exception err) { Throwables.throwIfUnchecked(err); throw new RuntimeException(err); } @@ -100,7 +99,6 @@ public class DashboardCollectTask { } - @Scheduled(cron = "0 0/1 * * * ?") public void collectBroker() { if (!rmqConfigure.isEnableDashBoardCollect()) { @@ -139,8 +137,7 @@ public class DashboardCollectTask { dashboardCollectService.getBrokerMap().put(entry.getValue(), list); } log.debug("Broker Collected Data in memory = {}" + JsonUtil.obj2String(dashboardCollectService.getBrokerMap().asMap())); - } - catch (Exception e) { + } catch (Exception e) { Throwables.throwIfUnchecked(e); throw new RuntimeException(e); } @@ -152,12 +149,10 @@ public class DashboardCollectTask { } try { return mqAdminExt.fetchBrokerRuntimeStats(brokerAddr); - } - catch (Exception e) { + } catch (Exception e) { try { Thread.sleep(1000); - } - catch (InterruptedException e1) { + } catch (InterruptedException e1) { Throwables.throwIfUnchecked(e1); throw new RuntimeException(e1); } @@ -189,16 +184,14 @@ public class DashboardCollectTask { 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); } @@ -211,21 +204,19 @@ public class DashboardCollectTask { log.debug("Broker Collected Data in memory = {}" + JsonUtil.obj2String(dashboardCollectService.getBrokerMap().asMap())); log.debug("Topic Collected Data in memory = {}" + JsonUtil.obj2String(dashboardCollectService.getTopicMap().asMap())); - } - catch (IOException e) { + } catch (IOException e) { Throwables.throwIfUnchecked(e); throw new RuntimeException(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()); 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 e960c3e..b05e561 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/task/MonitorTask.java +++ b/src/main/java/org/apache/rocketmq/dashboard/task/MonitorTask.java @@ -38,7 +38,7 @@ public class MonitorTask { @Resource private ConsumerService consumerService; -// @Scheduled(cron = "* * * * * ?") + // @Scheduled(cron = "* * * * * ?") public void scanProblemConsumeGroup() { for (Map.Entry configEntry : monitorService.queryConsumerMonitorConfig().entrySet()) { GroupConsumeInfo consumeInfo = consumerService.queryGroup(configEntry.getKey(), null); 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 58af614..76d1215 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/util/ExcelUtil.java +++ b/src/main/java/org/apache/rocketmq/dashboard/util/ExcelUtil.java @@ -31,10 +31,10 @@ import java.util.List; 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); @@ -44,7 +44,7 @@ public class ExcelUtil { contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle); EasyExcel.write(getOutputStream(fileName, response), clazz) - .excelType(ExcelTypeEnum.XLSX).sheet(sheetName).registerWriteHandler(horizontalCellStyleStrategy).doWrite(data); + .excelType(ExcelTypeEnum.XLSX).sheet(sheetName).registerWriteHandler(horizontalCellStyleStrategy).doWrite(data); } private static OutputStream getOutputStream(String fileName, HttpServletResponse response) throws Exception { diff --git a/src/main/java/org/apache/rocketmq/dashboard/util/JsonUtil.java b/src/main/java/org/apache/rocketmq/dashboard/util/JsonUtil.java index 6fdb9e0..beea80d 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/util/JsonUtil.java +++ b/src/main/java/org/apache/rocketmq/dashboard/util/JsonUtil.java @@ -55,8 +55,7 @@ public class JsonUtil { public static void writeValue(Writer writer, Object obj) { try { objectMapper.writeValue(writer, obj); - } - catch (IOException e) { + } catch (IOException e) { Throwables.propagateIfPossible(e); } } @@ -67,9 +66,8 @@ public class JsonUtil { } try { - return src instanceof String ? (String)src : objectMapper.writeValueAsString(src); - } - catch (Exception e) { + return src instanceof String ? (String) src : objectMapper.writeValueAsString(src); + } catch (Exception e) { logger.error("Parse Object to String error src=" + src, e); return null; } @@ -81,9 +79,8 @@ public class JsonUtil { } try { - return src instanceof byte[] ? (byte[])src : objectMapper.writeValueAsBytes(src); - } - catch (Exception e) { + return src instanceof byte[] ? (byte[]) src : objectMapper.writeValueAsBytes(src); + } catch (Exception e) { logger.error("Parse Object to byte[] error", e); return null; } @@ -95,9 +92,8 @@ public class JsonUtil { } str = escapesSpecialChar(str); try { - return clazz.equals(String.class) ? (T)str : objectMapper.readValue(str, clazz); - } - catch (Exception e) { + 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 null; } @@ -108,9 +104,8 @@ public class JsonUtil { return null; } try { - return clazz.equals(byte[].class) ? (T)bytes : objectMapper.readValue(bytes, clazz); - } - catch (Exception e) { + 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 null; } @@ -122,11 +117,10 @@ public class JsonUtil { } str = escapesSpecialChar(str); try { - return (T)(typeReference.getType().equals(String.class) ? str : objectMapper.readValue(str, typeReference)); - } - catch (Exception e) { + 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); + typeReference.getType(), e); return null; } } @@ -136,12 +130,11 @@ public class JsonUtil { return null; } try { - return (T)(typeReference.getType().equals(byte[].class) ? bytes : objectMapper.readValue(bytes, - typeReference)); - } - catch (Exception e) { + 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); + typeReference.getType(), e); return null; } } 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 7151320..76799f4 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/util/WebUtil.java +++ b/src/main/java/org/apache/rocketmq/dashboard/util/WebUtil.java @@ -107,7 +107,7 @@ public class WebUtil { HttpSession session = request.getSession(false); if (session != null) { - return session.getAttribute(key); + return session.getAttribute(key); } return null; diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 87ffc3b..6bef6a0 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -17,34 +17,34 @@ --> - - - [%d{yyyy-MM-dd HH:mm:ss.SSS}] %p %t - %m%n - - - - - ${user.home}/logs/dashboardlogs/rocketmq-dashboard.log - true - - ${user.home}/logs/dashboardlogs/rocketmq-dashboard-%d{yyyy-MM-dd}.%i.log - - - 104857600 - - 10 - - + + [%d{yyyy-MM-dd HH:mm:ss.SSS}] %p %t - %m%n - UTF-8 - - + + - - - - + + ${user.home}/logs/dashboardlogs/rocketmq-dashboard.log + true + + ${user.home}/logs/dashboardlogs/rocketmq-dashboard-%d{yyyy-MM-dd}.%i.log + + + 104857600 + + 10 + + + [%d{yyyy-MM-dd HH:mm:ss.SSS}] %p %t - %m%n + UTF-8 + + - \ No newline at end of file + + + + + + diff --git a/src/main/resources/users.properties b/src/main/resources/users.properties index b6c656b..6515b0a 100644 --- a/src/main/resources/users.properties +++ b/src/main/resources/users.properties @@ -14,13 +14,10 @@ # See the License for the specific language governing permissions and # limitations under the License. # - # This file supports hot change, any change will be auto-reloaded without Dashboard restarting. # Format: a user per line, username=password[,N] #N is optional, 0 (Normal User); 1 (Admin) - # Define Admin -admin=admin,1 - +super=admin,1 # Define Users -user1=user1 -user2=user2 \ No newline at end of file +user1=user +user2=user
{key}{key} {value}
{t.NO_CONFIG_DATA || "No configuration data available."}{t.NO_CONFIG_DATA || "No configuration data available."}