mirror of
https://github.com/apache/rocketmq-dashboard.git
synced 2025-09-12 22:18:27 +08:00
Compare commits
1 Commits
2ac933a070
...
dependabot
Author | SHA1 | Date | |
---|---|---|---|
|
c09d97dac8 |
@@ -9,10 +9,3 @@ github:
|
|||||||
squash: true
|
squash: true
|
||||||
merge: false
|
merge: false
|
||||||
rebase: false
|
rebase: false
|
||||||
|
|
||||||
notifications:
|
|
||||||
commits: commits@rocketmq.apache.org
|
|
||||||
issues: commits@rocketmq.apache.org
|
|
||||||
pullrequests: commits@rocketmq.apache.org
|
|
||||||
jobs: commits@rocketmq.apache.org
|
|
||||||
discussions: dev@rocketmq.apache.org
|
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -5,4 +5,3 @@
|
|||||||
.project
|
.project
|
||||||
.factorypath
|
.factorypath
|
||||||
.settings/
|
.settings/
|
||||||
.vscode
|
|
@@ -63,18 +63,6 @@
|
|||||||
* 根据消息主题和消息Id进行消息的查询
|
* 根据消息主题和消息Id进行消息的查询
|
||||||
* 消息详情可以展示这条消息的详细信息,查看消息对应到具体消费组的消费情况(如果异常,可以查看具体的异常信息)。可以向指定的消费组重发消息。
|
* 消息详情可以展示这条消息的详细信息,查看消息对应到具体消费组的消费情况(如果异常,可以查看具体的异常信息)。可以向指定的消费组重发消息。
|
||||||
|
|
||||||
## RocketMQ-V5.0 仪表盘
|
|
||||||
* 版本切换
|
|
||||||
* RocketMQ右上角可切换不同版本,用户可以自主选择 RocketMQ-5.x 或 RocketMQ-4.x 版本
|
|
||||||
* 主题页面
|
|
||||||
* 支持延迟/顺序/事务消息的筛选
|
|
||||||
* 支持延迟/顺序/事物/普通等多种消息类型主题的新增与更新
|
|
||||||
* 消费页面
|
|
||||||
* 支持顺序消费类型订阅组的过滤
|
|
||||||
* 提供顺序消费类型订阅组的新增与更新,如果需要开启顺序消费,FIFO类型的订阅组一定需要打开consumeOrderlyEnable选项
|
|
||||||
* 代理页面(RocketMQ 5.0新增)
|
|
||||||
* 支持代理节点的新增与查询
|
|
||||||
* 支持代理节点地址配置:在application.yml中可对proxyAddr和proxyAddrs属性进行预配置
|
|
||||||
|
|
||||||
## HTTPS 方式访问Dashboard
|
## HTTPS 方式访问Dashboard
|
||||||
* HTTPS功能实际上是使用SpringBoot提供的配置功能即可完成,首先,需要有一个SSL KeyStore来存放服务端证书,可以使用本工程所提供的测试密钥库:
|
* HTTPS功能实际上是使用SpringBoot提供的配置功能即可完成,首先,需要有一个SSL KeyStore来存放服务端证书,可以使用本工程所提供的测试密钥库:
|
||||||
|
@@ -64,18 +64,6 @@
|
|||||||
* look over this message's detail info.you can see the message's consume state(each group has one line),show the exception message if has exception.
|
* look over this message's detail info.you can see the message's consume state(each group has one line),show the exception message if has exception.
|
||||||
you can send this message to the group you selected
|
you can send this message to the group you selected
|
||||||
|
|
||||||
## RocketMQ-V5.0 dashboard
|
|
||||||
* Version switching
|
|
||||||
* RocketMQ can switch between different versions in the upper right corner, and users can freely choose between RocketMQ-5.X or RocketMQ-4.X versions
|
|
||||||
* Theme page
|
|
||||||
* Support filtering of delayed/sequential/transaction messages
|
|
||||||
* Support the addition and update of multiple message types such as delay, sequence, object, and ordinary themes
|
|
||||||
* Consumption page
|
|
||||||
* Support filtering of subscription groups for fifo consumption types
|
|
||||||
* Provide the addition and update of subscription groups for sequential consumption types. If fifo consumption needs to be enabled, FIFO type subscription groups must have the consumeOrderlyEnable option enabled
|
|
||||||
* Proxy page (Added in RocketMQ 5.0)
|
|
||||||
* Support for adding and querying proxy nodes
|
|
||||||
* Support proxy node address configuration: ProxyAddr and proxyAddrs properties can be pre configured in application.yml
|
|
||||||
|
|
||||||
## Access Dashboard with HTTPS
|
## Access Dashboard with HTTPS
|
||||||
* SpringBoot itself has provided the SSL configuration. You can use the project test Keystore:resources/rmqcngkeystore.jks. The store is generated with the following unix keytool commands:
|
* SpringBoot itself has provided the SSL configuration. You can use the project test Keystore:resources/rmqcngkeystore.jks. The store is generated with the following unix keytool commands:
|
||||||
|
@@ -1645,6 +1645,11 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.12.5"
|
"@babel/runtime" "^7.12.5"
|
||||||
|
|
||||||
|
"@tootallnate/once@1":
|
||||||
|
version "1.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
|
||||||
|
integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
|
||||||
|
|
||||||
"@types/anymatch@*":
|
"@types/anymatch@*":
|
||||||
version "1.3.1"
|
version "1.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a"
|
resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a"
|
||||||
@@ -2131,10 +2136,10 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
|
resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
|
||||||
integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
|
integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
|
||||||
|
|
||||||
abab@^2.0.3:
|
abab@^2.0.3, abab@^2.0.5:
|
||||||
version "2.0.5"
|
version "2.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
|
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
|
||||||
integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
|
integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
|
||||||
|
|
||||||
accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
|
accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
|
||||||
version "1.3.7"
|
version "1.3.7"
|
||||||
@@ -2172,6 +2177,11 @@ acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0:
|
|||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
|
||||||
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
|
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
|
||||||
|
|
||||||
|
acorn@^8.2.4:
|
||||||
|
version "8.7.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30"
|
||||||
|
integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==
|
||||||
|
|
||||||
address@1.1.2, address@^1.0.1:
|
address@1.1.2, address@^1.0.1:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
|
resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
|
||||||
@@ -2185,6 +2195,13 @@ adjust-sourcemap-loader@3.0.0:
|
|||||||
loader-utils "^2.0.0"
|
loader-utils "^2.0.0"
|
||||||
regex-parser "^2.2.11"
|
regex-parser "^2.2.11"
|
||||||
|
|
||||||
|
agent-base@6:
|
||||||
|
version "6.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
|
||||||
|
integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
|
||||||
|
dependencies:
|
||||||
|
debug "4"
|
||||||
|
|
||||||
aggregate-error@^3.0.0:
|
aggregate-error@^3.0.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
|
resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
|
||||||
@@ -2203,7 +2220,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
|
|||||||
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
|
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
|
||||||
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
|
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
|
||||||
|
|
||||||
ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5:
|
ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5:
|
||||||
version "6.12.6"
|
version "6.12.6"
|
||||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
|
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
|
||||||
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
||||||
@@ -2422,18 +2439,6 @@ asn1.js@^5.2.0:
|
|||||||
minimalistic-assert "^1.0.0"
|
minimalistic-assert "^1.0.0"
|
||||||
safer-buffer "^2.1.0"
|
safer-buffer "^2.1.0"
|
||||||
|
|
||||||
asn1@~0.2.3:
|
|
||||||
version "0.2.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
|
|
||||||
integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
|
|
||||||
dependencies:
|
|
||||||
safer-buffer "~2.1.0"
|
|
||||||
|
|
||||||
assert-plus@1.0.0, assert-plus@^1.0.0:
|
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
|
|
||||||
integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
|
|
||||||
|
|
||||||
assert@^1.1.1:
|
assert@^1.1.1:
|
||||||
version "1.5.0"
|
version "1.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
|
resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
|
||||||
@@ -2477,7 +2482,7 @@ async@^2.6.2:
|
|||||||
asynckit@^0.4.0:
|
asynckit@^0.4.0:
|
||||||
version "0.4.0"
|
version "0.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
||||||
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
|
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
||||||
|
|
||||||
at-least-node@^1.0.0:
|
at-least-node@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
@@ -2502,16 +2507,6 @@ autoprefixer@^9.6.1:
|
|||||||
postcss "^7.0.32"
|
postcss "^7.0.32"
|
||||||
postcss-value-parser "^4.1.0"
|
postcss-value-parser "^4.1.0"
|
||||||
|
|
||||||
aws-sign2@~0.7.0:
|
|
||||||
version "0.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
|
|
||||||
integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
|
|
||||||
|
|
||||||
aws4@^1.8.0:
|
|
||||||
version "1.11.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
|
|
||||||
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
|
|
||||||
|
|
||||||
axe-core@^4.0.2:
|
axe-core@^4.0.2:
|
||||||
version "4.1.2"
|
version "4.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.1.2.tgz#7cf783331320098bfbef620df3b3c770147bc224"
|
resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.1.2.tgz#7cf783331320098bfbef620df3b3c770147bc224"
|
||||||
@@ -2719,13 +2714,6 @@ batch@0.6.1:
|
|||||||
resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
|
resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
|
||||||
integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
|
integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
|
||||||
|
|
||||||
bcrypt-pbkdf@^1.0.0:
|
|
||||||
version "1.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
|
|
||||||
integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
|
|
||||||
dependencies:
|
|
||||||
tweetnacl "^0.14.3"
|
|
||||||
|
|
||||||
bfj@^7.0.2:
|
bfj@^7.0.2:
|
||||||
version "7.0.2"
|
version "7.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2"
|
resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2"
|
||||||
@@ -3116,11 +3104,6 @@ case-sensitive-paths-webpack-plugin@2.3.0:
|
|||||||
resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7"
|
resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7"
|
||||||
integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==
|
integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==
|
||||||
|
|
||||||
caseless@~0.12.0:
|
|
||||||
version "0.12.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
|
|
||||||
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
|
|
||||||
|
|
||||||
chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
|
chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
|
||||||
version "2.4.2"
|
version "2.4.2"
|
||||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||||
@@ -3345,7 +3328,7 @@ colorette@^1.2.1:
|
|||||||
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
|
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
|
||||||
integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
|
integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
|
||||||
|
|
||||||
combined-stream@^1.0.6, combined-stream@~1.0.6:
|
combined-stream@^1.0.8:
|
||||||
version "1.0.8"
|
version "1.0.8"
|
||||||
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
|
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
|
||||||
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
|
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
|
||||||
@@ -3518,7 +3501,7 @@ core-js@^3.6.5:
|
|||||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.9.0.tgz#790b1bb11553a2272b36e2625c7179db345492f8"
|
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.9.0.tgz#790b1bb11553a2272b36e2625c7179db345492f8"
|
||||||
integrity sha512-PyFBJaLq93FlyYdsndE5VaueA9K5cNB7CGzeCj191YYLhkQM0gdZR2SKihM70oF0wdqKSKClv/tEBOpoRmdOVQ==
|
integrity sha512-PyFBJaLq93FlyYdsndE5VaueA9K5cNB7CGzeCj191YYLhkQM0gdZR2SKihM70oF0wdqKSKClv/tEBOpoRmdOVQ==
|
||||||
|
|
||||||
core-util-is@1.0.2, core-util-is@~1.0.0:
|
core-util-is@~1.0.0:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||||
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
||||||
@@ -3848,7 +3831,7 @@ cssom@~0.3.6:
|
|||||||
resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
|
resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
|
||||||
integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
|
integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
|
||||||
|
|
||||||
cssstyle@^2.2.0:
|
cssstyle@^2.3.0:
|
||||||
version "2.3.0"
|
version "2.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
|
resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
|
||||||
integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
|
integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
|
||||||
@@ -3873,13 +3856,6 @@ damerau-levenshtein@^1.0.6:
|
|||||||
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791"
|
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791"
|
||||||
integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==
|
integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==
|
||||||
|
|
||||||
dashdash@^1.12.0:
|
|
||||||
version "1.14.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
|
|
||||||
integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
|
|
||||||
dependencies:
|
|
||||||
assert-plus "^1.0.0"
|
|
||||||
|
|
||||||
data-urls@^2.0.0:
|
data-urls@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
|
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
|
||||||
@@ -3896,6 +3872,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ms "2.0.0"
|
ms "2.0.0"
|
||||||
|
|
||||||
|
debug@4:
|
||||||
|
version "4.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
|
||||||
|
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||||
|
dependencies:
|
||||||
|
ms "2.1.2"
|
||||||
|
|
||||||
debug@^3.1.1, debug@^3.2.6:
|
debug@^3.1.1, debug@^3.2.6:
|
||||||
version "3.2.7"
|
version "3.2.7"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
|
||||||
@@ -3915,10 +3898,10 @@ decamelize@^1.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
||||||
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
|
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
|
||||||
|
|
||||||
decimal.js@^10.2.0:
|
decimal.js@^10.2.1:
|
||||||
version "10.2.1"
|
version "10.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3"
|
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783"
|
||||||
integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==
|
integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==
|
||||||
|
|
||||||
decode-uri-component@^0.2.0:
|
decode-uri-component@^0.2.0:
|
||||||
version "0.2.0"
|
version "0.2.0"
|
||||||
@@ -3942,11 +3925,16 @@ deep-equal@^1.0.1:
|
|||||||
object-keys "^1.1.1"
|
object-keys "^1.1.1"
|
||||||
regexp.prototype.flags "^1.2.0"
|
regexp.prototype.flags "^1.2.0"
|
||||||
|
|
||||||
deep-is@^0.1.3, deep-is@~0.1.3:
|
deep-is@^0.1.3:
|
||||||
version "0.1.3"
|
version "0.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
|
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
|
||||||
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
|
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
|
||||||
|
|
||||||
|
deep-is@~0.1.3:
|
||||||
|
version "0.1.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
|
||||||
|
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
|
||||||
|
|
||||||
deepmerge@^4.2.2:
|
deepmerge@^4.2.2:
|
||||||
version "4.2.2"
|
version "4.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
|
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
|
||||||
@@ -4005,7 +3993,7 @@ del@^4.1.1:
|
|||||||
delayed-stream@~1.0.0:
|
delayed-stream@~1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||||
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
|
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
|
||||||
|
|
||||||
depd@~1.1.2:
|
depd@~1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
@@ -4208,14 +4196,6 @@ duplexify@^3.4.2, duplexify@^3.6.0:
|
|||||||
readable-stream "^2.0.0"
|
readable-stream "^2.0.0"
|
||||||
stream-shift "^1.0.0"
|
stream-shift "^1.0.0"
|
||||||
|
|
||||||
ecc-jsbn@~0.1.1:
|
|
||||||
version "0.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
|
|
||||||
integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
|
|
||||||
dependencies:
|
|
||||||
jsbn "~0.1.0"
|
|
||||||
safer-buffer "^2.1.0"
|
|
||||||
|
|
||||||
ee-first@1.1.1:
|
ee-first@1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||||
@@ -4425,13 +4405,13 @@ escape-string-regexp@^1.0.5:
|
|||||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||||
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
||||||
|
|
||||||
escodegen@^1.14.1:
|
escodegen@^2.0.0:
|
||||||
version "1.14.3"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
|
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
|
||||||
integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
|
integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==
|
||||||
dependencies:
|
dependencies:
|
||||||
esprima "^4.0.1"
|
esprima "^4.0.1"
|
||||||
estraverse "^4.2.0"
|
estraverse "^5.2.0"
|
||||||
esutils "^2.0.2"
|
esutils "^2.0.2"
|
||||||
optionator "^0.8.1"
|
optionator "^0.8.1"
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
@@ -4655,16 +4635,21 @@ esrecurse@^4.1.0, esrecurse@^4.3.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
estraverse "^5.2.0"
|
estraverse "^5.2.0"
|
||||||
|
|
||||||
estraverse@^4.1.1, estraverse@^4.2.0:
|
estraverse@^4.1.1:
|
||||||
version "4.3.0"
|
version "4.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
|
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
|
||||||
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
|
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
|
||||||
|
|
||||||
estraverse@^5.1.0, estraverse@^5.2.0:
|
estraverse@^5.1.0:
|
||||||
version "5.2.0"
|
version "5.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
|
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
|
||||||
integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
|
integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
|
||||||
|
|
||||||
|
estraverse@^5.2.0:
|
||||||
|
version "5.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
|
||||||
|
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
|
||||||
|
|
||||||
estree-walker@^0.6.1:
|
estree-walker@^0.6.1:
|
||||||
version "0.6.1"
|
version "0.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362"
|
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362"
|
||||||
@@ -4831,11 +4816,6 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
|
|||||||
assign-symbols "^1.0.0"
|
assign-symbols "^1.0.0"
|
||||||
is-extendable "^1.0.1"
|
is-extendable "^1.0.1"
|
||||||
|
|
||||||
extend@~3.0.2:
|
|
||||||
version "3.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
|
|
||||||
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
|
|
||||||
|
|
||||||
extglob@^2.0.4:
|
extglob@^2.0.4:
|
||||||
version "2.0.4"
|
version "2.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
|
resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
|
||||||
@@ -4850,16 +4830,6 @@ extglob@^2.0.4:
|
|||||||
snapdragon "^0.8.1"
|
snapdragon "^0.8.1"
|
||||||
to-regex "^3.0.1"
|
to-regex "^3.0.1"
|
||||||
|
|
||||||
extsprintf@1.3.0:
|
|
||||||
version "1.3.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
|
|
||||||
integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
|
|
||||||
|
|
||||||
extsprintf@^1.2.0:
|
|
||||||
version "1.4.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
|
|
||||||
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
|
|
||||||
|
|
||||||
fast-deep-equal@^3.1.1:
|
fast-deep-equal@^3.1.1:
|
||||||
version "3.1.3"
|
version "3.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
|
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
|
||||||
@@ -5077,11 +5047,6 @@ for-in@^1.0.2:
|
|||||||
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
|
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
|
||||||
integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
|
integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
|
||||||
|
|
||||||
forever-agent@~0.6.1:
|
|
||||||
version "0.6.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
|
||||||
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
|
|
||||||
|
|
||||||
fork-ts-checker-webpack-plugin@4.1.6:
|
fork-ts-checker-webpack-plugin@4.1.6:
|
||||||
version "4.1.6"
|
version "4.1.6"
|
||||||
resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz#5055c703febcf37fa06405d400c122b905167fc5"
|
resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz#5055c703febcf37fa06405d400c122b905167fc5"
|
||||||
@@ -5095,13 +5060,13 @@ fork-ts-checker-webpack-plugin@4.1.6:
|
|||||||
tapable "^1.0.0"
|
tapable "^1.0.0"
|
||||||
worker-rpc "^0.1.0"
|
worker-rpc "^0.1.0"
|
||||||
|
|
||||||
form-data@~2.3.2:
|
form-data@^3.0.0:
|
||||||
version "2.3.3"
|
version "3.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
|
resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"
|
||||||
integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
|
integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==
|
||||||
dependencies:
|
dependencies:
|
||||||
asynckit "^0.4.0"
|
asynckit "^0.4.0"
|
||||||
combined-stream "^1.0.6"
|
combined-stream "^1.0.8"
|
||||||
mime-types "^2.1.12"
|
mime-types "^2.1.12"
|
||||||
|
|
||||||
forwarded@~0.1.2:
|
forwarded@~0.1.2:
|
||||||
@@ -5250,13 +5215,6 @@ get-value@^2.0.3, get-value@^2.0.6:
|
|||||||
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
|
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
|
||||||
integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
|
integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
|
||||||
|
|
||||||
getpass@^0.1.1:
|
|
||||||
version "0.1.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
|
|
||||||
integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
|
|
||||||
dependencies:
|
|
||||||
assert-plus "^1.0.0"
|
|
||||||
|
|
||||||
glob-parent@^3.1.0:
|
glob-parent@^3.1.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
|
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
|
||||||
@@ -5370,19 +5328,6 @@ handle-thing@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
|
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
|
||||||
integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
|
integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
|
||||||
|
|
||||||
har-schema@^2.0.0:
|
|
||||||
version "2.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
|
|
||||||
integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
|
|
||||||
|
|
||||||
har-validator@~5.1.3:
|
|
||||||
version "5.1.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
|
|
||||||
integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
|
|
||||||
dependencies:
|
|
||||||
ajv "^6.12.3"
|
|
||||||
har-schema "^2.0.0"
|
|
||||||
|
|
||||||
harmony-reflect@^1.4.6:
|
harmony-reflect@^1.4.6:
|
||||||
version "1.6.1"
|
version "1.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.1.tgz#c108d4f2bb451efef7a37861fdbdae72c9bdefa9"
|
resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.1.tgz#c108d4f2bb451efef7a37861fdbdae72c9bdefa9"
|
||||||
@@ -5611,6 +5556,15 @@ http-parser-js@>=0.5.1:
|
|||||||
resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9"
|
resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9"
|
||||||
integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==
|
integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==
|
||||||
|
|
||||||
|
http-proxy-agent@^4.0.1:
|
||||||
|
version "4.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
|
||||||
|
integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
|
||||||
|
dependencies:
|
||||||
|
"@tootallnate/once" "1"
|
||||||
|
agent-base "6"
|
||||||
|
debug "4"
|
||||||
|
|
||||||
http-proxy-middleware@0.19.1:
|
http-proxy-middleware@0.19.1:
|
||||||
version "0.19.1"
|
version "0.19.1"
|
||||||
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a"
|
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a"
|
||||||
@@ -5630,20 +5584,19 @@ http-proxy@^1.17.0:
|
|||||||
follow-redirects "^1.0.0"
|
follow-redirects "^1.0.0"
|
||||||
requires-port "^1.0.0"
|
requires-port "^1.0.0"
|
||||||
|
|
||||||
http-signature@~1.2.0:
|
|
||||||
version "1.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
|
|
||||||
integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
|
|
||||||
dependencies:
|
|
||||||
assert-plus "^1.0.0"
|
|
||||||
jsprim "^1.2.2"
|
|
||||||
sshpk "^1.7.0"
|
|
||||||
|
|
||||||
https-browserify@^1.0.0:
|
https-browserify@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
|
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
|
||||||
integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
|
integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
|
||||||
|
|
||||||
|
https-proxy-agent@^5.0.0:
|
||||||
|
version "5.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
|
||||||
|
integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
|
||||||
|
dependencies:
|
||||||
|
agent-base "6"
|
||||||
|
debug "4"
|
||||||
|
|
||||||
human-signals@^1.1.1:
|
human-signals@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
|
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
|
||||||
@@ -6068,10 +6021,10 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4:
|
|||||||
dependencies:
|
dependencies:
|
||||||
isobject "^3.0.1"
|
isobject "^3.0.1"
|
||||||
|
|
||||||
is-potential-custom-element-name@^1.0.0:
|
is-potential-custom-element-name@^1.0.1:
|
||||||
version "1.0.0"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397"
|
resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
|
||||||
integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c=
|
integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
|
||||||
|
|
||||||
is-regex@^1.0.4, is-regex@^1.1.1:
|
is-regex@^1.0.4, is-regex@^1.1.1:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
@@ -6125,7 +6078,7 @@ is-symbol@^1.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
has-symbols "^1.0.1"
|
has-symbols "^1.0.1"
|
||||||
|
|
||||||
is-typedarray@^1.0.0, is-typedarray@~1.0.0:
|
is-typedarray@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
||||||
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
|
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
|
||||||
@@ -6169,11 +6122,6 @@ isobject@^3.0.0, isobject@^3.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
|
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
|
||||||
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
|
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
|
||||||
|
|
||||||
isstream@~0.1.2:
|
|
||||||
version "0.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
|
||||||
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
|
|
||||||
|
|
||||||
istanbul-lib-coverage@^3.0.0:
|
istanbul-lib-coverage@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec"
|
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec"
|
||||||
@@ -6678,41 +6626,37 @@ js-yaml@^3.13.1:
|
|||||||
argparse "^1.0.7"
|
argparse "^1.0.7"
|
||||||
esprima "^4.0.0"
|
esprima "^4.0.0"
|
||||||
|
|
||||||
jsbn@~0.1.0:
|
|
||||||
version "0.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
|
|
||||||
integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
|
|
||||||
|
|
||||||
jsdom@^16.4.0:
|
jsdom@^16.4.0:
|
||||||
version "16.4.0"
|
version "16.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb"
|
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
|
||||||
integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==
|
integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==
|
||||||
dependencies:
|
dependencies:
|
||||||
abab "^2.0.3"
|
abab "^2.0.5"
|
||||||
acorn "^7.1.1"
|
acorn "^8.2.4"
|
||||||
acorn-globals "^6.0.0"
|
acorn-globals "^6.0.0"
|
||||||
cssom "^0.4.4"
|
cssom "^0.4.4"
|
||||||
cssstyle "^2.2.0"
|
cssstyle "^2.3.0"
|
||||||
data-urls "^2.0.0"
|
data-urls "^2.0.0"
|
||||||
decimal.js "^10.2.0"
|
decimal.js "^10.2.1"
|
||||||
domexception "^2.0.1"
|
domexception "^2.0.1"
|
||||||
escodegen "^1.14.1"
|
escodegen "^2.0.0"
|
||||||
|
form-data "^3.0.0"
|
||||||
html-encoding-sniffer "^2.0.1"
|
html-encoding-sniffer "^2.0.1"
|
||||||
is-potential-custom-element-name "^1.0.0"
|
http-proxy-agent "^4.0.1"
|
||||||
|
https-proxy-agent "^5.0.0"
|
||||||
|
is-potential-custom-element-name "^1.0.1"
|
||||||
nwsapi "^2.2.0"
|
nwsapi "^2.2.0"
|
||||||
parse5 "5.1.1"
|
parse5 "6.0.1"
|
||||||
request "^2.88.2"
|
saxes "^5.0.1"
|
||||||
request-promise-native "^1.0.8"
|
|
||||||
saxes "^5.0.0"
|
|
||||||
symbol-tree "^3.2.4"
|
symbol-tree "^3.2.4"
|
||||||
tough-cookie "^3.0.1"
|
tough-cookie "^4.0.0"
|
||||||
w3c-hr-time "^1.0.2"
|
w3c-hr-time "^1.0.2"
|
||||||
w3c-xmlserializer "^2.0.0"
|
w3c-xmlserializer "^2.0.0"
|
||||||
webidl-conversions "^6.1.0"
|
webidl-conversions "^6.1.0"
|
||||||
whatwg-encoding "^1.0.5"
|
whatwg-encoding "^1.0.5"
|
||||||
whatwg-mimetype "^2.3.0"
|
whatwg-mimetype "^2.3.0"
|
||||||
whatwg-url "^8.0.0"
|
whatwg-url "^8.5.0"
|
||||||
ws "^7.2.3"
|
ws "^7.4.6"
|
||||||
xml-name-validator "^3.0.0"
|
xml-name-validator "^3.0.0"
|
||||||
|
|
||||||
jsesc@^2.5.1:
|
jsesc@^2.5.1:
|
||||||
@@ -6745,21 +6689,11 @@ json-schema-traverse@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
|
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
|
||||||
integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
|
integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
|
||||||
|
|
||||||
json-schema@0.2.3:
|
|
||||||
version "0.2.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
|
|
||||||
integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
|
|
||||||
|
|
||||||
json-stable-stringify-without-jsonify@^1.0.1:
|
json-stable-stringify-without-jsonify@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
|
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
|
||||||
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
|
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
|
||||||
|
|
||||||
json-stringify-safe@~5.0.1:
|
|
||||||
version "5.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
|
|
||||||
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
|
|
||||||
|
|
||||||
json3@^3.3.3:
|
json3@^3.3.3:
|
||||||
version "3.3.3"
|
version "3.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"
|
resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"
|
||||||
@@ -6795,16 +6729,6 @@ jsonfile@^6.0.1:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
graceful-fs "^4.1.6"
|
graceful-fs "^4.1.6"
|
||||||
|
|
||||||
jsprim@^1.2.2:
|
|
||||||
version "1.4.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
|
|
||||||
integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
|
|
||||||
dependencies:
|
|
||||||
assert-plus "1.0.0"
|
|
||||||
extsprintf "1.3.0"
|
|
||||||
json-schema "0.2.3"
|
|
||||||
verror "1.10.0"
|
|
||||||
|
|
||||||
"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0:
|
"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0:
|
||||||
version "3.2.0"
|
version "3.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82"
|
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82"
|
||||||
@@ -6888,7 +6812,7 @@ levn@^0.4.1:
|
|||||||
levn@~0.3.0:
|
levn@~0.3.0:
|
||||||
version "0.3.0"
|
version "0.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
|
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
|
||||||
integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
|
integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==
|
||||||
dependencies:
|
dependencies:
|
||||||
prelude-ls "~1.1.2"
|
prelude-ls "~1.1.2"
|
||||||
type-check "~0.3.2"
|
type-check "~0.3.2"
|
||||||
@@ -6983,11 +6907,6 @@ lodash.memoize@^4.1.2:
|
|||||||
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
|
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
|
||||||
integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
|
integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
|
||||||
|
|
||||||
lodash.sortby@^4.7.0:
|
|
||||||
version "4.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
|
|
||||||
integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
|
|
||||||
|
|
||||||
lodash.template@^4.5.0:
|
lodash.template@^4.5.0:
|
||||||
version "4.5.0"
|
version "4.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab"
|
resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab"
|
||||||
@@ -7008,7 +6927,7 @@ lodash.uniq@^4.5.0:
|
|||||||
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
||||||
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
|
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
|
||||||
|
|
||||||
"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.5:
|
"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.5, lodash@^4.7.0:
|
||||||
version "4.17.21"
|
version "4.17.21"
|
||||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||||
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
||||||
@@ -7197,7 +7116,19 @@ mime-db@1.46.0, "mime-db@>= 1.43.0 < 2":
|
|||||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee"
|
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee"
|
||||||
integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==
|
integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==
|
||||||
|
|
||||||
mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24:
|
mime-db@1.52.0:
|
||||||
|
version "1.52.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
|
||||||
|
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
|
||||||
|
|
||||||
|
mime-types@^2.1.12:
|
||||||
|
version "2.1.35"
|
||||||
|
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
|
||||||
|
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
|
||||||
|
dependencies:
|
||||||
|
mime-db "1.52.0"
|
||||||
|
|
||||||
|
mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24:
|
||||||
version "2.1.29"
|
version "2.1.29"
|
||||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2"
|
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2"
|
||||||
integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==
|
integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==
|
||||||
@@ -7579,11 +7510,6 @@ nwsapi@^2.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
|
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
|
||||||
integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
|
integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
|
||||||
|
|
||||||
oauth-sign@~0.9.0:
|
|
||||||
version "0.9.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
|
|
||||||
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
|
|
||||||
|
|
||||||
object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
|
object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
|
||||||
version "4.1.1"
|
version "4.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||||
@@ -7915,10 +7841,10 @@ parse-json@^5.0.0:
|
|||||||
json-parse-even-better-errors "^2.3.0"
|
json-parse-even-better-errors "^2.3.0"
|
||||||
lines-and-columns "^1.1.6"
|
lines-and-columns "^1.1.6"
|
||||||
|
|
||||||
parse5@5.1.1:
|
parse5@6.0.1:
|
||||||
version "5.1.1"
|
version "6.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
|
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
|
||||||
integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
|
integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
|
||||||
|
|
||||||
parseurl@~1.3.2, parseurl@~1.3.3:
|
parseurl@~1.3.2, parseurl@~1.3.3:
|
||||||
version "1.3.3"
|
version "1.3.3"
|
||||||
@@ -8778,7 +8704,7 @@ prelude-ls@^1.2.1:
|
|||||||
prelude-ls@~1.1.2:
|
prelude-ls@~1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
|
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
|
||||||
integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
|
integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==
|
||||||
|
|
||||||
prepend-http@^1.0.0:
|
prepend-http@^1.0.0:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
@@ -8882,7 +8808,7 @@ prr@~1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
|
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
|
||||||
integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
|
integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
|
||||||
|
|
||||||
psl@^1.1.28:
|
psl@^1.1.33:
|
||||||
version "1.8.0"
|
version "1.8.0"
|
||||||
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
|
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
|
||||||
integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
|
integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
|
||||||
@@ -8954,11 +8880,6 @@ qs@6.7.0:
|
|||||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
|
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
|
||||||
integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
|
integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
|
||||||
|
|
||||||
qs@~6.5.2:
|
|
||||||
version "6.5.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
|
|
||||||
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
|
|
||||||
|
|
||||||
query-string@^4.1.0:
|
query-string@^4.1.0:
|
||||||
version "4.3.4"
|
version "4.3.4"
|
||||||
resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
|
resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
|
||||||
@@ -9407,48 +9328,6 @@ repeat-string@^1.6.1:
|
|||||||
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
|
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
|
||||||
integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
|
integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
|
||||||
|
|
||||||
request-promise-core@1.1.4:
|
|
||||||
version "1.1.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f"
|
|
||||||
integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==
|
|
||||||
dependencies:
|
|
||||||
lodash "^4.17.19"
|
|
||||||
|
|
||||||
request-promise-native@^1.0.8:
|
|
||||||
version "1.0.9"
|
|
||||||
resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28"
|
|
||||||
integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==
|
|
||||||
dependencies:
|
|
||||||
request-promise-core "1.1.4"
|
|
||||||
stealthy-require "^1.1.1"
|
|
||||||
tough-cookie "^2.3.3"
|
|
||||||
|
|
||||||
request@^2.88.2:
|
|
||||||
version "2.88.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
|
|
||||||
integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
|
|
||||||
dependencies:
|
|
||||||
aws-sign2 "~0.7.0"
|
|
||||||
aws4 "^1.8.0"
|
|
||||||
caseless "~0.12.0"
|
|
||||||
combined-stream "~1.0.6"
|
|
||||||
extend "~3.0.2"
|
|
||||||
forever-agent "~0.6.1"
|
|
||||||
form-data "~2.3.2"
|
|
||||||
har-validator "~5.1.3"
|
|
||||||
http-signature "~1.2.0"
|
|
||||||
is-typedarray "~1.0.0"
|
|
||||||
isstream "~0.1.2"
|
|
||||||
json-stringify-safe "~5.0.1"
|
|
||||||
mime-types "~2.1.19"
|
|
||||||
oauth-sign "~0.9.0"
|
|
||||||
performance-now "^2.1.0"
|
|
||||||
qs "~6.5.2"
|
|
||||||
safe-buffer "^5.1.2"
|
|
||||||
tough-cookie "~2.5.0"
|
|
||||||
tunnel-agent "^0.6.0"
|
|
||||||
uuid "^3.3.2"
|
|
||||||
|
|
||||||
require-directory@^2.1.1:
|
require-directory@^2.1.1:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
||||||
@@ -9666,7 +9545,7 @@ safe-regex@^1.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ret "~0.1.10"
|
ret "~0.1.10"
|
||||||
|
|
||||||
"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
|
"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0:
|
||||||
version "2.1.2"
|
version "2.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||||
@@ -9707,7 +9586,7 @@ sax@~1.2.4:
|
|||||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||||
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
||||||
|
|
||||||
saxes@^5.0.0:
|
saxes@^5.0.1:
|
||||||
version "5.0.1"
|
version "5.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
|
resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
|
||||||
integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
|
integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
|
||||||
@@ -10132,21 +10011,6 @@ sprintf-js@~1.0.2:
|
|||||||
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
||||||
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
|
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
|
||||||
|
|
||||||
sshpk@^1.7.0:
|
|
||||||
version "1.16.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
|
|
||||||
integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
|
|
||||||
dependencies:
|
|
||||||
asn1 "~0.2.3"
|
|
||||||
assert-plus "^1.0.0"
|
|
||||||
bcrypt-pbkdf "^1.0.0"
|
|
||||||
dashdash "^1.12.0"
|
|
||||||
ecc-jsbn "~0.1.1"
|
|
||||||
getpass "^0.1.1"
|
|
||||||
jsbn "~0.1.0"
|
|
||||||
safer-buffer "^2.0.2"
|
|
||||||
tweetnacl "~0.14.0"
|
|
||||||
|
|
||||||
ssri@^6.0.1:
|
ssri@^6.0.1:
|
||||||
version "6.0.1"
|
version "6.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
|
resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
|
||||||
@@ -10191,11 +10055,6 @@ static-extend@^0.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
|
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
|
||||||
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
|
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
|
||||||
|
|
||||||
stealthy-require@^1.1.1:
|
|
||||||
version "1.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
|
|
||||||
integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
|
|
||||||
|
|
||||||
stream-browserify@^2.0.1:
|
stream-browserify@^2.0.1:
|
||||||
version "2.0.2"
|
version "2.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
|
resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
|
||||||
@@ -10645,27 +10504,19 @@ toidentifier@1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
|
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
|
||||||
integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
|
integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
|
||||||
|
|
||||||
tough-cookie@^2.3.3, tough-cookie@~2.5.0:
|
tough-cookie@^4.0.0:
|
||||||
version "2.5.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
|
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4"
|
||||||
integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
|
integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==
|
||||||
dependencies:
|
dependencies:
|
||||||
psl "^1.1.28"
|
psl "^1.1.33"
|
||||||
punycode "^2.1.1"
|
punycode "^2.1.1"
|
||||||
|
universalify "^0.1.2"
|
||||||
|
|
||||||
tough-cookie@^3.0.1:
|
tr46@^2.1.0:
|
||||||
version "3.0.1"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2"
|
resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240"
|
||||||
integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==
|
integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==
|
||||||
dependencies:
|
|
||||||
ip-regex "^2.1.0"
|
|
||||||
psl "^1.1.28"
|
|
||||||
punycode "^2.1.1"
|
|
||||||
|
|
||||||
tr46@^2.0.2:
|
|
||||||
version "2.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479"
|
|
||||||
integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==
|
|
||||||
dependencies:
|
dependencies:
|
||||||
punycode "^2.1.1"
|
punycode "^2.1.1"
|
||||||
|
|
||||||
@@ -10716,18 +10567,6 @@ tty-browserify@0.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
|
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
|
||||||
integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
|
integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
|
||||||
|
|
||||||
tunnel-agent@^0.6.0:
|
|
||||||
version "0.6.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
|
|
||||||
integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
|
|
||||||
dependencies:
|
|
||||||
safe-buffer "^5.0.1"
|
|
||||||
|
|
||||||
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
|
|
||||||
version "0.14.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
|
|
||||||
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
|
|
||||||
|
|
||||||
type-check@^0.4.0, type-check@~0.4.0:
|
type-check@^0.4.0, type-check@~0.4.0:
|
||||||
version "0.4.0"
|
version "0.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
|
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
|
||||||
@@ -10738,7 +10577,7 @@ type-check@^0.4.0, type-check@~0.4.0:
|
|||||||
type-check@~0.3.2:
|
type-check@~0.3.2:
|
||||||
version "0.3.2"
|
version "0.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
|
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
|
||||||
integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
|
integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==
|
||||||
dependencies:
|
dependencies:
|
||||||
prelude-ls "~1.1.2"
|
prelude-ls "~1.1.2"
|
||||||
|
|
||||||
@@ -10866,7 +10705,7 @@ unique-string@^1.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
crypto-random-string "^1.0.0"
|
crypto-random-string "^1.0.0"
|
||||||
|
|
||||||
universalify@^0.1.0:
|
universalify@^0.1.0, universalify@^0.1.2:
|
||||||
version "0.1.2"
|
version "0.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
|
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
|
||||||
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
|
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
|
||||||
@@ -11049,15 +10888,6 @@ vendors@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e"
|
resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e"
|
||||||
integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==
|
integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==
|
||||||
|
|
||||||
verror@1.10.0:
|
|
||||||
version "1.10.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
|
|
||||||
integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
|
|
||||||
dependencies:
|
|
||||||
assert-plus "^1.0.0"
|
|
||||||
core-util-is "1.0.2"
|
|
||||||
extsprintf "^1.2.0"
|
|
||||||
|
|
||||||
vm-browserify@^1.0.1:
|
vm-browserify@^1.0.1:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
|
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
|
||||||
@@ -11260,13 +11090,13 @@ whatwg-mimetype@^2.3.0:
|
|||||||
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
|
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
|
||||||
integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
|
integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
|
||||||
|
|
||||||
whatwg-url@^8.0.0:
|
whatwg-url@^8.0.0, whatwg-url@^8.5.0:
|
||||||
version "8.4.0"
|
version "8.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837"
|
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77"
|
||||||
integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==
|
integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==
|
||||||
dependencies:
|
dependencies:
|
||||||
lodash.sortby "^4.7.0"
|
lodash "^4.7.0"
|
||||||
tr46 "^2.0.2"
|
tr46 "^2.1.0"
|
||||||
webidl-conversions "^6.1.0"
|
webidl-conversions "^6.1.0"
|
||||||
|
|
||||||
which-module@^2.0.0:
|
which-module@^2.0.0:
|
||||||
@@ -11500,10 +11330,10 @@ ws@^6.2.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
async-limiter "~1.0.0"
|
async-limiter "~1.0.0"
|
||||||
|
|
||||||
ws@^7.2.3:
|
ws@^7.4.6:
|
||||||
version "7.4.3"
|
version "7.5.8"
|
||||||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd"
|
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.8.tgz#ac2729881ab9e7cbaf8787fe3469a48c5c7f636a"
|
||||||
integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==
|
integrity sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==
|
||||||
|
|
||||||
xml-name-validator@^3.0.0:
|
xml-name-validator@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
|
9
pom.xml
9
pom.xml
@@ -28,7 +28,7 @@
|
|||||||
<groupId>org.apache.rocketmq</groupId>
|
<groupId>org.apache.rocketmq</groupId>
|
||||||
<artifactId>rocketmq-dashboard</artifactId>
|
<artifactId>rocketmq-dashboard</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<version>2.0.1-SNAPSHOT</version>
|
<version>1.0.1-SNAPSHOT</version>
|
||||||
<name>rocketmq-dashboard</name>
|
<name>rocketmq-dashboard</name>
|
||||||
|
|
||||||
<scm>
|
<scm>
|
||||||
@@ -91,10 +91,10 @@
|
|||||||
<commons-io.version>2.4</commons-io.version>
|
<commons-io.version>2.4</commons-io.version>
|
||||||
<commons-cli.version>1.2</commons-cli.version>
|
<commons-cli.version>1.2</commons-cli.version>
|
||||||
<commons-collections.version>3.2.2</commons-collections.version>
|
<commons-collections.version>3.2.2</commons-collections.version>
|
||||||
<rocketmq.version>5.1.0</rocketmq.version>
|
<rocketmq.version>4.9.3</rocketmq.version>
|
||||||
<surefire.version>2.19.1</surefire.version>
|
<surefire.version>2.19.1</surefire.version>
|
||||||
<aspectj.version>1.9.6</aspectj.version>
|
<aspectj.version>1.9.6</aspectj.version>
|
||||||
<lombok.version>1.18.22</lombok.version>
|
<lombok.version>1.18.12</lombok.version>
|
||||||
<main.basedir>${basedir}/../..</main.basedir>
|
<main.basedir>${basedir}/../..</main.basedir>
|
||||||
<docker.image.prefix>apacherocketmq</docker.image.prefix>
|
<docker.image.prefix>apacherocketmq</docker.image.prefix>
|
||||||
<spring.boot.version>2.6.0</spring.boot.version>
|
<spring.boot.version>2.6.0</spring.boot.version>
|
||||||
@@ -104,7 +104,7 @@
|
|||||||
<easyexcel.version>2.2.10</easyexcel.version>
|
<easyexcel.version>2.2.10</easyexcel.version>
|
||||||
<asm.version>4.2</asm.version>
|
<asm.version>4.2</asm.version>
|
||||||
<junit.version>4.12</junit.version>
|
<junit.version>4.12</junit.version>
|
||||||
<snakeyaml.version>1.32</snakeyaml.version>
|
<snakeyaml.version>1.30</snakeyaml.version>
|
||||||
<cglib.version>2.2.2</cglib.version>
|
<cglib.version>2.2.2</cglib.version>
|
||||||
<joor.version>0.9.6</joor.version>
|
<joor.version>0.9.6</joor.version>
|
||||||
<bcpkix-jdk15on.version>1.68</bcpkix-jdk15on.version>
|
<bcpkix-jdk15on.version>1.68</bcpkix-jdk15on.version>
|
||||||
@@ -186,7 +186,6 @@
|
|||||||
<groupId>org.apache.rocketmq</groupId>
|
<groupId>org.apache.rocketmq</groupId>
|
||||||
<artifactId>rocketmq-broker</artifactId>
|
<artifactId>rocketmq-broker</artifactId>
|
||||||
<version>${rocketmq.version}</version>
|
<version>${rocketmq.version}</version>
|
||||||
<scope>test</scope>
|
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
|
@@ -21,7 +21,7 @@ import org.apache.commons.collections.MapUtils;
|
|||||||
import org.apache.commons.pool2.PooledObject;
|
import org.apache.commons.pool2.PooledObject;
|
||||||
import org.apache.commons.pool2.PooledObjectFactory;
|
import org.apache.commons.pool2.PooledObjectFactory;
|
||||||
import org.apache.commons.pool2.impl.DefaultPooledObject;
|
import org.apache.commons.pool2.impl.DefaultPooledObject;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
@@ -43,8 +43,6 @@ public class RMQConfigure {
|
|||||||
//use rocketmq.namesrv.addr first,if it is empty,than use system proerty or system env
|
//use rocketmq.namesrv.addr first,if it is empty,than use system proerty or system env
|
||||||
private volatile String namesrvAddr = System.getProperty(MixAll.NAMESRV_ADDR_PROPERTY, System.getenv(MixAll.NAMESRV_ADDR_ENV));
|
private volatile String namesrvAddr = System.getProperty(MixAll.NAMESRV_ADDR_PROPERTY, System.getenv(MixAll.NAMESRV_ADDR_ENV));
|
||||||
|
|
||||||
private volatile String proxyAddr;
|
|
||||||
|
|
||||||
private volatile String isVIPChannel = System.getProperty(SEND_MESSAGE_WITH_VIP_CHANNEL_PROPERTY, "true");
|
private volatile String isVIPChannel = System.getProperty(SEND_MESSAGE_WITH_VIP_CHANNEL_PROPERTY, "true");
|
||||||
|
|
||||||
|
|
||||||
@@ -64,8 +62,6 @@ public class RMQConfigure {
|
|||||||
|
|
||||||
private List<String> namesrvAddrs = new ArrayList<>();
|
private List<String> namesrvAddrs = new ArrayList<>();
|
||||||
|
|
||||||
private List<String> proxyAddrs = new ArrayList<>();
|
|
||||||
|
|
||||||
public String getAccessKey() {
|
public String getAccessKey() {
|
||||||
return accessKey;
|
return accessKey;
|
||||||
}
|
}
|
||||||
@@ -90,25 +86,6 @@ public class RMQConfigure {
|
|||||||
return namesrvAddrs;
|
return namesrvAddrs;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getProxyAddrs() {
|
|
||||||
return this.proxyAddrs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setProxyAddrs(List<String> proxyAddrs) {
|
|
||||||
this.proxyAddrs = proxyAddrs;
|
|
||||||
if (CollectionUtils.isNotEmpty(proxyAddrs)) {
|
|
||||||
this.setProxyAddr(proxyAddrs.get(0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getProxyAddr() {
|
|
||||||
return proxyAddr;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setProxyAddr(String proxyAddr) {
|
|
||||||
this.proxyAddr = proxyAddr;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setNamesrvAddrs(List<String> namesrvAddrs) {
|
public void setNamesrvAddrs(List<String> namesrvAddrs) {
|
||||||
this.namesrvAddrs = namesrvAddrs;
|
this.namesrvAddrs = namesrvAddrs;
|
||||||
if (CollectionUtils.isNotEmpty(namesrvAddrs)) {
|
if (CollectionUtils.isNotEmpty(namesrvAddrs)) {
|
||||||
|
@@ -19,7 +19,7 @@ package org.apache.rocketmq.dashboard.controller;
|
|||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.dashboard.model.ConnectionInfo;
|
import org.apache.rocketmq.dashboard.model.ConnectionInfo;
|
||||||
import org.apache.rocketmq.dashboard.model.request.ConsumerConfigInfo;
|
import org.apache.rocketmq.dashboard.model.request.ConsumerConfigInfo;
|
||||||
import org.apache.rocketmq.dashboard.model.request.DeleteSubGroupRequest;
|
import org.apache.rocketmq.dashboard.model.request.DeleteSubGroupRequest;
|
||||||
@@ -47,14 +47,14 @@ public class ConsumerController {
|
|||||||
|
|
||||||
@RequestMapping(value = "/groupList.query")
|
@RequestMapping(value = "/groupList.query")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public Object list(@RequestParam(value = "skipSysGroup", required = false) boolean skipSysGroup, String address) {
|
public Object list(@RequestParam(value = "skipSysGroup", required = false) boolean skipSysGroup) {
|
||||||
return consumerService.queryGroupList(skipSysGroup, address);
|
return consumerService.queryGroupList(skipSysGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "/group.query")
|
@RequestMapping(value = "/group.query")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public Object groupQuery(@RequestParam String consumerGroup, String address) {
|
public Object groupQuery(@RequestParam String consumerGroup) {
|
||||||
return consumerService.queryGroup(consumerGroup, address);
|
return consumerService.queryGroup(consumerGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "/resetOffset.do", method = {RequestMethod.POST})
|
@RequestMapping(value = "/resetOffset.do", method = {RequestMethod.POST})
|
||||||
@@ -99,14 +99,14 @@ public class ConsumerController {
|
|||||||
|
|
||||||
@RequestMapping(value = "/queryTopicByConsumer.query")
|
@RequestMapping(value = "/queryTopicByConsumer.query")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public Object queryConsumerByTopic(@RequestParam String consumerGroup, String address) {
|
public Object queryConsumerByTopic(@RequestParam String consumerGroup) {
|
||||||
return consumerService.queryConsumeStatsListByGroupName(consumerGroup, address);
|
return consumerService.queryConsumeStatsListByGroupName(consumerGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "/consumerConnection.query")
|
@RequestMapping(value = "/consumerConnection.query")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public Object consumerConnection(@RequestParam(required = false) String consumerGroup, String address) {
|
public Object consumerConnection(@RequestParam(required = false) String consumerGroup) {
|
||||||
ConsumerConnection consumerConnection = consumerService.getConsumerConnection(consumerGroup, address);
|
ConsumerConnection consumerConnection = consumerService.getConsumerConnection(consumerGroup);
|
||||||
consumerConnection.setConnectionSet(ConnectionInfo.buildConnectionInfoHashSet(consumerConnection.getConnectionSet()));
|
consumerConnection.setConnectionSet(ConnectionInfo.buildConnectionInfoHashSet(consumerConnection.getConnectionSet()));
|
||||||
return consumerConnection;
|
return consumerConnection;
|
||||||
}
|
}
|
||||||
|
@@ -18,7 +18,7 @@ package org.apache.rocketmq.dashboard.controller;
|
|||||||
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import org.apache.rocketmq.common.Pair;
|
import org.apache.rocketmq.common.Pair;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
import org.apache.rocketmq.dashboard.model.MessagePage;
|
import org.apache.rocketmq.dashboard.model.MessagePage;
|
||||||
import org.apache.rocketmq.dashboard.model.MessageView;
|
import org.apache.rocketmq.dashboard.model.MessageView;
|
||||||
import org.apache.rocketmq.dashboard.model.request.MessageQuery;
|
import org.apache.rocketmq.dashboard.model.request.MessageQuery;
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
package org.apache.rocketmq.dashboard.controller;
|
package org.apache.rocketmq.dashboard.controller;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ProducerConnection;
|
import org.apache.rocketmq.common.protocol.body.ProducerConnection;
|
||||||
import org.apache.rocketmq.dashboard.model.ConnectionInfo;
|
import org.apache.rocketmq.dashboard.model.ConnectionInfo;
|
||||||
import org.apache.rocketmq.dashboard.permisssion.Permission;
|
import org.apache.rocketmq.dashboard.permisssion.Permission;
|
||||||
import org.apache.rocketmq.dashboard.service.ProducerService;
|
import org.apache.rocketmq.dashboard.service.ProducerService;
|
||||||
|
@@ -1,54 +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.controller;
|
|
||||||
|
|
||||||
import org.apache.rocketmq.dashboard.permisssion.Permission;
|
|
||||||
import org.apache.rocketmq.dashboard.service.ProxyService;
|
|
||||||
import org.springframework.stereotype.Controller;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMethod;
|
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
|
||||||
import org.springframework.web.bind.annotation.ResponseBody;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
|
|
||||||
@Controller
|
|
||||||
@RequestMapping("/proxy")
|
|
||||||
@Permission
|
|
||||||
public class ProxyController {
|
|
||||||
@Resource
|
|
||||||
private ProxyService proxyService;
|
|
||||||
@RequestMapping(value = "/homePage.query", method = RequestMethod.GET)
|
|
||||||
@ResponseBody
|
|
||||||
public Object homePage() {
|
|
||||||
return proxyService.getProxyHomePage();
|
|
||||||
}
|
|
||||||
|
|
||||||
@RequestMapping(value = "/addProxyAddr.do", method = RequestMethod.POST)
|
|
||||||
@ResponseBody
|
|
||||||
public Object addProxyAddr(@RequestParam String newProxyAddr) {
|
|
||||||
proxyService.addProxyAddrList(newProxyAddr);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@RequestMapping(value = "/updateProxyAddr.do", method = RequestMethod.POST)
|
|
||||||
@ResponseBody
|
|
||||||
public Object updateProxyAddr(@RequestParam String proxyAddr) {
|
|
||||||
proxyService.updateProxyAddrList(proxyAddr);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -56,12 +56,6 @@ public class TopicController {
|
|||||||
return topicService.fetchAllTopicList(skipSysProcess, skipRetryAndDlq);
|
return topicService.fetchAllTopicList(skipSysProcess, skipRetryAndDlq);
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "/list.queryTopicType", method = RequestMethod.GET)
|
|
||||||
@ResponseBody
|
|
||||||
public Object listTopicType() {
|
|
||||||
return topicService.examineAllTopicType();
|
|
||||||
}
|
|
||||||
|
|
||||||
@RequestMapping(value = "/stats.query", method = RequestMethod.GET)
|
@RequestMapping(value = "/stats.query", method = RequestMethod.GET)
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public Object stats(@RequestParam String topic) {
|
public Object stats(@RequestParam String topic) {
|
||||||
|
@@ -20,7 +20,7 @@ import com.google.common.collect.Sets;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import org.apache.rocketmq.common.MQVersion;
|
import org.apache.rocketmq.common.MQVersion;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.Connection;
|
import org.apache.rocketmq.common.protocol.body.Connection;
|
||||||
|
|
||||||
public class ConnectionInfo extends Connection {
|
public class ConnectionInfo extends Connection {
|
||||||
private String versionDesc;
|
private String versionDesc;
|
||||||
|
@@ -16,7 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.rocketmq.dashboard.model;
|
package org.apache.rocketmq.dashboard.model;
|
||||||
|
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.RollbackStats;
|
import org.apache.rocketmq.common.admin.RollbackStats;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@@ -17,8 +17,8 @@
|
|||||||
package org.apache.rocketmq.dashboard.model;
|
package org.apache.rocketmq.dashboard.model;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.CMResult;
|
import org.apache.rocketmq.common.protocol.body.CMResult;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class DlqMessageResendResult {
|
public class DlqMessageResendResult {
|
||||||
|
@@ -16,10 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.rocketmq.dashboard.model;
|
package org.apache.rocketmq.dashboard.model;
|
||||||
|
|
||||||
import org.apache.rocketmq.remoting.protocol.heartbeat.ConsumeType;
|
import org.apache.rocketmq.common.protocol.heartbeat.ConsumeType;
|
||||||
import org.apache.rocketmq.remoting.protocol.heartbeat.MessageModel;
|
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class GroupConsumeInfo implements Comparable<GroupConsumeInfo> {
|
public class GroupConsumeInfo implements Comparable<GroupConsumeInfo> {
|
||||||
private String group;
|
private String group;
|
||||||
@@ -27,11 +25,8 @@ public class GroupConsumeInfo implements Comparable<GroupConsumeInfo> {
|
|||||||
private int count;
|
private int count;
|
||||||
private ConsumeType consumeType;
|
private ConsumeType consumeType;
|
||||||
private MessageModel messageModel;
|
private MessageModel messageModel;
|
||||||
private List<String> address;
|
|
||||||
private int consumeTps;
|
private int consumeTps;
|
||||||
private long diffTotal = -1;
|
private long diffTotal = -1;
|
||||||
private String subGroupType = "NORMAL";
|
|
||||||
|
|
||||||
|
|
||||||
public String getGroup() {
|
public String getGroup() {
|
||||||
return group;
|
return group;
|
||||||
@@ -73,22 +68,6 @@ public class GroupConsumeInfo implements Comparable<GroupConsumeInfo> {
|
|||||||
this.diffTotal = diffTotal;
|
this.diffTotal = diffTotal;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getAddress() {
|
|
||||||
return address;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAddress(List<String> address) {
|
|
||||||
this.address = address;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSubGroupType() {
|
|
||||||
return subGroupType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSubGroupType(String subGroupType) {
|
|
||||||
this.subGroupType = subGroupType;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compareTo(GroupConsumeInfo o) {
|
public int compareTo(GroupConsumeInfo o) {
|
||||||
if (this.count != o.count) {
|
if (this.count != o.count) {
|
||||||
|
@@ -16,7 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.rocketmq.dashboard.model;
|
package org.apache.rocketmq.dashboard.model;
|
||||||
|
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.OffsetWrapper;
|
import org.apache.rocketmq.common.admin.OffsetWrapper;
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
|
|
||||||
|
@@ -16,7 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.rocketmq.dashboard.model.request;
|
package org.apache.rocketmq.dashboard.model.request;
|
||||||
|
|
||||||
import org.apache.rocketmq.remoting.protocol.subscription.SubscriptionGroupConfig;
|
import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package org.apache.rocketmq.dashboard.model.request;
|
package org.apache.rocketmq.dashboard.model.request;
|
||||||
|
|
||||||
import com.google.common.base.Objects;
|
import com.google.common.base.Objects;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -31,7 +32,6 @@ public class TopicConfigInfo {
|
|||||||
private int perm;
|
private int perm;
|
||||||
private boolean order;
|
private boolean order;
|
||||||
|
|
||||||
private String messageType;
|
|
||||||
public List<String> getClusterNameList() {
|
public List<String> getClusterNameList() {
|
||||||
return clusterNameList;
|
return clusterNameList;
|
||||||
}
|
}
|
||||||
@@ -92,18 +92,6 @@ public class TopicConfigInfo {
|
|||||||
this.order = order;
|
this.order = order;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public String getMessageType() {
|
|
||||||
return messageType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMessageType(String messageType) {
|
|
||||||
this.messageType = messageType;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o)
|
if (this == o)
|
||||||
@@ -115,13 +103,12 @@ public class TopicConfigInfo {
|
|||||||
readQueueNums == that.readQueueNums &&
|
readQueueNums == that.readQueueNums &&
|
||||||
perm == that.perm &&
|
perm == that.perm &&
|
||||||
order == that.order &&
|
order == that.order &&
|
||||||
Objects.equal(topicName, that.topicName) &&
|
Objects.equal(topicName, that.topicName);
|
||||||
Objects.equal(messageType, that.messageType);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hashCode(topicName, writeQueueNums, readQueueNums, perm, order,messageType);
|
return Objects.hashCode(topicName, writeQueueNums, readQueueNums, perm, order);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1,45 +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.model.request;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class TopicTypeList {
|
|
||||||
private List<String> topicNameList;
|
|
||||||
private List<String> messageTypeList;
|
|
||||||
|
|
||||||
public List<String> getTopicNameList() {
|
|
||||||
return topicNameList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTopicNameList(List<String> topicNameList) {
|
|
||||||
this.topicNameList = topicNameList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getMessageTypeList() {
|
|
||||||
return messageTypeList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMessageTypeList(List<String> messageTypeList) {
|
|
||||||
this.messageTypeList = messageTypeList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TopicTypeList(List<String> topicNameList, List<String> messageTypeList) {
|
|
||||||
this.topicNameList = topicNameList;
|
|
||||||
this.messageTypeList = messageTypeList;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,38 +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.model.request;
|
|
||||||
|
|
||||||
public class TopicTypeMeta {
|
|
||||||
private String topicName;
|
|
||||||
private String messageType;
|
|
||||||
|
|
||||||
public String getTopicName() {
|
|
||||||
return topicName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTopicName(String topicName) {
|
|
||||||
this.topicName = topicName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMessageType() {
|
|
||||||
return messageType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMessageType(String messageType) {
|
|
||||||
this.messageType = messageType;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -19,8 +19,8 @@ package org.apache.rocketmq.dashboard.service;
|
|||||||
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
||||||
import com.google.common.base.Throwables;
|
import com.google.common.base.Throwables;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
@@ -28,7 +28,7 @@ import org.apache.commons.collections.CollectionUtils;
|
|||||||
public abstract class AbstractCommonService {
|
public abstract class AbstractCommonService {
|
||||||
@Resource
|
@Resource
|
||||||
protected MQAdminExt mqAdminExt;
|
protected MQAdminExt mqAdminExt;
|
||||||
protected final Set<String> changeToBrokerNameSet(Map<String, Set<String>> clusterAddrTable,
|
protected final Set<String> changeToBrokerNameSet(HashMap<String, Set<String>> clusterAddrTable,
|
||||||
List<String> clusterNameList, List<String> brokerNameList) {
|
List<String> clusterNameList, List<String> brokerNameList) {
|
||||||
Set<String> finalBrokerNameList = Sets.newHashSet();
|
Set<String> finalBrokerNameList = Sets.newHashSet();
|
||||||
if (CollectionUtils.isNotEmpty(clusterNameList)) {
|
if (CollectionUtils.isNotEmpty(clusterNameList)) {
|
||||||
@@ -38,8 +38,7 @@ public abstract class AbstractCommonService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (CollectionUtils.isNotEmpty(brokerNameList)) {
|
if (CollectionUtils.isNotEmpty(brokerNameList)) {
|
||||||
|
@@ -17,8 +17,8 @@
|
|||||||
|
|
||||||
package org.apache.rocketmq.dashboard.service;
|
package org.apache.rocketmq.dashboard.service;
|
||||||
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerRunningInfo;
|
import org.apache.rocketmq.common.protocol.body.ConsumerRunningInfo;
|
||||||
import org.apache.rocketmq.dashboard.model.ConsumerGroupRollBackStat;
|
import org.apache.rocketmq.dashboard.model.ConsumerGroupRollBackStat;
|
||||||
import org.apache.rocketmq.dashboard.model.GroupConsumeInfo;
|
import org.apache.rocketmq.dashboard.model.GroupConsumeInfo;
|
||||||
import org.apache.rocketmq.dashboard.model.TopicConsumerInfo;
|
import org.apache.rocketmq.dashboard.model.TopicConsumerInfo;
|
||||||
@@ -31,12 +31,12 @@ import java.util.Map;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public interface ConsumerService {
|
public interface ConsumerService {
|
||||||
List<GroupConsumeInfo> queryGroupList(boolean skipSysGroup,String address);
|
List<GroupConsumeInfo> queryGroupList(boolean skipSysGroup);
|
||||||
|
|
||||||
GroupConsumeInfo queryGroup(String consumerGroup, String address);
|
GroupConsumeInfo queryGroup(String consumerGroup);
|
||||||
|
|
||||||
|
|
||||||
List<TopicConsumerInfo> queryConsumeStatsListByGroupName(String groupName, String address);
|
List<TopicConsumerInfo> queryConsumeStatsListByGroupName(String groupName);
|
||||||
|
|
||||||
List<TopicConsumerInfo> queryConsumeStatsList(String topic, String groupName);
|
List<TopicConsumerInfo> queryConsumeStatsList(String topic, String groupName);
|
||||||
|
|
||||||
@@ -52,7 +52,7 @@ public interface ConsumerService {
|
|||||||
|
|
||||||
Set<String> fetchBrokerNameSetBySubscriptionGroup(String group);
|
Set<String> fetchBrokerNameSetBySubscriptionGroup(String group);
|
||||||
|
|
||||||
ConsumerConnection getConsumerConnection(String consumerGroup, String address);
|
ConsumerConnection getConsumerConnection(String consumerGroup);
|
||||||
|
|
||||||
ConsumerRunningInfo getConsumerRunningInfo(String consumerGroup, String clientId, boolean jstack);
|
ConsumerRunningInfo getConsumerRunningInfo(String consumerGroup, String clientId, boolean jstack);
|
||||||
}
|
}
|
||||||
|
@@ -19,7 +19,7 @@ package org.apache.rocketmq.dashboard.service;
|
|||||||
|
|
||||||
import org.apache.rocketmq.common.Pair;
|
import org.apache.rocketmq.common.Pair;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
import org.apache.rocketmq.dashboard.model.MessagePage;
|
import org.apache.rocketmq.dashboard.model.MessagePage;
|
||||||
import org.apache.rocketmq.dashboard.model.request.MessageQuery;
|
import org.apache.rocketmq.dashboard.model.request.MessageQuery;
|
||||||
import org.apache.rocketmq.tools.admin.api.MessageTrack;
|
import org.apache.rocketmq.tools.admin.api.MessageTrack;
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
package org.apache.rocketmq.dashboard.service;
|
package org.apache.rocketmq.dashboard.service;
|
||||||
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ProducerConnection;
|
import org.apache.rocketmq.common.protocol.body.ProducerConnection;
|
||||||
|
|
||||||
public interface ProducerService {
|
public interface ProducerService {
|
||||||
ProducerConnection getProducerConnection(String producerGroup, String topic);
|
ProducerConnection getProducerConnection(String producerGroup, String topic);
|
||||||
|
@@ -1,28 +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.service;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public interface ProxyService {
|
|
||||||
|
|
||||||
void addProxyAddrList(String proxyAddr);
|
|
||||||
|
|
||||||
void updateProxyAddrList(String proxyAddr);
|
|
||||||
|
|
||||||
Map<String, Object> getProxyHomePage();
|
|
||||||
}
|
|
@@ -19,11 +19,10 @@ package org.apache.rocketmq.dashboard.service;
|
|||||||
|
|
||||||
import org.apache.rocketmq.client.producer.SendResult;
|
import org.apache.rocketmq.client.producer.SendResult;
|
||||||
import org.apache.rocketmq.common.TopicConfig;
|
import org.apache.rocketmq.common.TopicConfig;
|
||||||
import org.apache.rocketmq.dashboard.model.request.TopicTypeList;
|
import org.apache.rocketmq.common.admin.TopicStatsTable;
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.TopicStatsTable;
|
import org.apache.rocketmq.common.protocol.body.GroupList;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.GroupList;
|
import org.apache.rocketmq.common.protocol.body.TopicList;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.TopicList;
|
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
||||||
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
|
||||||
import org.apache.rocketmq.dashboard.model.request.SendTopicMessageRequest;
|
import org.apache.rocketmq.dashboard.model.request.SendTopicMessageRequest;
|
||||||
import org.apache.rocketmq.dashboard.model.request.TopicConfigInfo;
|
import org.apache.rocketmq.dashboard.model.request.TopicConfigInfo;
|
||||||
|
|
||||||
@@ -32,8 +31,6 @@ import java.util.List;
|
|||||||
public interface TopicService {
|
public interface TopicService {
|
||||||
TopicList fetchAllTopicList(boolean skipSysProcess, boolean skipRetryAndDlq);
|
TopicList fetchAllTopicList(boolean skipSysProcess, boolean skipRetryAndDlq);
|
||||||
|
|
||||||
TopicTypeList examineAllTopicType();
|
|
||||||
|
|
||||||
TopicStatsTable stats(String topic);
|
TopicStatsTable stats(String topic);
|
||||||
|
|
||||||
TopicRouteData route(String topic);
|
TopicRouteData route(String topic);
|
||||||
|
@@ -17,16 +17,43 @@
|
|||||||
package org.apache.rocketmq.dashboard.service.client;
|
package org.apache.rocketmq.dashboard.service.client;
|
||||||
|
|
||||||
import com.google.common.base.Throwables;
|
import com.google.common.base.Throwables;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.Set;
|
||||||
import org.apache.rocketmq.client.QueryResult;
|
import org.apache.rocketmq.client.QueryResult;
|
||||||
import org.apache.rocketmq.client.exception.MQBrokerException;
|
import org.apache.rocketmq.client.exception.MQBrokerException;
|
||||||
import org.apache.rocketmq.client.exception.MQClientException;
|
import org.apache.rocketmq.client.exception.MQClientException;
|
||||||
|
import org.apache.rocketmq.client.impl.MQAdminImpl;
|
||||||
import org.apache.rocketmq.common.AclConfig;
|
import org.apache.rocketmq.common.AclConfig;
|
||||||
import org.apache.rocketmq.common.PlainAccessConfig;
|
import org.apache.rocketmq.common.PlainAccessConfig;
|
||||||
import org.apache.rocketmq.common.TopicConfig;
|
import org.apache.rocketmq.common.TopicConfig;
|
||||||
|
import org.apache.rocketmq.common.admin.ConsumeStats;
|
||||||
|
import org.apache.rocketmq.common.admin.RollbackStats;
|
||||||
|
import org.apache.rocketmq.common.admin.TopicStatsTable;
|
||||||
import org.apache.rocketmq.common.message.MessageClientIDSetter;
|
import org.apache.rocketmq.common.message.MessageClientIDSetter;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.apache.rocketmq.common.message.MessageRequestMode;
|
import org.apache.rocketmq.common.protocol.RequestCode;
|
||||||
|
import org.apache.rocketmq.common.protocol.ResponseCode;
|
||||||
|
import org.apache.rocketmq.common.protocol.body.BrokerStatsData;
|
||||||
|
import org.apache.rocketmq.common.protocol.body.ClusterAclVersionInfo;
|
||||||
|
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
||||||
|
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
|
import org.apache.rocketmq.common.protocol.body.ConsumeStatsList;
|
||||||
|
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
||||||
|
import org.apache.rocketmq.common.protocol.body.ConsumerRunningInfo;
|
||||||
|
import org.apache.rocketmq.common.protocol.body.GroupList;
|
||||||
|
import org.apache.rocketmq.common.protocol.body.KVTable;
|
||||||
|
import org.apache.rocketmq.common.protocol.body.ProducerConnection;
|
||||||
|
import org.apache.rocketmq.common.protocol.body.QueryConsumeQueueResponseBody;
|
||||||
|
import org.apache.rocketmq.common.protocol.body.QueueTimeSpan;
|
||||||
|
import org.apache.rocketmq.common.protocol.body.SubscriptionGroupWrapper;
|
||||||
|
import org.apache.rocketmq.common.protocol.body.TopicConfigSerializeWrapper;
|
||||||
|
import org.apache.rocketmq.common.protocol.body.TopicList;
|
||||||
|
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
||||||
|
import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig;
|
||||||
import org.apache.rocketmq.dashboard.util.JsonUtil;
|
import org.apache.rocketmq.dashboard.util.JsonUtil;
|
||||||
import org.apache.rocketmq.remoting.RemotingClient;
|
import org.apache.rocketmq.remoting.RemotingClient;
|
||||||
import org.apache.rocketmq.remoting.exception.RemotingCommandException;
|
import org.apache.rocketmq.remoting.exception.RemotingCommandException;
|
||||||
@@ -35,51 +62,13 @@ import org.apache.rocketmq.remoting.exception.RemotingException;
|
|||||||
import org.apache.rocketmq.remoting.exception.RemotingSendRequestException;
|
import org.apache.rocketmq.remoting.exception.RemotingSendRequestException;
|
||||||
import org.apache.rocketmq.remoting.exception.RemotingTimeoutException;
|
import org.apache.rocketmq.remoting.exception.RemotingTimeoutException;
|
||||||
import org.apache.rocketmq.remoting.protocol.RemotingCommand;
|
import org.apache.rocketmq.remoting.protocol.RemotingCommand;
|
||||||
import org.apache.rocketmq.remoting.protocol.RequestCode;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.ResponseCode;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.ConsumeStats;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.RollbackStats;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.TopicStatsTable;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.BrokerReplicasInfo;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.BrokerStatsData;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ClusterAclVersionInfo;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumeStatsList;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerRunningInfo;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.EpochEntryCache;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.GroupList;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.HARuntimeInfo;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.KVTable;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ProducerConnection;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ProducerTableInfo;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.QueryConsumeQueueResponseBody;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.QueueTimeSpan;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.SubscriptionGroupWrapper;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.TopicConfigSerializeWrapper;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.TopicList;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.header.controller.ElectMasterResponseHeader;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.header.controller.GetMetaDataResponseHeader;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.heartbeat.SubscriptionData;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.statictopic.TopicQueueMappingDetail;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.subscription.GroupForbidden;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.subscription.SubscriptionGroupConfig;
|
|
||||||
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
||||||
import org.apache.rocketmq.tools.admin.api.BrokerOperatorResult;
|
|
||||||
import org.apache.rocketmq.tools.admin.api.MessageTrack;
|
import org.apache.rocketmq.tools.admin.api.MessageTrack;
|
||||||
import org.apache.rocketmq.tools.admin.common.AdminToolResult;
|
import org.joor.Reflect;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Properties;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import static org.apache.rocketmq.remoting.protocol.RemotingSerializable.decode;
|
import static org.apache.rocketmq.remoting.protocol.RemotingSerializable.decode;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@@ -92,7 +81,7 @@ public class MQAdminExtImpl implements MQAdminExt {
|
|||||||
@Override
|
@Override
|
||||||
public void updateBrokerConfig(String brokerAddr, Properties properties)
|
public void updateBrokerConfig(String brokerAddr, Properties properties)
|
||||||
throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException,
|
throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException,
|
||||||
UnsupportedEncodingException, InterruptedException, MQBrokerException, MQClientException {
|
UnsupportedEncodingException, InterruptedException, MQBrokerException {
|
||||||
MQAdminInstance.threadLocalMQAdminExt().updateBrokerConfig(brokerAddr, properties);
|
MQAdminInstance.threadLocalMQAdminExt().updateBrokerConfig(brokerAddr, properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,7 +128,7 @@ public class MQAdminExtImpl implements MQAdminExt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SubscriptionGroupConfig examineSubscriptionGroupConfig(String addr, String group) throws MQBrokerException {
|
public SubscriptionGroupConfig examineSubscriptionGroupConfig(String addr, String group) {
|
||||||
RemotingClient remotingClient = MQAdminInstance.threadLocalRemotingClient();
|
RemotingClient remotingClient = MQAdminInstance.threadLocalRemotingClient();
|
||||||
RemotingCommand request = RemotingCommand.createRequestCommand(RequestCode.GET_ALL_SUBSCRIPTIONGROUP_CONFIG, null);
|
RemotingCommand request = RemotingCommand.createRequestCommand(RequestCode.GET_ALL_SUBSCRIPTIONGROUP_CONFIG, null);
|
||||||
RemotingCommand response = null;
|
RemotingCommand response = null;
|
||||||
@@ -147,8 +136,7 @@ public class MQAdminExtImpl implements MQAdminExt {
|
|||||||
response = remotingClient.invokeSync(addr, request, 3000);
|
response = remotingClient.invokeSync(addr, request, 3000);
|
||||||
}
|
}
|
||||||
catch (Exception err) {
|
catch (Exception err) {
|
||||||
Throwables.throwIfUnchecked(err);
|
throw Throwables.propagate(err);
|
||||||
throw new RuntimeException(err);
|
|
||||||
}
|
}
|
||||||
assert response != null;
|
assert response != null;
|
||||||
switch (response.getCode()) {
|
switch (response.getCode()) {
|
||||||
@@ -157,12 +145,12 @@ public class MQAdminExtImpl implements MQAdminExt {
|
|||||||
return subscriptionGroupWrapper.getSubscriptionGroupTable().get(group);
|
return subscriptionGroupWrapper.getSubscriptionGroupTable().get(group);
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
throw new MQBrokerException(response.getCode(), response.getRemark());
|
throw Throwables.propagate(new MQBrokerException(response.getCode(), response.getRemark()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TopicConfig examineTopicConfig(String addr, String topic) throws MQBrokerException {
|
public TopicConfig examineTopicConfig(String addr, String topic) {
|
||||||
RemotingClient remotingClient = MQAdminInstance.threadLocalRemotingClient();
|
RemotingClient remotingClient = MQAdminInstance.threadLocalRemotingClient();
|
||||||
RemotingCommand request = RemotingCommand.createRequestCommand(RequestCode.GET_ALL_TOPIC_CONFIG, null);
|
RemotingCommand request = RemotingCommand.createRequestCommand(RequestCode.GET_ALL_TOPIC_CONFIG, null);
|
||||||
RemotingCommand response = null;
|
RemotingCommand response = null;
|
||||||
@@ -170,8 +158,7 @@ public class MQAdminExtImpl implements MQAdminExt {
|
|||||||
response = remotingClient.invokeSync(addr, request, 3000);
|
response = remotingClient.invokeSync(addr, request, 3000);
|
||||||
}
|
}
|
||||||
catch (Exception err) {
|
catch (Exception err) {
|
||||||
Throwables.throwIfUnchecked(err);
|
throw Throwables.propagate(err);
|
||||||
throw new RuntimeException(err);
|
|
||||||
}
|
}
|
||||||
switch (response.getCode()) {
|
switch (response.getCode()) {
|
||||||
case ResponseCode.SUCCESS: {
|
case ResponseCode.SUCCESS: {
|
||||||
@@ -179,7 +166,7 @@ public class MQAdminExtImpl implements MQAdminExt {
|
|||||||
return topicConfigSerializeWrapper.getTopicConfigTable().get(topic);
|
return topicConfigSerializeWrapper.getTopicConfigTable().get(topic);
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
throw new MQBrokerException(response.getCode(), response.getRemark());
|
throw Throwables.propagate(new MQBrokerException(response.getCode(), response.getRemark()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -389,14 +376,14 @@ public class MQAdminExtImpl implements MQAdminExt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createTopic(String key, String newTopic, int queueNum, Map<String, String> attributes) throws MQClientException {
|
public void createTopic(String key, String newTopic, int queueNum) throws MQClientException {
|
||||||
MQAdminInstance.threadLocalMQAdminExt().createTopic(key, newTopic, queueNum, attributes);
|
MQAdminInstance.threadLocalMQAdminExt().createTopic(key, newTopic, queueNum);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createTopic(String key, String newTopic, int queueNum, int topicSysFlag, Map<String, String> attributes)
|
public void createTopic(String key, String newTopic, int queueNum, int topicSysFlag)
|
||||||
throws MQClientException {
|
throws MQClientException {
|
||||||
MQAdminInstance.threadLocalMQAdminExt().createTopic(key, newTopic, queueNum, topicSysFlag, attributes);
|
MQAdminInstance.threadLocalMQAdminExt().createTopic(key, newTopic, queueNum, topicSysFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -464,19 +451,16 @@ public class MQAdminExtImpl implements MQAdminExt {
|
|||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
}
|
}
|
||||||
|
MQAdminImpl mqAdminImpl = MQAdminInstance.threadLocalMqClientInstance().getMQAdminImpl();
|
||||||
Set<String> clusterList = MQAdminInstance.threadLocalMQAdminExt().getTopicClusterList(topic);
|
QueryResult qr = Reflect.on(mqAdminImpl).call("queryMessage", topic, msgId, 32,
|
||||||
if (clusterList == null || clusterList.isEmpty()) {
|
MessageClientIDSetter.getNearlyTimeFromID(msgId).getTime() - 1000 * 60 * 60 * 13L, Long.MAX_VALUE, true).get();
|
||||||
return MQAdminInstance.threadLocalMQAdminExt().queryMessage("", topic, msgId);
|
if (qr != null && qr.getMessageList() != null && qr.getMessageList().size() > 0) {
|
||||||
}
|
return qr.getMessageList().get(0);
|
||||||
for (String name : clusterList) {
|
|
||||||
MessageExt messageExt = MQAdminInstance.threadLocalMQAdminExt().queryMessage(name, topic, msgId);
|
|
||||||
if (messageExt != null) {
|
|
||||||
return messageExt;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ConsumeMessageDirectlyResult consumeMessageDirectly(String consumerGroup, String clientId, String topic,
|
public ConsumeMessageDirectlyResult consumeMessageDirectly(String consumerGroup, String clientId, String topic,
|
||||||
@@ -588,256 +572,4 @@ public class MQAdminExtImpl implements MQAdminExt {
|
|||||||
String msgId) throws RemotingException, MQClientException, InterruptedException, MQBrokerException {
|
String msgId) throws RemotingException, MQClientException, InterruptedException, MQBrokerException {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addBrokerToContainer(String brokerContainerAddr, String brokerConfig) throws InterruptedException,
|
|
||||||
MQBrokerException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'addBrokerToContainer'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeBrokerFromContainer(String brokerContainerAddr, String clusterName, String brokerName,
|
|
||||||
long brokerId) throws InterruptedException, MQBrokerException, RemotingTimeoutException,
|
|
||||||
RemotingSendRequestException, RemotingConnectException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'removeBrokerFromContainer'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateGlobalWhiteAddrConfig(String addr, String globalWhiteAddrs, String aclFileFullPath)
|
|
||||||
throws RemotingException, MQBrokerException, InterruptedException, MQClientException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'updateGlobalWhiteAddrConfig'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TopicStatsTable examineTopicStats(String brokerAddr, String topic)
|
|
||||||
throws RemotingException, MQClientException, InterruptedException, MQBrokerException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'examineTopicStats'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AdminToolResult<TopicStatsTable> examineTopicStatsConcurrent(String topic) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'examineTopicStatsConcurrent'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ConsumeStats examineConsumeStats(String brokerAddr, String consumerGroup, String topicName,
|
|
||||||
long timeoutMillis) throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException,
|
|
||||||
RemotingConnectException, MQBrokerException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return MQAdminInstance.threadLocalMQAdminExt().examineConsumeStats(brokerAddr, consumerGroup, topicName, timeoutMillis);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AdminToolResult<ConsumeStats> examineConsumeStatsConcurrent(String consumerGroup, String topic) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'examineConsumeStatsConcurrent'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ConsumerConnection examineConsumerConnectionInfo(String consumerGroup, String brokerAddr)
|
|
||||||
throws InterruptedException, MQBrokerException, RemotingException, MQClientException {
|
|
||||||
return MQAdminInstance.threadLocalMQAdminExt().examineConsumerConnectionInfo(consumerGroup, brokerAddr);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProducerTableInfo getAllProducerInfo(String brokerAddr)
|
|
||||||
throws RemotingException, MQClientException, InterruptedException, MQBrokerException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'getAllProducerInfo'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteTopic(String topicName, String clusterName)
|
|
||||||
throws RemotingException, MQBrokerException, InterruptedException, MQClientException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'deleteTopic'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AdminToolResult<BrokerOperatorResult> deleteTopicInBrokerConcurrent(Set<String> addrs, String topic) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'deleteTopicInBrokerConcurrent'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteTopicInNameServer(Set<String> addrs, String clusterName, String topic)
|
|
||||||
throws RemotingException, MQBrokerException, InterruptedException, MQClientException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'deleteTopicInNameServer'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AdminToolResult<BrokerOperatorResult> resetOffsetNewConcurrent(String group, String topic, long timestamp) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'resetOffsetNewConcurrent'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TopicList queryTopicsByConsumer(String group)
|
|
||||||
throws InterruptedException, MQBrokerException, RemotingException, MQClientException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'queryTopicsByConsumer'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AdminToolResult<TopicList> queryTopicsByConsumerConcurrent(String group) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'queryTopicsByConsumerConcurrent'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SubscriptionData querySubscription(String group, String topic)
|
|
||||||
throws InterruptedException, MQBrokerException, RemotingException, MQClientException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'querySubscription'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AdminToolResult<List<QueueTimeSpan>> queryConsumeTimeSpanConcurrent(String topic, String group) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'queryConsumeTimeSpanConcurrent'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean deleteExpiredCommitLog(String cluster) throws RemotingConnectException, RemotingSendRequestException,
|
|
||||||
RemotingTimeoutException, MQClientException, InterruptedException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'deleteExpiredCommitLog'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean deleteExpiredCommitLogByAddr(String addr) throws RemotingConnectException,
|
|
||||||
RemotingSendRequestException, RemotingTimeoutException, MQClientException, InterruptedException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'deleteExpiredCommitLogByAddr'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ConsumerRunningInfo getConsumerRunningInfo(String consumerGroup, String clientId, boolean jstack,
|
|
||||||
boolean metrics) throws RemotingException, MQClientException, InterruptedException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'getConsumerRunningInfo'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<MessageTrack> messageTrackDetailConcurrent(MessageExt msg)
|
|
||||||
throws RemotingException, MQClientException, InterruptedException, MQBrokerException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'messageTrackDetailConcurrent'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setMessageRequestMode(String brokerAddr, String topic, String consumerGroup, MessageRequestMode mode,
|
|
||||||
int popWorkGroupSize, long timeoutMillis) throws InterruptedException, RemotingTimeoutException,
|
|
||||||
RemotingSendRequestException, RemotingConnectException, MQClientException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'setMessageRequestMode'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long searchOffset(String brokerAddr, String topicName, int queueId, long timestamp, long timeoutMillis)
|
|
||||||
throws RemotingException, MQBrokerException, InterruptedException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'searchOffset'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void resetOffsetByQueueId(String brokerAddr, String consumerGroup, String topicName, int queueId,
|
|
||||||
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)
|
|
||||||
throws RemotingException, InterruptedException, MQBrokerException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'createStaticTopic'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public GroupForbidden updateAndGetGroupReadForbidden(String brokerAddr, String groupName, String topicName,
|
|
||||||
Boolean readable) throws RemotingException, InterruptedException, MQBrokerException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'updateAndGetGroupReadForbidden'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MessageExt queryMessage(String clusterName, String topic, String msgId)
|
|
||||||
throws RemotingException, MQBrokerException, InterruptedException, MQClientException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'queryMessage'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HARuntimeInfo getBrokerHAStatus(String brokerAddr) throws RemotingConnectException,
|
|
||||||
RemotingSendRequestException, RemotingTimeoutException, InterruptedException, MQBrokerException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'getBrokerHAStatus'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BrokerReplicasInfo getInSyncStateData(String controllerAddress, List<String> brokers)
|
|
||||||
throws RemotingException, InterruptedException, MQBrokerException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'getInSyncStateData'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public EpochEntryCache getBrokerEpochCache(String brokerAddr)
|
|
||||||
throws RemotingException, InterruptedException, MQBrokerException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'getBrokerEpochCache'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public GetMetaDataResponseHeader getControllerMetaData(String controllerAddr)
|
|
||||||
throws RemotingException, InterruptedException, MQBrokerException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'getControllerMetaData'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void resetMasterFlushOffset(String brokerAddr, long masterFlushOffset) throws InterruptedException,
|
|
||||||
MQBrokerException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'resetMasterFlushOffset'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Map<String, Properties> getControllerConfig(List<String> controllerServers)
|
|
||||||
throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException,
|
|
||||||
RemotingConnectException, MQClientException, UnsupportedEncodingException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'getControllerConfig'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateControllerConfig(Properties properties, List<String> controllers)
|
|
||||||
throws InterruptedException, RemotingConnectException, UnsupportedEncodingException,
|
|
||||||
RemotingSendRequestException, RemotingTimeoutException, MQClientException, MQBrokerException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'updateControllerConfig'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ElectMasterResponseHeader electMaster(String controllerAddr, String clusterName, String brokerName,
|
|
||||||
String brokerAddr) throws RemotingException, InterruptedException, MQBrokerException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'electMaster'");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void cleanControllerBrokerData(String controllerAddr, String clusterName, String brokerName,
|
|
||||||
String brokerAddr, boolean isCleanLivingBroker)
|
|
||||||
throws RemotingException, InterruptedException, MQBrokerException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
throw new UnsupportedOperationException("Unimplemented method 'cleanControllerBrokerData'");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -1,28 +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.service.client;
|
|
||||||
|
|
||||||
import org.apache.rocketmq.client.exception.MQBrokerException;
|
|
||||||
import org.apache.rocketmq.remoting.exception.RemotingConnectException;
|
|
||||||
import org.apache.rocketmq.remoting.exception.RemotingSendRequestException;
|
|
||||||
import org.apache.rocketmq.remoting.exception.RemotingTimeoutException;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
|
||||||
|
|
||||||
public interface ProxyAdmin {
|
|
||||||
|
|
||||||
ConsumerConnection examineConsumerConnectionInfo(String addr, String consumerGroup) throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, InterruptedException, MQBrokerException;
|
|
||||||
}
|
|
@@ -1,60 +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.service.client;
|
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.apache.commons.pool2.impl.GenericObjectPool;
|
|
||||||
import org.apache.rocketmq.client.exception.MQBrokerException;
|
|
||||||
import org.apache.rocketmq.remoting.RemotingClient;
|
|
||||||
import org.apache.rocketmq.remoting.exception.RemotingConnectException;
|
|
||||||
import org.apache.rocketmq.remoting.exception.RemotingSendRequestException;
|
|
||||||
import org.apache.rocketmq.remoting.exception.RemotingTimeoutException;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.RemotingCommand;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.header.GetConsumerConnectionListRequestHeader;
|
|
||||||
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import static org.apache.rocketmq.remoting.protocol.RequestCode.GET_CONSUMER_CONNECTION_LIST;
|
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
@Service
|
|
||||||
public class ProxyAdminImpl implements ProxyAdmin {
|
|
||||||
@Autowired
|
|
||||||
private GenericObjectPool<MQAdminExt> mqAdminExtPool;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ConsumerConnection examineConsumerConnectionInfo(String addr, String consumerGroup) throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException, InterruptedException, MQBrokerException {
|
|
||||||
try {
|
|
||||||
MQAdminInstance.createMQAdmin(mqAdminExtPool);
|
|
||||||
RemotingClient remotingClient = MQAdminInstance.threadLocalRemotingClient();
|
|
||||||
GetConsumerConnectionListRequestHeader requestHeader = new GetConsumerConnectionListRequestHeader();
|
|
||||||
requestHeader.setConsumerGroup(consumerGroup);
|
|
||||||
RemotingCommand request = RemotingCommand.createRequestCommand(GET_CONSUMER_CONNECTION_LIST, requestHeader);
|
|
||||||
RemotingCommand response = remotingClient.invokeSync(addr, request, 3000);
|
|
||||||
switch (response.getCode()) {
|
|
||||||
case 0:
|
|
||||||
return ConsumerConnection.decode(response.getBody(), ConsumerConnection.class);
|
|
||||||
default:
|
|
||||||
throw new MQBrokerException(response.getCode(), response.getRemark(), addr);
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
MQAdminInstance.returnMQAdmin(mqAdminExtPool);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -36,8 +36,8 @@ import org.apache.rocketmq.client.exception.MQClientException;
|
|||||||
import org.apache.rocketmq.common.AclConfig;
|
import org.apache.rocketmq.common.AclConfig;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.common.PlainAccessConfig;
|
import org.apache.rocketmq.common.PlainAccessConfig;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.remoting.protocol.route.BrokerData;
|
import org.apache.rocketmq.common.protocol.route.BrokerData;
|
||||||
import org.apache.rocketmq.dashboard.model.request.AclRequest;
|
import org.apache.rocketmq.dashboard.model.request.AclRequest;
|
||||||
import org.apache.rocketmq.dashboard.service.AbstractCommonService;
|
import org.apache.rocketmq.dashboard.service.AbstractCommonService;
|
||||||
import org.apache.rocketmq.dashboard.service.AclService;
|
import org.apache.rocketmq.dashboard.service.AclService;
|
||||||
@@ -68,8 +68,7 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("getAclConfig error.", e);
|
log.error("getAclConfig error.", e);
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
AclConfig aclConfig = new AclConfig();
|
AclConfig aclConfig = new AclConfig();
|
||||||
aclConfig.setGlobalWhiteAddrs(Collections.emptyList());
|
aclConfig.setGlobalWhiteAddrs(Collections.emptyList());
|
||||||
@@ -101,8 +100,7 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
mqAdminExt.createAndUpdatePlainAccessConfig(addr, config);
|
mqAdminExt.createAndUpdatePlainAccessConfig(addr, config);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -118,8 +116,7 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
log.info("Delete acl [{}] from broker [{}] complete", config.getAccessKey(), addr);
|
log.info("Delete acl [{}] from broker [{}] complete", config.getAccessKey(), addr);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,8 +142,7 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
mqAdminExt.createAndUpdatePlainAccessConfig(addr, config);
|
mqAdminExt.createAndUpdatePlainAccessConfig(addr, config);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,8 +174,7 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -211,8 +206,7 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,8 +249,7 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -268,8 +261,7 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
mqAdminExt.createAndUpdatePlainAccessConfig(addr, config);
|
mqAdminExt.createAndUpdatePlainAccessConfig(addr, config);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -289,8 +281,7 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
mqAdminExt.updateGlobalWhiteAddrConfig(addr, StringUtils.join(aclConfig.getGlobalWhiteAddrs(), ","));
|
mqAdminExt.updateGlobalWhiteAddrConfig(addr, StringUtils.join(aclConfig.getGlobalWhiteAddrs(), ","));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,8 +297,7 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
mqAdminExt.updateGlobalWhiteAddrConfig(addr, StringUtils.join(aclConfig.getGlobalWhiteAddrs(), ","));
|
mqAdminExt.updateGlobalWhiteAddrConfig(addr, StringUtils.join(aclConfig.getGlobalWhiteAddrs(), ","));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -321,8 +311,7 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
mqAdminExt.updateGlobalWhiteAddrConfig(addr, StringUtils.join(whiteList, ","));
|
mqAdminExt.updateGlobalWhiteAddrConfig(addr, StringUtils.join(whiteList, ","));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -17,10 +17,9 @@
|
|||||||
|
|
||||||
package org.apache.rocketmq.dashboard.service.impl;
|
package org.apache.rocketmq.dashboard.service.impl;
|
||||||
|
|
||||||
import org.apache.rocketmq.common.attribute.TopicMessageType;
|
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.common.protocol.body.KVTable;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.KVTable;
|
import org.apache.rocketmq.common.protocol.route.BrokerData;
|
||||||
import org.apache.rocketmq.remoting.protocol.route.BrokerData;
|
|
||||||
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
||||||
import org.apache.rocketmq.dashboard.service.ClusterService;
|
import org.apache.rocketmq.dashboard.service.ClusterService;
|
||||||
import org.apache.rocketmq.dashboard.util.JsonUtil;
|
import org.apache.rocketmq.dashboard.util.JsonUtil;
|
||||||
@@ -31,10 +30,8 @@ import org.slf4j.LoggerFactory;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class ClusterServiceImpl implements ClusterService {
|
public class ClusterServiceImpl implements ClusterService {
|
||||||
@@ -59,14 +56,10 @@ public class ClusterServiceImpl implements ClusterService {
|
|||||||
}
|
}
|
||||||
resultMap.put("clusterInfo", clusterInfo);
|
resultMap.put("clusterInfo", clusterInfo);
|
||||||
resultMap.put("brokerServer", brokerServer);
|
resultMap.put("brokerServer", brokerServer);
|
||||||
// add messageType
|
|
||||||
resultMap.put("messageTypes", Arrays.stream(TopicMessageType.values()).sorted()
|
|
||||||
.collect(Collectors.toMap(TopicMessageType::getValue, messageType ->String.format("MESSAGE_TYPE_%s",messageType.getValue()))));
|
|
||||||
return resultMap;
|
return resultMap;
|
||||||
}
|
}
|
||||||
catch (Exception err) {
|
catch (Exception err) {
|
||||||
Throwables.throwIfUnchecked(err);
|
throw Throwables.propagate(err);
|
||||||
throw new RuntimeException(err);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,8 +70,7 @@ public class ClusterServiceImpl implements ClusterService {
|
|||||||
return mqAdminExt.getBrokerConfig(brokerAddr);
|
return mqAdminExt.getBrokerConfig(brokerAddr);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -23,22 +23,12 @@ import com.google.common.collect.Iterables;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.CountDownLatch;
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
|
||||||
import java.util.concurrent.RejectedExecutionHandler;
|
|
||||||
import java.util.concurrent.ThreadFactory;
|
|
||||||
import java.util.concurrent.ThreadPoolExecutor;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
@@ -46,20 +36,18 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import org.apache.rocketmq.client.exception.MQClientException;
|
import org.apache.rocketmq.client.exception.MQClientException;
|
||||||
import org.apache.rocketmq.common.MQVersion;
|
import org.apache.rocketmq.common.MQVersion;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.dashboard.service.client.ProxyAdmin;
|
import org.apache.rocketmq.common.admin.ConsumeStats;
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.ConsumeStats;
|
import org.apache.rocketmq.common.admin.RollbackStats;
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.RollbackStats;
|
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.apache.rocketmq.remoting.protocol.ResponseCode;
|
import org.apache.rocketmq.common.protocol.ResponseCode;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.Connection;
|
import org.apache.rocketmq.common.protocol.body.Connection;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerRunningInfo;
|
import org.apache.rocketmq.common.protocol.body.ConsumerRunningInfo;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.GroupList;
|
import org.apache.rocketmq.common.protocol.body.GroupList;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.SubscriptionGroupWrapper;
|
import org.apache.rocketmq.common.protocol.body.SubscriptionGroupWrapper;
|
||||||
import org.apache.rocketmq.remoting.protocol.route.BrokerData;
|
import org.apache.rocketmq.common.protocol.route.BrokerData;
|
||||||
import org.apache.rocketmq.remoting.protocol.subscription.SubscriptionGroupConfig;
|
import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig;
|
||||||
import org.apache.rocketmq.common.utils.ThreadUtils;
|
|
||||||
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
||||||
import org.apache.rocketmq.dashboard.model.ConsumerGroupRollBackStat;
|
import org.apache.rocketmq.dashboard.model.ConsumerGroupRollBackStat;
|
||||||
import org.apache.rocketmq.dashboard.model.GroupConsumeInfo;
|
import org.apache.rocketmq.dashboard.model.GroupConsumeInfo;
|
||||||
@@ -72,46 +60,19 @@ import org.apache.rocketmq.dashboard.service.AbstractCommonService;
|
|||||||
import org.apache.rocketmq.dashboard.service.ConsumerService;
|
import org.apache.rocketmq.dashboard.service.ConsumerService;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.DisposableBean;
|
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import static com.google.common.base.Throwables.propagate;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class ConsumerServiceImpl extends AbstractCommonService implements ConsumerService, InitializingBean, DisposableBean {
|
public class ConsumerServiceImpl extends AbstractCommonService implements ConsumerService {
|
||||||
private Logger logger = LoggerFactory.getLogger(ConsumerServiceImpl.class);
|
private Logger logger = LoggerFactory.getLogger(ConsumerServiceImpl.class);
|
||||||
|
|
||||||
@Resource
|
|
||||||
protected ProxyAdmin proxyAdmin;
|
|
||||||
@Resource
|
@Resource
|
||||||
private RMQConfigure configure;
|
private RMQConfigure configure;
|
||||||
|
|
||||||
private static final Set<String> SYSTEM_GROUP_SET = new HashSet<>();
|
private static final Set<String> SYSTEM_GROUP_SET = new HashSet<>();
|
||||||
|
|
||||||
private ExecutorService executorService;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterPropertiesSet() {
|
|
||||||
Runtime runtime = Runtime.getRuntime();
|
|
||||||
int corePoolSize = Math.max(10, runtime.availableProcessors() * 2);
|
|
||||||
int maximumPoolSize = Math.max(20, runtime.availableProcessors() * 2);
|
|
||||||
ThreadFactory threadFactory = new ThreadFactory() {
|
|
||||||
private final AtomicLong threadIndex = new AtomicLong(0);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Thread newThread(Runnable r) {
|
|
||||||
return new Thread(r, "QueryGroup_" + this.threadIndex.incrementAndGet());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
RejectedExecutionHandler handler = new ThreadPoolExecutor.DiscardOldestPolicy();
|
|
||||||
this.executorService = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, 60L, TimeUnit.SECONDS,
|
|
||||||
new LinkedBlockingQueue<>(5000), threadFactory, handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void destroy() {
|
|
||||||
ThreadUtils.shutdownGracefully(executorService, 10L, TimeUnit.SECONDS);
|
|
||||||
}
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
SYSTEM_GROUP_SET.add(MixAll.TOOLS_CONSUMER_GROUP);
|
SYSTEM_GROUP_SET.add(MixAll.TOOLS_CONSUMER_GROUP);
|
||||||
SYSTEM_GROUP_SET.add(MixAll.FILTERSRV_CONSUMER_GROUP);
|
SYSTEM_GROUP_SET.add(MixAll.FILTERSRV_CONSUMER_GROUP);
|
||||||
@@ -121,51 +82,25 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
SYSTEM_GROUP_SET.add(MixAll.CID_ONSAPI_PERMISSION_GROUP);
|
SYSTEM_GROUP_SET.add(MixAll.CID_ONSAPI_PERMISSION_GROUP);
|
||||||
SYSTEM_GROUP_SET.add(MixAll.CID_ONSAPI_OWNER_GROUP);
|
SYSTEM_GROUP_SET.add(MixAll.CID_ONSAPI_OWNER_GROUP);
|
||||||
SYSTEM_GROUP_SET.add(MixAll.CID_SYS_RMQ_TRANS);
|
SYSTEM_GROUP_SET.add(MixAll.CID_SYS_RMQ_TRANS);
|
||||||
SYSTEM_GROUP_SET.add("CID_DefaultHeartBeatSyncerTopic");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<GroupConsumeInfo> queryGroupList(boolean skipSysGroup, String address) {
|
public List<GroupConsumeInfo> queryGroupList(boolean skipSysGroup) {
|
||||||
HashMap<String, List<String>> consumerGroupMap = Maps.newHashMap();
|
Set<String> consumerGroupSet = Sets.newHashSet();
|
||||||
try {
|
try {
|
||||||
ClusterInfo clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
ClusterInfo clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
||||||
for (BrokerData brokerData : clusterInfo.getBrokerAddrTable().values()) {
|
for (BrokerData brokerData : clusterInfo.getBrokerAddrTable().values()) {
|
||||||
SubscriptionGroupWrapper subscriptionGroupWrapper = mqAdminExt.getAllSubscriptionGroup(brokerData.selectBrokerAddr(), 3000L);
|
SubscriptionGroupWrapper subscriptionGroupWrapper = mqAdminExt.getAllSubscriptionGroup(brokerData.selectBrokerAddr(), 3000L);
|
||||||
for (String groupName : subscriptionGroupWrapper.getSubscriptionGroupTable().keySet()) {
|
consumerGroupSet.addAll(subscriptionGroupWrapper.getSubscriptionGroupTable().keySet());
|
||||||
if (!consumerGroupMap.containsKey(groupName)) {
|
|
||||||
consumerGroupMap.putIfAbsent(groupName, new ArrayList<>());
|
|
||||||
}
|
|
||||||
List<String> addresses = consumerGroupMap.get(groupName);
|
|
||||||
addresses.add(brokerData.selectBrokerAddr());
|
|
||||||
consumerGroupMap.put(groupName, addresses);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception err) {
|
catch (Exception err) {
|
||||||
Throwables.throwIfUnchecked(err);
|
throw Throwables.propagate(err);
|
||||||
throw new RuntimeException(err);
|
|
||||||
}
|
}
|
||||||
List<GroupConsumeInfo> groupConsumeInfoList = Collections.synchronizedList(Lists.newArrayList());
|
List<GroupConsumeInfo> groupConsumeInfoList = Lists.newArrayList();
|
||||||
CountDownLatch countDownLatch = new CountDownLatch(consumerGroupMap.size());
|
for (String consumerGroup : consumerGroupSet) {
|
||||||
for (Map.Entry<String, List<String>> entry : consumerGroupMap.entrySet()) {
|
groupConsumeInfoList.add(queryGroup(consumerGroup));
|
||||||
String consumerGroup = entry.getKey();
|
|
||||||
executorService.submit(() -> {
|
|
||||||
try {
|
|
||||||
GroupConsumeInfo consumeInfo = queryGroup(consumerGroup, address);
|
|
||||||
consumeInfo.setAddress(entry.getValue());
|
|
||||||
groupConsumeInfoList.add(consumeInfo);
|
|
||||||
} catch (Exception e) {
|
|
||||||
logger.error("queryGroup exception, consumerGroup: {}", consumerGroup, e);
|
|
||||||
} finally {
|
|
||||||
countDownLatch.countDown();
|
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
countDownLatch.await(30, TimeUnit.SECONDS);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
logger.error("query consumerGroup countDownLatch await Exception", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!skipSysGroup) {
|
if (!skipSysGroup) {
|
||||||
groupConsumeInfoList.stream().map(group -> {
|
groupConsumeInfoList.stream().map(group -> {
|
||||||
if (SYSTEM_GROUP_SET.contains(group.getGroup())) {
|
if (SYSTEM_GROUP_SET.contains(group.getGroup())) {
|
||||||
@@ -179,7 +114,7 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GroupConsumeInfo queryGroup(String consumerGroup, String address) {
|
public GroupConsumeInfo queryGroup(String consumerGroup) {
|
||||||
GroupConsumeInfo groupConsumeInfo = new GroupConsumeInfo();
|
GroupConsumeInfo groupConsumeInfo = new GroupConsumeInfo();
|
||||||
try {
|
try {
|
||||||
ConsumeStats consumeStats = null;
|
ConsumeStats consumeStats = null;
|
||||||
@@ -191,28 +126,14 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
}
|
}
|
||||||
|
|
||||||
ConsumerConnection consumerConnection = null;
|
ConsumerConnection consumerConnection = null;
|
||||||
boolean isFifoType = examineSubscriptionGroupConfig(consumerGroup)
|
|
||||||
.stream().map(ConsumerConfigInfo::getSubscriptionGroupConfig)
|
|
||||||
.allMatch(SubscriptionGroupConfig::isConsumeMessageOrderly);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (StringUtils.isNotEmpty(address)) {
|
|
||||||
consumerConnection = proxyAdmin.examineConsumerConnectionInfo(address, consumerGroup);
|
|
||||||
} else {
|
|
||||||
consumerConnection = mqAdminExt.examineConsumerConnectionInfo(consumerGroup);
|
consumerConnection = mqAdminExt.examineConsumerConnectionInfo(consumerGroup);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
catch (Exception e) {
|
||||||
logger.warn("examineConsumeStats exception to consumerGroup {}, response [{}]", consumerGroup, e.getMessage());
|
logger.warn("examineConsumeStats exception to consumerGroup {}, response [{}]", consumerGroup, e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
groupConsumeInfo.setGroup(consumerGroup);
|
groupConsumeInfo.setGroup(consumerGroup);
|
||||||
if (SYSTEM_GROUP_SET.contains(consumerGroup)) {
|
|
||||||
groupConsumeInfo.setSubGroupType("SYSTEM");
|
|
||||||
} else if (isFifoType) {
|
|
||||||
groupConsumeInfo.setSubGroupType("FIFO");
|
|
||||||
} else {
|
|
||||||
groupConsumeInfo.setSubGroupType("NORMAL");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (consumeStats != null) {
|
if (consumeStats != null) {
|
||||||
groupConsumeInfo.setConsumeTps((int)consumeStats.getConsumeTps());
|
groupConsumeInfo.setConsumeTps((int)consumeStats.getConsumeTps());
|
||||||
@@ -234,18 +155,8 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<TopicConsumerInfo> queryConsumeStatsListByGroupName(String groupName, String address) {
|
public List<TopicConsumerInfo> queryConsumeStatsListByGroupName(String groupName) {
|
||||||
ConsumeStats consumeStats;
|
return queryConsumeStatsList(null, groupName);
|
||||||
String topic = null;
|
|
||||||
try {
|
|
||||||
String[] addresses = address.split(",");
|
|
||||||
String addr = addresses[0];
|
|
||||||
consumeStats = mqAdminExt.examineConsumeStats(addr, groupName, null, 3000);
|
|
||||||
} catch (Exception e) {
|
|
||||||
Throwables.throwIfUnchecked(e);
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
return toTopicConsumerInfoList(topic, consumeStats, groupName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -255,13 +166,8 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
consumeStats = mqAdminExt.examineConsumeStats(groupName, topic);
|
consumeStats = mqAdminExt.examineConsumeStats(groupName, topic);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
return toTopicConsumerInfoList(topic, consumeStats, groupName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<TopicConsumerInfo> toTopicConsumerInfoList(String topic, ConsumeStats consumeStats, String groupName) {
|
|
||||||
List<MessageQueue> mqList = Lists.newArrayList(Iterables.filter(consumeStats.getOffsetTable().keySet(), new Predicate<MessageQueue>() {
|
List<MessageQueue> mqList = Lists.newArrayList(Iterables.filter(consumeStats.getOffsetTable().keySet(), new Predicate<MessageQueue>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(MessageQueue o) {
|
public boolean apply(MessageQueue o) {
|
||||||
@@ -320,8 +226,7 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
return group2ConsumerInfoMap;
|
return group2ConsumerInfoMap;
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -384,8 +289,7 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
return consumerConfigInfoList;
|
return consumerConfigInfoList;
|
||||||
}
|
}
|
||||||
@@ -410,8 +314,7 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -438,8 +341,7 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception err) {
|
catch (Exception err) {
|
||||||
Throwables.throwIfUnchecked(err);
|
throw Throwables.propagate(err);
|
||||||
throw new RuntimeException(err);
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -454,22 +356,19 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
return brokerNameSet;
|
return brokerNameSet;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ConsumerConnection getConsumerConnection(String consumerGroup, String address) {
|
public ConsumerConnection getConsumerConnection(String consumerGroup) {
|
||||||
try {
|
try {
|
||||||
String[] addresses = address.split(",");
|
return mqAdminExt.examineConsumerConnectionInfo(consumerGroup);
|
||||||
String addr = addresses[0];
|
}
|
||||||
return mqAdminExt.examineConsumerConnectionInfo(consumerGroup, addr);
|
catch (Exception e) {
|
||||||
} catch (Exception e) {
|
throw Throwables.propagate(e);
|
||||||
Throwables.throwIfUnchecked(e);
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -479,8 +378,7 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
return mqAdminExt.getConsumerRunningInfo(consumerGroup, clientId, jstack);
|
return mqAdminExt.getConsumerRunningInfo(consumerGroup, clientId, jstack);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -107,8 +107,7 @@ public class DashboardCollectServiceImpl implements DashboardCollectService {
|
|||||||
strings = Files.readLines(file, Charsets.UTF_8);
|
strings = Files.readLines(file, Charsets.UTF_8);
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
StringBuffer sb = new StringBuffer();
|
StringBuffer sb = new StringBuffer();
|
||||||
for (String string : strings) {
|
for (String string : strings) {
|
||||||
|
@@ -25,8 +25,8 @@ import javax.annotation.Resource;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.rocketmq.client.exception.MQClientException;
|
import org.apache.rocketmq.client.exception.MQClientException;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.remoting.protocol.ResponseCode;
|
import org.apache.rocketmq.common.protocol.ResponseCode;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
import org.apache.rocketmq.dashboard.model.DlqMessageResendResult;
|
import org.apache.rocketmq.dashboard.model.DlqMessageResendResult;
|
||||||
import org.apache.rocketmq.dashboard.model.DlqMessageRequest;
|
import org.apache.rocketmq.dashboard.model.DlqMessageRequest;
|
||||||
import org.apache.rocketmq.dashboard.model.MessagePage;
|
import org.apache.rocketmq.dashboard.model.MessagePage;
|
||||||
@@ -62,12 +62,10 @@ public class DlqMessageServiceImpl implements DlqMessageService {
|
|||||||
&& e.getResponseCode() == ResponseCode.TOPIC_NOT_EXIST) {
|
&& e.getResponseCode() == ResponseCode.TOPIC_NOT_EXIST) {
|
||||||
return new MessagePage(new PageImpl<>(messageViews, page, 0), query.getTaskId());
|
return new MessagePage(new PageImpl<>(messageViews, page, 0), query.getTaskId());
|
||||||
} else {
|
} else {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
return messageService.queryMessageByPage(query);
|
return messageService.queryMessageByPage(query);
|
||||||
}
|
}
|
||||||
|
@@ -37,9 +37,9 @@ import org.apache.rocketmq.common.Pair;
|
|||||||
import org.apache.rocketmq.common.message.MessageClientIDSetter;
|
import org.apache.rocketmq.common.message.MessageClientIDSetter;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.Connection;
|
import org.apache.rocketmq.common.protocol.body.Connection;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
||||||
import org.apache.rocketmq.dashboard.exception.ServiceException;
|
import org.apache.rocketmq.dashboard.exception.ServiceException;
|
||||||
import org.apache.rocketmq.dashboard.model.QueueOffsetInfo;
|
import org.apache.rocketmq.dashboard.model.QueueOffsetInfo;
|
||||||
@@ -115,8 +115,7 @@ public class MessageServiceImpl implements MessageService {
|
|||||||
if (err instanceof MQClientException) {
|
if (err instanceof MQClientException) {
|
||||||
throw new ServiceException(-1, ((MQClientException) err).getErrorMessage());
|
throw new ServiceException(-1, ((MQClientException) err).getErrorMessage());
|
||||||
}
|
}
|
||||||
Throwables.throwIfUnchecked(err);
|
throw Throwables.propagate(err);
|
||||||
throw new RuntimeException(err);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -186,8 +185,7 @@ public class MessageServiceImpl implements MessageService {
|
|||||||
});
|
});
|
||||||
return messageViewList;
|
return messageViewList;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
} finally {
|
} finally {
|
||||||
consumer.shutdown();
|
consumer.shutdown();
|
||||||
}
|
}
|
||||||
@@ -211,8 +209,7 @@ public class MessageServiceImpl implements MessageService {
|
|||||||
try {
|
try {
|
||||||
return mqAdminExt.consumeMessageDirectly(consumerGroup, clientId, topic, msgId);
|
return mqAdminExt.consumeMessageDirectly(consumerGroup, clientId, topic, msgId);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -226,8 +223,7 @@ public class MessageServiceImpl implements MessageService {
|
|||||||
return mqAdminExt.consumeMessageDirectly(consumerGroup, connection.getClientId(), topic, msgId);
|
return mqAdminExt.consumeMessageDirectly(consumerGroup, connection.getClientId(), topic, msgId);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
throw new IllegalStateException("NO CONSUMER");
|
throw new IllegalStateException("NO CONSUMER");
|
||||||
|
|
||||||
@@ -276,7 +272,7 @@ public class MessageServiceImpl implements MessageService {
|
|||||||
int idx = 0;
|
int idx = 0;
|
||||||
for (MessageQueue messageQueue : messageQueues) {
|
for (MessageQueue messageQueue : messageQueues) {
|
||||||
Long minOffset = consumer.searchOffset(messageQueue, query.getBegin());
|
Long minOffset = consumer.searchOffset(messageQueue, query.getBegin());
|
||||||
Long maxOffset = consumer.searchOffset(messageQueue, query.getEnd());
|
Long maxOffset = consumer.searchOffset(messageQueue, query.getEnd()) + 1;
|
||||||
queueOffsetInfos.add(new QueueOffsetInfo(idx++, minOffset, maxOffset, minOffset, minOffset, messageQueue));
|
queueOffsetInfos.add(new QueueOffsetInfo(idx++, minOffset, maxOffset, minOffset, minOffset, messageQueue));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -392,8 +388,7 @@ public class MessageServiceImpl implements MessageService {
|
|||||||
PageImpl<MessageView> page = new PageImpl<>(messageViews, query.page(), total);
|
PageImpl<MessageView> page = new PageImpl<>(messageViews, query.page(), total);
|
||||||
return new MessagePageTask(page, queueOffsetInfos);
|
return new MessagePageTask(page, queueOffsetInfos);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
} finally {
|
} finally {
|
||||||
consumer.shutdown();
|
consumer.shutdown();
|
||||||
}
|
}
|
||||||
@@ -460,8 +455,7 @@ public class MessageServiceImpl implements MessageService {
|
|||||||
}
|
}
|
||||||
return new PageImpl<>(messageViews, query.page(), total);
|
return new PageImpl<>(messageViews, query.page(), total);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
} finally {
|
} finally {
|
||||||
consumer.shutdown();
|
consumer.shutdown();
|
||||||
}
|
}
|
||||||
|
@@ -82,8 +82,7 @@ public class MonitorServiceImpl implements MonitorService {
|
|||||||
MixAll.string2File(dataStr, path);
|
MixAll.string2File(dataStr, path);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -19,7 +19,7 @@ package org.apache.rocketmq.dashboard.service.impl;
|
|||||||
|
|
||||||
import com.google.common.base.Throwables;
|
import com.google.common.base.Throwables;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ProducerConnection;
|
import org.apache.rocketmq.common.protocol.body.ProducerConnection;
|
||||||
import org.apache.rocketmq.dashboard.service.ProducerService;
|
import org.apache.rocketmq.dashboard.service.ProducerService;
|
||||||
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -35,8 +35,7 @@ public class ProducerServiceImpl implements ProducerService {
|
|||||||
return mqAdminExt.examineProducerConnectionInfo(producerGroup, topic);
|
return mqAdminExt.examineProducerConnectionInfo(producerGroup, topic);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,59 +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.service.impl;
|
|
||||||
|
|
||||||
import com.google.common.collect.Maps;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
|
||||||
import org.apache.rocketmq.dashboard.service.ProxyService;
|
|
||||||
import org.apache.rocketmq.dashboard.service.client.ProxyAdmin;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
@Service
|
|
||||||
public class ProxyServiceImpl implements ProxyService {
|
|
||||||
@Resource
|
|
||||||
protected ProxyAdmin proxyAdmin;
|
|
||||||
@Resource
|
|
||||||
private RMQConfigure configure;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addProxyAddrList(String proxyAddr) {
|
|
||||||
List<String> proxyAddrs = configure.getProxyAddrs();
|
|
||||||
if (proxyAddrs != null && !proxyAddrs.contains(proxyAddr)) {
|
|
||||||
proxyAddrs.add(proxyAddr);
|
|
||||||
}
|
|
||||||
configure.setProxyAddrs(proxyAddrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateProxyAddrList(String proxyAddr) {
|
|
||||||
configure.setProxyAddr(proxyAddr);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Map<String, Object> getProxyHomePage() {
|
|
||||||
Map<String, Object> homePageInfoMap = Maps.newHashMap();
|
|
||||||
homePageInfoMap.put("currentProxyAddr", configure.getProxyAddr());
|
|
||||||
homePageInfoMap.put("proxyAddrList", configure.getProxyAddrs());
|
|
||||||
return homePageInfoMap;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -18,57 +18,43 @@
|
|||||||
package org.apache.rocketmq.dashboard.service.impl;
|
package org.apache.rocketmq.dashboard.service.impl;
|
||||||
|
|
||||||
import com.google.common.base.Throwables;
|
import com.google.common.base.Throwables;
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.rocketmq.acl.common.AclClientRPCHook;
|
import org.apache.rocketmq.acl.common.AclClientRPCHook;
|
||||||
import org.apache.rocketmq.acl.common.SessionCredentials;
|
import org.apache.rocketmq.acl.common.SessionCredentials;
|
||||||
import org.apache.rocketmq.client.producer.DefaultMQProducer;
|
import org.apache.rocketmq.client.producer.DefaultMQProducer;
|
||||||
import org.apache.rocketmq.client.producer.SendResult;
|
import org.apache.rocketmq.client.producer.SendResult;
|
||||||
import org.apache.rocketmq.client.producer.TransactionListener;
|
|
||||||
import org.apache.rocketmq.client.producer.TransactionMQProducer;
|
|
||||||
import org.apache.rocketmq.client.producer.LocalTransactionState;
|
|
||||||
import org.apache.rocketmq.client.trace.TraceContext;
|
import org.apache.rocketmq.client.trace.TraceContext;
|
||||||
import org.apache.rocketmq.client.trace.TraceDispatcher;
|
import org.apache.rocketmq.client.trace.TraceDispatcher;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.common.TopicConfig;
|
import org.apache.rocketmq.common.TopicConfig;
|
||||||
import org.apache.rocketmq.common.attribute.TopicMessageType;
|
import org.apache.rocketmq.common.admin.TopicStatsTable;
|
||||||
import org.apache.rocketmq.common.message.Message;
|
import org.apache.rocketmq.common.message.Message;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
||||||
|
import org.apache.rocketmq.common.protocol.body.GroupList;
|
||||||
|
import org.apache.rocketmq.common.protocol.body.TopicList;
|
||||||
|
import org.apache.rocketmq.common.protocol.route.BrokerData;
|
||||||
|
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
||||||
import org.apache.rocketmq.common.topic.TopicValidator;
|
import org.apache.rocketmq.common.topic.TopicValidator;
|
||||||
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
||||||
import org.apache.rocketmq.dashboard.model.request.SendTopicMessageRequest;
|
import org.apache.rocketmq.dashboard.model.request.SendTopicMessageRequest;
|
||||||
import org.apache.rocketmq.dashboard.model.request.TopicConfigInfo;
|
import org.apache.rocketmq.dashboard.model.request.TopicConfigInfo;
|
||||||
import org.apache.rocketmq.dashboard.model.request.TopicTypeList;
|
|
||||||
import org.apache.rocketmq.dashboard.model.request.TopicTypeMeta;
|
|
||||||
import org.apache.rocketmq.dashboard.service.AbstractCommonService;
|
import org.apache.rocketmq.dashboard.service.AbstractCommonService;
|
||||||
import org.apache.rocketmq.dashboard.service.TopicService;
|
import org.apache.rocketmq.dashboard.service.TopicService;
|
||||||
import org.apache.rocketmq.remoting.RPCHook;
|
import org.apache.rocketmq.remoting.RPCHook;
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.TopicStatsTable;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.GroupList;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.body.TopicList;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.route.BrokerData;
|
|
||||||
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
|
||||||
import org.apache.rocketmq.tools.command.CommandUtil;
|
import org.apache.rocketmq.tools.command.CommandUtil;
|
||||||
import org.joor.Reflect;
|
import org.joor.Reflect;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.CollectionUtils;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ArrayBlockingQueue;
|
import java.util.concurrent.ArrayBlockingQueue;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import static org.apache.rocketmq.common.TopicAttributes.TOPIC_MESSAGE_TYPE_ATTRIBUTE;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class TopicServiceImpl extends AbstractCommonService implements TopicService {
|
public class TopicServiceImpl extends AbstractCommonService implements TopicService {
|
||||||
@@ -98,43 +84,7 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
allTopics.getTopicList().addAll(topics);
|
allTopics.getTopicList().addAll(topics);
|
||||||
return allTopics;
|
return allTopics;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TopicTypeList examineAllTopicType() {
|
|
||||||
ArrayList<TopicTypeMeta> topicTypes = new ArrayList<>();
|
|
||||||
ArrayList<String> names = new ArrayList<>();
|
|
||||||
ArrayList<String> messageTypes = new ArrayList<>();
|
|
||||||
TopicList topicList = fetchAllTopicList(false, false);
|
|
||||||
checkTopicType(topicList, topicTypes);
|
|
||||||
topicTypes.sort((t1, t2) -> t1.getTopicName().compareTo(t2.getTopicName()));
|
|
||||||
for (TopicTypeMeta topicTypeMeta : topicTypes) {
|
|
||||||
names.add(topicTypeMeta.getTopicName());
|
|
||||||
messageTypes.add(topicTypeMeta.getMessageType());
|
|
||||||
}
|
|
||||||
return new TopicTypeList(names, messageTypes);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void checkTopicType(TopicList topicList, ArrayList<TopicTypeMeta> topicTypes) {
|
|
||||||
for (String topicName : topicList.getTopicList()) {
|
|
||||||
TopicTypeMeta topicType = new TopicTypeMeta();
|
|
||||||
topicType.setTopicName(topicName);
|
|
||||||
if (topicName.startsWith("%R")) {
|
|
||||||
topicType.setMessageType("RETRY");
|
|
||||||
} else if (topicName.startsWith("%D")) {
|
|
||||||
topicType.setMessageType("DELAY");
|
|
||||||
} else if (topicName.startsWith("%S")) {
|
|
||||||
topicType.setMessageType("SYSTEM");
|
|
||||||
} else {
|
|
||||||
List<TopicConfigInfo> topicConfigInfos = examineTopicConfig(topicName);
|
|
||||||
if (!CollectionUtils.isEmpty(topicConfigInfos)) {
|
|
||||||
topicType.setMessageType(topicConfigInfos.get(0).getMessageType());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
topicTypes.add(topicType);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,8 +93,7 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
try {
|
try {
|
||||||
return mqAdminExt.examineTopicStats(topic);
|
return mqAdminExt.examineTopicStats(topic);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,8 +102,7 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
try {
|
try {
|
||||||
return mqAdminExt.examineTopicRouteInfo(topic);
|
return mqAdminExt.examineTopicRouteInfo(topic);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Throwables.throwIfUnchecked(ex);
|
throw Throwables.propagate(ex);
|
||||||
throw new RuntimeException(ex);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,8 +111,7 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
try {
|
try {
|
||||||
return mqAdminExt.queryTopicConsumeByWho(topic);
|
return mqAdminExt.queryTopicConsumeByWho(topic);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,11 +119,6 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
public void createOrUpdate(TopicConfigInfo topicCreateOrUpdateRequest) {
|
public void createOrUpdate(TopicConfigInfo topicCreateOrUpdateRequest) {
|
||||||
TopicConfig topicConfig = new TopicConfig();
|
TopicConfig topicConfig = new TopicConfig();
|
||||||
BeanUtils.copyProperties(topicCreateOrUpdateRequest, topicConfig);
|
BeanUtils.copyProperties(topicCreateOrUpdateRequest, topicConfig);
|
||||||
String messageType = topicCreateOrUpdateRequest.getMessageType();
|
|
||||||
if (StringUtils.isBlank(messageType)) {
|
|
||||||
messageType = TopicMessageType.NORMAL.name();
|
|
||||||
}
|
|
||||||
topicConfig.setAttributes(ImmutableMap.of("+".concat(TOPIC_MESSAGE_TYPE_ATTRIBUTE.getName()), messageType));
|
|
||||||
try {
|
try {
|
||||||
ClusterInfo clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
ClusterInfo clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
||||||
for (String brokerName : changeToBrokerNameSet(clusterInfo.getClusterAddrTable(),
|
for (String brokerName : changeToBrokerNameSet(clusterInfo.getClusterAddrTable(),
|
||||||
@@ -184,8 +126,7 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
mqAdminExt.createAndUpdateTopicConfig(clusterInfo.getBrokerAddrTable().get(brokerName).selectBrokerAddr(), topicConfig);
|
mqAdminExt.createAndUpdateTopicConfig(clusterInfo.getBrokerAddrTable().get(brokerName).selectBrokerAddr(), topicConfig);
|
||||||
}
|
}
|
||||||
} catch (Exception err) {
|
} catch (Exception err) {
|
||||||
Throwables.throwIfUnchecked(err);
|
throw Throwables.propagate(err);
|
||||||
throw new RuntimeException(err);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,8 +137,7 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
||||||
return mqAdminExt.examineTopicConfig(clusterInfo.getBrokerAddrTable().get(brokerName).selectBrokerAddr(), topic);
|
return mqAdminExt.examineTopicConfig(clusterInfo.getBrokerAddrTable().get(brokerName).selectBrokerAddr(), topic);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -210,11 +150,6 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
TopicConfig topicConfig = examineTopicConfig(topic, brokerData.getBrokerName());
|
TopicConfig topicConfig = examineTopicConfig(topic, brokerData.getBrokerName());
|
||||||
BeanUtils.copyProperties(topicConfig, topicConfigInfo);
|
BeanUtils.copyProperties(topicConfig, topicConfigInfo);
|
||||||
topicConfigInfo.setBrokerNameList(Lists.newArrayList(brokerData.getBrokerName()));
|
topicConfigInfo.setBrokerNameList(Lists.newArrayList(brokerData.getBrokerName()));
|
||||||
String messageType = topicConfig.getAttributes().get(TOPIC_MESSAGE_TYPE_ATTRIBUTE.getName());
|
|
||||||
if (StringUtils.isBlank(messageType)) {
|
|
||||||
messageType = TopicMessageType.UNSPECIFIED.name();
|
|
||||||
}
|
|
||||||
topicConfigInfo.setMessageType(messageType);
|
|
||||||
topicConfigInfoList.add(topicConfigInfo);
|
topicConfigInfoList.add(topicConfigInfo);
|
||||||
}
|
}
|
||||||
return topicConfigInfoList;
|
return topicConfigInfoList;
|
||||||
@@ -235,8 +170,7 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
}
|
}
|
||||||
mqAdminExt.deleteTopicInNameServer(nameServerSet, topic);
|
mqAdminExt.deleteTopicInNameServer(nameServerSet, topic);
|
||||||
} catch (Exception err) {
|
} catch (Exception err) {
|
||||||
Throwables.throwIfUnchecked(err);
|
throw Throwables.propagate(err);
|
||||||
throw new RuntimeException(err);
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -247,8 +181,7 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
try {
|
try {
|
||||||
clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
||||||
} catch (Exception err) {
|
} catch (Exception err) {
|
||||||
Throwables.throwIfUnchecked(err);
|
throw Throwables.propagate(err);
|
||||||
throw new RuntimeException(err);
|
|
||||||
}
|
}
|
||||||
for (String clusterName : clusterInfo.getClusterAddrTable().keySet()) {
|
for (String clusterName : clusterInfo.getClusterAddrTable().keySet()) {
|
||||||
deleteTopic(topic, clusterName);
|
deleteTopic(topic, clusterName);
|
||||||
@@ -264,13 +197,11 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
try {
|
try {
|
||||||
clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
mqAdminExt.deleteTopicInBroker(Sets.newHashSet(clusterInfo.getBrokerAddrTable().get(brokerName).selectBrokerAddr()), topic);
|
mqAdminExt.deleteTopicInBroker(Sets.newHashSet(clusterInfo.getBrokerAddrTable().get(brokerName).selectBrokerAddr()), topic);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -285,12 +216,6 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
return defaultMQProducer;
|
return defaultMQProducer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TransactionMQProducer buildTransactionMQProducer(String producerGroup, RPCHook rpcHook, boolean traceEnabled) {
|
|
||||||
TransactionMQProducer defaultMQProducer = new TransactionMQProducer(null, producerGroup, rpcHook, traceEnabled, TopicValidator.RMQ_SYS_TRACE_TOPIC);
|
|
||||||
defaultMQProducer.setUseTLS(configure.isUseTLS());
|
|
||||||
return defaultMQProducer;
|
|
||||||
}
|
|
||||||
|
|
||||||
private TopicList getSystemTopicList() {
|
private TopicList getSystemTopicList() {
|
||||||
RPCHook rpcHook = null;
|
RPCHook rpcHook = null;
|
||||||
boolean isEnableAcl = !StringUtils.isEmpty(configure.getAccessKey()) && !StringUtils.isEmpty(configure.getSecretKey());
|
boolean isEnableAcl = !StringUtils.isEmpty(configure.getAccessKey()) && !StringUtils.isEmpty(configure.getSecretKey());
|
||||||
@@ -305,8 +230,7 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
producer.start();
|
producer.start();
|
||||||
return producer.getDefaultMQProducerImpl().getmQClientFactory().getMQClientAPIImpl().getSystemTopicList(20000L);
|
return producer.getDefaultMQProducerImpl().getmQClientFactory().getMQClientAPIImpl().getSystemTopicList(20000L);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
} finally {
|
} finally {
|
||||||
producer.shutdown();
|
producer.shutdown();
|
||||||
}
|
}
|
||||||
@@ -314,8 +238,7 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SendResult sendTopicMessageRequest(SendTopicMessageRequest sendTopicMessageRequest) {
|
public SendResult sendTopicMessageRequest(SendTopicMessageRequest sendTopicMessageRequest) {
|
||||||
List<TopicConfigInfo> topicConfigInfos = examineTopicConfig(sendTopicMessageRequest.getTopic());
|
DefaultMQProducer producer = null;
|
||||||
String messageType = topicConfigInfos.get(0).getMessageType();
|
|
||||||
AclClientRPCHook rpcHook = null;
|
AclClientRPCHook rpcHook = null;
|
||||||
if (configure.isACLEnabled()) {
|
if (configure.isACLEnabled()) {
|
||||||
rpcHook = new AclClientRPCHook(new SessionCredentials(
|
rpcHook = new AclClientRPCHook(new SessionCredentials(
|
||||||
@@ -323,32 +246,6 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
configure.getSecretKey()
|
configure.getSecretKey()
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
if (TopicMessageType.TRANSACTION.getValue().equals(messageType)) {
|
|
||||||
// transaction message
|
|
||||||
TransactionListener transactionListener = new TransactionListenerImpl();
|
|
||||||
|
|
||||||
TransactionMQProducer producer = buildTransactionMQProducer(MixAll.SELF_TEST_PRODUCER_GROUP, rpcHook, sendTopicMessageRequest.isTraceEnabled());
|
|
||||||
producer.setInstanceName(String.valueOf(System.currentTimeMillis()));
|
|
||||||
producer.setNamesrvAddr(configure.getNamesrvAddr());
|
|
||||||
producer.setTransactionListener(transactionListener);
|
|
||||||
try {
|
|
||||||
producer.start();
|
|
||||||
Message msg = new Message(sendTopicMessageRequest.getTopic(),
|
|
||||||
sendTopicMessageRequest.getTag(),
|
|
||||||
sendTopicMessageRequest.getKey(),
|
|
||||||
sendTopicMessageRequest.getMessageBody().getBytes()
|
|
||||||
);
|
|
||||||
return producer.sendMessageInTransaction(msg, null);
|
|
||||||
} catch (Exception e) {
|
|
||||||
Throwables.throwIfUnchecked(e);
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
} finally {
|
|
||||||
waitSendTraceFinish(producer, sendTopicMessageRequest.isTraceEnabled());
|
|
||||||
producer.shutdown();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// no transaction message
|
|
||||||
DefaultMQProducer producer = null;
|
|
||||||
producer = buildDefaultMQProducer(MixAll.SELF_TEST_PRODUCER_GROUP, rpcHook, sendTopicMessageRequest.isTraceEnabled());
|
producer = buildDefaultMQProducer(MixAll.SELF_TEST_PRODUCER_GROUP, rpcHook, sendTopicMessageRequest.isTraceEnabled());
|
||||||
producer.setInstanceName(String.valueOf(System.currentTimeMillis()));
|
producer.setInstanceName(String.valueOf(System.currentTimeMillis()));
|
||||||
producer.setNamesrvAddr(configure.getNamesrvAddr());
|
producer.setNamesrvAddr(configure.getNamesrvAddr());
|
||||||
@@ -361,16 +258,13 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
);
|
);
|
||||||
return producer.send(msg);
|
return producer.send(msg);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
} finally {
|
} finally {
|
||||||
waitSendTraceFinish(producer, sendTopicMessageRequest.isTraceEnabled());
|
waitSendTraceFinish(producer, sendTopicMessageRequest.isTraceEnabled());
|
||||||
producer.shutdown();
|
producer.shutdown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void waitSendTraceFinish(DefaultMQProducer producer, boolean traceEnabled) {
|
private void waitSendTraceFinish(DefaultMQProducer producer, boolean traceEnabled) {
|
||||||
if (!traceEnabled) {
|
if (!traceEnabled) {
|
||||||
return;
|
return;
|
||||||
@@ -390,20 +284,4 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
} catch (Exception ignore) {
|
} catch (Exception ignore) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static class TransactionListenerImpl implements TransactionListener {
|
|
||||||
private AtomicInteger transactionIndex = new AtomicInteger(0);
|
|
||||||
|
|
||||||
private ConcurrentHashMap<String, Integer> localTrans = new ConcurrentHashMap<>();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public LocalTransactionState executeLocalTransaction(Message msg, Object arg) {
|
|
||||||
return LocalTransactionState.COMMIT_MESSAGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public LocalTransactionState checkLocalTransaction(MessageExt msg) {
|
|
||||||
return LocalTransactionState.COMMIT_MESSAGE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -24,12 +24,12 @@ import java.util.List;
|
|||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.common.stats.Stats;
|
import org.apache.rocketmq.common.protocol.body.BrokerStatsData;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.BrokerStatsData;
|
import org.apache.rocketmq.common.protocol.body.GroupList;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.GroupList;
|
import org.apache.rocketmq.common.protocol.route.BrokerData;
|
||||||
import org.apache.rocketmq.remoting.protocol.route.BrokerData;
|
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
||||||
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
|
||||||
import org.apache.rocketmq.dashboard.service.DashboardCollectService;
|
import org.apache.rocketmq.dashboard.service.DashboardCollectService;
|
||||||
|
import org.apache.rocketmq.store.stats.BrokerStatsManager;
|
||||||
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
||||||
import org.apache.rocketmq.tools.command.stats.StatsAllSubCommand;
|
import org.apache.rocketmq.tools.command.stats.StatsAllSubCommand;
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ public class CollectTaskRunnble implements Runnable {
|
|||||||
String masterAddr = bd.getBrokerAddrs().get(MixAll.MASTER_ID);
|
String masterAddr = bd.getBrokerAddrs().get(MixAll.MASTER_ID);
|
||||||
if (masterAddr != null) {
|
if (masterAddr != null) {
|
||||||
try {
|
try {
|
||||||
BrokerStatsData bsd = mqAdminExt.viewBrokerStatsData(masterAddr, Stats.TOPIC_PUT_NUMS, topic);
|
BrokerStatsData bsd = mqAdminExt.viewBrokerStatsData(masterAddr, BrokerStatsManager.TOPIC_PUT_NUMS, topic);
|
||||||
inTPS += bsd.getStatsMinute().getTps();
|
inTPS += bsd.getStatsMinute().getTps();
|
||||||
inMsgCntToday += StatsAllSubCommand.compute24HourSum(bsd);
|
inMsgCntToday += StatsAllSubCommand.compute24HourSum(bsd);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -78,7 +78,7 @@ public class CollectTaskRunnble implements Runnable {
|
|||||||
if (masterAddr != null) {
|
if (masterAddr != null) {
|
||||||
try {
|
try {
|
||||||
String statsKey = String.format("%s@%s", topic, group);
|
String statsKey = String.format("%s@%s", topic, group);
|
||||||
BrokerStatsData bsd = mqAdminExt.viewBrokerStatsData(masterAddr, Stats.GROUP_GET_NUMS, statsKey);
|
BrokerStatsData bsd = mqAdminExt.viewBrokerStatsData(masterAddr, BrokerStatsManager.GROUP_GET_NUMS, statsKey);
|
||||||
outTPS += bsd.getStatsMinute().getTps();
|
outTPS += bsd.getStatsMinute().getTps();
|
||||||
outMsgCntToday += StatsAllSubCommand.compute24HourSum(bsd);
|
outMsgCntToday += StatsAllSubCommand.compute24HourSum(bsd);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -93,8 +93,7 @@ public class CollectTaskRunnble implements Runnable {
|
|||||||
try {
|
try {
|
||||||
list = dashboardCollectService.getTopicMap().get(topic);
|
list = dashboardCollectService.getTopicMap().get(topic);
|
||||||
} catch (ExecutionException e) {
|
} catch (ExecutionException e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
if (null == list) {
|
if (null == list) {
|
||||||
list = Lists.newArrayList();
|
list = Lists.newArrayList();
|
||||||
|
@@ -34,10 +34,10 @@ import java.util.Set;
|
|||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.KVTable;
|
import org.apache.rocketmq.common.protocol.body.KVTable;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.TopicList;
|
import org.apache.rocketmq.common.protocol.body.TopicList;
|
||||||
import org.apache.rocketmq.remoting.protocol.route.BrokerData;
|
import org.apache.rocketmq.common.protocol.route.BrokerData;
|
||||||
import org.apache.rocketmq.common.topic.TopicValidator;
|
import org.apache.rocketmq.common.topic.TopicValidator;
|
||||||
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
||||||
import org.apache.rocketmq.dashboard.service.DashboardCollectService;
|
import org.apache.rocketmq.dashboard.service.DashboardCollectService;
|
||||||
@@ -84,8 +84,7 @@ public class DashboardCollectTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception err) {
|
catch (Exception err) {
|
||||||
Throwables.throwIfUnchecked(err);
|
throw Throwables.propagate(err);
|
||||||
throw new RuntimeException(err);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,8 +128,7 @@ public class DashboardCollectTask {
|
|||||||
log.debug("Broker Collected Data in memory = {}" + JsonUtil.obj2String(dashboardCollectService.getBrokerMap().asMap()));
|
log.debug("Broker Collected Data in memory = {}" + JsonUtil.obj2String(dashboardCollectService.getBrokerMap().asMap()));
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,12 +144,10 @@ public class DashboardCollectTask {
|
|||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
}
|
}
|
||||||
catch (InterruptedException e1) {
|
catch (InterruptedException e1) {
|
||||||
Throwables.throwIfUnchecked(e1);
|
throw Throwables.propagate(e1);
|
||||||
throw new RuntimeException(e1);
|
|
||||||
}
|
}
|
||||||
fetchBrokerRuntimeStats(brokerAddr, retryTime - 1);
|
fetchBrokerRuntimeStats(brokerAddr, retryTime - 1);
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,8 +197,7 @@ public class DashboardCollectTask {
|
|||||||
|
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,7 +250,7 @@ public class DashboardCollectTask {
|
|||||||
|
|
||||||
private void addSystemTopic() throws Exception {
|
private void addSystemTopic() throws Exception {
|
||||||
ClusterInfo clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
ClusterInfo clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
||||||
Map<String, Set<String>> clusterTable = clusterInfo.getClusterAddrTable();
|
HashMap<String, Set<String>> clusterTable = clusterInfo.getClusterAddrTable();
|
||||||
for (Map.Entry<String, Set<String>> entry : clusterTable.entrySet()) {
|
for (Map.Entry<String, Set<String>> entry : clusterTable.entrySet()) {
|
||||||
String clusterName = entry.getKey();
|
String clusterName = entry.getKey();
|
||||||
TopicValidator.addSystemTopic(clusterName);
|
TopicValidator.addSystemTopic(clusterName);
|
||||||
|
@@ -40,7 +40,7 @@ public class MonitorTask {
|
|||||||
// @Scheduled(cron = "* * * * * ?")
|
// @Scheduled(cron = "* * * * * ?")
|
||||||
public void scanProblemConsumeGroup() {
|
public void scanProblemConsumeGroup() {
|
||||||
for (Map.Entry<String, ConsumerMonitorConfig> configEntry : monitorService.queryConsumerMonitorConfig().entrySet()) {
|
for (Map.Entry<String, ConsumerMonitorConfig> configEntry : monitorService.queryConsumerMonitorConfig().entrySet()) {
|
||||||
GroupConsumeInfo consumeInfo = consumerService.queryGroup(configEntry.getKey(), null);
|
GroupConsumeInfo consumeInfo = consumerService.queryGroup(configEntry.getKey());
|
||||||
if (consumeInfo.getCount() < configEntry.getValue().getMinCount() || consumeInfo.getDiffTotal() > configEntry.getValue().getMaxDiffTotal()) {
|
if (consumeInfo.getCount() < configEntry.getValue().getMinCount() || consumeInfo.getDiffTotal() > configEntry.getValue().getMaxDiffTotal()) {
|
||||||
logger.info("op=look consumeInfo {}", JsonUtil.obj2String(consumeInfo)); // notify the alert system
|
logger.info("op=look consumeInfo {}", JsonUtil.obj2String(consumeInfo)); // notify the alert system
|
||||||
}
|
}
|
||||||
|
@@ -42,9 +42,7 @@ rocketmq:
|
|||||||
# configure multiple namesrv addresses to manage multiple different clusters
|
# configure multiple namesrv addresses to manage multiple different clusters
|
||||||
namesrvAddrs:
|
namesrvAddrs:
|
||||||
- 127.0.0.1:9876
|
- 127.0.0.1:9876
|
||||||
# - 127.0.0.2:9876
|
- 127.0.0.2:9876
|
||||||
# - 10.151.47.32:9876;10.151.47.33:9876;10.151.47.34:9876
|
|
||||||
# - 10.151.47.30:9876
|
|
||||||
# if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
|
# if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
|
||||||
isVIPChannel:
|
isVIPChannel:
|
||||||
# timeout for mqadminExt, default 5000ms
|
# timeout for mqadminExt, default 5000ms
|
||||||
@@ -59,12 +57,9 @@ rocketmq:
|
|||||||
# must create userInfo file: ${rocketmq.config.dataPath}/users.properties if the login is required
|
# must create userInfo file: ${rocketmq.config.dataPath}/users.properties if the login is required
|
||||||
loginRequired: false
|
loginRequired: false
|
||||||
useTLS: false
|
useTLS: false
|
||||||
proxyAddr: 127.0.0.1:8080
|
|
||||||
proxyAddrs:
|
|
||||||
- 127.0.0.1:8080
|
|
||||||
# set the accessKey and secretKey if you used acl
|
# set the accessKey and secretKey if you used acl
|
||||||
# accessKey: rocketmq2
|
accessKey: # if version > 4.4.0
|
||||||
# secretKey: 12345678
|
secretKey: # if version > 4.4.0
|
||||||
|
|
||||||
threadpool:
|
threadpool:
|
||||||
config:
|
config:
|
||||||
|
@@ -25,10 +25,10 @@
|
|||||||
|
|
||||||
<appender name="FILE"
|
<appender name="FILE"
|
||||||
class="ch.qos.logback.core.rolling.RollingFileAppender">
|
class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
<file>${user.home}/logs/dashboardlogs/rocketmq-dashboard.log</file>
|
<file>${user.home}/logs/consolelogs/rocketmq-console.log</file>
|
||||||
<append>true</append>
|
<append>true</append>
|
||||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||||
<fileNamePattern>${user.home}/logs/dashboardlogs/rocketmq-dashboard-%d{yyyy-MM-dd}.%i.log
|
<fileNamePattern>${user.home}/logs/consolelogs/rocketmq-console-%d{yyyy-MM-dd}.%i.log
|
||||||
</fileNamePattern>
|
</fileNamePattern>
|
||||||
<timeBasedFileNamingAndTriggeringPolicy
|
<timeBasedFileNamingAndTriggeringPolicy
|
||||||
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||||
|
@@ -104,7 +104,6 @@
|
|||||||
<script type="text/javascript" src="src/tools/tools.js?v=201703171710"></script>
|
<script type="text/javascript" src="src/tools/tools.js?v=201703171710"></script>
|
||||||
<script type="text/javascript" src="src/cluster.js?timestamp=4"></script>
|
<script type="text/javascript" src="src/cluster.js?timestamp=4"></script>
|
||||||
<script type="text/javascript" src="src/topic.js"></script>
|
<script type="text/javascript" src="src/topic.js"></script>
|
||||||
<script type="text/javascript" src="src/proxy.js"></script>
|
|
||||||
<script type="text/javascript" src="src/consumer.js?timestamp=6"></script>
|
<script type="text/javascript" src="src/consumer.js?timestamp=6"></script>
|
||||||
<script type="text/javascript" src="src/producer.js"></script>
|
<script type="text/javascript" src="src/producer.js"></script>
|
||||||
<script type="text/javascript" src="src/message.js"></script>
|
<script type="text/javascript" src="src/message.js"></script>
|
||||||
|
@@ -213,9 +213,6 @@ app.config(['$routeProvider', '$httpProvider','$cookiesProvider','getDictNamePro
|
|||||||
}).when('/ops', {
|
}).when('/ops', {
|
||||||
templateUrl: 'view/pages/ops.html',
|
templateUrl: 'view/pages/ops.html',
|
||||||
controller:'opsController'
|
controller:'opsController'
|
||||||
}).when('/proxy', {
|
|
||||||
templateUrl: 'view/pages/proxy.html',
|
|
||||||
controller:'proxyController'
|
|
||||||
}).when('/acl', {
|
}).when('/acl', {
|
||||||
templateUrl: 'view/pages/acl.html',
|
templateUrl: 'view/pages/acl.html',
|
||||||
controller: 'aclController'
|
controller: 'aclController'
|
||||||
|
@@ -45,7 +45,6 @@ module.controller('consumerController', ['$scope', 'ngDialog', '$http', 'Notific
|
|||||||
$scope.writeOperationEnabled = $scope.userRole == null ? true : ($scope.userRole == 1 ? true : false);
|
$scope.writeOperationEnabled = $scope.userRole == null ? true : ($scope.userRole == 1 ? true : false);
|
||||||
$scope.filterNormal = true;
|
$scope.filterNormal = true;
|
||||||
$scope.filterSystem = false;
|
$scope.filterSystem = false;
|
||||||
$scope.filterFIFO = false;
|
|
||||||
|
|
||||||
$scope.doSort = function () {// todo how to change this fe's code ? (it's dirty)
|
$scope.doSort = function () {// todo how to change this fe's code ? (it's dirty)
|
||||||
if ($scope.sortKey == 'diffTotal') {
|
if ($scope.sortKey == 'diffTotal') {
|
||||||
@@ -76,11 +75,7 @@ module.controller('consumerController', ['$scope', 'ngDialog', '$http', 'Notific
|
|||||||
|
|
||||||
$http({
|
$http({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: "consumer/groupList.query",
|
url: "consumer/groupList.query"
|
||||||
params: {
|
|
||||||
skipSysGroup: false,
|
|
||||||
address: localStorage.getItem('isV5') ? localStorage.getItem('proxyAddr') : null
|
|
||||||
}
|
|
||||||
}).success(function (resp) {
|
}).success(function (resp) {
|
||||||
if (resp.status == 0) {
|
if (resp.status == 0) {
|
||||||
$scope.allConsumerGrouopList = resp.data;
|
$scope.allConsumerGrouopList = resp.data;
|
||||||
@@ -140,28 +135,16 @@ module.controller('consumerController', ['$scope', 'ngDialog', '$http', 'Notific
|
|||||||
$scope.filterList(1);
|
$scope.filterList(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
$scope.$watch('filterFIFO', function () {
|
$scope.filterByType = function (str) {
|
||||||
$scope.filterList(1);
|
|
||||||
});
|
|
||||||
|
|
||||||
$scope.filterByType = function (str, type,version) {
|
|
||||||
if ($scope.filterSystem) {
|
if ($scope.filterSystem) {
|
||||||
if (type === "SYSTEM") {
|
if (str.startsWith("%S")) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($scope.filterNormal) {
|
if ($scope.filterNormal) {
|
||||||
if (type === "NORMAL") {
|
if (str.startsWith("%") == false) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if(!version && type === "FIFO"){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($scope.filterFIFO) {
|
|
||||||
if (type === "FIFO") {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
@@ -171,7 +154,7 @@ module.controller('consumerController', ['$scope', 'ngDialog', '$http', 'Notific
|
|||||||
var canShowList = [];
|
var canShowList = [];
|
||||||
$scope.allConsumerGrouopList.forEach(function (element) {
|
$scope.allConsumerGrouopList.forEach(function (element) {
|
||||||
console.log(element)
|
console.log(element)
|
||||||
if ($scope.filterByType(element.group, element.subGroupType, $scope.rmqVersion)) {
|
if ($scope.filterByType(element.group)) {
|
||||||
if (element.group.toLowerCase().indexOf(lowExceptStr) != -1) {
|
if (element.group.toLowerCase().indexOf(lowExceptStr) != -1) {
|
||||||
canShowList.push(element);
|
canShowList.push(element);
|
||||||
}
|
}
|
||||||
@@ -206,7 +189,6 @@ module.controller('consumerController', ['$scope', 'ngDialog', '$http', 'Notific
|
|||||||
subscriptionGroupConfig: {
|
subscriptionGroupConfig: {
|
||||||
groupName: "",
|
groupName: "",
|
||||||
consumeEnable: true,
|
consumeEnable: true,
|
||||||
consumeMessageOrderly: false,
|
|
||||||
consumeFromMinEnable: true,
|
consumeFromMinEnable: true,
|
||||||
consumeBroadcastEnable: true,
|
consumeBroadcastEnable: true,
|
||||||
retryQueueNums: 1,
|
retryQueueNums: 1,
|
||||||
@@ -229,7 +211,7 @@ module.controller('consumerController', ['$scope', 'ngDialog', '$http', 'Notific
|
|||||||
// Refresh topic list
|
// Refresh topic list
|
||||||
$scope.refreshConsumerData();
|
$scope.refreshConsumerData();
|
||||||
},
|
},
|
||||||
template: $scope.rmqVersion ? 'consumerModifyDialogForV5' : 'consumerModifyDialog',
|
template: 'consumerModifyDialog',
|
||||||
controller: 'consumerModifyDialogController',
|
controller: 'consumerModifyDialogController',
|
||||||
data: {
|
data: {
|
||||||
consumerRequestList: request,
|
consumerRequestList: request,
|
||||||
@@ -244,11 +226,11 @@ module.controller('consumerController', ['$scope', 'ngDialog', '$http', 'Notific
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
$scope.detail = function (consumerGroupName, address) {
|
$scope.detail = function (consumerGroupName) {
|
||||||
$http({
|
$http({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: "consumer/queryTopicByConsumer.query",
|
url: "consumer/queryTopicByConsumer.query",
|
||||||
params: {consumerGroup: consumerGroupName, address: address}
|
params: {consumerGroup: consumerGroupName}
|
||||||
}).success(function (resp) {
|
}).success(function (resp) {
|
||||||
if (resp.status == 0) {
|
if (resp.status == 0) {
|
||||||
console.log(resp);
|
console.log(resp);
|
||||||
@@ -263,11 +245,11 @@ module.controller('consumerController', ['$scope', 'ngDialog', '$http', 'Notific
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.client = function (consumerGroupName, address) {
|
$scope.client = function (consumerGroupName) {
|
||||||
$http({
|
$http({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: "consumer/consumerConnection.query",
|
url: "consumer/consumerConnection.query",
|
||||||
params: {consumerGroup: consumerGroupName, address: address}
|
params: {consumerGroup: consumerGroupName}
|
||||||
}).success(function (resp) {
|
}).success(function (resp) {
|
||||||
if (resp.status == 0) {
|
if (resp.status == 0) {
|
||||||
console.log(resp);
|
console.log(resp);
|
||||||
|
@@ -15,18 +15,10 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
app.controller('AppCtrl', ['$scope','$window','$translate','$http','Notification', function ($scope,$window,$translate, $http, Notification) {
|
app.controller('AppCtrl', ['$scope','$window','$translate','$http','Notification', function ($scope,$window,$translate, $http, Notification) {
|
||||||
$scope.rmqVersion = localStorage.getItem("isV5");
|
|
||||||
|
|
||||||
$scope.changeTranslate = function(langKey){
|
$scope.changeTranslate = function(langKey){
|
||||||
$translate.use(langKey);
|
$translate.use(langKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
$scope.changeRMQVersion = function (version) {
|
|
||||||
$scope.rmqVersion = version === 5;
|
|
||||||
var v = version === 5;
|
|
||||||
localStorage.setItem("isV5", v);
|
|
||||||
}
|
|
||||||
|
|
||||||
$scope.logout = function(){
|
$scope.logout = function(){
|
||||||
$http({
|
$http({
|
||||||
method: "POST",
|
method: "POST",
|
||||||
|
@@ -54,13 +54,9 @@ var en = {
|
|||||||
"RESET_CUS_OFFSET": "Reset Consumer Offset",
|
"RESET_CUS_OFFSET": "Reset Consumer Offset",
|
||||||
"DELETE": "Delete",
|
"DELETE": "Delete",
|
||||||
"CHANGE_LANG": "ChangeLanguage",
|
"CHANGE_LANG": "ChangeLanguage",
|
||||||
"CHANGE_VERSION": "ChangeVersion",
|
|
||||||
"BROKER": "Broker",
|
"BROKER": "Broker",
|
||||||
"NORMAL": "NORMAL",
|
"NORMAL": "NORMAL",
|
||||||
"RETRY": "RETRY",
|
"RETRY": "RETRY",
|
||||||
"FIFO": "FIFO",
|
|
||||||
"TRANSACTION": "TRANSACTION",
|
|
||||||
"UNSPECIFIED": "UNSPECIFIED",
|
|
||||||
"DLQ": "DLQ",
|
"DLQ": "DLQ",
|
||||||
"QUANTITY":"Quantity",
|
"QUANTITY":"Quantity",
|
||||||
"TYPE":"Type",
|
"TYPE":"Type",
|
||||||
@@ -101,7 +97,6 @@ var en = {
|
|||||||
"RESET_OFFSET":"resetOffset",
|
"RESET_OFFSET":"resetOffset",
|
||||||
"CLUSTER_NAME":"clusterName",
|
"CLUSTER_NAME":"clusterName",
|
||||||
"OPS":"OPS",
|
"OPS":"OPS",
|
||||||
"PROXY":"Proxy",
|
|
||||||
"AUTO_REFRESH":"AUTO_REFRESH",
|
"AUTO_REFRESH":"AUTO_REFRESH",
|
||||||
"REFRESH":"REFRESH",
|
"REFRESH":"REFRESH",
|
||||||
"LOGOUT":"Logout",
|
"LOGOUT":"Logout",
|
||||||
@@ -128,11 +123,5 @@ var en = {
|
|||||||
"GROUP_PERM":"Group Permission",
|
"GROUP_PERM":"Group Permission",
|
||||||
"SYNCHRONIZE":"Synchronize Data",
|
"SYNCHRONIZE":"Synchronize Data",
|
||||||
"SHOW":"Show",
|
"SHOW":"Show",
|
||||||
"HIDE":"Hide",
|
"HIDE":"Hide"
|
||||||
"MESSAGE_TYPE":"messageType",
|
|
||||||
"MESSAGE_TYPE_UNSPECIFIED": "UNSPECIFIED, is NORMAL",
|
|
||||||
"MESSAGE_TYPE_NORMAL": "NORMAL",
|
|
||||||
"MESSAGE_TYPE_FIFO": "FIFO",
|
|
||||||
"MESSAGE_TYPE_DELAY": "DELAY",
|
|
||||||
"MESSAGE_TYPE_TRANSACTION": "TRANSACTION",
|
|
||||||
}
|
}
|
||||||
|
@@ -55,13 +55,9 @@ var zh = {
|
|||||||
"SKIP_MESSAGE_ACCUMULATE":"跳过堆积",
|
"SKIP_MESSAGE_ACCUMULATE":"跳过堆积",
|
||||||
"DELETE": "删除",
|
"DELETE": "删除",
|
||||||
"CHANGE_LANG": "更换语言",
|
"CHANGE_LANG": "更换语言",
|
||||||
"CHANGE_VERSION": "更换版本",
|
|
||||||
"BROKER": "Broker",
|
"BROKER": "Broker",
|
||||||
"NORMAL": "普通",
|
"NORMAL": "普通",
|
||||||
"RETRY": "重试",
|
"RETRY": "重试",
|
||||||
"FIFO": "顺序",
|
|
||||||
"TRANSACTION": "事务",
|
|
||||||
"UNSPECIFIED": "未指定",
|
|
||||||
"DLQ": "死信",
|
"DLQ": "死信",
|
||||||
"QUANTITY":"数量",
|
"QUANTITY":"数量",
|
||||||
"TYPE":"类型",
|
"TYPE":"类型",
|
||||||
@@ -102,7 +98,6 @@ var zh = {
|
|||||||
"RESET_OFFSET":"重置位点",
|
"RESET_OFFSET":"重置位点",
|
||||||
"CLUSTER_NAME":"集群名",
|
"CLUSTER_NAME":"集群名",
|
||||||
"OPS":"运维",
|
"OPS":"运维",
|
||||||
"PROXY":"代理",
|
|
||||||
"AUTO_REFRESH":"自动刷新",
|
"AUTO_REFRESH":"自动刷新",
|
||||||
"REFRESH":"刷新",
|
"REFRESH":"刷新",
|
||||||
"LOGOUT":"退出",
|
"LOGOUT":"退出",
|
||||||
@@ -129,11 +124,5 @@ var zh = {
|
|||||||
"GROUP_PERM":"消费组权限",
|
"GROUP_PERM":"消费组权限",
|
||||||
"SYNCHRONIZE":"同步",
|
"SYNCHRONIZE":"同步",
|
||||||
"SHOW":"显示",
|
"SHOW":"显示",
|
||||||
"HIDE":"隐藏",
|
"HIDE":"隐藏"
|
||||||
"MESSAGE_TYPE":"消息类型",
|
|
||||||
"MESSAGE_TYPE_UNSPECIFIED": "未指定,为普通消息",
|
|
||||||
"MESSAGE_TYPE_NORMAL": "普通消息",
|
|
||||||
"MESSAGE_TYPE_FIFO": "顺序消息",
|
|
||||||
"MESSAGE_TYPE_DELAY": "定时/延时消息",
|
|
||||||
"MESSAGE_TYPE_TRANSACTION": "事务消息",
|
|
||||||
}
|
}
|
@@ -1,97 +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.
|
|
||||||
*/
|
|
||||||
var module = app;
|
|
||||||
module.controller('proxyController', ['$scope', '$location', '$http', 'Notification', 'remoteApi', 'tools', '$window',
|
|
||||||
function ($scope, $location, $http, Notification, remoteApi, tools, $window) {
|
|
||||||
$scope.proxyAddrList = [];
|
|
||||||
$scope.userRole = $window.sessionStorage.getItem("userrole");
|
|
||||||
$scope.writeOperationEnabled = $scope.userRole == null ? true : ($scope.userRole == 1 ? true : false);
|
|
||||||
$scope.inputReadonly = !$scope.writeOperationEnabled;
|
|
||||||
$scope.newProxyAddr = "";
|
|
||||||
$scope.allProxyConfig = {};
|
|
||||||
|
|
||||||
$http({
|
|
||||||
method: "GET",
|
|
||||||
url: "proxy/homePage.query"
|
|
||||||
}).success(function (resp) {
|
|
||||||
if (resp.status == 0) {
|
|
||||||
$scope.proxyAddrList = resp.data.proxyAddrList;
|
|
||||||
$scope.selectedProxy = resp.data.currentProxyAddr;
|
|
||||||
$scope.showProxyDetailConfig($scope.selectedProxy);
|
|
||||||
localStorage.setItem('proxyAddr',$scope.selectedProxy);
|
|
||||||
} else {
|
|
||||||
Notification.error({message: resp.errMsg, delay: 2000});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$scope.eleChange = function (data) {
|
|
||||||
$scope.proxyAddrList = data;
|
|
||||||
}
|
|
||||||
$scope.showDetailConf = function () {
|
|
||||||
$(".proxyModal").modal();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$scope.showProxyDetailConfig = function (proxyAddr) {
|
|
||||||
$http({
|
|
||||||
method: "GET",
|
|
||||||
url: "proxy/proxyDetailConfig.query",
|
|
||||||
params: {proxyAddress: proxyAddr}
|
|
||||||
}).success(function (resp) {
|
|
||||||
if (resp.status == 0) {
|
|
||||||
$scope.allProxyConfig = resp.data;
|
|
||||||
} else {
|
|
||||||
Notification.error({message: resp.errMsg, delay: 2000});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
$scope.updateProxyAddr = function () {
|
|
||||||
$http({
|
|
||||||
method: "POST",
|
|
||||||
url: "proxy/updateProxyAddr.do",
|
|
||||||
params: {proxyAddr: $scope.selectedProxy}
|
|
||||||
}).success(function (resp) {
|
|
||||||
if (resp.status == 0) {
|
|
||||||
localStorage.setItem('proxyAddr', $scope.selectedProxy);
|
|
||||||
Notification.info({message: "SUCCESS", delay: 2000});
|
|
||||||
} else {
|
|
||||||
Notification.error({message: resp.errMsg, delay: 2000});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$scope.showProxyDetailConfig($scope.selectedProxy);
|
|
||||||
};
|
|
||||||
|
|
||||||
$scope.addProxyAddr = function () {
|
|
||||||
$http({
|
|
||||||
method: "POST",
|
|
||||||
url: "proxy/addProxyAddr.do",
|
|
||||||
params: {newProxyAddr: $scope.newProxyAddr}
|
|
||||||
}).success(function (resp) {
|
|
||||||
if (resp.status == 0) {
|
|
||||||
if ($scope.proxyAddrList.indexOf($scope.newProxyAddr) == -1) {
|
|
||||||
$scope.proxyAddrList.push($scope.newProxyAddr);
|
|
||||||
}
|
|
||||||
$("#proxyAddr").val("");
|
|
||||||
$scope.newProxyAddr = "";
|
|
||||||
Notification.info({message: "SUCCESS", delay: 2000});
|
|
||||||
} else {
|
|
||||||
Notification.error({message: resp.errMsg, delay: 2000});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}])
|
|
@@ -45,16 +45,10 @@ module.controller('topicController', ['$scope', 'ngDialog', '$http', 'Notificati
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
$scope.filterNormal = true
|
$scope.filterNormal = true
|
||||||
$scope.filterDelay = false
|
|
||||||
$scope.filterFifo = false
|
|
||||||
$scope.filterTransaction = false
|
|
||||||
$scope.filterUnspecified = false
|
|
||||||
$scope.filterRetry = false
|
$scope.filterRetry = false
|
||||||
$scope.filterDLQ = false
|
$scope.filterDLQ = false
|
||||||
$scope.filterSystem = false
|
$scope.filterSystem = false
|
||||||
$scope.allTopicList = [];
|
$scope.allTopicList = [];
|
||||||
$scope.allTopicNameList = [];
|
|
||||||
$scope.allMessageTypeList = [];
|
|
||||||
$scope.topicShowList = [];
|
$scope.topicShowList = [];
|
||||||
$scope.userRole = $window.sessionStorage.getItem("userrole");
|
$scope.userRole = $window.sessionStorage.getItem("userrole");
|
||||||
$scope.writeOperationEnabled = $scope.userRole == null ? true : ($scope.userRole == 1 ? true : false);
|
$scope.writeOperationEnabled = $scope.userRole == null ? true : ($scope.userRole == 1 ? true : false);
|
||||||
@@ -62,14 +56,13 @@ module.controller('topicController', ['$scope', 'ngDialog', '$http', 'Notificati
|
|||||||
$scope.refreshTopicList = function () {
|
$scope.refreshTopicList = function () {
|
||||||
$http({
|
$http({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: "topic/list.queryTopicType"
|
url: "topic/list.query"
|
||||||
}).success(function (resp) {
|
}).success(function (resp) {
|
||||||
if (resp.status == 0) {
|
if (resp.status == 0) {
|
||||||
$scope.allTopicNameList = resp.data.topicNameList;
|
$scope.allTopicList = resp.data.topicList.sort();
|
||||||
$scope.allMessageTypeList = resp.data.messageTypeList;
|
console.log($scope.allTopicList);
|
||||||
console.log($scope.allTopicNameList);
|
|
||||||
console.log(JSON.stringify(resp));
|
console.log(JSON.stringify(resp));
|
||||||
$scope.showTopicList(1, $scope.allTopicNameList.length);
|
$scope.showTopicList(1, $scope.allTopicList.length);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Notification.error({message: resp.errMsg, delay: 5000});
|
Notification.error({message: resp.errMsg, delay: 5000});
|
||||||
@@ -86,18 +79,6 @@ module.controller('topicController', ['$scope', 'ngDialog', '$http', 'Notificati
|
|||||||
$scope.$watch('filterNormal', function () {
|
$scope.$watch('filterNormal', function () {
|
||||||
$scope.filterList(1);
|
$scope.filterList(1);
|
||||||
});
|
});
|
||||||
$scope.$watch('filterFifo', function () {
|
|
||||||
$scope.filterList(1);
|
|
||||||
});
|
|
||||||
$scope.$watch('filterTransaction', function () {
|
|
||||||
$scope.filterList(1);
|
|
||||||
});
|
|
||||||
$scope.$watch('filterUnspecified', function () {
|
|
||||||
$scope.filterList(1);
|
|
||||||
});
|
|
||||||
$scope.$watch('filterDelay', function () {
|
|
||||||
$scope.filterList(1);
|
|
||||||
});
|
|
||||||
$scope.$watch('filterRetry', function () {
|
$scope.$watch('filterRetry', function () {
|
||||||
$scope.filterList(1);
|
$scope.filterList(1);
|
||||||
});
|
});
|
||||||
@@ -111,13 +92,13 @@ module.controller('topicController', ['$scope', 'ngDialog', '$http', 'Notificati
|
|||||||
var lowExceptStr = $scope.filterStr.toLowerCase();
|
var lowExceptStr = $scope.filterStr.toLowerCase();
|
||||||
var canShowList = [];
|
var canShowList = [];
|
||||||
|
|
||||||
for (let i = 0; i < $scope.allTopicNameList.length; ++i) {
|
$scope.allTopicList.forEach(function (element) {
|
||||||
if ($scope.filterByType($scope.allTopicNameList[i], $scope.allMessageTypeList[i])) {
|
if ($scope.filterByType(element)) {
|
||||||
if ($scope.allTopicNameList[i].toLowerCase().indexOf(lowExceptStr) != -1) {
|
if (element.toLowerCase().indexOf(lowExceptStr) != -1) {
|
||||||
canShowList.push($scope.allTopicNameList[i]);
|
canShowList.push(element);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
});
|
||||||
$scope.paginationConf.totalItems = canShowList.length;
|
$scope.paginationConf.totalItems = canShowList.length;
|
||||||
var perPage = $scope.paginationConf.itemsPerPage;
|
var perPage = $scope.paginationConf.itemsPerPage;
|
||||||
var from = (currentPage - 1) * perPage;
|
var from = (currentPage - 1) * perPage;
|
||||||
@@ -125,7 +106,7 @@ module.controller('topicController', ['$scope', 'ngDialog', '$http', 'Notificati
|
|||||||
$scope.topicShowList = canShowList.slice(from, to);
|
$scope.topicShowList = canShowList.slice(from, to);
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.filterByType = function (str, type) {
|
$scope.filterByType = function (str) {
|
||||||
if ($scope.filterRetry) {
|
if ($scope.filterRetry) {
|
||||||
if (str.startsWith("%R")) {
|
if (str.startsWith("%R")) {
|
||||||
return true
|
return true
|
||||||
@@ -141,31 +122,8 @@ module.controller('topicController', ['$scope', 'ngDialog', '$http', 'Notificati
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localStorage.getItem('isV5') && $scope.filterUnspecified) {
|
|
||||||
if (type.includes("UNSPECIFIED")) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($scope.filterNormal) {
|
if ($scope.filterNormal) {
|
||||||
if (type.includes("NORMAL")) {
|
if (str.startsWith("%") == false) {
|
||||||
return true
|
|
||||||
}
|
|
||||||
if (!localStorage.getItem('isV5') && type.includes("UNSPECIFIED")) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (localStorage.getItem('isV5') && $scope.filterDelay) {
|
|
||||||
if (type.includes("DELAY")) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (localStorage.getItem('isV5') && $scope.filterFifo) {
|
|
||||||
if (type.includes("FIFO")) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (localStorage.getItem('isV5') && $scope.filterTransaction) {
|
|
||||||
if (type.includes("TRANSACTION")) {
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -180,10 +138,10 @@ module.controller('topicController', ['$scope', 'ngDialog', '$http', 'Notificati
|
|||||||
var perPage = $scope.paginationConf.itemsPerPage;
|
var perPage = $scope.paginationConf.itemsPerPage;
|
||||||
var from = (currentPage - 1) * perPage;
|
var from = (currentPage - 1) * perPage;
|
||||||
var to = (from + perPage) > totalItem ? totalItem : from + perPage;
|
var to = (from + perPage) > totalItem ? totalItem : from + perPage;
|
||||||
console.log($scope.allTopicNameList);
|
console.log($scope.allTopicList);
|
||||||
console.log(from)
|
console.log(from)
|
||||||
console.log(to)
|
console.log(to)
|
||||||
$scope.topicShowList = $scope.allTopicNameList.slice(from, to);
|
$scope.topicShowList = $scope.allTopicList.slice(from, to);
|
||||||
$scope.paginationConf.totalItems = totalItem;
|
$scope.paginationConf.totalItems = totalItem;
|
||||||
console.log($scope.topicShowList)
|
console.log($scope.topicShowList)
|
||||||
console.log($scope.paginationConf.totalItems)
|
console.log($scope.paginationConf.totalItems)
|
||||||
@@ -370,8 +328,8 @@ module.controller('topicController', ['$scope', 'ngDialog', '$http', 'Notificati
|
|||||||
var bIsUpdate = true;
|
var bIsUpdate = true;
|
||||||
if (request == null) {
|
if (request == null) {
|
||||||
request = [{
|
request = [{
|
||||||
writeQueueNums: 8,
|
writeQueueNums: 16,
|
||||||
readQueueNums: 8,
|
readQueueNums: 16,
|
||||||
perm: 6,
|
perm: 6,
|
||||||
order: false,
|
order: false,
|
||||||
topicName: "",
|
topicName: "",
|
||||||
@@ -397,7 +355,6 @@ module.controller('topicController', ['$scope', 'ngDialog', '$http', 'Notificati
|
|||||||
topicRequestList: request,
|
topicRequestList: request,
|
||||||
allClusterNameList: Object.keys(resp.data.clusterInfo.clusterAddrTable),
|
allClusterNameList: Object.keys(resp.data.clusterInfo.clusterAddrTable),
|
||||||
allBrokerNameList: Object.keys(resp.data.brokerServer),
|
allBrokerNameList: Object.keys(resp.data.brokerServer),
|
||||||
allMessageTypeList: resp.data.messageTypes,
|
|
||||||
bIsUpdate: bIsUpdate,
|
bIsUpdate: bIsUpdate,
|
||||||
writeOperationEnabled: $scope.writeOperationEnabled
|
writeOperationEnabled: $scope.writeOperationEnabled
|
||||||
}
|
}
|
||||||
|
@@ -28,7 +28,6 @@
|
|||||||
<div class="navbar-collapse collapse navbar-warning-collapse">
|
<div class="navbar-collapse collapse navbar-warning-collapse">
|
||||||
<ul class="nav navbar-nav">
|
<ul class="nav navbar-nav">
|
||||||
<li ng-class="path =='ops' ? 'active':''"><a ng-href="#/ops">{{'OPS' | translate}}</a></li>
|
<li ng-class="path =='ops' ? 'active':''"><a ng-href="#/ops">{{'OPS' | translate}}</a></li>
|
||||||
<li ng-show="rmqVersion" ng-class="path =='proxy' ? 'active':''"><a ng-href="#/proxy">{{'PROXY' | translate}}</a></li>
|
|
||||||
<li ng-class="path =='dashboard' || path ==''? 'active':''"><a ng-href="#/">{{'DASHBOARD' | translate}}</a></li>
|
<li ng-class="path =='dashboard' || path ==''? 'active':''"><a ng-href="#/">{{'DASHBOARD' | translate}}</a></li>
|
||||||
<li ng-class="path =='cluster' ? 'active':''"><a ng-href="#/cluster">{{'CLUSTER' | translate}}</a></li>
|
<li ng-class="path =='cluster' ? 'active':''"><a ng-href="#/cluster">{{'CLUSTER' | translate}}</a></li>
|
||||||
<li ng-class="path =='topic' ? 'active':''"><a ng-href="#/topic">{{'TOPIC' | translate}}</a></li>
|
<li ng-class="path =='topic' ? 'active':''"><a ng-href="#/topic">{{'TOPIC' | translate}}</a></li>
|
||||||
@@ -48,14 +47,6 @@
|
|||||||
<li><a href="javascript:void(0)" ng-click="changeTranslate('zh')">Simplified Chinese</a></li>
|
<li><a href="javascript:void(0)" ng-click="changeTranslate('zh')">Simplified Chinese</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="dropdown">
|
|
||||||
<a href="bootstrap-elements.html" data-target="#" class="dropdown-toggle" data-toggle="dropdown">{{'CHANGE_VERSION' | translate}}
|
|
||||||
<b class="caret"></b></a>
|
|
||||||
<ul class="dropdown-menu">
|
|
||||||
<li><a href="javascript:void(0)" ng-click="changeRMQVersion(5)">RocketMQ 5.x</a></li>
|
|
||||||
<li><a href="javascript:void(0)" ng-click="changeRMQVersion(4)">RocketMQ 4.x</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li class="dropdown" ng-show="username != ''">
|
<li class="dropdown" ng-show="username != ''">
|
||||||
<a href="bootstrap-elements.html" data-target="#" class="dropdown-toggle" data-toggle="dropdown">{{username}}
|
<a href="bootstrap-elements.html" data-target="#" class="dropdown-toggle" data-toggle="dropdown">{{username}}
|
||||||
<b class="caret"></b></a>
|
<b class="caret"></b></a>
|
||||||
|
@@ -50,14 +50,7 @@
|
|||||||
<td class="text-center">{{instance.address}}</td>
|
<td class="text-center">{{instance.address}}</td>
|
||||||
<td class="text-center">{{instance.brokerVersionDesc}}</td>
|
<td class="text-center">{{instance.brokerVersionDesc}}</td>
|
||||||
<td class="text-center">{{instance.putTps.split(' ')[0]| number:2}}</td>
|
<td class="text-center">{{instance.putTps.split(' ')[0]| number:2}}</td>
|
||||||
<td class="text-center">
|
<td class="text-center">{{instance.getTransferedTps.split(' ')[0]| number:2}}</td>
|
||||||
<span ng-if="!instance.getTransferedTps || !instance.getTransferedTps.trim()">
|
|
||||||
{{instance.getTransferredTps.split(' ')[0] | number:2}}
|
|
||||||
</span>
|
|
||||||
<span ng-if="instance.getTransferedTps && instance.getTransferedTps.trim()">
|
|
||||||
{{instance.getTransferedTps.split(' ')[0] | number:2}}
|
|
||||||
</span>
|
|
||||||
</td>
|
|
||||||
<td class="text-center">{{instance.msgPutTotalTodayMorning -
|
<td class="text-center">{{instance.msgPutTotalTodayMorning -
|
||||||
instance.msgPutTotalYesterdayMorning}}
|
instance.msgPutTotalYesterdayMorning}}
|
||||||
</td>
|
</td>
|
||||||
|
@@ -26,8 +26,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<md-checkbox aria-label="Checkbox" ng-model="filterNormal" class="md-primary">{{'NORMAL' | translate}}
|
<md-checkbox aria-label="Checkbox" ng-model="filterNormal" class="md-primary">{{'NORMAL' | translate}}
|
||||||
</md-checkbox>
|
</md-checkbox>
|
||||||
<md-checkbox aria-label="Checkbox" ng-show="rmqVersion" ng-model="filterFIFO" class="md-primary">{{'FIFO' | translate}}
|
|
||||||
</md-checkbox>
|
|
||||||
<md-checkbox aria-label="Checkbox" ng-model="filterSystem" class="md-primary">{{'SYSTEM' | translate}}
|
<md-checkbox aria-label="Checkbox" ng-model="filterSystem" class="md-primary">{{'SYSTEM' | translate}}
|
||||||
</md-checkbox>
|
</md-checkbox>
|
||||||
<button class="btn btn-raised btn-sm btn-primary" type="button" ng-show="{{writeOperationEnabled}}"
|
<button class="btn btn-raised btn-sm btn-primary" type="button" ng-show="{{writeOperationEnabled}}"
|
||||||
@@ -66,11 +64,11 @@
|
|||||||
<td class="text-center">{{consumerGroup.consumeTps}}</td>
|
<td class="text-center">{{consumerGroup.consumeTps}}</td>
|
||||||
<td class="text-center">{{consumerGroup.diffTotal}}</td>
|
<td class="text-center">{{consumerGroup.diffTotal}}</td>
|
||||||
<td class="text-left">
|
<td class="text-left">
|
||||||
<button name="client" ng-click="client(consumerGroup.group, consumerGroup.address)"
|
<button name="client" ng-click="client(consumerGroup.group)"
|
||||||
class="btn btn-raised btn-sm btn-primary"
|
class="btn btn-raised btn-sm btn-primary"
|
||||||
type="button">{{'CLIENT' | translate}}
|
type="button">{{'CLIENT' | translate}}
|
||||||
</button>
|
</button>
|
||||||
<button name="client" ng-click="detail(consumerGroup.group, consumerGroup.address)"
|
<button name="client" ng-click="detail(consumerGroup.group)"
|
||||||
class="btn btn-raised btn-sm btn-primary"
|
class="btn btn-raised btn-sm btn-primary"
|
||||||
type="button">{{'CONSUME_DETAIL' | translate}}
|
type="button">{{'CONSUME_DETAIL' | translate}}
|
||||||
</button>
|
</button>
|
||||||
@@ -276,6 +274,15 @@
|
|||||||
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!--<div class="form-group">-->
|
||||||
|
<!--<label class="control-label col-sm-4">retryMaxTimes:</label>-->
|
||||||
|
<!--<div class="col-sm-8">-->
|
||||||
|
<!--<input class="form-control" ng-model="item.subscriptionGroupConfig.retryMaxTimes"-->
|
||||||
|
<!--type="text"-->
|
||||||
|
<!--required/>-->
|
||||||
|
<!--<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>-->
|
||||||
|
<!--</div>-->
|
||||||
|
<!--</div>-->
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-sm-3">brokerId:</label>
|
<label class="control-label col-sm-3">brokerId:</label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
@@ -284,132 +291,6 @@
|
|||||||
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-sm-3">retryMaxTimes:</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<input class="form-control" ng-model="item.subscriptionGroupConfig.retryMaxTimes" type="text"
|
|
||||||
ng-disabled="{{!ngDialogData.writeOperationEnabled}}" required/>
|
|
||||||
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-sm-3">whichBrokerWhenConsumeSlowly:</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<input class="form-control"
|
|
||||||
ng-model="item.subscriptionGroupConfig.whichBrokerWhenConsumeSlowly" type="text"
|
|
||||||
ng-disabled="{{!ngDialogData.writeOperationEnabled}}" required/>
|
|
||||||
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<div class="ngdialog-buttons">
|
|
||||||
<button type="button" class="ngdialog-button ngdialog-button-primary"
|
|
||||||
ng-disabled="addAppForm.$invalid"
|
|
||||||
ng-show="{{ngDialogData.writeOperationEnabled}}"
|
|
||||||
ng-click="postConsumerRequest(item)">{{ 'COMMIT' | translate }}
|
|
||||||
</button>
|
|
||||||
<button type="button" class="ngdialog-button ngdialog-button-secondary"
|
|
||||||
ng-click="closeThisDialog('Cancel')">{{ 'CLOSE' | translate }}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script type="text/ng-template" id="consumerModifyDialogForV5">
|
|
||||||
<div>
|
|
||||||
<div>
|
|
||||||
<div class="modal-header">
|
|
||||||
<h4 class="modal-title">{{'SUBSCRIPTION_CHANGE'|translate}}</h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body " ng-repeat="item in ngDialogData.consumerRequestList">
|
|
||||||
<form id="addAppForm1" name="addAppForm" class="form-horizontal" novalidate>
|
|
||||||
<div class="form-group" ng-hide="ngDialogData.bIsUpdate">
|
|
||||||
<label class="control-label col-sm-3">clusterName:</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<select name="mySelectClusterNameList" multiple chosen
|
|
||||||
ng-model="item.clusterNameList"
|
|
||||||
ng-options="clusterNameItem for clusterNameItem in ngDialogData.allClusterNameList">
|
|
||||||
<option value=""></option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-sm-3">brokerName:</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<select name="mySelectBrokerNameList" multiple chosen
|
|
||||||
ng-disabled="ngDialogData.bIsUpdate"
|
|
||||||
ng-model="item.brokerNameList"
|
|
||||||
ng-options="brokerNameItem for brokerNameItem in ngDialogData.allBrokerNameList">
|
|
||||||
<option value=""></option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-sm-3">groupName:</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<input class="form-control" ng-model="item.subscriptionGroupConfig.groupName" type="text"
|
|
||||||
ng-disabled="ngDialogData.bIsUpdate" required/>
|
|
||||||
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-sm-3">consumeEnable:</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<md-switch class="md-primary" ng-disabled="{{!ngDialogData.writeOperationEnabled}}" md-no-ink
|
|
||||||
aria-label="Switch No Ink" ng-model="item.subscriptionGroupConfig.consumeEnable">
|
|
||||||
</md-switch>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-sm-3">consumeOrderlyEnable:</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<md-switch class="md-primary custom-md-switch" eng-disabled="{{!ngDialogData.writeOperationEnabled}}" md-no-ink
|
|
||||||
aria-label="Switch No Ink" ng-model="item.subscriptionGroupConfig.consumeMessageOrderly">
|
|
||||||
</md-switch>
|
|
||||||
<span style="font-size: 12px;">[Pay Attention: FIFO ConsumerGroup Need Open 'consumeOrderlyEnable' Option]</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-sm-3">consumeBroadcastEnable:</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<md-switch class="md-primary" ng-disabled="{{!ngDialogData.writeOperationEnabled}}" md-no-ink
|
|
||||||
aria-label="Switch No Ink"
|
|
||||||
ng-model="item.subscriptionGroupConfig.consumeBroadcastEnable">
|
|
||||||
</md-switch>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-sm-3">retryQueueNums:</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<input class="form-control" ng-model="item.subscriptionGroupConfig.retryQueueNums"
|
|
||||||
type="text" ng-disabled="{{!ngDialogData.writeOperationEnabled}}"
|
|
||||||
required/>
|
|
||||||
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-sm-3">brokerId:</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<input class="form-control" ng-model="item.subscriptionGroupConfig.brokerId" type="text"
|
|
||||||
ng-disabled="{{!ngDialogData.writeOperationEnabled}}" required/>
|
|
||||||
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-sm-3">retryMaxTimes:</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<input class="form-control" ng-model="item.subscriptionGroupConfig.retryMaxTimes" type="text"
|
|
||||||
ng-disabled="{{!ngDialogData.writeOperationEnabled}}" required/>
|
|
||||||
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-sm-3">whichBrokerWhenConsumeSlowly:</label>
|
<label class="control-label col-sm-3">whichBrokerWhenConsumeSlowly:</label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
|
@@ -1,67 +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.
|
|
||||||
-->
|
|
||||||
<div class="container-fluid" id="deployHistoryList">
|
|
||||||
<div class="page-content">
|
|
||||||
<h2 class="md-title">ProxyServerAddressList</h2>
|
|
||||||
<div class="pull-left" style="min-width: 400px; max-width: 500px; padding: 10px 10px 10px 0">
|
|
||||||
<select ng-model="selectedProxy" chosen
|
|
||||||
ng-options="x for x in proxyAddrList"
|
|
||||||
ng-change="updateProxyAddr()"
|
|
||||||
required></select>
|
|
||||||
</div>
|
|
||||||
<div class="pull-left">
|
|
||||||
<button class="btn btn-raised btn-sm btn-primary" type="button" ng-show="{{writeOperationEnabled}}"
|
|
||||||
ng-click="updateProxyAddr()">{{'UPDATE' | translate}}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<form class="form-inline pull-left" style="margin-left: 20px" ng-show="{{writeOperationEnabled}}">
|
|
||||||
<div class="form-group" style="margin: 0">
|
|
||||||
<label for="proxyAddr">ProxyAddr:</label>
|
|
||||||
<input id="proxyAddr" class="form-control" style="width: 300px; margin: 0 10px 0 10px" type="text" ng-model="newProxyAddr" required/>
|
|
||||||
<button class="btn btn-raised btn-sm btn-primary" type="button"
|
|
||||||
ng-click="addProxyAddr()"> {{ 'ADD' | translate}}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal proxyModal fade" role="dialog" tabindex="-1" aria-hidden="true" aria-labelledby="config-modal-label">
|
|
||||||
<div class="modal-dialog modal-lg">
|
|
||||||
<div class="modal-content" >
|
|
||||||
<div class="modal-header">
|
|
||||||
<button class="close" type="button" data-dismiss="modal">×</button>
|
|
||||||
<h4 id="config-modal-label" class="modal-title">
|
|
||||||
[{{selectedProxy}}]
|
|
||||||
</h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body limit_height">
|
|
||||||
<table class="table table-bordered">
|
|
||||||
<tr ng-repeat="(key, value) in allProxyConfig">
|
|
||||||
<td>{{key}}</td>
|
|
||||||
<td>{{value}}</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<div class="col-md-12 text-center">
|
|
||||||
<button type="button" class="btn btn-raised" data-dismiss="modal">{{ 'CLOSE' | translate }}</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@@ -24,14 +24,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<md-checkbox aria-label="Checkbox" ng-model="filterNormal" class="md-primary">{{'NORMAL' | translate}}
|
<md-checkbox aria-label="Checkbox" ng-model="filterNormal" class="md-primary">{{'NORMAL' | translate}}
|
||||||
</md-checkbox>
|
</md-checkbox>
|
||||||
<md-checkbox aria-label="Checkbox" ng-model="filterDelay" class="md-primary" ng-show="rmqVersion">{{'DELAY' | translate}}
|
|
||||||
</md-checkbox>
|
|
||||||
<md-checkbox aria-label="Checkbox" ng-model="filterFifo" class="md-primary" ng-show="rmqVersion">{{'FIFO' | translate}}
|
|
||||||
</md-checkbox>
|
|
||||||
<md-checkbox aria-label="Checkbox" ng-model="filterTransaction" class="md-primary" ng-show="rmqVersion">{{'TRANSACTION' | translate}}
|
|
||||||
</md-checkbox>
|
|
||||||
<md-checkbox aria-label="Checkbox" ng-model="filterUnspecified" class="md-primary" ng-show="rmqVersion">{{'UNSPECIFIED' | translate}}
|
|
||||||
</md-checkbox>
|
|
||||||
<md-checkbox aria-label="Checkbox" ng-model="filterRetry" class="md-primary">{{'RETRY' | translate}}
|
<md-checkbox aria-label="Checkbox" ng-model="filterRetry" class="md-primary">{{'RETRY' | translate}}
|
||||||
</md-checkbox>
|
</md-checkbox>
|
||||||
<md-checkbox aria-label="Checkbox" ng-model="filterDLQ" class="md-primary">{{'DLQ' | translate}}
|
<md-checkbox aria-label="Checkbox" ng-model="filterDLQ" class="md-primary">{{'DLQ' | translate}}
|
||||||
@@ -71,7 +63,6 @@
|
|||||||
<button class="btn btn-raised btn-sm btn-primary" type="button"
|
<button class="btn btn-raised btn-sm btn-primary" type="button"
|
||||||
ng-click="openUpdateDialog(topic, sysFlag)">topic {{'CONFIG' |translate}}
|
ng-click="openUpdateDialog(topic, sysFlag)">topic {{'CONFIG' |translate}}
|
||||||
</button>
|
</button>
|
||||||
<!-- todo 发送消息,根据消息类型判断-->
|
|
||||||
<button class="btn btn-raised btn-sm btn-primary" type="button"
|
<button class="btn btn-raised btn-sm btn-primary" type="button"
|
||||||
ng-show="{{!sysFlag}}"
|
ng-show="{{!sysFlag}}"
|
||||||
ng-click="openSendTopicMessageDialog(topic)">{{'SEND_MSG' | translate}}
|
ng-click="openSendTopicMessageDialog(topic)">{{'SEND_MSG' | translate}}
|
||||||
@@ -198,18 +189,6 @@
|
|||||||
<span class="text-danger" ng-show="addAppForm.topicName.$error.required">{{'TOPIC_NAME'|translate}}不能为空.</span>
|
<span class="text-danger" ng-show="addAppForm.topicName.$error.required">{{'TOPIC_NAME'|translate}}不能为空.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- 设置topic 类型 -->
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-sm-2">{{'MESSAGE_TYPE'|translate}}:</label>
|
|
||||||
<div class="col-sm-10">
|
|
||||||
<select name="mySelectMessageType" chosen ng-disabled="ngDialogData.bIsUpdate"
|
|
||||||
ng-model="item.messageType"
|
|
||||||
ng-options="messageType as value | translate disable when messageType=='UNSPECIFIED' for (messageType , value) in ngDialogData.allMessageTypeList"
|
|
||||||
>
|
|
||||||
<option value=""></option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-sm-2">{{'WRITE_QUEUE_NUMS'|translate}}:</label>
|
<label class="control-label col-sm-2">{{'WRITE_QUEUE_NUMS'|translate}}:</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
|
@@ -34,27 +34,27 @@ import org.apache.rocketmq.client.impl.MQClientAPIImpl;
|
|||||||
import org.apache.rocketmq.client.impl.factory.MQClientInstance;
|
import org.apache.rocketmq.client.impl.factory.MQClientInstance;
|
||||||
import org.apache.rocketmq.common.PlainAccessConfig;
|
import org.apache.rocketmq.common.PlainAccessConfig;
|
||||||
import org.apache.rocketmq.common.TopicConfig;
|
import org.apache.rocketmq.common.TopicConfig;
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.ConsumeStats;
|
import org.apache.rocketmq.common.admin.ConsumeStats;
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.RollbackStats;
|
import org.apache.rocketmq.common.admin.RollbackStats;
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.TopicStatsTable;
|
import org.apache.rocketmq.common.admin.TopicStatsTable;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.apache.rocketmq.remoting.protocol.ResponseCode;
|
import org.apache.rocketmq.common.protocol.ResponseCode;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.BrokerStatsData;
|
import org.apache.rocketmq.common.protocol.body.BrokerStatsData;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumeStatsList;
|
import org.apache.rocketmq.common.protocol.body.ConsumeStatsList;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerRunningInfo;
|
import org.apache.rocketmq.common.protocol.body.ConsumerRunningInfo;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.GroupList;
|
import org.apache.rocketmq.common.protocol.body.GroupList;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.KVTable;
|
import org.apache.rocketmq.common.protocol.body.KVTable;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ProducerConnection;
|
import org.apache.rocketmq.common.protocol.body.ProducerConnection;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.QueueTimeSpan;
|
import org.apache.rocketmq.common.protocol.body.QueueTimeSpan;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.SubscriptionGroupWrapper;
|
import org.apache.rocketmq.common.protocol.body.SubscriptionGroupWrapper;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.TopicConfigSerializeWrapper;
|
import org.apache.rocketmq.common.protocol.body.TopicConfigSerializeWrapper;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.TopicList;
|
import org.apache.rocketmq.common.protocol.body.TopicList;
|
||||||
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
||||||
import org.apache.rocketmq.remoting.protocol.subscription.SubscriptionGroupConfig;
|
import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig;
|
||||||
import org.apache.rocketmq.dashboard.service.client.MQAdminExtImpl;
|
import org.apache.rocketmq.dashboard.service.client.MQAdminExtImpl;
|
||||||
import org.apache.rocketmq.dashboard.service.client.MQAdminInstance;
|
import org.apache.rocketmq.dashboard.service.client.MQAdminInstance;
|
||||||
import org.apache.rocketmq.dashboard.util.MockObjectUtil;
|
import org.apache.rocketmq.dashboard.util.MockObjectUtil;
|
||||||
@@ -82,7 +82,6 @@ import static org.mockito.ArgumentMatchers.any;
|
|||||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.ArgumentMatchers.anyLong;
|
import static org.mockito.ArgumentMatchers.anyLong;
|
||||||
import static org.mockito.ArgumentMatchers.anyMap;
|
|
||||||
import static org.mockito.ArgumentMatchers.anyString;
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
import static org.mockito.Mockito.doNothing;
|
import static org.mockito.Mockito.doNothing;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
@@ -571,13 +570,11 @@ public class MQAdminExtImplTest {
|
|||||||
public void testCreateTopic() throws Exception {
|
public void testCreateTopic() throws Exception {
|
||||||
assertNotNull(mqAdminExtImpl);
|
assertNotNull(mqAdminExtImpl);
|
||||||
{
|
{
|
||||||
doNothing().when(defaultMQAdminExt).createTopic(anyString(), anyString(), anyInt(), anyMap());
|
doNothing().when(defaultMQAdminExt).createTopic(anyString(), anyString(), anyInt());
|
||||||
doNothing().when(defaultMQAdminExt).createTopic(anyString(), anyString(), anyInt(), anyInt(), anyMap());
|
doNothing().when(defaultMQAdminExt).createTopic(anyString(), anyString(), anyInt(), anyInt());
|
||||||
}
|
}
|
||||||
Map<String, String> map = new HashMap<>();
|
mqAdminExtImpl.createTopic("key", "topic_test", 8);
|
||||||
map.put("message.type", "FIFO");
|
mqAdminExtImpl.createTopic("key", "topic_test", 8, 1);
|
||||||
mqAdminExtImpl.createTopic("key", "topic_test", 8, map);
|
|
||||||
mqAdminExtImpl.createTopic("key", "topic_test", 8, 1, map);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@@ -18,7 +18,7 @@ package org.apache.rocketmq.dashboard.admin;
|
|||||||
|
|
||||||
import org.apache.commons.pool2.PooledObject;
|
import org.apache.commons.pool2.PooledObject;
|
||||||
import org.apache.commons.pool2.impl.GenericObjectPool;
|
import org.apache.commons.pool2.impl.GenericObjectPool;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
||||||
import org.apache.rocketmq.dashboard.util.MockObjectUtil;
|
import org.apache.rocketmq.dashboard.util.MockObjectUtil;
|
||||||
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
||||||
|
@@ -21,7 +21,7 @@ import com.google.common.collect.Lists;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.apache.rocketmq.common.AclConfig;
|
import org.apache.rocketmq.common.AclConfig;
|
||||||
import org.apache.rocketmq.common.PlainAccessConfig;
|
import org.apache.rocketmq.common.PlainAccessConfig;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.dashboard.model.request.AclRequest;
|
import org.apache.rocketmq.dashboard.model.request.AclRequest;
|
||||||
import org.apache.rocketmq.dashboard.service.impl.AclServiceImpl;
|
import org.apache.rocketmq.dashboard.service.impl.AclServiceImpl;
|
||||||
import org.apache.rocketmq.dashboard.util.MockObjectUtil;
|
import org.apache.rocketmq.dashboard.util.MockObjectUtil;
|
||||||
|
@@ -18,8 +18,8 @@ package org.apache.rocketmq.dashboard.controller;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.KVTable;
|
import org.apache.rocketmq.common.protocol.body.KVTable;
|
||||||
import org.apache.rocketmq.dashboard.service.impl.ClusterServiceImpl;
|
import org.apache.rocketmq.dashboard.service.impl.ClusterServiceImpl;
|
||||||
import org.apache.rocketmq.dashboard.util.MockObjectUtil;
|
import org.apache.rocketmq.dashboard.util.MockObjectUtil;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
@@ -23,17 +23,17 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.apache.rocketmq.client.exception.MQClientException;
|
import org.apache.rocketmq.client.exception.MQClientException;
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.ConsumeStats;
|
import org.apache.rocketmq.common.admin.ConsumeStats;
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.RollbackStats;
|
import org.apache.rocketmq.common.admin.RollbackStats;
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.apache.rocketmq.remoting.protocol.ResponseCode;
|
import org.apache.rocketmq.common.protocol.ResponseCode;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerRunningInfo;
|
import org.apache.rocketmq.common.protocol.body.ConsumerRunningInfo;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.SubscriptionGroupWrapper;
|
import org.apache.rocketmq.common.protocol.body.SubscriptionGroupWrapper;
|
||||||
import org.apache.rocketmq.remoting.protocol.heartbeat.ConsumeType;
|
import org.apache.rocketmq.common.protocol.heartbeat.ConsumeType;
|
||||||
import org.apache.rocketmq.remoting.protocol.heartbeat.MessageModel;
|
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
|
||||||
import org.apache.rocketmq.remoting.protocol.subscription.SubscriptionGroupConfig;
|
import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig;
|
||||||
import org.apache.rocketmq.dashboard.model.request.ConsumerConfigInfo;
|
import org.apache.rocketmq.dashboard.model.request.ConsumerConfigInfo;
|
||||||
import org.apache.rocketmq.dashboard.model.request.DeleteSubGroupRequest;
|
import org.apache.rocketmq.dashboard.model.request.DeleteSubGroupRequest;
|
||||||
import org.apache.rocketmq.dashboard.model.request.ResetOffsetRequest;
|
import org.apache.rocketmq.dashboard.model.request.ResetOffsetRequest;
|
||||||
@@ -67,7 +67,6 @@ public class ConsumerControllerTest extends BaseControllerTest {
|
|||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void init() throws Exception {
|
public void init() throws Exception {
|
||||||
consumerService.afterPropertiesSet();
|
|
||||||
super.mockRmqConfigure();
|
super.mockRmqConfigure();
|
||||||
ClusterInfo clusterInfo = MockObjectUtil.createClusterInfo();
|
ClusterInfo clusterInfo = MockObjectUtil.createClusterInfo();
|
||||||
when(mqAdminExt.examineBrokerClusterInfo()).thenReturn(clusterInfo);
|
when(mqAdminExt.examineBrokerClusterInfo()).thenReturn(clusterInfo);
|
||||||
@@ -94,10 +93,9 @@ public class ConsumerControllerTest extends BaseControllerTest {
|
|||||||
perform = mockMvc.perform(requestBuilder);
|
perform = mockMvc.perform(requestBuilder);
|
||||||
perform.andExpect(status().isOk())
|
perform.andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("$.data", hasSize(2)))
|
.andExpect(jsonPath("$.data", hasSize(2)))
|
||||||
|
.andExpect(jsonPath("$.data[0].group").value("group_test"))
|
||||||
.andExpect(jsonPath("$.data[0].consumeType").value(ConsumeType.CONSUME_ACTIVELY.name()))
|
.andExpect(jsonPath("$.data[0].consumeType").value(ConsumeType.CONSUME_ACTIVELY.name()))
|
||||||
.andExpect(jsonPath("$.data[0].messageModel").value(MessageModel.CLUSTERING.name()));
|
.andExpect(jsonPath("$.data[0].messageModel").value(MessageModel.CLUSTERING.name()));
|
||||||
// executorService shutdown
|
|
||||||
consumerService.destroy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@@ -21,10 +21,10 @@ import com.google.common.collect.Lists;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.apache.rocketmq.client.exception.MQClientException;
|
import org.apache.rocketmq.client.exception.MQClientException;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.remoting.protocol.ResponseCode;
|
import org.apache.rocketmq.common.protocol.ResponseCode;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.CMResult;
|
import org.apache.rocketmq.common.protocol.body.CMResult;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
||||||
import org.apache.rocketmq.dashboard.model.DlqMessageRequest;
|
import org.apache.rocketmq.dashboard.model.DlqMessageRequest;
|
||||||
import org.apache.rocketmq.dashboard.model.MessagePage;
|
import org.apache.rocketmq.dashboard.model.MessagePage;
|
||||||
import org.apache.rocketmq.dashboard.model.MessageView;
|
import org.apache.rocketmq.dashboard.model.MessageView;
|
||||||
|
@@ -32,9 +32,9 @@ import org.apache.rocketmq.client.exception.MQClientException;
|
|||||||
import org.apache.rocketmq.common.message.MessageClientIDSetter;
|
import org.apache.rocketmq.common.message.MessageClientIDSetter;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.CMResult;
|
import org.apache.rocketmq.common.protocol.body.CMResult;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.dashboard.model.QueueOffsetInfo;
|
import org.apache.rocketmq.dashboard.model.QueueOffsetInfo;
|
||||||
import org.apache.rocketmq.dashboard.model.request.MessageQuery;
|
import org.apache.rocketmq.dashboard.model.request.MessageQuery;
|
||||||
import org.apache.rocketmq.dashboard.service.impl.MessageServiceImpl;
|
import org.apache.rocketmq.dashboard.service.impl.MessageServiceImpl;
|
||||||
|
@@ -19,8 +19,8 @@ package org.apache.rocketmq.dashboard.controller;
|
|||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import org.apache.rocketmq.client.exception.MQClientException;
|
import org.apache.rocketmq.client.exception.MQClientException;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.Connection;
|
import org.apache.rocketmq.common.protocol.body.Connection;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ProducerConnection;
|
import org.apache.rocketmq.common.protocol.body.ProducerConnection;
|
||||||
import org.apache.rocketmq.dashboard.interceptor.AuthInterceptor;
|
import org.apache.rocketmq.dashboard.interceptor.AuthInterceptor;
|
||||||
import org.apache.rocketmq.dashboard.service.impl.LoginServiceImpl;
|
import org.apache.rocketmq.dashboard.service.impl.LoginServiceImpl;
|
||||||
import org.apache.rocketmq.dashboard.service.impl.ProducerServiceImpl;
|
import org.apache.rocketmq.dashboard.service.impl.ProducerServiceImpl;
|
||||||
|
@@ -29,16 +29,16 @@ import org.apache.rocketmq.client.producer.DefaultMQProducer;
|
|||||||
import org.apache.rocketmq.client.producer.SendResult;
|
import org.apache.rocketmq.client.producer.SendResult;
|
||||||
import org.apache.rocketmq.client.producer.SendStatus;
|
import org.apache.rocketmq.client.producer.SendStatus;
|
||||||
import org.apache.rocketmq.common.TopicConfig;
|
import org.apache.rocketmq.common.TopicConfig;
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.ConsumeStats;
|
import org.apache.rocketmq.common.admin.ConsumeStats;
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.TopicStatsTable;
|
import org.apache.rocketmq.common.admin.TopicStatsTable;
|
||||||
import org.apache.rocketmq.common.message.Message;
|
import org.apache.rocketmq.common.message.Message;
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerRunningInfo;
|
import org.apache.rocketmq.common.protocol.body.ConsumerRunningInfo;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.GroupList;
|
import org.apache.rocketmq.common.protocol.body.GroupList;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.TopicList;
|
import org.apache.rocketmq.common.protocol.body.TopicList;
|
||||||
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
||||||
import org.apache.rocketmq.dashboard.model.request.SendTopicMessageRequest;
|
import org.apache.rocketmq.dashboard.model.request.SendTopicMessageRequest;
|
||||||
import org.apache.rocketmq.dashboard.model.request.TopicConfigInfo;
|
import org.apache.rocketmq.dashboard.model.request.TopicConfigInfo;
|
||||||
import org.apache.rocketmq.dashboard.service.impl.ConsumerServiceImpl;
|
import org.apache.rocketmq.dashboard.service.impl.ConsumerServiceImpl;
|
||||||
@@ -54,7 +54,6 @@ import org.springframework.http.MediaType;
|
|||||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||||
|
|
||||||
import static org.hamcrest.Matchers.hasSize;
|
import static org.hamcrest.Matchers.hasSize;
|
||||||
import static org.hamcrest.Matchers.containsInAnyOrder;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
import static org.mockito.ArgumentMatchers.anyLong;
|
import static org.mockito.ArgumentMatchers.anyLong;
|
||||||
@@ -136,9 +135,8 @@ public class TopicControllerTest extends BaseControllerTest {
|
|||||||
// 3、filter system topic
|
// 3、filter system topic
|
||||||
requestBuilder = MockMvcRequestBuilders.get(url);
|
requestBuilder = MockMvcRequestBuilders.get(url);
|
||||||
perform = mockMvc.perform(requestBuilder);
|
perform = mockMvc.perform(requestBuilder);
|
||||||
String[] topicString = {"%SYS%system_topic2","common_topic2","%SYS%system_topic1","common_topic1"};
|
|
||||||
perform.andExpect(status().isOk())
|
perform.andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("$.data.topicList").value(containsInAnyOrder(topicString)));
|
.andExpect(jsonPath("$.data.topicList[2]").value("%SYS%system_topic1"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@@ -33,12 +33,12 @@ import java.util.Set;
|
|||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.BrokerStatsData;
|
import org.apache.rocketmq.common.protocol.body.BrokerStatsData;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.GroupList;
|
import org.apache.rocketmq.common.protocol.body.GroupList;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.KVTable;
|
import org.apache.rocketmq.common.protocol.body.KVTable;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.TopicList;
|
import org.apache.rocketmq.common.protocol.body.TopicList;
|
||||||
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
||||||
import org.apache.rocketmq.dashboard.BaseTest;
|
import org.apache.rocketmq.dashboard.BaseTest;
|
||||||
import org.apache.rocketmq.dashboard.config.CollectExecutorConfig;
|
import org.apache.rocketmq.dashboard.config.CollectExecutorConfig;
|
||||||
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
||||||
|
@@ -29,7 +29,7 @@ import org.apache.rocketmq.client.producer.SendResult;
|
|||||||
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
|
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
|
||||||
import org.apache.rocketmq.common.message.Message;
|
import org.apache.rocketmq.common.message.Message;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.remoting.protocol.subscription.SubscriptionGroupConfig;
|
import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig;
|
||||||
import org.apache.rocketmq.dashboard.model.request.ConsumerConfigInfo;
|
import org.apache.rocketmq.dashboard.model.request.ConsumerConfigInfo;
|
||||||
import org.apache.rocketmq.dashboard.model.request.TopicConfigInfo;
|
import org.apache.rocketmq.dashboard.model.request.TopicConfigInfo;
|
||||||
import org.apache.rocketmq.dashboard.service.ConsumerService;
|
import org.apache.rocketmq.dashboard.service.ConsumerService;
|
||||||
@@ -78,8 +78,7 @@ public abstract class RocketMQConsoleTestBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Throwables.throwIfUnchecked(exception);
|
throw Throwables.propagate(exception);
|
||||||
throw new RuntimeException(exception);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,8 +91,7 @@ public abstract class RocketMQConsoleTestBase {
|
|||||||
producer.start();
|
producer.start();
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,8 +137,7 @@ public abstract class RocketMQConsoleTestBase {
|
|||||||
consumer.start();
|
consumer.start();
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
Throwables.throwIfUnchecked(e);
|
throw Throwables.propagate(e);
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -33,39 +33,39 @@ import org.apache.rocketmq.client.producer.LocalTransactionState;
|
|||||||
import org.apache.rocketmq.client.trace.TraceConstants;
|
import org.apache.rocketmq.client.trace.TraceConstants;
|
||||||
import org.apache.rocketmq.client.trace.TraceType;
|
import org.apache.rocketmq.client.trace.TraceType;
|
||||||
import org.apache.rocketmq.common.AclConfig;
|
import org.apache.rocketmq.common.AclConfig;
|
||||||
import org.apache.rocketmq.remoting.protocol.DataVersion;
|
import org.apache.rocketmq.common.DataVersion;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.common.PlainAccessConfig;
|
import org.apache.rocketmq.common.PlainAccessConfig;
|
||||||
import org.apache.rocketmq.common.TopicConfig;
|
import org.apache.rocketmq.common.TopicConfig;
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.ConsumeStats;
|
import org.apache.rocketmq.common.admin.ConsumeStats;
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.OffsetWrapper;
|
import org.apache.rocketmq.common.admin.OffsetWrapper;
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.TopicOffset;
|
import org.apache.rocketmq.common.admin.TopicOffset;
|
||||||
import org.apache.rocketmq.remoting.protocol.admin.TopicStatsTable;
|
import org.apache.rocketmq.common.admin.TopicStatsTable;
|
||||||
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
|
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.BrokerStatsData;
|
import org.apache.rocketmq.common.protocol.body.BrokerStatsData;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.BrokerStatsItem;
|
import org.apache.rocketmq.common.protocol.body.BrokerStatsItem;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.Connection;
|
import org.apache.rocketmq.common.protocol.body.Connection;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumeStatus;
|
import org.apache.rocketmq.common.protocol.body.ConsumeStatus;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ConsumerRunningInfo;
|
import org.apache.rocketmq.common.protocol.body.ConsumerRunningInfo;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.ProcessQueueInfo;
|
import org.apache.rocketmq.common.protocol.body.ProcessQueueInfo;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.SubscriptionGroupWrapper;
|
import org.apache.rocketmq.common.protocol.body.SubscriptionGroupWrapper;
|
||||||
import org.apache.rocketmq.remoting.protocol.body.TopicConfigSerializeWrapper;
|
import org.apache.rocketmq.common.protocol.body.TopicConfigSerializeWrapper;
|
||||||
import org.apache.rocketmq.remoting.protocol.heartbeat.ConsumeType;
|
import org.apache.rocketmq.common.protocol.heartbeat.ConsumeType;
|
||||||
import org.apache.rocketmq.remoting.protocol.heartbeat.MessageModel;
|
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
|
||||||
import org.apache.rocketmq.remoting.protocol.heartbeat.SubscriptionData;
|
import org.apache.rocketmq.common.protocol.heartbeat.SubscriptionData;
|
||||||
import org.apache.rocketmq.remoting.protocol.route.BrokerData;
|
import org.apache.rocketmq.common.protocol.route.BrokerData;
|
||||||
import org.apache.rocketmq.remoting.protocol.route.QueueData;
|
import org.apache.rocketmq.common.protocol.route.QueueData;
|
||||||
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
||||||
import org.apache.rocketmq.remoting.protocol.subscription.SubscriptionGroupConfig;
|
import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig;
|
||||||
import org.apache.rocketmq.dashboard.model.DlqMessageRequest;
|
import org.apache.rocketmq.dashboard.model.DlqMessageRequest;
|
||||||
import org.apache.rocketmq.remoting.protocol.LanguageCode;
|
import org.apache.rocketmq.remoting.protocol.LanguageCode;
|
||||||
import org.checkerframework.checker.units.qual.A;
|
import org.checkerframework.checker.units.qual.A;
|
||||||
|
|
||||||
import static org.apache.rocketmq.remoting.protocol.heartbeat.ConsumeType.CONSUME_ACTIVELY;
|
import static org.apache.rocketmq.common.protocol.heartbeat.ConsumeType.CONSUME_ACTIVELY;
|
||||||
|
|
||||||
public class MockObjectUtil {
|
public class MockObjectUtil {
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user