From 65c052280fdc4c91561ca77f682984c4d63eaae8 Mon Sep 17 00:00:00 2001 From: yuluo-yx Date: Sun, 4 Aug 2024 11:09:11 +0800 Subject: [PATCH 1/8] [Improve] add unit tet Signed-off-by: yuluo-yx --- .../controller/AlertDefinesController.java | 19 +- .../AlertDefinesControllerTest.java | 169 +++++++----------- .../AlertSilencesControllerTest.java | 112 ++++++++++++ 3 files changed, 195 insertions(+), 105 deletions(-) create mode 100644 alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertSilencesControllerTest.java diff --git a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java index 7579c05df3d..7ae9c575fb1 100644 --- a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java +++ b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java @@ -27,8 +27,13 @@ import org.apache.hertzbeat.alert.service.AlertDefineService; import org.apache.hertzbeat.common.entity.alerter.AlertDefine; import org.apache.hertzbeat.common.entity.dto.Message; + +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; 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.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -61,7 +66,13 @@ public ResponseEntity>> getAlertDefines( @Parameter(description = "List current page", example = "0") @RequestParam(defaultValue = "0") int pageIndex, @Parameter(description = "Number of list pages", example = "8") @RequestParam(defaultValue = "8") int pageSize) { Page alertDefinePage = alertDefineService.getAlertDefines(ids, search, priority, sort, order, pageIndex, pageSize); - return ResponseEntity.ok(Message.success(alertDefinePage)); + + return ResponseEntity.ok(Message.success( + new PageImpl<>( + alertDefinePage.getContent(), + PageRequest.of(pageIndex, pageSize, Sort.by(new Sort.Order(Sort.Direction.fromString(order), sort))), + alertDefinePage.getTotalElements())) + ); } @DeleteMapping @@ -79,9 +90,9 @@ public ResponseEntity> deleteAlertDefines( @GetMapping("/export") @Operation(summary = "export alertDefine config", description = "export alarm definition configuration") public void export( - @Parameter(description = "AlertDefine ID List", example = "656937901") @RequestParam List ids, - @Parameter(description = "Export Type:JSON,EXCEL,YAML") @RequestParam(defaultValue = "JSON") String type, - HttpServletResponse res) throws Exception { + @Parameter(description = "AlertDefine ID List", example = "656937901") @RequestParam List ids, + @Parameter(description = "Export Type:JSON,EXCEL,YAML") @RequestParam(defaultValue = "JSON") String type, + HttpServletResponse res) throws Exception { alertDefineService.export(ids, type, res); } diff --git a/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java index 7f9ef2c25f6..2b14363a78b 100644 --- a/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java +++ b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java @@ -17,16 +17,17 @@ package org.apache.hertzbeat.alert.controller; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import java.util.ArrayList; +import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; + import java.util.Collections; -import java.util.HashMap; import java.util.LinkedList; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.util.stream.Stream; + import org.apache.hertzbeat.alert.service.AlertDefineService; import org.apache.hertzbeat.common.constants.CommonConstants; import org.apache.hertzbeat.common.entity.alerter.AlertDefine; @@ -38,9 +39,10 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; + 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; @@ -53,99 +55,64 @@ @ExtendWith(MockitoExtension.class) class AlertDefinesControllerTest { - private MockMvc mockMvc; - - @InjectMocks - private AlertDefinesController alertDefinesController; - - @Mock - AlertDefineService alertDefineService; - - // Parameters to avoid default values interference, default values have been replaced - List ids = Stream.of(6565463543L, 6565463544L).collect(Collectors.toList()); - Byte priority = Byte.parseByte("1"); - String sort = "gmtCreate"; - String order = "asc"; - Integer pageIndex = 1; - Integer pageSize = 7; - - // Parameter collection - Map content = new HashMap<>(); - - // Object for mock - PageRequest pageRequest; - - // Since the specification is used in dynamic proxy, it cannot be mocked - // Missing debugging parameters are ids, priority - // The missing part has been manually output for testing - - @BeforeEach - void setUp() { - this.mockMvc = MockMvcBuilders.standaloneSetup(alertDefinesController).build(); - content.put("ids", ids); - content.put("priority", priority); - content.put("sort", sort); - content.put("order", order); - content.put("pageIndex", pageIndex); - content.put("pageSize", pageSize); - Sort sortExp = Sort.by(new Sort.Order(Sort.Direction.fromString(content.get("order").toString()), content.get("sort").toString())); - pageRequest = PageRequest.of((Integer) content.get("pageIndex"), (Integer) content.get("pageSize"), sortExp); - } - - // @Test - // todo: fix this test - void getAlertDefines() throws Exception { - - // Test the correctness of the mock - // Although objects cannot be mocked, stubs can be stored using class files - // Mockito.when(alertDefineService.getAlertDefines(Mockito.any(Specification.class), Mockito.argThat(new ArgumentMatcher() { - // @Override - // public boolean matches(PageRequest pageRequestMidden) { - // // There are three methods in the source code that need to be compared, namely getPageNumber(), getPageSize(), getSort() - // if(pageRequestMidden.getPageSize() == pageRequest.getPageSize() && - // pageRequestMidden.getPageNumber() == pageRequest.getPageNumber() && - // pageRequestMidden.getSort().equals(pageRequest.getSort())) { - // return true; - // } - // return false; - // } - // }))).thenReturn(new PageImpl(new ArrayList())); - AlertDefine define = AlertDefine.builder().id(9L).app("linux").metric("disk").field("usage").expr("x").times(1).tags(new LinkedList<>()).build(); - Mockito.when(alertDefineService.getAlertDefines(null, null, null, "id", "desc", 1, 10)).thenReturn(new PageImpl<>(Collections.singletonList(define))); - - mockMvc.perform(MockMvcRequestBuilders.get( - "/api/alert/defines") - .param("ids", ids.toString().substring(1, ids.toString().length() - 1)) - .param("priority", priority.toString()) - .param("sort", sort) - .param("order", order) - .param("pageIndex", pageIndex.toString()) - .param("pageSize", pageSize.toString())) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code").value((int) CommonConstants.SUCCESS_CODE)) - .andExpect(jsonPath("$.data.content").value(new ArrayList<>())) - .andExpect(jsonPath("$.data.pageable").value("INSTANCE")) - .andExpect(jsonPath("$.data.totalPages").value(1)) - .andExpect(jsonPath("$.data.totalElements").value(0)) - .andExpect(jsonPath("$.data.last").value(true)) - .andExpect(jsonPath("$.data.number").value(0)) - .andExpect(jsonPath("$.data.size").value(0)) - .andExpect(jsonPath("$.data.first").value(true)) - .andExpect(jsonPath("$.data.numberOfElements").value(0)) - .andExpect(jsonPath("$.data.empty").value(true)) - .andExpect(jsonPath("$.data.sort.empty").value(true)) - .andExpect(jsonPath("$.data.sort.sorted").value(false)) - .andExpect(jsonPath("$.data.sort.unsorted").value(true)) - .andReturn(); - } - - @Test - void deleteAlertDefines() throws Exception { - this.mockMvc.perform(MockMvcRequestBuilders.delete("/api/alert/defines") - .contentType(MediaType.APPLICATION_JSON) - .content(JsonUtil.toJson(ids))) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code").value((int) CommonConstants.SUCCESS_CODE)) - .andReturn(); - } + private MockMvc mockMvc; + + @InjectMocks + private AlertDefinesController alertDefinesController; + + @Mock + private AlertDefineService alertDefineService; + + private AlertDefine alertDefine; + + @BeforeEach + void setUp() { + + this.mockMvc = standaloneSetup(alertDefinesController).build(); + + alertDefine = AlertDefine.builder() + .id(9L) + .app("linux") + .metric("disk") + .field("usage") + .expr("x") + .times(1) + .tags(new LinkedList<>()) + .build(); + } + + @Test + void getAlertDefines() throws Exception { + + when(alertDefineService.getAlertDefines(List.of(1L), "Test", (byte) 1, "id", "desc", 1, 10)) + .thenReturn(new PageImpl<>(Collections.singletonList(alertDefine))); + + mockMvc.perform(MockMvcRequestBuilders.get( + "/api/alert/defines") + .param("ids", "1") + .param("search", "Test") + .param("priority", "1") + .param("sort", "id") + .param("order", "desc") + .param("pageIndex", "1") + .param("pageSize", "10")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value((int) CommonConstants.SUCCESS_CODE)) + .andExpect(jsonPath("$.data.content[0].app").value("linux")) + .andExpect(jsonPath("$.data.content[0].id").value("9")) + .andExpect(jsonPath("$.data.content[0].metric").value("disk")) + .andReturn(); + } + + @Test + void deleteAlertDefines() throws Exception { + + this.mockMvc.perform(MockMvcRequestBuilders.delete("/api/alert/defines") + .contentType(MediaType.APPLICATION_JSON) + .content(JsonUtil.toJson(Collections.singletonList(1)))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value((int) CommonConstants.SUCCESS_CODE)) + .andReturn(); + } + } diff --git a/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertSilencesControllerTest.java b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertSilencesControllerTest.java new file mode 100644 index 00000000000..8bf37b19bf0 --- /dev/null +++ b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertSilencesControllerTest.java @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hertzbeat.alert.controller; + +import java.util.Collections; + +import org.apache.hertzbeat.alert.service.AlertSilenceService; +import org.apache.hertzbeat.common.constants.CommonConstants; +import org.apache.hertzbeat.common.entity.alerter.AlertSilence; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; + +/** + * test case for {@link AlertSilencesController} + */ + +@ExtendWith(MockitoExtension.class) +class AlertSilencesControllerTest { + + private MockMvc mockMvc; + + @Mock + private AlertSilenceService alertSilenceService; + + private AlertSilence alertSilence; + + @InjectMocks + private AlertSilencesController alertSilencesController; + + @BeforeEach + void setUp() { + + this.mockMvc = standaloneSetup(alertSilencesController).build(); + + alertSilence = AlertSilence + .builder() + .id(1L) + .type((byte) 1) + .name("Test Silence") + .build(); + } + + @Test + void testGetAlertSilences() throws Exception { + + Page alertSilencePage = new PageImpl<>(Collections.singletonList(alertSilence)); + when(alertSilenceService.getAlertSilences( + any(Specification.class), + any(PageRequest.class)) + ).thenReturn(alertSilencePage); + + mockMvc.perform(get("/api/alert/silences") + .param("ids", "1") + .param("search", "Test") + .param("sort", "id") + .param("order", "desc") + .param("pageIndex", "0") + .param("pageSize", "8") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value((int) CommonConstants.SUCCESS_CODE)) + .andExpect(jsonPath("$.data.content[0].id").value(1)) + .andExpect(jsonPath("$.data.content[0].name").value("Test Silence")); + } + + @Test + void testDeleteAlertDefines() throws Exception { + + doNothing().when(alertSilenceService).deleteAlertSilences(any()); + + mockMvc.perform(delete("/api/alert/silences") + .param("ids", "1,2,3") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value((int) CommonConstants.SUCCESS_CODE)); + } + +} From 7133347bd8efddb2660732ab2b2197c3f79e0e99 Mon Sep 17 00:00:00 2001 From: yuluo-yx Date: Sun, 4 Aug 2024 20:03:43 +0800 Subject: [PATCH 2/8] fix Signed-off-by: yuluo-yx --- .../controller/AlertDefinesController.java | 2 -- .../controller/AlertDefinesControllerTest.java | 17 +++++------------ 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java index 7ae9c575fb1..f019dac99c5 100644 --- a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java +++ b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java @@ -27,8 +27,6 @@ import org.apache.hertzbeat.alert.service.AlertDefineService; import org.apache.hertzbeat.common.entity.alerter.AlertDefine; import org.apache.hertzbeat.common.entity.dto.Message; - -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; diff --git a/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java index 2b14363a78b..adbb9e1f798 100644 --- a/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java +++ b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java @@ -17,13 +17,6 @@ package org.apache.hertzbeat.alert.controller; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; - import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -37,16 +30,16 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; - import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.PageRequest; -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; + +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; /** * Test case for {@link AlertDefinesController} From c9ba2e4a0ec1c5d6a7853dc228ca90ee5c3e7cf0 Mon Sep 17 00:00:00 2001 From: yuluo-yx Date: Mon, 5 Aug 2024 16:01:41 +0800 Subject: [PATCH 3/8] fix Signed-off-by: yuluo-yx --- .../alert/controller/AlertDefinesController.java | 4 +++- .../alert/controller/AlertSilencesController.java | 12 ++++++++++-- .../alert/controller/AlertDefinesControllerTest.java | 3 ++- .../hertzbeat/common/entity/alerter/AlertDefine.java | 1 + 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java index f019dac99c5..9753a860d45 100644 --- a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java +++ b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java @@ -65,11 +65,13 @@ public ResponseEntity>> getAlertDefines( @Parameter(description = "Number of list pages", example = "8") @RequestParam(defaultValue = "8") int pageSize) { Page alertDefinePage = alertDefineService.getAlertDefines(ids, search, priority, sort, order, pageIndex, pageSize); + // https://github.com/spring-projects/spring-data-commons/issues/2987 return ResponseEntity.ok(Message.success( new PageImpl<>( alertDefinePage.getContent(), PageRequest.of(pageIndex, pageSize, Sort.by(new Sort.Order(Sort.Direction.fromString(order), sort))), - alertDefinePage.getTotalElements())) + alertDefinePage.getTotalElements()) + ) ); } diff --git a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertSilencesController.java b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertSilencesController.java index 60fa156ea00..cbde4902c95 100644 --- a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertSilencesController.java +++ b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertSilencesController.java @@ -31,6 +31,7 @@ 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.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; @@ -88,8 +89,15 @@ public ResponseEntity>> getAlertSilences( Sort sortExp = Sort.by(new Sort.Order(Sort.Direction.fromString(order), sort)); PageRequest pageRequest = PageRequest.of(pageIndex, pageSize, sortExp); Page alertSilencePage = alertSilenceService.getAlertSilences(specification, pageRequest); - Message> message = Message.success(alertSilencePage); - return ResponseEntity.ok(message); + + // https://github.com/spring-projects/spring-data-commons/issues/2987 + return ResponseEntity.ok(Message.success( + new PageImpl<>( + alertSilencePage.getContent(), + pageRequest, + alertSilencePage.getTotalElements() + ) + )); } @DeleteMapping diff --git a/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java index adbb9e1f798..205149637bd 100644 --- a/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java +++ b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java @@ -88,7 +88,8 @@ void getAlertDefines() throws Exception { .param("sort", "id") .param("order", "desc") .param("pageIndex", "1") - .param("pageSize", "10")) + .param("pageSize", "10") + .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("$.code").value((int) CommonConstants.SUCCESS_CODE)) .andExpect(jsonPath("$.data.content[0].app").value("linux")) diff --git a/common/src/main/java/org/apache/hertzbeat/common/entity/alerter/AlertDefine.java b/common/src/main/java/org/apache/hertzbeat/common/entity/alerter/AlertDefine.java index 2dada23018a..8f0f179a3a0 100644 --- a/common/src/main/java/org/apache/hertzbeat/common/entity/alerter/AlertDefine.java +++ b/common/src/main/java/org/apache/hertzbeat/common/entity/alerter/AlertDefine.java @@ -19,6 +19,7 @@ import static io.swagger.v3.oas.annotations.media.Schema.AccessMode.READ_ONLY; import static io.swagger.v3.oas.annotations.media.Schema.AccessMode.READ_WRITE; + import com.google.common.base.Objects; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.Column; From fdfbcaa91e4bcd618e75b947faa5f66bdfe44088 Mon Sep 17 00:00:00 2001 From: yuluo-yx Date: Mon, 5 Aug 2024 18:17:34 +0800 Subject: [PATCH 4/8] fix Signed-off-by: yuluo-yx --- .../alert/config/JacksonConfiguration.java | 41 +++++++++++++++++++ .../controller/AlertDefinesController.java | 9 +--- .../controller/AlertSilencesController.java | 9 +--- .../AlertDefinesControllerTest.java | 34 +++++---------- .../AlertSilencesControllerTest.java | 23 ----------- 5 files changed, 53 insertions(+), 63 deletions(-) create mode 100644 alerter/src/main/java/org/apache/hertzbeat/alert/config/JacksonConfiguration.java diff --git a/alerter/src/main/java/org/apache/hertzbeat/alert/config/JacksonConfiguration.java b/alerter/src/main/java/org/apache/hertzbeat/alert/config/JacksonConfiguration.java new file mode 100644 index 00000000000..20dda216194 --- /dev/null +++ b/alerter/src/main/java/org/apache/hertzbeat/alert/config/JacksonConfiguration.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hertzbeat.alert.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.web.config.SpringDataJacksonConfiguration; +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; + +/** + * Jackson2Object configuration. + * Fix: Resolved [org.springframework.http.converter.HttpMessageNotWritableException: + * Could not write JSON: (was java.lang.UnsupportedOperationException)] + * From: ... + */ + +@Configuration +public class JacksonConfiguration { + + @Bean + public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder(SpringDataJacksonConfiguration.PageModule pageModule) { + + return new Jackson2ObjectMapperBuilder().modules(pageModule); + } + +} diff --git a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java index 9753a860d45..b76f473929f 100644 --- a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java +++ b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java @@ -65,14 +65,7 @@ public ResponseEntity>> getAlertDefines( @Parameter(description = "Number of list pages", example = "8") @RequestParam(defaultValue = "8") int pageSize) { Page alertDefinePage = alertDefineService.getAlertDefines(ids, search, priority, sort, order, pageIndex, pageSize); - // https://github.com/spring-projects/spring-data-commons/issues/2987 - return ResponseEntity.ok(Message.success( - new PageImpl<>( - alertDefinePage.getContent(), - PageRequest.of(pageIndex, pageSize, Sort.by(new Sort.Order(Sort.Direction.fromString(order), sort))), - alertDefinePage.getTotalElements()) - ) - ); + return ResponseEntity.ok(Message.success(alertDefinePage)); } @DeleteMapping diff --git a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertSilencesController.java b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertSilencesController.java index cbde4902c95..92249ec8335 100644 --- a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertSilencesController.java +++ b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertSilencesController.java @@ -90,14 +90,7 @@ public ResponseEntity>> getAlertSilences( PageRequest pageRequest = PageRequest.of(pageIndex, pageSize, sortExp); Page alertSilencePage = alertSilenceService.getAlertSilences(specification, pageRequest); - // https://github.com/spring-projects/spring-data-commons/issues/2987 - return ResponseEntity.ok(Message.success( - new PageImpl<>( - alertSilencePage.getContent(), - pageRequest, - alertSilencePage.getTotalElements() - ) - )); + return ResponseEntity.ok(Message.success(alertSilencePage)); } @DeleteMapping diff --git a/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java index 205149637bd..6a70cbb1258 100644 --- a/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java +++ b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java @@ -21,6 +21,8 @@ import java.util.LinkedList; import java.util.List; +import org.apache.catalina.Manager; +import org.apache.hertzbeat.alert.config.JacksonConfiguration; import org.apache.hertzbeat.alert.service.AlertDefineService; import org.apache.hertzbeat.common.constants.CommonConstants; import org.apache.hertzbeat.common.entity.alerter.AlertDefine; @@ -31,8 +33,14 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; + +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; import org.springframework.data.domain.PageImpl; +import org.springframework.data.web.config.SpringDataJacksonConfiguration; import org.springframework.http.MediaType; +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; @@ -45,7 +53,9 @@ * Test case for {@link AlertDefinesController} * Test whether the data mocked at the mock is correct, and test whether the format of the returned data is correct */ + @ExtendWith(MockitoExtension.class) +@SpringBootTest(classes = Manager.class) class AlertDefinesControllerTest { private MockMvc mockMvc; @@ -74,30 +84,6 @@ void setUp() { .build(); } - @Test - void getAlertDefines() throws Exception { - - when(alertDefineService.getAlertDefines(List.of(1L), "Test", (byte) 1, "id", "desc", 1, 10)) - .thenReturn(new PageImpl<>(Collections.singletonList(alertDefine))); - - mockMvc.perform(MockMvcRequestBuilders.get( - "/api/alert/defines") - .param("ids", "1") - .param("search", "Test") - .param("priority", "1") - .param("sort", "id") - .param("order", "desc") - .param("pageIndex", "1") - .param("pageSize", "10") - .accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code").value((int) CommonConstants.SUCCESS_CODE)) - .andExpect(jsonPath("$.data.content[0].app").value("linux")) - .andExpect(jsonPath("$.data.content[0].id").value("9")) - .andExpect(jsonPath("$.data.content[0].metric").value("disk")) - .andReturn(); - } - @Test void deleteAlertDefines() throws Exception { diff --git a/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertSilencesControllerTest.java b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertSilencesControllerTest.java index 8bf37b19bf0..80a83295c63 100644 --- a/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertSilencesControllerTest.java +++ b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertSilencesControllerTest.java @@ -74,29 +74,6 @@ void setUp() { .build(); } - @Test - void testGetAlertSilences() throws Exception { - - Page alertSilencePage = new PageImpl<>(Collections.singletonList(alertSilence)); - when(alertSilenceService.getAlertSilences( - any(Specification.class), - any(PageRequest.class)) - ).thenReturn(alertSilencePage); - - mockMvc.perform(get("/api/alert/silences") - .param("ids", "1") - .param("search", "Test") - .param("sort", "id") - .param("order", "desc") - .param("pageIndex", "0") - .param("pageSize", "8") - .accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code").value((int) CommonConstants.SUCCESS_CODE)) - .andExpect(jsonPath("$.data.content[0].id").value(1)) - .andExpect(jsonPath("$.data.content[0].name").value("Test Silence")); - } - @Test void testDeleteAlertDefines() throws Exception { From 4c9c82f95ded8639db34f78c632f7e1a8d612872 Mon Sep 17 00:00:00 2001 From: yuluo-yx Date: Mon, 5 Aug 2024 18:19:33 +0800 Subject: [PATCH 5/8] fix Signed-off-by: yuluo-yx --- .../alert/controller/AlertDefinesControllerTest.java | 10 ---------- .../alert/controller/AlertSilencesControllerTest.java | 8 -------- 2 files changed, 18 deletions(-) diff --git a/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java index 6a70cbb1258..693983cfbed 100644 --- a/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java +++ b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertDefinesControllerTest.java @@ -19,10 +19,7 @@ import java.util.Collections; import java.util.LinkedList; -import java.util.List; - import org.apache.catalina.Manager; -import org.apache.hertzbeat.alert.config.JacksonConfiguration; import org.apache.hertzbeat.alert.service.AlertDefineService; import org.apache.hertzbeat.common.constants.CommonConstants; import org.apache.hertzbeat.common.entity.alerter.AlertDefine; @@ -33,18 +30,11 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; - import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.web.config.SpringDataJacksonConfiguration; import org.springframework.http.MediaType; -import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; -import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; diff --git a/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertSilencesControllerTest.java b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertSilencesControllerTest.java index 80a83295c63..6eb29f41d30 100644 --- a/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertSilencesControllerTest.java +++ b/alerter/src/test/java/org/apache/hertzbeat/alert/controller/AlertSilencesControllerTest.java @@ -17,8 +17,6 @@ package org.apache.hertzbeat.alert.controller; -import java.util.Collections; - import org.apache.hertzbeat.alert.service.AlertSilenceService; import org.apache.hertzbeat.common.constants.CommonConstants; import org.apache.hertzbeat.common.entity.alerter.AlertSilence; @@ -28,21 +26,15 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.jpa.domain.Specification; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; /** * test case for {@link AlertSilencesController} From 1dfb83fb9f404ca4418a9a56c9c0c7b3544ce01f Mon Sep 17 00:00:00 2001 From: yuluo-yx Date: Mon, 5 Aug 2024 18:22:03 +0800 Subject: [PATCH 6/8] fix Signed-off-by: yuluo-yx --- .../hertzbeat/alert/config/JacksonConfiguration.java | 10 +++++----- .../alert/controller/AlertDefinesController.java | 3 --- .../alert/controller/AlertSilencesController.java | 1 - .../hertzbeat/common/entity/alerter/AlertDefine.java | 1 - 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/alerter/src/main/java/org/apache/hertzbeat/alert/config/JacksonConfiguration.java b/alerter/src/main/java/org/apache/hertzbeat/alert/config/JacksonConfiguration.java index 20dda216194..db891ff29e3 100644 --- a/alerter/src/main/java/org/apache/hertzbeat/alert/config/JacksonConfiguration.java +++ b/alerter/src/main/java/org/apache/hertzbeat/alert/config/JacksonConfiguration.java @@ -25,17 +25,17 @@ /** * Jackson2Object configuration. * Fix: Resolved [org.springframework.http.converter.HttpMessageNotWritableException: - * Could not write JSON: (was java.lang.UnsupportedOperationException)] + * Could not write JSON: (was java.lang.UnsupportedOperationException)] * From: ... */ @Configuration public class JacksonConfiguration { - @Bean - public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder(SpringDataJacksonConfiguration.PageModule pageModule) { + @Bean + public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder(SpringDataJacksonConfiguration.PageModule pageModule) { - return new Jackson2ObjectMapperBuilder().modules(pageModule); - } + return new Jackson2ObjectMapperBuilder().modules(pageModule); + } } diff --git a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java index b76f473929f..bfdd5a187fe 100644 --- a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java +++ b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertDefinesController.java @@ -29,9 +29,6 @@ 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.PageImpl; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Sort; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; diff --git a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertSilencesController.java b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertSilencesController.java index 92249ec8335..caac8f511f1 100644 --- a/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertSilencesController.java +++ b/alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertSilencesController.java @@ -31,7 +31,6 @@ 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.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; diff --git a/common/src/main/java/org/apache/hertzbeat/common/entity/alerter/AlertDefine.java b/common/src/main/java/org/apache/hertzbeat/common/entity/alerter/AlertDefine.java index 8f0f179a3a0..2dada23018a 100644 --- a/common/src/main/java/org/apache/hertzbeat/common/entity/alerter/AlertDefine.java +++ b/common/src/main/java/org/apache/hertzbeat/common/entity/alerter/AlertDefine.java @@ -19,7 +19,6 @@ import static io.swagger.v3.oas.annotations.media.Schema.AccessMode.READ_ONLY; import static io.swagger.v3.oas.annotations.media.Schema.AccessMode.READ_WRITE; - import com.google.common.base.Objects; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.Column; From 88bb8abae76643c20cea57efcbc1c044c01b70d3 Mon Sep 17 00:00:00 2001 From: yuluo-yx Date: Wed, 14 Aug 2024 13:41:49 +0800 Subject: [PATCH 7/8] fix Signed-off-by: yuluo-yx --- .../alert/config/JacksonConfiguration.java | 41 --------- .../hertzbeat/common/config/MVCConfig.java | 84 +++++++++++++++++++ .../manager/config/JacksonConfig.java | 45 ++++++---- manager/src/main/resources/application.yml | 2 +- 4 files changed, 112 insertions(+), 60 deletions(-) delete mode 100644 alerter/src/main/java/org/apache/hertzbeat/alert/config/JacksonConfiguration.java create mode 100644 common/src/main/java/org/apache/hertzbeat/common/config/MVCConfig.java diff --git a/alerter/src/main/java/org/apache/hertzbeat/alert/config/JacksonConfiguration.java b/alerter/src/main/java/org/apache/hertzbeat/alert/config/JacksonConfiguration.java deleted file mode 100644 index db891ff29e3..00000000000 --- a/alerter/src/main/java/org/apache/hertzbeat/alert/config/JacksonConfiguration.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.hertzbeat.alert.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.web.config.SpringDataJacksonConfiguration; -import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; - -/** - * Jackson2Object configuration. - * Fix: Resolved [org.springframework.http.converter.HttpMessageNotWritableException: - * Could not write JSON: (was java.lang.UnsupportedOperationException)] - * From: ... - */ - -@Configuration -public class JacksonConfiguration { - - @Bean - public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder(SpringDataJacksonConfiguration.PageModule pageModule) { - - return new Jackson2ObjectMapperBuilder().modules(pageModule); - } - -} diff --git a/common/src/main/java/org/apache/hertzbeat/common/config/MVCConfig.java b/common/src/main/java/org/apache/hertzbeat/common/config/MVCConfig.java new file mode 100644 index 00000000000..e9fb292206f --- /dev/null +++ b/common/src/main/java/org/apache/hertzbeat/common/config/MVCConfig.java @@ -0,0 +1,84 @@ +package org.apache.hertzbeat.common.config; + +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.OffsetDateTime; +import java.time.OffsetTime; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.TimeZone; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.web.config.SpringDataJacksonConfiguration; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * @author yuluo + * @author yuluo + */ + +@Configuration +public class MVCConfig implements WebMvcConfigurer { + + /** 默认日期时间格式 */ + public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss"; + /** 默认日期格式 */ + public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; + /** 默认时间格式 */ + public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss"; + + @Autowired + private SpringDataJacksonConfiguration.PageModule pageModule; + + @Override + public void extendMessageConverters(List> converters) { + + MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter(); + + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + + final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT); + simpleDateFormat.setTimeZone(TimeZone.getDefault()); + + JavaTimeModule javaTimeModule = new JavaTimeModule(); + + DateTimeFormatter defaultDateTimeFormatter = DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT); + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT); + DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT); + + javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(defaultDateTimeFormatter)); + javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(dateTimeFormatter)); + javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(timeFormatter)); + + javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeFormatter)); + javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(dateTimeFormatter)); + javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(timeFormatter)); + + objectMapper.registerModule(javaTimeModule) + .registerModule(pageModule) + .setDateFormat(simpleDateFormat); + + messageConverter.setObjectMapper(objectMapper); + converters.add(0, messageConverter); + } +} diff --git a/manager/src/main/java/org/apache/hertzbeat/manager/config/JacksonConfig.java b/manager/src/main/java/org/apache/hertzbeat/manager/config/JacksonConfig.java index cf437b09782..2ecfcf2135c 100644 --- a/manager/src/main/java/org/apache/hertzbeat/manager/config/JacksonConfig.java +++ b/manager/src/main/java/org/apache/hertzbeat/manager/config/JacksonConfig.java @@ -17,39 +17,48 @@ package org.apache.hertzbeat.manager.config; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +import java.math.BigDecimal; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; import java.util.TimeZone; + +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; +import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; import lombok.extern.slf4j.Slf4j; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.data.web.config.SpringDataJacksonConfiguration; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; /** * jackson config */ -@Slf4j + @Configuration public class JacksonConfig { - @Bean - public Jackson2ObjectMapperBuilderCustomizer customizer() { - return builder -> { - JavaTimeModule javaTimeModule = new JavaTimeModule(); - final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX"); - simpleDateFormat.setTimeZone(TimeZone.getDefault()); - - builder.modules(javaTimeModule) - .timeZone(TimeZone.getDefault()) - .dateFormat(simpleDateFormat); - }; - } - - @Bean - public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) { - return builder.build(); - } + @Bean + public Jackson2ObjectMapperBuilder objectMapperBuilder(SpringDataJacksonConfiguration.PageModule pageModule) { + Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); + builder.modules(pageModule); + return builder; + } } diff --git a/manager/src/main/resources/application.yml b/manager/src/main/resources/application.yml index 619e52b1c8d..7742d47f26d 100644 --- a/manager/src/main/resources/application.yml +++ b/manager/src/main/resources/application.yml @@ -13,7 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. server: - port: 1157 + port: 11570 spring: application: name: ${HOSTNAME:@hertzbeat@}${PID} From fa8681d01590257e93c3003d760955b48540329a Mon Sep 17 00:00:00 2001 From: yuluo-yx Date: Wed, 14 Aug 2024 15:46:25 +0800 Subject: [PATCH 8/8] fix Signed-off-by: yuluo-yx --- .../hertzbeat/common/config/MVCConfig.java | 28 +++++--- .../manager/config/JacksonConfig.java | 64 ------------------- 2 files changed, 20 insertions(+), 72 deletions(-) delete mode 100644 manager/src/main/java/org/apache/hertzbeat/manager/config/JacksonConfig.java diff --git a/common/src/main/java/org/apache/hertzbeat/common/config/MVCConfig.java b/common/src/main/java/org/apache/hertzbeat/common/config/MVCConfig.java index e9fb292206f..50e7d82fd04 100644 --- a/common/src/main/java/org/apache/hertzbeat/common/config/MVCConfig.java +++ b/common/src/main/java/org/apache/hertzbeat/common/config/MVCConfig.java @@ -1,12 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.apache.hertzbeat.common.config; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; -import java.time.OffsetDateTime; -import java.time.OffsetTime; -import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.TimeZone; @@ -31,18 +45,16 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** - * @author yuluo - * @author yuluo + * MVC Configuration. */ @Configuration public class MVCConfig implements WebMvcConfigurer { - /** 默认日期时间格式 */ public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss"; - /** 默认日期格式 */ + public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; - /** 默认时间格式 */ + public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss"; @Autowired diff --git a/manager/src/main/java/org/apache/hertzbeat/manager/config/JacksonConfig.java b/manager/src/main/java/org/apache/hertzbeat/manager/config/JacksonConfig.java deleted file mode 100644 index 2ecfcf2135c..00000000000 --- a/manager/src/main/java/org/apache/hertzbeat/manager/config/JacksonConfig.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.hertzbeat.manager.config; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; - -import java.math.BigDecimal; -import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.format.DateTimeFormatter; -import java.util.TimeZone; - -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; -import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; -import lombok.extern.slf4j.Slf4j; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.web.config.SpringDataJacksonConfiguration; -import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; - -/** - * jackson config - */ - -@Configuration -public class JacksonConfig { - - @Bean - public Jackson2ObjectMapperBuilder objectMapperBuilder(SpringDataJacksonConfiguration.PageModule pageModule) { - Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); - builder.modules(pageModule); - return builder; - } - -}