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]

Reply via email to