From f8832afa87df8c3bec1ff62704b52a07e6b5cc2a Mon Sep 17 00:00:00 2001 From: GRL-bxy <77558077+GRL-bxy@users.noreply.github.com> Date: Wed, 27 Sep 2023 09:36:28 +0800 Subject: [PATCH 01/11] feat:add_global_tenant + delete_search_tenant (#1482) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 吹泡泡的团子 --- threadpool/console/src/App.vue | 26 +++++++ .../console/src/layout/components/Navbar.vue | 77 ++++++++++++++++++- threadpool/console/src/store/getters.js | 4 +- .../console/src/store/modules/tenant.js | 53 +++++++++++++ .../src/views/hippo4j/tenant/index.vue | 44 ++++------- 5 files changed, 171 insertions(+), 33 deletions(-) create mode 100644 threadpool/console/src/store/modules/tenant.js diff --git a/threadpool/console/src/App.vue b/threadpool/console/src/App.vue index 0816b2f5..7e145d79 100755 --- a/threadpool/console/src/App.vue +++ b/threadpool/console/src/App.vue @@ -5,7 +5,33 @@ diff --git a/threadpool/console/src/layout/components/Navbar.vue b/threadpool/console/src/layout/components/Navbar.vue index 57cbb912..06cfb243 100755 --- a/threadpool/console/src/layout/components/Navbar.vue +++ b/threadpool/console/src/layout/components/Navbar.vue @@ -16,8 +16,16 @@ - + + + + +
@@ -41,13 +49,24 @@ @@ -113,6 +171,17 @@ outline: none; } + ::v-deep .el-input__inner { + border: none; + box-shadow: none; + } + + .select-tenant { + margin-right: 20px; + border: 0; + width: 150px; + } + .right-menu-item { display: inline-block; padding: 0 8px; diff --git a/threadpool/console/src/store/getters.js b/threadpool/console/src/store/getters.js index 8fcf5a59..3521a8fc 100755 --- a/threadpool/console/src/store/getters.js +++ b/threadpool/console/src/store/getters.js @@ -10,6 +10,8 @@ const getters = { introduction: state => state.user.introduction, roles: state => state.user.roles, permission_routes: state => state.permission.routes, - errorLogs: state => state.errorLog.logs + errorLogs: state => state.errorLog.logs, + tenantList: state => state.tenant.tenantList, + tenantInfo: state => state.tenant.tenantInfo, } export default getters diff --git a/threadpool/console/src/store/modules/tenant.js b/threadpool/console/src/store/modules/tenant.js new file mode 100644 index 00000000..574645f2 --- /dev/null +++ b/threadpool/console/src/store/modules/tenant.js @@ -0,0 +1,53 @@ +import * as user from '@/api/hippo4j-user'; + +const state = { + tenantList: [], + tenantInfo: {} +} + +const mutations = { + SET_TENANT_LIST: (state, log) => { + state.tenantList = log; + console.log("sssssss", state.tenantList) + }, + SET_GLOBAL_TENANT: (state, log) => { + state.tenantInfo = log; + } +} + +const actions = { + async getTenantList({commit}) { + debugger + const userName = this.$cookie.get('userName'); + user + .getCurrentUser(userName) + .then((response) => { + const { resources } = response; + if (response.role == 'ROLE_ADMIN') { + resources.unshift({ + action: "rw", + resource: "所有租户", + username: userName + }) + } + commit('SET_TENANT_LIST', resources) + if (!state.tenantInfo) { + commit('SET_GLOBAL_TENANT', resources[0]) + } + }) + .catch(() => {}); + }, + setTenantList({commit}, log) { + commit('SET_TENANT_LIST', log) + }, + setTenantInfo({commit}, log) { + commit('SET_GLOBAL_TENANT', log) + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/threadpool/console/src/views/hippo4j/tenant/index.vue b/threadpool/console/src/views/hippo4j/tenant/index.vue index 4f646623..c20c382a 100755 --- a/threadpool/console/src/views/hippo4j/tenant/index.vue +++ b/threadpool/console/src/views/hippo4j/tenant/index.vue @@ -1,36 +1,9 @@ From 5bb1f4ab332ce89daed02be7a0691d2ce925ec4b Mon Sep 17 00:00:00 2001 From: magestack Date: Sat, 30 Sep 2023 09:05:00 +0800 Subject: [PATCH 08/11] Develop thread pool monitoring capabilities (#1489) --- .../biz/monitor/MonitorActiveRespDTO.java | 17 ++++-- .../model/biz/monitor/MonitorQueryReqDTO.java | 10 ++++ .../biz/impl/HisRunDataServiceImpl.java | 58 ++++++++++++------- 3 files changed, 60 insertions(+), 25 deletions(-) diff --git a/threadpool/server/config/src/main/java/cn/hippo4j/config/model/biz/monitor/MonitorActiveRespDTO.java b/threadpool/server/config/src/main/java/cn/hippo4j/config/model/biz/monitor/MonitorActiveRespDTO.java index 83c4b6b2..53e9e8f3 100644 --- a/threadpool/server/config/src/main/java/cn/hippo4j/config/model/biz/monitor/MonitorActiveRespDTO.java +++ b/threadpool/server/config/src/main/java/cn/hippo4j/config/model/biz/monitor/MonitorActiveRespDTO.java @@ -18,6 +18,7 @@ package cn.hippo4j.config.model.biz.monitor; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @@ -27,6 +28,7 @@ import java.util.List; * Monitor active resp dto. */ @Data +@Builder @NoArgsConstructor @AllArgsConstructor public class MonitorActiveRespDTO { @@ -51,11 +53,21 @@ public class MonitorActiveRespDTO { */ private List queueSizeList; + /** + * Range completed task count list + */ + private List rangeCompletedTaskCountList; + /** * Completed task count list */ private List completedTaskCountList; + /** + * Range reject count list + */ + private List rangeRejectCountList; + /** * Reject count list */ @@ -66,11 +78,6 @@ public class MonitorActiveRespDTO { */ private List queueRemainingCapacityList; - /** - * Current load list - */ - private List currentLoadList; - /** * Queue capacity list */ diff --git a/threadpool/server/config/src/main/java/cn/hippo4j/config/model/biz/monitor/MonitorQueryReqDTO.java b/threadpool/server/config/src/main/java/cn/hippo4j/config/model/biz/monitor/MonitorQueryReqDTO.java index f5e4e119..93c9e09d 100644 --- a/threadpool/server/config/src/main/java/cn/hippo4j/config/model/biz/monitor/MonitorQueryReqDTO.java +++ b/threadpool/server/config/src/main/java/cn/hippo4j/config/model/biz/monitor/MonitorQueryReqDTO.java @@ -44,4 +44,14 @@ public class MonitorQueryReqDTO { * Instance id */ private String instanceId; + + /** + * Start time + */ + private Long startTime; + + /** + * End time + */ + private Long endTime; } diff --git a/threadpool/server/config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java b/threadpool/server/config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java index 385ccbd3..f0894f45 100644 --- a/threadpool/server/config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java +++ b/threadpool/server/config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java @@ -17,13 +17,14 @@ package cn.hippo4j.config.service.biz.impl; +import cn.hippo4j.common.model.Result; import cn.hippo4j.common.monitor.Message; import cn.hippo4j.common.monitor.MessageWrapper; import cn.hippo4j.common.monitor.RuntimeMessage; +import cn.hippo4j.common.toolkit.BeanUtil; import cn.hippo4j.common.toolkit.DateUtil; import cn.hippo4j.common.toolkit.GroupKey; import cn.hippo4j.common.toolkit.MessageConvert; -import cn.hippo4j.common.model.Result; import cn.hippo4j.config.config.ServerBootstrapProperties; import cn.hippo4j.config.mapper.HisRunDataMapper; import cn.hippo4j.config.model.HisRunDataInfo; @@ -33,7 +34,6 @@ import cn.hippo4j.config.model.biz.monitor.MonitorRespDTO; import cn.hippo4j.config.monitor.QueryMonitorExecuteChoose; import cn.hippo4j.config.service.ConfigCacheService; import cn.hippo4j.config.service.biz.HisRunDataService; -import cn.hippo4j.common.toolkit.BeanUtil; import cn.hippo4j.server.common.base.Results; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.AllArgsConstructor; @@ -45,7 +45,6 @@ import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Date; import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; import static cn.hippo4j.common.constant.MagicNumberConstants.INDEX_0; import static cn.hippo4j.common.constant.MagicNumberConstants.INDEX_1; @@ -84,15 +83,20 @@ public class HisRunDataServiceImpl extends ServiceImpl hisRunDataInfos = this.lambdaQuery() .eq(HisRunDataInfo::getTenantId, reqDTO.getTenantId()) .eq(HisRunDataInfo::getItemId, reqDTO.getItemId()) .eq(HisRunDataInfo::getTpId, reqDTO.getTpId()) .eq(HisRunDataInfo::getInstanceId, reqDTO.getInstanceId()) - .between(HisRunDataInfo::getTimestamp, startTime, DateUtil.getTime(currentDate)) + .between(HisRunDataInfo::getTimestamp, startTime, endTime) .orderByAsc(HisRunDataInfo::getTimestamp) .list(); List times = new ArrayList<>(); @@ -100,34 +104,48 @@ public class HisRunDataServiceImpl extends ServiceImpl activeSizeList = new ArrayList<>(); List queueCapacityList = new ArrayList<>(); List queueSizeList = new ArrayList<>(); + List rangeCompletedTaskCountList = new ArrayList<>(); List completedTaskCountList = new ArrayList<>(); + List rangeRejectCountList = new ArrayList<>(); List rejectCountList = new ArrayList<>(); List queueRemainingCapacityList = new ArrayList<>(); - List currentLoadList = new ArrayList<>(); - long countTemp = 0L; - AtomicBoolean firstFlag = new AtomicBoolean(Boolean.TRUE); + long completedTaskCountTemp = 0L; + long rejectCountTemp = 0L; + boolean firstFlag = true; for (HisRunDataInfo each : hisRunDataInfos) { String time = DateUtil.format(new Date(each.getTimestamp()), NORM_TIME_PATTERN); times.add(time); poolSizeList.add(each.getPoolSize()); activeSizeList.add(each.getActiveSize()); queueSizeList.add(each.getQueueSize()); - rejectCountList.add(each.getRejectCount()); queueRemainingCapacityList.add(each.getQueueRemainingCapacity()); - currentLoadList.add(each.getCurrentLoad()); queueCapacityList.add(each.getQueueCapacity()); - if (firstFlag.get()) { + if (firstFlag) { + firstFlag = false; completedTaskCountList.add(0L); - firstFlag.set(Boolean.FALSE); - countTemp = each.getCompletedTaskCount(); + completedTaskCountTemp = each.getCompletedTaskCount(); + rejectCountTemp = each.getRejectCount(); continue; } - long completedTaskCount = each.getCompletedTaskCount(); - long countTask = completedTaskCount - countTemp; - completedTaskCountList.add(countTask); - countTemp = each.getCompletedTaskCount(); + rangeCompletedTaskCountList.add(each.getCompletedTaskCount() - completedTaskCountTemp); + completedTaskCountList.add(each.getCompletedTaskCount()); + rangeRejectCountList.add(each.getRejectCount() - rejectCountTemp); + rejectCountList.add(each.getRejectCount()); + completedTaskCountTemp = each.getCompletedTaskCount(); + rejectCountTemp = each.getRejectCount(); } - return new MonitorActiveRespDTO(times, poolSizeList, activeSizeList, queueSizeList, completedTaskCountList, rejectCountList, queueRemainingCapacityList, currentLoadList, queueCapacityList); + return MonitorActiveRespDTO.builder() + .times(times) + .poolSizeList(poolSizeList) + .activeSizeList(activeSizeList) + .queueSizeList(queueSizeList) + .queueCapacityList(queueCapacityList) + .rangeRejectCountList(rangeRejectCountList) + .rejectCountList(rejectCountList) + .completedTaskCountList(completedTaskCountList) + .rangeCompletedTaskCountList(rangeCompletedTaskCountList) + .queueRemainingCapacityList(queueRemainingCapacityList) + .build(); } @Override From 472d345285167e853af313e55980fdb541292e75 Mon Sep 17 00:00:00 2001 From: valery1707 Date: Thu, 5 Oct 2023 07:35:26 +0300 Subject: [PATCH 09/11] Check for null value with the appropriate assertion method (#1493) --- .../message/core/platform/WeChatSendMessageHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/message/core/src/main/java/cn/hippo4j/threadpool/message/core/platform/WeChatSendMessageHandler.java b/kernel/message/core/src/main/java/cn/hippo4j/threadpool/message/core/platform/WeChatSendMessageHandler.java index dbabc582..440c56db 100644 --- a/kernel/message/core/src/main/java/cn/hippo4j/threadpool/message/core/platform/WeChatSendMessageHandler.java +++ b/kernel/message/core/src/main/java/cn/hippo4j/threadpool/message/core/platform/WeChatSendMessageHandler.java @@ -66,7 +66,7 @@ public class WeChatSendMessageHandler extends AbstractRobotSendMessageHandler { weChatReq.setMarkdown(markdown); String responseBody = HttpUtil.post(serverUrl, weChatReq); WeChatRobotResponse response = JSONUtil.parseObject(responseBody, WeChatRobotResponse.class); - Assert.isTrue(response != null, "Response is null."); + Assert.notNull(response, "Response is null."); if (response.getErrcode() != 0) { log.error("WeChat failed to send message, reason : {}", response.errmsg); } From 79dc8f5adcde53ed95a699e9b57735bc7f31134f Mon Sep 17 00:00:00 2001 From: Bala Sukesh Date: Fri, 6 Oct 2023 07:24:08 -0500 Subject: [PATCH 10/11] Use JSONAssert instead of Assert in JSONUtilTest (#1495) Co-authored-by: bbelide2 --- .../test/java/cn/hippo4j/common/toolkit/JSONUtilTest.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/infra/common/src/test/java/cn/hippo4j/common/toolkit/JSONUtilTest.java b/infra/common/src/test/java/cn/hippo4j/common/toolkit/JSONUtilTest.java index e01ff4cd..05faebf1 100644 --- a/infra/common/src/test/java/cn/hippo4j/common/toolkit/JSONUtilTest.java +++ b/infra/common/src/test/java/cn/hippo4j/common/toolkit/JSONUtilTest.java @@ -24,6 +24,8 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import org.junit.Assert; import org.junit.Test; +import org.json.JSONException; +import org.skyscreamer.jsonassert.JSONAssert; import java.util.Arrays; import java.util.Collections; @@ -42,7 +44,11 @@ public class JSONUtilTest { @Test public void assertToJSONString() { Assert.assertNull(JSONUtil.toJSONString(null)); - Assert.assertEquals(EXPECTED_FOO_JSON, JSONUtil.toJSONString(EXPECTED_FOO)); + try { + JSONAssert.assertEquals(EXPECTED_FOO_JSON, JSONUtil.toJSONString(EXPECTED_FOO), false); + } catch (JSONException jse) { + throw new RuntimeException(jse); + } } @Test From cf854b3cb3c47fd339421e5a46a3ae3229c53829 Mon Sep 17 00:00:00 2001 From: Bala Sukesh Date: Fri, 6 Oct 2023 07:24:41 -0500 Subject: [PATCH 11/11] Fix flaky test in Md5UtilTest (#1494) * Fix flaky test in Md5UtilTest * Remove unused imports --------- Co-authored-by: bbelide2 --- .../hippo4j/common/toolkit/Md5UtilTest.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/infra/common/src/test/java/cn/hippo4j/common/toolkit/Md5UtilTest.java b/infra/common/src/test/java/cn/hippo4j/common/toolkit/Md5UtilTest.java index adf128ed..1004e9d3 100644 --- a/infra/common/src/test/java/cn/hippo4j/common/toolkit/Md5UtilTest.java +++ b/infra/common/src/test/java/cn/hippo4j/common/toolkit/Md5UtilTest.java @@ -19,12 +19,16 @@ package cn.hippo4j.common.toolkit; import cn.hippo4j.common.model.ThreadPoolParameterInfo; import org.junit.Test; +import org.mockito.MockedStatic; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.mockStatic; + public class Md5UtilTest { @Test @@ -50,12 +54,15 @@ public class Md5UtilTest { @Test public void assetGetTpContentMd5() { - String md5Result = "ef5ea7cb47377fb9fb85a7125e76715d"; - ThreadPoolParameterInfo threadPoolParameterInfo = ThreadPoolParameterInfo.builder().tenantId("prescription") - .itemId("dynamic-threadpool-example").tpId("message-consume").content("描述信息").corePoolSize(1) - .maximumPoolSize(2).queueType(1).capacity(4).keepAliveTime(513L).executeTimeOut(null).rejectedType(4) - .isAlarm(1).capacityAlarm(80).livenessAlarm(80).allowCoreThreadTimeOut(1).build(); - Assert.isTrue(md5Result.equals(Md5Util.getTpContentMd5(threadPoolParameterInfo))); + final ThreadPoolParameterInfo threadPoolParameterInfo = new ThreadPoolParameterInfo(); + final String mockContent = "mockContent"; + final String mockContentMd5 = "34cf17bc632ece6e4c81a4ce8aa97d5e"; + try (final MockedStatic mockedContentUtil = mockStatic(ContentUtil.class)) { + mockedContentUtil.when(() -> ContentUtil.getPoolContent(threadPoolParameterInfo)).thenReturn(mockContent); + final String result = Md5Util.getTpContentMd5(threadPoolParameterInfo); + Assert.isTrue(result.equals(mockContentMd5)); + mockedContentUtil.verify(() -> ContentUtil.getPoolContent(threadPoolParameterInfo), times(1)); + } } @Test