From ce9c2a48610c9351928c98ef18fb2f15354d210b Mon Sep 17 00:00:00 2001 From: "junbo.dai" Date: Thu, 18 Jan 2024 15:34:49 +0800 Subject: [PATCH] ADM-733[backend]refactor: divide AsyncMetricsDataHandler from AsyncReportRequestHandler --- .../handler/AsyncExceptionHandler.java | 3 +- .../handler/AsyncMetricsDataHandler.java | 63 +++++++++++++++++++ .../handler/AsyncReportRequestHandler.java | 50 +-------------- .../handler/base/AsyncDataBaseHandler.java | 1 - .../handler/{ => base}/AsyncExceptionDTO.java | 2 +- .../handler/{ => base}/FIleType.java | 2 +- .../report/GenerateReporterService.java | 15 +++-- .../scheduler/DeleteExpireCSVScheduler.java | 5 +- .../AsyncReportRequestHandlerTest.java | 27 ++++---- .../report/DeleteExpireCSVSchedulerTest.java | 4 ++ .../report/GenerateReporterServiceTest.java | 34 +++++----- 11 files changed, 119 insertions(+), 87 deletions(-) create mode 100644 backend/src/main/java/heartbeat/handler/AsyncMetricsDataHandler.java rename backend/src/main/java/heartbeat/handler/{ => base}/AsyncExceptionDTO.java (85%) rename backend/src/main/java/heartbeat/handler/{ => base}/FIleType.java (90%) diff --git a/backend/src/main/java/heartbeat/handler/AsyncExceptionHandler.java b/backend/src/main/java/heartbeat/handler/AsyncExceptionHandler.java index 1d1168abdb..bdcde546cc 100644 --- a/backend/src/main/java/heartbeat/handler/AsyncExceptionHandler.java +++ b/backend/src/main/java/heartbeat/handler/AsyncExceptionHandler.java @@ -3,11 +3,12 @@ import com.google.gson.Gson; import heartbeat.exception.BaseException; import heartbeat.handler.base.AsyncDataBaseHandler; +import heartbeat.handler.base.AsyncExceptionDTO; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Component; -import static heartbeat.handler.FIleType.ERROR; +import static heartbeat.handler.base.FIleType.ERROR; @Log4j2 @Component diff --git a/backend/src/main/java/heartbeat/handler/AsyncMetricsDataHandler.java b/backend/src/main/java/heartbeat/handler/AsyncMetricsDataHandler.java new file mode 100644 index 0000000000..eca719a6b4 --- /dev/null +++ b/backend/src/main/java/heartbeat/handler/AsyncMetricsDataHandler.java @@ -0,0 +1,63 @@ +package heartbeat.handler; + +import com.google.gson.Gson; +import heartbeat.controller.report.dto.response.MetricsDataCompleted; +import heartbeat.exception.GenerateReportException; +import heartbeat.handler.base.AsyncDataBaseHandler; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static heartbeat.handler.base.FIleType.METRICS_DATA_COMPLETED; +import static heartbeat.service.report.scheduler.DeleteExpireCSVScheduler.EXPORT_CSV_VALIDITY_TIME; + +@Log4j2 +@Component +@RequiredArgsConstructor +public class AsyncMetricsDataHandler extends AsyncDataBaseHandler { + + private final Map metricsDataCompletedMap = new ConcurrentHashMap<>(); + + public void putMetricsDataCompleted(String timeStamp, MetricsDataCompleted metricsDataCompleted) { + createDirToConvertData(METRICS_DATA_COMPLETED); + creatFileByType(METRICS_DATA_COMPLETED, timeStamp, new Gson().toJson(metricsDataCompleted)); + metricsDataCompletedMap.put(timeStamp, metricsDataCompleted); + } + + public MetricsDataCompleted getMetricsDataCompleted(String timeStamp) { + return metricsDataCompletedMap.get(timeStamp); + } + + public boolean isReportReady(String timeStamp) { + MetricsDataCompleted metricsDataCompleted = getMetricsDataCompleted(timeStamp); + if (metricsDataCompleted == null) { + throw new GenerateReportException("Failed to locate the report using this report ID."); + } + + List metricsReady = Stream + .of(metricsDataCompleted.boardMetricsCompleted(), metricsDataCompleted.pipelineMetricsCompleted(), + metricsDataCompleted.sourceControlMetricsCompleted()) + .filter(Objects::nonNull) + .toList(); + + return metricsReady.stream().allMatch(Boolean::valueOf); + } + + public void deleteExpireMetricsDataCompleted(long currentTimeStamp) { + long exportTime = currentTimeStamp - EXPORT_CSV_VALIDITY_TIME; + Set keys = metricsDataCompletedMap.keySet() + .stream() + .filter(timeStamp -> Long.parseLong(timeStamp) < exportTime) + .collect(Collectors.toSet()); + metricsDataCompletedMap.keySet().removeAll(keys); + } + +} diff --git a/backend/src/main/java/heartbeat/handler/AsyncReportRequestHandler.java b/backend/src/main/java/heartbeat/handler/AsyncReportRequestHandler.java index d105b8994e..8ac9f1bf49 100644 --- a/backend/src/main/java/heartbeat/handler/AsyncReportRequestHandler.java +++ b/backend/src/main/java/heartbeat/handler/AsyncReportRequestHandler.java @@ -1,33 +1,19 @@ package heartbeat.handler; import com.google.gson.Gson; -import heartbeat.controller.report.dto.response.MetricsDataCompleted; import heartbeat.controller.report.dto.response.ReportResponse; -import heartbeat.exception.GenerateReportException; import heartbeat.handler.base.AsyncDataBaseHandler; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Component; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static heartbeat.handler.FIleType.METRICS_DATA_COMPLETED; -import static heartbeat.handler.FIleType.REPORT; -import static heartbeat.service.report.scheduler.DeleteExpireCSVScheduler.EXPORT_CSV_VALIDITY_TIME; +import static heartbeat.handler.base.FIleType.REPORT; @Log4j2 @Component @RequiredArgsConstructor public class AsyncReportRequestHandler extends AsyncDataBaseHandler { - private final Map metricsDataCompletedMap = new ConcurrentHashMap<>(); - public void putReport(String reportId, ReportResponse e) { createDirToConvertData(REPORT); creatFileByType(REPORT, reportId, new Gson().toJson(e)); @@ -37,42 +23,8 @@ public ReportResponse getReport(String reportId) { return readFileByType(REPORT, reportId, ReportResponse.class); } - public void putMetricsDataCompleted(String timeStamp, MetricsDataCompleted metricsDataCompleted) { - createDirToConvertData(METRICS_DATA_COMPLETED); - creatFileByType(METRICS_DATA_COMPLETED, timeStamp, new Gson().toJson(metricsDataCompleted)); - metricsDataCompletedMap.put(timeStamp, metricsDataCompleted); - } - - public MetricsDataCompleted getMetricsDataCompleted(String timeStamp) { - return metricsDataCompletedMap.get(timeStamp); - } - - public boolean isReportReady(String timeStamp) { - MetricsDataCompleted metricsDataCompleted = getMetricsDataCompleted(timeStamp); - if (metricsDataCompleted == null) { - throw new GenerateReportException("Failed to locate the report using this report ID."); - } - - List metricsReady = Stream - .of(metricsDataCompleted.boardMetricsCompleted(), metricsDataCompleted.pipelineMetricsCompleted(), - metricsDataCompleted.sourceControlMetricsCompleted()) - .filter(Objects::nonNull) - .toList(); - - return metricsReady.stream().allMatch(Boolean::valueOf); - } - public void deleteExpireReport(long currentTimeStamp) { deleteExpireFileByType(REPORT, currentTimeStamp); } - public void deleteExpireMetricsDataCompleted(long currentTimeStamp) { - long exportTime = currentTimeStamp - EXPORT_CSV_VALIDITY_TIME; - Set keys = metricsDataCompletedMap.keySet() - .stream() - .filter(timeStamp -> Long.parseLong(timeStamp) < exportTime) - .collect(Collectors.toSet()); - metricsDataCompletedMap.keySet().removeAll(keys); - } - } diff --git a/backend/src/main/java/heartbeat/handler/base/AsyncDataBaseHandler.java b/backend/src/main/java/heartbeat/handler/base/AsyncDataBaseHandler.java index 57505eebb1..4e9dd99be7 100644 --- a/backend/src/main/java/heartbeat/handler/base/AsyncDataBaseHandler.java +++ b/backend/src/main/java/heartbeat/handler/base/AsyncDataBaseHandler.java @@ -4,7 +4,6 @@ import com.google.gson.stream.JsonReader; import heartbeat.exception.FileIOException; import heartbeat.exception.GenerateReportException; -import heartbeat.handler.FIleType; import lombok.extern.log4j.Log4j2; import org.springframework.util.ObjectUtils; diff --git a/backend/src/main/java/heartbeat/handler/AsyncExceptionDTO.java b/backend/src/main/java/heartbeat/handler/base/AsyncExceptionDTO.java similarity index 85% rename from backend/src/main/java/heartbeat/handler/AsyncExceptionDTO.java rename to backend/src/main/java/heartbeat/handler/base/AsyncExceptionDTO.java index f06aca67b0..c4df65ed94 100644 --- a/backend/src/main/java/heartbeat/handler/AsyncExceptionDTO.java +++ b/backend/src/main/java/heartbeat/handler/base/AsyncExceptionDTO.java @@ -1,4 +1,4 @@ -package heartbeat.handler; +package heartbeat.handler.base; import heartbeat.exception.BaseException; diff --git a/backend/src/main/java/heartbeat/handler/FIleType.java b/backend/src/main/java/heartbeat/handler/base/FIleType.java similarity index 90% rename from backend/src/main/java/heartbeat/handler/FIleType.java rename to backend/src/main/java/heartbeat/handler/base/FIleType.java index c7de8238a2..5f25375d60 100644 --- a/backend/src/main/java/heartbeat/handler/FIleType.java +++ b/backend/src/main/java/heartbeat/handler/base/FIleType.java @@ -1,4 +1,4 @@ -package heartbeat.handler; +package heartbeat.handler.base; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/backend/src/main/java/heartbeat/service/report/GenerateReporterService.java b/backend/src/main/java/heartbeat/service/report/GenerateReporterService.java index 9405a70a17..c803f48ff4 100644 --- a/backend/src/main/java/heartbeat/service/report/GenerateReporterService.java +++ b/backend/src/main/java/heartbeat/service/report/GenerateReporterService.java @@ -41,6 +41,7 @@ import heartbeat.exception.RequestFailedException; import heartbeat.exception.ServiceUnavailableException; import heartbeat.handler.AsyncExceptionHandler; +import heartbeat.handler.AsyncMetricsDataHandler; import heartbeat.handler.AsyncReportRequestHandler; import heartbeat.service.board.jira.JiraColumnResult; import heartbeat.service.board.jira.JiraService; @@ -122,6 +123,8 @@ public class GenerateReporterService { private final AsyncReportRequestHandler asyncReportRequestHandler; + private final AsyncMetricsDataHandler asyncMetricsDataHandler; + private final AsyncExceptionHandler asyncExceptionHandler; private static StoryPointsAndCycleTimeRequest buildStoryPointsAndCycleTimeRequest(JiraBoardSetting jiraBoardSetting, @@ -655,11 +658,11 @@ public void saveReporterInHandler(ReportResponse reportContent, String reportId) public void initializeMetricsDataCompletedInHandler(String timeStamp, List metrics) { MetricsDataCompleted metricsStatus = getMetricsStatus(metrics, Boolean.FALSE); - MetricsDataCompleted previousMetricsCompleted = asyncReportRequestHandler.getMetricsDataCompleted(timeStamp); + MetricsDataCompleted previousMetricsCompleted = asyncMetricsDataHandler.getMetricsDataCompleted(timeStamp); MetricsDataCompleted isMetricsDataCompleted = createMetricsDataCompleted(metricsStatus.boardMetricsCompleted(), metricsStatus.sourceControlMetricsCompleted(), metricsStatus.pipelineMetricsCompleted(), previousMetricsCompleted); - asyncReportRequestHandler.putMetricsDataCompleted(timeStamp, isMetricsDataCompleted); + asyncMetricsDataHandler.putMetricsDataCompleted(timeStamp, isMetricsDataCompleted); } private MetricsDataCompleted createMetricsDataCompleted(Boolean boardMetricsCompleted, @@ -690,7 +693,7 @@ private Boolean getCompletedValue(Boolean previousCompletedValue, Boolean newCom public void updateMetricsDataCompletedInHandler(String timeStamp, List metrics) { MetricsDataCompleted metricsStatus = getMetricsStatus(metrics, Boolean.TRUE); - MetricsDataCompleted previousMetricsCompleted = asyncReportRequestHandler.getMetricsDataCompleted(timeStamp); + MetricsDataCompleted previousMetricsCompleted = asyncMetricsDataHandler.getMetricsDataCompleted(timeStamp); if (previousMetricsCompleted == null) { log.error("Failed to update metrics data completed through this timestamp."); throw new GenerateReportException("Failed to update metrics data completed through this timestamp."); @@ -704,7 +707,7 @@ public void updateMetricsDataCompletedInHandler(String timeStamp, List m checkCurrentMetricsCompletedState(metricsStatus.sourceControlMetricsCompleted(), previousMetricsCompleted.sourceControlMetricsCompleted())) .build(); - asyncReportRequestHandler.putMetricsDataCompleted(timeStamp, metricsDataCompleted); + asyncMetricsDataHandler.putMetricsDataCompleted(timeStamp, metricsDataCompleted); } private Boolean checkCurrentMetricsCompletedState(Boolean exist, Boolean previousValue) { @@ -804,7 +807,7 @@ public boolean checkGenerateReportIsDone(String reportTimeStamp) { if (validateExpire(System.currentTimeMillis(), Long.parseLong(reportTimeStamp))) { throw new GenerateReportException("Failed to get report due to report time expires"); } - return asyncReportRequestHandler.isReportReady(reportTimeStamp); + return asyncMetricsDataHandler.isReportReady(reportTimeStamp); } private ErrorInfo handleAsyncExceptionAndGetErrorInfo(BaseException exception) { @@ -863,7 +866,7 @@ public ReportResponse getComposedReportResponse(String reportId, boolean isRepor ReportResponse boardReportResponse = getReportFromHandler(IdUtil.getBoardReportId(reportId)); ReportResponse doraReportResponse = getReportFromHandler(IdUtil.getPipelineReportId(reportId)); ReportResponse codebaseReportResponse = getReportFromHandler(IdUtil.getSourceControlReportId(reportId)); - MetricsDataCompleted metricsDataCompleted = asyncReportRequestHandler.getMetricsDataCompleted(reportId); + MetricsDataCompleted metricsDataCompleted = asyncMetricsDataHandler.getMetricsDataCompleted(reportId); ReportResponse response = Optional.ofNullable(boardReportResponse).orElse(doraReportResponse); ReportMetricsError reportMetricsError = getReportErrorAndHandleAsyncException(reportId); diff --git a/backend/src/main/java/heartbeat/service/report/scheduler/DeleteExpireCSVScheduler.java b/backend/src/main/java/heartbeat/service/report/scheduler/DeleteExpireCSVScheduler.java index 9fc64c3f51..34cfb14322 100644 --- a/backend/src/main/java/heartbeat/service/report/scheduler/DeleteExpireCSVScheduler.java +++ b/backend/src/main/java/heartbeat/service/report/scheduler/DeleteExpireCSVScheduler.java @@ -1,5 +1,6 @@ package heartbeat.service.report.scheduler; +import heartbeat.handler.AsyncMetricsDataHandler; import heartbeat.handler.AsyncReportRequestHandler; import heartbeat.service.report.GenerateReporterService; import heartbeat.handler.AsyncExceptionHandler; @@ -26,13 +27,15 @@ public class DeleteExpireCSVScheduler { private final AsyncExceptionHandler asyncExceptionHandler; + private final AsyncMetricsDataHandler asyncMetricsDataHandler; + @Scheduled(fixedRate = DELETE_INTERVAL_IN_MINUTES, timeUnit = TimeUnit.MINUTES) public void triggerBatchDelete() { long currentTimeStamp = System.currentTimeMillis(); log.info("Start to delete expired CSV files, currentTimeStamp: {}", currentTimeStamp); generateReporterService.deleteExpireCSV(currentTimeStamp, new File("./csv/")); asyncReportRequestHandler.deleteExpireReport(currentTimeStamp); - asyncReportRequestHandler.deleteExpireMetricsDataCompleted(currentTimeStamp); + asyncMetricsDataHandler.deleteExpireMetricsDataCompleted(currentTimeStamp); asyncExceptionHandler.deleteExpireException(currentTimeStamp); } diff --git a/backend/src/test/java/heartbeat/handler/AsyncReportRequestHandlerTest.java b/backend/src/test/java/heartbeat/handler/AsyncReportRequestHandlerTest.java index 2fd1b430c0..497ac87a2f 100644 --- a/backend/src/test/java/heartbeat/handler/AsyncReportRequestHandlerTest.java +++ b/backend/src/test/java/heartbeat/handler/AsyncReportRequestHandlerTest.java @@ -30,6 +30,9 @@ class AsyncReportRequestHandlerTest { @InjectMocks AsyncReportRequestHandler asyncReportRequestHandler; + @InjectMocks + AsyncMetricsDataHandler asyncMetricsDataHandler; + @AfterEach void afterEach() { new File(APP_OUTPUT_REPORT).delete(); @@ -72,13 +75,13 @@ void shouldDeleteMetricsDataReadyWhenExpireIsExpire() { String currentTime = Long.toString(currentTimeMillis); String expireTime = Long.toString(currentTimeMillis - 1900000L); MetricsDataCompleted metricsDataCompleted = MetricsDataCompleted.builder().boardMetricsCompleted(false).build(); - asyncReportRequestHandler.putMetricsDataCompleted(currentTime, metricsDataCompleted); - asyncReportRequestHandler.putMetricsDataCompleted(expireTime, metricsDataCompleted); + asyncMetricsDataHandler.putMetricsDataCompleted(currentTime, metricsDataCompleted); + asyncMetricsDataHandler.putMetricsDataCompleted(expireTime, metricsDataCompleted); - asyncReportRequestHandler.deleteExpireMetricsDataCompleted(currentTimeMillis); + asyncMetricsDataHandler.deleteExpireMetricsDataCompleted(currentTimeMillis); - assertNull(asyncReportRequestHandler.getMetricsDataCompleted(expireTime)); - assertNotNull(asyncReportRequestHandler.getMetricsDataCompleted(currentTime)); + assertNull(asyncMetricsDataHandler.getMetricsDataCompleted(expireTime)); + assertNotNull(asyncMetricsDataHandler.getMetricsDataCompleted(currentTime)); } @Test @@ -86,9 +89,9 @@ void shouldGetAsyncMetricsDataReadyWhenPuttingMetricsReadyIntoAsyncReportRequest long currentTimeMillis = System.currentTimeMillis(); String currentTime = Long.toString(currentTimeMillis); MetricsDataCompleted metricsDataCompleted = MetricsDataCompleted.builder().boardMetricsCompleted(false).build(); - asyncReportRequestHandler.putMetricsDataCompleted(currentTime, metricsDataCompleted); + asyncMetricsDataHandler.putMetricsDataCompleted(currentTime, metricsDataCompleted); - assertNotNull(asyncReportRequestHandler.getMetricsDataCompleted(currentTime)); + assertNotNull(asyncMetricsDataHandler.getMetricsDataCompleted(currentTime)); } @Test @@ -97,7 +100,7 @@ void shouldThrowGenerateReportExceptionWhenPreviousMetricsDataReadyIsNull() { String currentTime = Long.toString(currentTimeMillis); Exception exception = assertThrows(GenerateReportException.class, - () -> asyncReportRequestHandler.isReportReady(currentTime)); + () -> asyncMetricsDataHandler.isReportReady(currentTime)); assertEquals("Failed to locate the report using this report ID.", exception.getMessage()); } @@ -110,9 +113,9 @@ void shouldReturnFalseWhenExistFalseValue() { .sourceControlMetricsCompleted(false) .pipelineMetricsCompleted(null) .build(); - asyncReportRequestHandler.putMetricsDataCompleted(currentTime, metricsDataCompleted); + asyncMetricsDataHandler.putMetricsDataCompleted(currentTime, metricsDataCompleted); - boolean reportReady = asyncReportRequestHandler.isReportReady(currentTime); + boolean reportReady = asyncMetricsDataHandler.isReportReady(currentTime); assertFalse(reportReady); } @@ -126,9 +129,9 @@ void shouldReturnTrueWhenNotExistFalseValue() { .sourceControlMetricsCompleted(null) .pipelineMetricsCompleted(true) .build(); - asyncReportRequestHandler.putMetricsDataCompleted(currentTime, metricsDataCompleted); + asyncMetricsDataHandler.putMetricsDataCompleted(currentTime, metricsDataCompleted); - boolean reportReady = asyncReportRequestHandler.isReportReady(currentTime); + boolean reportReady = asyncMetricsDataHandler.isReportReady(currentTime); assertTrue(reportReady); } diff --git a/backend/src/test/java/heartbeat/service/report/DeleteExpireCSVSchedulerTest.java b/backend/src/test/java/heartbeat/service/report/DeleteExpireCSVSchedulerTest.java index 0ee61a9d2c..8ab96fdc40 100644 --- a/backend/src/test/java/heartbeat/service/report/DeleteExpireCSVSchedulerTest.java +++ b/backend/src/test/java/heartbeat/service/report/DeleteExpireCSVSchedulerTest.java @@ -1,6 +1,7 @@ package heartbeat.service.report; import heartbeat.handler.AsyncExceptionHandler; +import heartbeat.handler.AsyncMetricsDataHandler; import heartbeat.handler.AsyncReportRequestHandler; import heartbeat.service.report.scheduler.DeleteExpireCSVScheduler; import org.junit.jupiter.api.Test; @@ -30,6 +31,9 @@ class DeleteExpireCSVSchedulerTest { @Mock private AsyncReportRequestHandler asyncReportRequestHandler; + @Mock + private AsyncMetricsDataHandler asyncMetricsDataHandler; + @Mock private AsyncExceptionHandler asyncExceptionHandler; diff --git a/backend/src/test/java/heartbeat/service/report/GenerateReporterServiceTest.java b/backend/src/test/java/heartbeat/service/report/GenerateReporterServiceTest.java index 91ec906009..8982795ed8 100644 --- a/backend/src/test/java/heartbeat/service/report/GenerateReporterServiceTest.java +++ b/backend/src/test/java/heartbeat/service/report/GenerateReporterServiceTest.java @@ -45,6 +45,7 @@ import heartbeat.exception.ServiceUnavailableException; import heartbeat.exception.RequestFailedException; import heartbeat.handler.AsyncExceptionHandler; +import heartbeat.handler.AsyncMetricsDataHandler; import heartbeat.handler.AsyncReportRequestHandler; import heartbeat.service.board.jira.JiraColumnResult; import heartbeat.service.board.jira.JiraService; @@ -186,6 +187,9 @@ class GenerateReporterServiceTest { @Mock private AsyncExceptionHandler asyncExceptionHandler; + @Mock + private AsyncMetricsDataHandler asyncMetricsDataHandler; + @Captor private ArgumentCaptor metricsCaptor; @@ -909,7 +913,7 @@ void shouldReturnTrueWhenReportIsReady() { // given String fileTimeStamp = Long.toString(System.currentTimeMillis()); // when - when(asyncReportRequestHandler.isReportReady(fileTimeStamp)).thenReturn(true); + when(asyncMetricsDataHandler.isReportReady(fileTimeStamp)).thenReturn(true); boolean generateReportIsOver = generateReporterService.checkGenerateReportIsDone(fileTimeStamp); // then assertTrue(generateReportIsOver); @@ -1104,11 +1108,11 @@ void shouldInitializeValueFalseGivenPreviousMapperIsNullWhenInitializeRelatedMet .sourceControlMetricsCompleted(null) .build(); - when(asyncReportRequestHandler.getMetricsDataCompleted(timeStamp)).thenReturn(null); + when(asyncMetricsDataHandler.getMetricsDataCompleted(timeStamp)).thenReturn(null); generateReporterService.initializeMetricsDataCompletedInHandler(timeStamp, metrics); - verify(asyncReportRequestHandler).putMetricsDataCompleted(timeStamp, expectedPut); + verify(asyncMetricsDataHandler).putMetricsDataCompleted(timeStamp, expectedPut); } @Test @@ -1127,11 +1131,11 @@ void shouldInitializeValueFalseGivenPreviousValueExistWhenInitializeRelatedMetri .sourceControlMetricsCompleted(null) .build(); - when(asyncReportRequestHandler.getMetricsDataCompleted(timeStamp)).thenReturn(previousMetricsDataCompleted); + when(asyncMetricsDataHandler.getMetricsDataCompleted(timeStamp)).thenReturn(previousMetricsDataCompleted); generateReporterService.initializeMetricsDataCompletedInHandler(timeStamp, metrics); - verify(asyncReportRequestHandler).putMetricsDataCompleted(timeStamp, expectedPut); + verify(asyncMetricsDataHandler).putMetricsDataCompleted(timeStamp, expectedPut); } @ParameterizedTest @@ -1149,11 +1153,11 @@ void shouldUpdateAndSetMetricsReadyNonnullTrueWhenMetricsExistAndPreviousMetrics .csvTimeStamp(TIMESTAMP) .build(); - when(asyncReportRequestHandler.getMetricsDataCompleted(request.getCsvTimeStamp())).thenReturn(previousReady); + when(asyncMetricsDataHandler.getMetricsDataCompleted(request.getCsvTimeStamp())).thenReturn(previousReady); generateReporterService.updateMetricsDataCompletedInHandler(request.getCsvTimeStamp(), request.getMetrics()); - verify(asyncReportRequestHandler, times(1)).putMetricsDataCompleted(request.getCsvTimeStamp(), expectedReady); + verify(asyncMetricsDataHandler, times(1)).putMetricsDataCompleted(request.getCsvTimeStamp(), expectedReady); } @Test @@ -1170,7 +1174,7 @@ void shouldNotUpdateMetricsAndThrowExceptionWhenPreviousMetricsDataReadyNull() { .csvTimeStamp(TIMESTAMP) .build(); - when(asyncReportRequestHandler.getMetricsDataCompleted(anyString())).thenReturn(null); + when(asyncMetricsDataHandler.getMetricsDataCompleted(anyString())).thenReturn(null); assertThrows(GenerateReportException.class, () -> generateReporterService .updateMetricsDataCompletedInHandler(request.getCsvTimeStamp(), request.getMetrics())); @@ -1205,7 +1209,7 @@ void shouldReturnComposedReportResponseWhenBothBoardResponseAndDoraResponseReady when(generateReporterService.getReportFromHandler(boardTimeStamp)).thenReturn(boardResponse); when(generateReporterService.getReportFromHandler(pipelineTimestamp)).thenReturn(pipelineResponse); - when(asyncReportRequestHandler.getMetricsDataCompleted(timeStamp)) + when(asyncMetricsDataHandler.getMetricsDataCompleted(timeStamp)) .thenReturn(new MetricsDataCompleted(Boolean.TRUE, Boolean.TRUE, null)); ReportResponse composedResponse = generateReporterService.getComposedReportResponse(timeStamp, true); @@ -1233,7 +1237,7 @@ void shouldReturnBoardReportResponseWhenDoraResponseIsNullAndGenerateReportIsOve when(generateReporterService.getReportFromHandler(boardTimeStamp)).thenReturn(boardResponse); when(generateReporterService.getReportFromHandler(doraTimestamp)).thenReturn(null); - when(asyncReportRequestHandler.getMetricsDataCompleted(timeStamp)) + when(asyncMetricsDataHandler.getMetricsDataCompleted(timeStamp)) .thenReturn(new MetricsDataCompleted(Boolean.TRUE, Boolean.TRUE, null)); ReportResponse composedResponse = generateReporterService.getComposedReportResponse(timeStamp, true); @@ -1286,7 +1290,7 @@ void shouldPutBoardReportIntoHandlerWhenCallGenerateBoardReport() throws IOExcep GenerateReporterService spyGenerateReporterService = spy(generateReporterService); doReturn(reportResponse).when(spyGenerateReporterService).generateReporter(reportRequest); - when(asyncReportRequestHandler.getMetricsDataCompleted(reportRequest.getCsvTimeStamp())) + when(asyncMetricsDataHandler.getMetricsDataCompleted(reportRequest.getCsvTimeStamp())) .thenReturn(previousMetricsReady); spyGenerateReporterService.generateBoardReport(reportRequest); @@ -1312,7 +1316,7 @@ void shouldPutExceptionInHandlerWhenCallGenerateBoardReportThrowException() thro UnauthorizedException e = new UnauthorizedException("Error message"); doThrow(e).when(spyGenerateReporterService).generateReporter(any()); - when(asyncReportRequestHandler.getMetricsDataCompleted(reportRequest.getCsvTimeStamp())) + when(asyncMetricsDataHandler.getMetricsDataCompleted(reportRequest.getCsvTimeStamp())) .thenReturn(MetricsDataCompleted.builder().build()); spyGenerateReporterService.generateBoardReport(reportRequest); @@ -1336,7 +1340,7 @@ void shouldPutExceptionInHandlerWhenCallGeneratePipelineReportThrowException() t PermissionDenyException e = new PermissionDenyException("Error message"); doThrow(e).when(spyGenerateReporterService).generateReporter(any()); - when(asyncReportRequestHandler.getMetricsDataCompleted(reportRequest.getCsvTimeStamp())) + when(asyncMetricsDataHandler.getMetricsDataCompleted(reportRequest.getCsvTimeStamp())) .thenReturn(MetricsDataCompleted.builder().build()); spyGenerateReporterService.generateDoraReport(reportRequest); @@ -1365,7 +1369,7 @@ void shouldGeneratePipelineReportAndUpdatePipelineMetricsReadyWhenCallGeneratePi .build(); doReturn(reportResponse).when(spyGenerateReporterService).generateReporter(reportRequest); - when(asyncReportRequestHandler.getMetricsDataCompleted(reportRequest.getCsvTimeStamp())) + when(asyncMetricsDataHandler.getMetricsDataCompleted(reportRequest.getCsvTimeStamp())) .thenReturn(previousMetricsReady); spyGenerateReporterService.generateDoraReport(reportRequest); @@ -1396,7 +1400,7 @@ void shouldGenerateCodebaseReportAndUpdateCodebaseMetricsReadyWhenCallGenerateSo .build(); doReturn(reportResponse).when(spyGenerateReporterService).generateReporter(reportRequest); - when(asyncReportRequestHandler.getMetricsDataCompleted(reportRequest.getCsvTimeStamp())) + when(asyncMetricsDataHandler.getMetricsDataCompleted(reportRequest.getCsvTimeStamp())) .thenReturn(previousMetricsReady); spyGenerateReporterService.generateDoraReport(reportRequest);