diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/util/CommonUtil.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/util/CommonUtil.java index 35d6a5762bb..e868470f4b2 100644 --- a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/util/CommonUtil.java +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/util/CommonUtil.java @@ -40,6 +40,8 @@ public final class CommonUtil { private static final Pattern PHONE_PATTERN = Pattern.compile("^(((13[0-9])|(14[0-9])|(15[0-9])|(16[0-9])|(19[0-9])|(18[0-9])|(17[0-9]))+\\d{8})?$"); private static final Pattern NUMBER_PATTERN = Pattern.compile("^[-+]?[0-9]*\\.?[0-9]+$"); + + private static final Pattern LONG_PATTERN = Pattern.compile("^[-+]?[0-9]+$"); private static final int PHONE_LENGTH = 11; @@ -96,6 +98,18 @@ public static boolean isNumeric(String str) { return NUMBER_PATTERN.matcher(str).matches(); } + /** + * whether the string is Long + * @param str string + * @return boolean + */ + public static boolean isLong(String str) { + if (StringUtils.isBlank(str)) { + return false; + } + return LONG_PATTERN.matcher(str).matches(); + } + /** * Converts the time string str to seconds * diff --git a/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/util/CommonUtilTest.java b/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/util/CommonUtilTest.java index c99e77c977b..c5521c01c75 100644 --- a/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/util/CommonUtilTest.java +++ b/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/util/CommonUtilTest.java @@ -59,6 +59,20 @@ void testParseIsNumeric() { assertFalse(CommonUtil.isNumeric("445_126")); } + @Test + void testParseIsLong() { + assertTrue(CommonUtil.isLong("1234")); + assertTrue(CommonUtil.isLong("0")); + assertFalse(CommonUtil.isLong(null)); + assertFalse(CommonUtil.isLong("")); + assertFalse(CommonUtil.isLong(" ")); + assertFalse(CommonUtil.isLong("12.34")); + assertFalse(CommonUtil.isLong("1,234")); + assertFalse(CommonUtil.isLong("1234L")); + assertFalse(CommonUtil.isLong("296.347%")); + assertFalse(CommonUtil.isLong("445_126")); + } + @Test void testParseTimeStrToSecond() { assertEquals(36000, CommonUtil.parseTimeStrToSecond("10:00")); diff --git a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java index ab185019374..31c174b34e5 100644 --- a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java +++ b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java @@ -642,7 +642,7 @@ public Page getMonitors(List monitorIds, String app, String searc if (StringUtils.hasText(search)) { Predicate predicateHost = criteriaBuilder.like(root.get("host"), "%" + search + "%"); Predicate predicateName = criteriaBuilder.like(criteriaBuilder.lower(root.get("name")), "%" + search.toLowerCase() + "%"); - if (CommonUtil.isNumeric(search)){ + if (CommonUtil.isLong(search)){ Predicate predicateId = criteriaBuilder.equal(root.get("id"), Long.parseLong(search)); orList.add(predicateId); } diff --git a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/service/MonitorServiceTest.java b/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/service/MonitorServiceTest.java index 7db847a451f..8bad80d9159 100644 --- a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/service/MonitorServiceTest.java +++ b/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/service/MonitorServiceTest.java @@ -22,7 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.any; -import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -31,6 +31,9 @@ import java.util.List; import java.util.Optional; import java.util.Set; +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.CriteriaQuery; +import jakarta.persistence.criteria.Root; import org.apache.hertzbeat.alert.dao.AlertDefineBindDao; import org.apache.hertzbeat.common.constants.CommonConstants; import org.apache.hertzbeat.common.entity.job.Job; @@ -651,8 +654,16 @@ void getMonitorDto() { @Test void getMonitors() { - doReturn(Page.empty()).when(monitorDao).findAll(any(Specification.class), any(PageRequest.class)); - assertNotNull(monitorService.getMonitors(null, null, null, null, "gmtCreate", "desc", 1, 1, null)); + when(monitorDao.findAll(any(Specification.class), any(PageRequest.class))).thenAnswer((invocation)->{ + Specification spec = invocation.getArgument(0); + CriteriaBuilder cb = mock(CriteriaBuilder.class); + CriteriaQuery query = mock(CriteriaQuery.class); + Root root = mock(Root.class); + spec.toPredicate(root, query, cb); + return Page.empty(); + }); + assertNotNull(monitorService.getMonitors(null, null, "9.111", null, "gmtCreate", "desc", 1, 1, null)); + assertNotNull(monitorService.getMonitors(null, null, "9", null, "gmtCreate", "desc", 1, 1, null)); } @Test