This is an automated email from the ASF dual-hosted git repository.
zhengqiwei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git
The following commit(s) were added to refs/heads/master by this push:
new e560502d8 [refactor] move code from AlertsController to AlertService
(#2435)
e560502d8 is described below
commit e560502d8e3ff4d12ac099254cba7aef1078c5f4
Author: kangli <[email protected]>
AuthorDate: Mon Aug 5 23:52:40 2024 +0800
[refactor] move code from AlertsController to AlertService (#2435)
Co-authored-by: tomsun28 <[email protected]>
Co-authored-by: Calvin <[email protected]>
---
.../alert/controller/AlertsController.java | 43 +---------------------
.../hertzbeat/alert/service/AlertService.java | 14 +++++--
.../alert/service/impl/AlertServiceImpl.java | 37 ++++++++++++++++++-
.../alert/controller/AlertsControllerTest.java | 43 ++++++++++------------
4 files changed, 68 insertions(+), 69 deletions(-)
diff --git
a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertsController.java
b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertsController.java
index 65aac1e04..d2970b3ea 100644
---
a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertsController.java
+++
b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertsController.java
@@ -21,9 +21,6 @@ import static
org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.persistence.criteria.CriteriaBuilder;
-import jakarta.persistence.criteria.Predicate;
-import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import org.apache.hertzbeat.alert.dto.AlertSummary;
@@ -32,9 +29,6 @@ import org.apache.hertzbeat.common.entity.alerter.Alert;
import org.apache.hertzbeat.common.entity.dto.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Sort;
-import org.springframework.data.jpa.domain.Specification;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
@@ -67,41 +61,8 @@ public class AlertsController {
@Parameter(description = "Sort Type", example = "desc")
@RequestParam(defaultValue = "desc") String order,
@Parameter(description = "List current page", example = "0")
@RequestParam(defaultValue = "0") int pageIndex,
@Parameter(description = "Number of list pagination", example =
"8") @RequestParam(defaultValue = "8") int pageSize) {
-
- Specification<Alert> specification = (root, query, criteriaBuilder) ->
{
- List<Predicate> andList = new ArrayList<>();
-
- if (ids != null && !ids.isEmpty()) {
- CriteriaBuilder.In<Long> inPredicate =
criteriaBuilder.in(root.get("id"));
- for (long id : ids) {
- inPredicate.value(id);
- }
- andList.add(inPredicate);
- }
- if (monitorId != null) {
- Predicate predicate =
criteriaBuilder.like(root.get("tags").as(String.class), "%" + monitorId + "%");
- andList.add(predicate);
- }
- if (priority != null) {
- Predicate predicate =
criteriaBuilder.equal(root.get("priority"), priority);
- andList.add(predicate);
- }
- if (status != null) {
- Predicate predicate =
criteriaBuilder.equal(root.get("status"), status);
- andList.add(predicate);
- }
- if (content != null && !content.isEmpty()) {
- Predicate predicateContent =
criteriaBuilder.like(root.get("content"), "%" + content + "%");
- andList.add(predicateContent);
- }
- Predicate[] predicates = new Predicate[andList.size()];
- return criteriaBuilder.and(andList.toArray(predicates));
- };
- Sort sortExp = Sort.by(new
Sort.Order(Sort.Direction.fromString(order), sort));
- PageRequest pageRequest = PageRequest.of(pageIndex, pageSize, sortExp);
- Page<Alert> alertPage = alertService.getAlerts(specification,
pageRequest);
- Message<Page<Alert>> message = Message.success(alertPage);
- return ResponseEntity.ok(message);
+ Page<Alert> alertPage = alertService.getAlerts(ids, monitorId,
priority, status, content, sort, order, pageIndex, pageSize);
+ return ResponseEntity.ok(Message.success(alertPage));
}
@DeleteMapping
diff --git
a/alerter/src/main/java/org/apache/hertzbeat/alert/service/AlertService.java
b/alerter/src/main/java/org/apache/hertzbeat/alert/service/AlertService.java
index 6ee54fac3..67aa0b59f 100644
--- a/alerter/src/main/java/org/apache/hertzbeat/alert/service/AlertService.java
+++ b/alerter/src/main/java/org/apache/hertzbeat/alert/service/AlertService.java
@@ -23,7 +23,6 @@ import org.apache.hertzbeat.alert.dto.AlertSummary;
import org.apache.hertzbeat.common.entity.alerter.Alert;
import org.apache.hertzbeat.common.entity.dto.AlertReport;
import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.domain.Specification;
/**
@@ -40,11 +39,18 @@ public interface AlertService {
/**
* Dynamic conditional query
- * @param specification Query conditions
- * @param pageRequest pagination parameters
+ * @param alarmIds Alarm ID List
+ * @param monitorId Monitor ID
+ * @param priority Alarm level
+ * @param status Alarm Status
+ * @param content Alarm content fuzzy query
+ * @param sort Sort field
+ * @param order Sort Type
+ * @param pageIndex List current page
+ * @param pageSize Number of list pagination
* @return search result
*/
- Page<Alert> getAlerts(Specification<Alert> specification, PageRequest
pageRequest);
+ Page<Alert> getAlerts(List<Long> alarmIds, Long monitorId, Byte priority,
Byte status, String content, String sort, String order, int pageIndex, int
pageSize);
/**
* Delete alarms in batches according to the alarm ID list
diff --git
a/alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/AlertServiceImpl.java
b/alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/AlertServiceImpl.java
index 8f1374d6f..b411ecdd8 100644
---
a/alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/AlertServiceImpl.java
+++
b/alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/AlertServiceImpl.java
@@ -17,11 +17,14 @@
package org.apache.hertzbeat.alert.service.impl;
+import jakarta.persistence.criteria.CriteriaBuilder;
+import jakarta.persistence.criteria.Predicate;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
+import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
@@ -42,6 +45,7 @@ import org.apache.hertzbeat.common.util.JsonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -66,7 +70,38 @@ public class AlertServiceImpl implements AlertService {
}
@Override
- public Page<Alert> getAlerts(Specification<Alert> specification,
PageRequest pageRequest) {
+ public Page<Alert> getAlerts(List<Long> alarmIds, Long monitorId, Byte
priority, Byte status, String content, String sort, String order, int
pageIndex, int pageSize) {
+ Specification<Alert> specification = (root, query, criteriaBuilder) ->
{
+ List<Predicate> andList = new ArrayList<>();
+
+ if (alarmIds != null && !alarmIds.isEmpty()) {
+ CriteriaBuilder.In<Long> inPredicate =
criteriaBuilder.in(root.get("id"));
+ for (long id : alarmIds) {
+ inPredicate.value(id);
+ }
+ andList.add(inPredicate);
+ }
+ if (monitorId != null) {
+ Predicate predicate =
criteriaBuilder.like(root.get("tags").as(String.class), "%" + monitorId + "%");
+ andList.add(predicate);
+ }
+ if (priority != null) {
+ Predicate predicate =
criteriaBuilder.equal(root.get("priority"), priority);
+ andList.add(predicate);
+ }
+ if (status != null) {
+ Predicate predicate =
criteriaBuilder.equal(root.get("status"), status);
+ andList.add(predicate);
+ }
+ if (content != null && !content.isEmpty()) {
+ Predicate predicateContent =
criteriaBuilder.like(root.get("content"), "%" + content + "%");
+ andList.add(predicateContent);
+ }
+ Predicate[] predicates = new Predicate[andList.size()];
+ return criteriaBuilder.and(andList.toArray(predicates));
+ };
+ Sort sortExp = Sort.by(new
Sort.Order(Sort.Direction.fromString(order), sort));
+ PageRequest pageRequest = PageRequest.of(pageIndex, pageSize, sortExp);
return alertDao.findAll(specification, pageRequest);
}
diff --git
a/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertsControllerTest.java
b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertsControllerTest.java
index c35ee78f0..e10442066 100644
---
a/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertsControllerTest.java
+++
b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertsControllerTest.java
@@ -39,7 +39,7 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
-import org.springframework.data.jpa.domain.Specification;
+import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
@@ -67,40 +67,37 @@ class AlertsControllerTest {
ids = LongStream.rangeClosed(1,
10).boxed().collect(Collectors.toList());
}
- // todo: fix this test
+ @Test
void getAlerts() throws Exception {
String sortField = "id";
- String orderType = "asc";
+ String orderType = "desc";
+ Byte priority = 1;
+ Byte status = 1;
+ Long monitorId = 1L;
+ String content = "test";
int pageIndex = 0;
int pageSize = 10;
- PageRequest pageRequest = PageRequest.of(pageIndex, pageSize,
Sort.by(new Sort.Order(Sort.Direction.fromString(orderType), sortField)));
- Page<Alert> alertPage = new
PageImpl<>(Collections.singletonList(Alert.builder().build()));
- Mockito.when(
- alertService.getAlerts(
- Mockito.any(Specification.class)
- , Mockito.argThat(
- argument ->
- argument.getPageNumber() ==
pageRequest.getPageNumber()
- &&
argument.getPageSize() == pageRequest.getPageSize()
- &&
argument.getSort().equals(pageRequest.getSort())
- )
- )
- )
+
+ Page<Alert> alertPage = new PageImpl<>(
+ Collections.singletonList(Alert.builder().build()),
+ PageRequest.of(pageIndex, pageSize,
Sort.by(sortField).descending()),
+ ids.size()
+ );
+ Mockito.when(alertService.getAlerts(ids, monitorId, priority, status,
content, sortField, orderType, pageIndex, pageSize))
.thenReturn(alertPage);
- mockMvc.perform(
- MockMvcRequestBuilders
+ mockMvc.perform(MockMvcRequestBuilders
.get("/api/alerts")
.param("ids",
ids.stream().map(String::valueOf).collect(Collectors.joining(",")))
- .param("monitorId", "1")
- .param("priority", "1")
- .param("status", "1")
- .param("content", "test")
+ .param("monitorId", String.valueOf(monitorId))
+ .param("priority", String.valueOf(priority))
+ .param("status", String.valueOf(status))
+ .param("content", content)
.param("sort", sortField)
.param("order", orderType)
.param("pageIndex", String.valueOf(pageIndex))
.param("pageSize", String.valueOf(pageSize))
- )
+ .accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.code").value((int)
CommonConstants.SUCCESS_CODE))
.andExpect(jsonPath("$.data.content.length()").value(1))
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]