From 910f5940766e23cdff4e38e32272964e41d1fdbc Mon Sep 17 00:00:00 2001 From: GRL-bxy <77558077+GRL-bxy@users.noreply.github.com> Date: Sat, 30 Sep 2023 08:50:21 +0800 Subject: [PATCH 1/8] feat:add thread pool (#1488) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 吹泡泡的团子 --- threadpool/console/src/icons/svg/monitor.svg | 1 + .../hippo4j/monitor/components/LineChart.vue | 92 ++- .../monitor/components/mixins/resize.js | 46 +- .../src/views/hippo4j/monitor/index.vue | 774 ++++++++++-------- 4 files changed, 519 insertions(+), 394 deletions(-) create mode 100644 threadpool/console/src/icons/svg/monitor.svg mode change 100755 => 100644 threadpool/console/src/views/hippo4j/monitor/index.vue diff --git a/threadpool/console/src/icons/svg/monitor.svg b/threadpool/console/src/icons/svg/monitor.svg new file mode 100644 index 00000000..c82fd6b7 --- /dev/null +++ b/threadpool/console/src/icons/svg/monitor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/threadpool/console/src/views/hippo4j/monitor/components/LineChart.vue b/threadpool/console/src/views/hippo4j/monitor/components/LineChart.vue index 79c28ad1..6bb26713 100755 --- a/threadpool/console/src/views/hippo4j/monitor/components/LineChart.vue +++ b/threadpool/console/src/views/hippo4j/monitor/components/LineChart.vue @@ -32,6 +32,14 @@ export default { type: Array, required: true, }, + title: { + type: String, + default: '标题' + }, + cusFormatter: { + type: Boolean, + default: false + } }, data() { return { @@ -67,11 +75,19 @@ export default { }, setOptions() { const series = this.chartData.map((item) => { + const other = !item.show ? { + symbolSize: 0, + showSymbol: false, + lineStyle: { + width: 0, + color: 'rgba(0, 0, 0, 0)' + } + } : {} return { name: item.name, type: 'line', - stack: 'Total', - areaStyle: {}, + // stack: 'Total', + // areaStyle: {}, label: { position: 'top', }, @@ -82,40 +98,82 @@ export default { smooth: true, data: item.data, showSymbol: false, + ...other }; }); + let numbers = this.chartData && this.chartData[0]?.data; + let maxNumber = Math.max(...numbers); + const cusFormatterObj = this.cusFormatter ? { + formatter: (params) => { + const taskAll = params.find(item => item.seriesName === '任务总数') + const taskCom = params.find(item => item.seriesName === '区间任务完成数') + const taskReject = params.find(item => item.seriesName === '拒绝总数') + return `
+
${taskCom?.seriesName}:${taskCom?.value}
+
+
${taskAll?.seriesName}:${taskAll?.value}
+
${taskReject?.seriesName}:${taskReject?.value}
+
` + } + } : {}; this.chart.setOption({ + title: { + text: this.title, + textStyle: { + fontSize: '16px' + }, + left: 0, + right: 0, + top: 0, + bottom: 0, + padding: 0, + }, tooltip: { trigger: 'axis', - axisPointer: { - type: 'cross', - label: { - backgroundColor: '#6a7985', - }, - }, + ...cusFormatterObj }, legend: { + show:false, data: this.chartData, + icon: 'circle', + top: 0, }, toolbox: { feature: {}, }, grid: { - left: '3%', - right: '4%', - bottom: '3%', + left: 0, + right: 0, + top: '18%', + bottom: '0', containLabel: true, }, - xAxis: [ - { - type: 'category', - boundaryGap: false, - data: this.times, + xAxis: { + type: 'category', + boundaryGap: false, + data: this.times, + nameTextStyle: { + width: '20px' }, - ], + axisLabel: { + color: '#333' + }, + axisLine: { + lineStyle: { + color: '#ddd' + } + }, + axisTick: { + show: true, + lineStyle: { + color: '#ddd' + } + }, + }, yAxis: [ { type: 'value', + max: maxNumber, }, ], series: series, diff --git a/threadpool/console/src/views/hippo4j/monitor/components/mixins/resize.js b/threadpool/console/src/views/hippo4j/monitor/components/mixins/resize.js index bcd17bf0..122cb788 100755 --- a/threadpool/console/src/views/hippo4j/monitor/components/mixins/resize.js +++ b/threadpool/console/src/views/hippo4j/monitor/components/mixins/resize.js @@ -1,28 +1,28 @@ -import { debounce } from '@/utils' +import { debounce } from '@/utils'; export default { data() { return { - $_sidebarElm: null - } + $_sidebarElm: null, + }; }, mounted() { - this.$_initResizeEvent() - this.$_initSidebarResizeEvent() + this.$_initResizeEvent(); + this.$_initSidebarResizeEvent(); }, beforeDestroy() { - this.$_destroyResizeEvent() - this.$_destroySidebarResizeEvent() + this.$_destroyResizeEvent(); + this.$_destroySidebarResizeEvent(); }, // to fixed bug when cached by keep-alive // https://github.com/PanJiaChen/vue-element-admin/issues/2116 activated() { - this.$_initResizeEvent() - this.$_initSidebarResizeEvent() + this.$_initResizeEvent(); + this.$_initSidebarResizeEvent(); }, deactivated() { - this.$_destroyResizeEvent() - this.$_destroySidebarResizeEvent() + this.$_destroyResizeEvent(); + this.$_destroySidebarResizeEvent(); }, methods: { // use $_ for mixins properties @@ -30,27 +30,29 @@ export default { $_resizeHandler() { return debounce(() => { if (this.chart) { - this.chart.resize() + this.chart.resize(); } - }, 100)() + }, 100)(); }, $_initResizeEvent() { - window.addEventListener('resize', this.$_resizeHandler) + window.addEventListener('resize', this.$_resizeHandler); }, $_destroyResizeEvent() { - window.removeEventListener('resize', this.$_resizeHandler) + window.removeEventListener('resize', this.$_resizeHandler); }, $_sidebarResizeHandler(e) { if (e.propertyName === 'width') { - this.$_resizeHandler() + this.$_resizeHandler(); } }, $_initSidebarResizeEvent() { - this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0] - this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler) + this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]; + this.$_sidebarElm && + this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler); }, $_destroySidebarResizeEvent() { - this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler) - } - } -} + this.$_sidebarElm && + this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler); + }, + }, +}; diff --git a/threadpool/console/src/views/hippo4j/monitor/index.vue b/threadpool/console/src/views/hippo4j/monitor/index.vue old mode 100755 new mode 100644 index d44e4eae..526b1d0e --- a/threadpool/console/src/views/hippo4j/monitor/index.vue +++ b/threadpool/console/src/views/hippo4j/monitor/index.vue @@ -1,252 +1,154 @@ - From 5bb1f4ab332ce89daed02be7a0691d2ce925ec4b Mon Sep 17 00:00:00 2001 From: magestack Date: Sat, 30 Sep 2023 09:05:00 +0800 Subject: [PATCH 2/8] 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 3/8] 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 4/8] 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 5/8] 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 From 26212e47cf26c3aee5b9282c4460c903e2adaf37 Mon Sep 17 00:00:00 2001 From: Rain <45527750+mazengrun@users.noreply.github.com> Date: Wed, 11 Oct 2023 11:02:33 +0800 Subject: [PATCH 6/8] check the required fields of polaris when the config mode starts (#1470) * check the required fields of polaris when the config mode starts * Modify the format of polaris in BootstrapConfigProperties * Define static constants of polaris in BeforeCheckConfiguration * Use configuration and constants exist in PolarisRefresherHandler * Just consider the properties of BootstrapPropertiesInterface * Don't throw exception in if else * Optimize code format in BeforeCheckConfiguration --- .../api/BootstrapPropertiesInterface.java | 7 ++++ .../properties/BootstrapConfigProperties.java | 5 +++ .../refresher/PolarisRefresherHandler.java | 1 + .../core/enable/BeforeCheckConfiguration.java | 34 +++++++++++++++++++ 4 files changed, 47 insertions(+) diff --git a/kernel/dynamic/api/src/main/java/cn/hippo4j/threadpool/dynamic/api/BootstrapPropertiesInterface.java b/kernel/dynamic/api/src/main/java/cn/hippo4j/threadpool/dynamic/api/BootstrapPropertiesInterface.java index ab743fd2..4f7316da 100644 --- a/kernel/dynamic/api/src/main/java/cn/hippo4j/threadpool/dynamic/api/BootstrapPropertiesInterface.java +++ b/kernel/dynamic/api/src/main/java/cn/hippo4j/threadpool/dynamic/api/BootstrapPropertiesInterface.java @@ -101,4 +101,11 @@ public interface BootstrapPropertiesInterface { return null; } + /** + * Get Polaris. + */ + default Map getPolaris() { + return null; + } + } diff --git a/kernel/dynamic/mode/config/src/main/java/cn/hippo4j/threadpool/dynamic/mode/config/properties/BootstrapConfigProperties.java b/kernel/dynamic/mode/config/src/main/java/cn/hippo4j/threadpool/dynamic/mode/config/properties/BootstrapConfigProperties.java index ea1dc322..1bc87dc0 100644 --- a/kernel/dynamic/mode/config/src/main/java/cn/hippo4j/threadpool/dynamic/mode/config/properties/BootstrapConfigProperties.java +++ b/kernel/dynamic/mode/config/src/main/java/cn/hippo4j/threadpool/dynamic/mode/config/properties/BootstrapConfigProperties.java @@ -76,6 +76,11 @@ public class BootstrapConfigProperties implements BootstrapPropertiesInterface { */ private Map etcd; + /** + * polaris config + */ + private Map polaris; + /** * Web config * diff --git a/starters/threadpool/config/src/main/java/cn/hippo4j/config/springboot/starter/refresher/PolarisRefresherHandler.java b/starters/threadpool/config/src/main/java/cn/hippo4j/config/springboot/starter/refresher/PolarisRefresherHandler.java index 3f2a3f8b..b06b4ebf 100644 --- a/starters/threadpool/config/src/main/java/cn/hippo4j/config/springboot/starter/refresher/PolarisRefresherHandler.java +++ b/starters/threadpool/config/src/main/java/cn/hippo4j/config/springboot/starter/refresher/PolarisRefresherHandler.java @@ -71,4 +71,5 @@ public class PolarisRefresherHandler extends AbstractConfigThreadPoolDynamicRefr return Objects.equals(POLARIS_FILE_TYPE, "yaml") ? configFileService.getConfigYamlFile(namespace, fileGroup, fileName) : configFileService.getConfigPropertiesFile(namespace, fileGroup, fileName); } + } diff --git a/threadpool/core/src/main/java/cn/hippo4j/core/enable/BeforeCheckConfiguration.java b/threadpool/core/src/main/java/cn/hippo4j/core/enable/BeforeCheckConfiguration.java index 5265faf6..20c2df30 100644 --- a/threadpool/core/src/main/java/cn/hippo4j/core/enable/BeforeCheckConfiguration.java +++ b/threadpool/core/src/main/java/cn/hippo4j/core/enable/BeforeCheckConfiguration.java @@ -23,6 +23,7 @@ import cn.hippo4j.core.config.ConfigEmptyException; import cn.hippo4j.threadpool.dynamic.api.BootstrapPropertiesInterface; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.ConfigurableEnvironment; @@ -144,6 +145,39 @@ public class BeforeCheckConfiguration { } } + Map polaris = properties.getPolaris(); + if (MapUtil.isNotEmpty(polaris)) { + String namespace = polaris.get("namespace").toString(); + if (StringUtil.isBlank(namespace)) { + throw new ConfigEmptyException( + "Web server maybe fail to start. The dynamic thread pool polaris namespace is empty.", + "Please check whether the [spring.dynamic.thread-pool.polaris.namespace] configuration is empty or an empty string."); + } + if (!(polaris.get("file") instanceof Map)) { + throw new ConfigEmptyException( + "Web server maybe fail to start. Lack of the dynamic thread pool polaris file configuration.", + "Please check whether the [spring.dynamic.thread-pool.polaris.file.*] configuration is complete."); + } + Map polarisFile = (Map) polaris.get("file"); + String fileGroup = polarisFile.get("group"); + if (StringUtil.isBlank(fileGroup)) { + throw new ConfigEmptyException( + "Web server maybe fail to start. The dynamic thread pool polaris file group is empty.", + "Please check whether the [spring.dynamic.thread-pool.polaris.file.group] configuration is empty or an empty string."); + } + String fileName = polarisFile.get("name"); + if (StringUtil.isBlank(fileName)) { + throw new ConfigEmptyException( + "Web server maybe fail to start. The dynamic thread pool polaris file name is empty.", + "Please check whether the [spring.dynamic.thread-pool.polaris.file.name] configuration is empty or an empty string."); + } + String fileType = polarisFile.get("type"); + if (StringUtil.isBlank(fileType)) { + throw new ConfigEmptyException( + "Web server maybe fail to start. The dynamic thread pool polaris file type is empty.", + "Please check whether the [spring.dynamic.thread-pool.polaris.file.type] configuration is empty or an empty string."); + } + } break; } default: From ee2a81f6a79afe07df595fbc5c9ab94940930d42 Mon Sep 17 00:00:00 2001 From: Bala Sukesh Date: Thu, 19 Oct 2023 03:35:50 -0500 Subject: [PATCH 7/8] Fix flaky tests in LogMessageTest (#1500) * Fix flaky tests in LogMessageTest * Remove fix for NOD test --------- Co-authored-by: balasukesh --- .../cn/hippo4j/common/toolkit/logtracing/LogMessageTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/infra/common/src/test/java/cn/hippo4j/common/toolkit/logtracing/LogMessageTest.java b/infra/common/src/test/java/cn/hippo4j/common/toolkit/logtracing/LogMessageTest.java index 5750f587..7909caf9 100644 --- a/infra/common/src/test/java/cn/hippo4j/common/toolkit/logtracing/LogMessageTest.java +++ b/infra/common/src/test/java/cn/hippo4j/common/toolkit/logtracing/LogMessageTest.java @@ -73,7 +73,8 @@ public class LogMessageTest { public void testKvShouldPutAllKeyAndValuePairs() { logMessage.kv("key1", "value1"); logMessage.kv("key2", "value2"); - assertEquals("key1=value1||key2=value2", logMessage.toString()); + String output = logMessage.toString(); + assertTrue(output.equals("key1=value1||key2=value2") || output.equals("key2=value2||key1=value1")); } @Test From fa206974f4c82197a882de0131b0e8cfcc076582 Mon Sep 17 00:00:00 2001 From: Bala Sukesh Date: Thu, 19 Oct 2023 03:36:03 -0500 Subject: [PATCH 8/8] Fix flaky test in HttpUtilsTest (#1499) Co-authored-by: balasukesh --- .../java/cn/hippo4j/common/toolkit/http/HttpUtilsTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/infra/common/src/test/java/cn/hippo4j/common/toolkit/http/HttpUtilsTest.java b/infra/common/src/test/java/cn/hippo4j/common/toolkit/http/HttpUtilsTest.java index 73e5c282..06b55f44 100644 --- a/infra/common/src/test/java/cn/hippo4j/common/toolkit/http/HttpUtilsTest.java +++ b/infra/common/src/test/java/cn/hippo4j/common/toolkit/http/HttpUtilsTest.java @@ -37,7 +37,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; public class HttpUtilsTest { @@ -169,7 +169,7 @@ public class HttpUtilsTest { @Test public void buildUrl() { - Map map = new HashMap<>(); + Map map = new LinkedHashMap<>(); map.put(password, passwordValue); map.put(username, usernameValue); String s = HttpUtil.buildUrl(url + PORT, map);