Skip to content

Commit

Permalink
ADM-873:[frontend][backend] fix: fix success notification (#1327)
Browse files Browse the repository at this point in the history
* ADM-873-bug:[docx] docx: fix docx

* ADM-873:[frontend]fix: fix error notification

* ADM-873:[frontend]refactor: refactor code

* ADM-873-bug:[backend] feat: return flag for whether it has file create by this invoke

* Revert "ADM-873:[frontend]refactor: refactor code"

This reverts commit e2fe52f.

* Revert "ADM-873:[frontend]fix: fix error notification"

This reverts commit b659c63.

* ADM-873:[frontend]fix: use hasCsvFileCreateSuccessful to handle success notification

* ADM-873-bug:[backend] feat: return has csv create successful when get completed

* ADM-873-bug:[backend] fix: rename

* ADM-873:[frontend]fix: fix test

* ADM-873:[frontend]refactor: rename hasCsvFileCreateSuccessful to isSuccessfulCreateCsvFile

* ADM-873:[backend]refactor: modify test info

* ADM-873:[backend]refactor: format code

---------

Co-authored-by: yulongcai <[email protected]>
Co-authored-by: Rui7ing <[email protected]>
  • Loading branch information
3 people authored and PengxiWPix committed Apr 11, 2024
1 parent 3bba768 commit 5fe4ce9
Show file tree
Hide file tree
Showing 13 changed files with 81 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ public class MetricsDataCompleted {

private Boolean overallMetricCompleted;

private Boolean isSuccessfulCreateCsvFile;

public Boolean boardMetricsCompleted() {
return boardMetricsCompleted;
}
Expand All @@ -33,6 +35,10 @@ public Boolean overallMetricCompleted() {
return overallMetricCompleted;
}

public Boolean isSuccessfulCreateCsvFile() {
return isSuccessfulCreateCsvFile;
}

public Boolean allMetricsCompleted() {
return Optional.ofNullable(boardMetricsCompleted).orElse(true)
&& Optional.ofNullable(doraMetricsCompleted).orElse(true) && overallMetricCompleted;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ public class ReportResponse {

private Boolean allMetricsCompleted;

private Boolean isSuccessfulCreateCsvFile;

public ReportResponse(Long exportValidityTime) {
this.exportValidityTime = exportValidityTime;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,16 @@ public void deleteExpireMetricsDataCompletedFile(long currentTimeStamp, File dir
}

@Synchronized
public void updateMetricsDataCompletedInHandler(String metricDataFileId, MetricType metricType) {
public void updateMetricsDataCompletedInHandler(String metricDataFileId, MetricType metricType,
boolean isCreateCsvSuccess) {
MetricsDataCompleted previousMetricsCompleted = getMetricsDataCompleted(metricDataFileId);
if (previousMetricsCompleted == null) {
log.error(GENERATE_REPORT_ERROR);
throw new GenerateReportException(GENERATE_REPORT_ERROR);
}
if (isCreateCsvSuccess) {
previousMetricsCompleted.setIsSuccessfulCreateCsvFile(true);
}
switch (metricType) {
case BOARD -> previousMetricsCompleted.setBoardMetricsCompleted(true);
case DORA -> previousMetricsCompleted.setDoraMetricsCompleted(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ public void generateBoardReport(GenerateReportRequest request) {
asyncExceptionHandler.put(boardReportId, e);
if (List.of(401, 403, 404).contains(e.getStatus()))
asyncMetricsDataHandler.updateMetricsDataCompletedInHandler(
IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp()), BOARD);
IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp()), BOARD, false);

}
}
Expand Down Expand Up @@ -145,7 +145,7 @@ private void generatePipelineReport(GenerateReportRequest request, FetchedData f
asyncExceptionHandler.put(pipelineReportId, e);
if (List.of(401, 403, 404).contains(e.getStatus()))
asyncMetricsDataHandler.updateMetricsDataCompletedInHandler(
IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp()), DORA);
IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp()), DORA, false);
}
}

Expand All @@ -167,7 +167,7 @@ private void generateSourceControlReport(GenerateReportRequest request, FetchedD
asyncExceptionHandler.put(sourceControlReportId, e);
if (List.of(401, 403, 404).contains(e.getStatus()))
asyncMetricsDataHandler.updateMetricsDataCompletedInHandler(
IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp()), DORA);
IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp()), DORA, false);
}
}

Expand Down Expand Up @@ -226,7 +226,7 @@ private void generateCsvForBoard(GenerateReportRequest request, FetchedData fetc
kanbanCsvService.generateCsvInfo(request, fetchedData.getCardCollectionInfo().getRealDoneCardCollection(),
fetchedData.getCardCollectionInfo().getNonDoneCardCollection());
asyncMetricsDataHandler
.updateMetricsDataCompletedInHandler(IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp()), BOARD);
.updateMetricsDataCompletedInHandler(IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp()), BOARD, true);
}

private void assembleVelocity(FetchedData fetchedData, ReportResponse reportResponse) {
Expand Down Expand Up @@ -303,7 +303,7 @@ private void generateCSVForPipeline(GenerateReportRequest request, BuildKiteData

csvFileGenerator.convertPipelineDataToCSV(pipelineData, request.getCsvTimeStamp());
asyncMetricsDataHandler
.updateMetricsDataCompletedInHandler(IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp()), DORA);
.updateMetricsDataCompletedInHandler(IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp()), DORA, true);
}

public void generateCSVForMetric(ReportResponse reportContent, String csvTimeStamp) {
Expand Down Expand Up @@ -395,6 +395,7 @@ public ReportResponse getComposedReportResponse(String reportId) {
.doraMetricsCompleted(reportReadyStatus.doraMetricsCompleted())
.overallMetricsCompleted(reportReadyStatus.overallMetricCompleted())
.allMetricsCompleted(reportReadyStatus.allMetricsCompleted())
.isSuccessfulCreateCsvFile(reportReadyStatus.isSuccessfulCreateCsvFile())
.reportMetricsError(reportMetricsError)
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ private void initializeMetricsDataCompletedInHandler(List<MetricType> metricType
.boardMetricsCompleted(metricTypes.contains(BOARD) ? Boolean.FALSE : initializeBoardMetricsCompleted)
.doraMetricsCompleted(metricTypes.contains(DORA) ? Boolean.FALSE : initializeDoraMetricsCompleted)
.overallMetricCompleted(Boolean.FALSE)
.isSuccessfulCreateCsvFile(Boolean.FALSE)
.build());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,8 @@ void shouldThrowGenerateReportExceptionWhenPreviousMetricsStatusIsNull() {
String currentTime = Long.toString(currentTimeMillis);

GenerateReportException exception = assertThrows(GenerateReportException.class,
() -> asyncMetricsDataHandler.updateMetricsDataCompletedInHandler(currentTime, MetricType.BOARD));
() -> asyncMetricsDataHandler.updateMetricsDataCompletedInHandler(currentTime, MetricType.BOARD,
false));

assertEquals("Failed to update metrics data completed through this timestamp.", exception.getMessage());
}
Expand All @@ -156,7 +157,7 @@ void shouldUpdateBoardMetricDataWhenPreviousMetricsStatusIsNotNullAndMetricTypeI
.build();
asyncMetricsDataHandler.putMetricsDataCompleted(currentTime, metricsDataCompleted);

asyncMetricsDataHandler.updateMetricsDataCompletedInHandler(currentTime, MetricType.BOARD);
asyncMetricsDataHandler.updateMetricsDataCompletedInHandler(currentTime, MetricType.BOARD, true);

MetricsDataCompleted completed = asyncMetricsDataHandler.getMetricsDataCompleted(currentTime);
assertTrue(completed.boardMetricsCompleted());
Expand All @@ -173,14 +174,33 @@ void shouldUpdateDoraMetricDataWhenPreviousMetricsStatusIsNotNullAndMetricTypeIs
.build();
asyncMetricsDataHandler.putMetricsDataCompleted(currentTime, metricsDataCompleted);

asyncMetricsDataHandler.updateMetricsDataCompletedInHandler(currentTime, MetricType.DORA);
asyncMetricsDataHandler.updateMetricsDataCompletedInHandler(currentTime, MetricType.DORA, true);

MetricsDataCompleted completed = asyncMetricsDataHandler.getMetricsDataCompleted(currentTime);
assertTrue(completed.doraMetricsCompleted());
Files.deleteIfExists(Path.of(APP_OUTPUT_METRICS + "/" + currentTime));
assertNull(asyncMetricsDataHandler.getMetricsDataCompleted(currentTime));
}

@Test
void shouldUpdateDoraMetricDataWhenMetricIsDoraAndCreateCsvFileUnsuccessfully() throws IOException {
long currentTimeMillis = System.currentTimeMillis();
String currentTime = Long.toString(currentTimeMillis);
MetricsDataCompleted metricsDataCompleted = MetricsDataCompleted.builder()
.doraMetricsCompleted(false)
.isSuccessfulCreateCsvFile(false)
.build();
asyncMetricsDataHandler.putMetricsDataCompleted(currentTime, metricsDataCompleted);

asyncMetricsDataHandler.updateMetricsDataCompletedInHandler(currentTime, MetricType.DORA, false);

MetricsDataCompleted completed = asyncMetricsDataHandler.getMetricsDataCompleted(currentTime);
assertTrue(completed.doraMetricsCompleted());
assertFalse(completed.isSuccessfulCreateCsvFile());
Files.deleteIfExists(Path.of(APP_OUTPUT_METRICS + "/" + currentTime));
assertNull(asyncMetricsDataHandler.getMetricsDataCompleted(currentTime));
}

}

@Nested
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
Expand Down Expand Up @@ -173,7 +174,7 @@ void shouldSaveReportResponseWithReworkInfoWhenReworkInfoTimesIsNotEmpty() {
.thenReturn(MetricsDataCompleted.builder().build());
doAnswer(invocation -> null).when(asyncMetricsDataHandler)
.updateMetricsDataCompletedInHandler(IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp()),
MetricType.BOARD);
MetricType.BOARD, true);
when(kanbanService.fetchDataFromKanban(request)).thenReturn(FetchedData.CardCollectionInfo.builder()
.realDoneCardCollection(CardCollection.builder().build())
.build());
Expand Down Expand Up @@ -215,7 +216,7 @@ void shouldSaveReportResponseWithReworkInfoWhenReworkSettingIsNullAndMetricsHasR
when(asyncMetricsDataHandler.getMetricsDataCompleted(any()))
.thenReturn(MetricsDataCompleted.builder().build());
doAnswer(invocation -> null).when(asyncMetricsDataHandler)
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.BOARD);
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.BOARD, true);
when(kanbanService.fetchDataFromKanban(request)).thenReturn(FetchedData.CardCollectionInfo.builder()
.realDoneCardCollection(CardCollection.builder().build())
.build());
Expand Down Expand Up @@ -243,7 +244,7 @@ void shouldSaveReportResponseWithoutMetricDataAndUpdateMetricCompletedWhenMetric
.thenReturn(MetricsDataCompleted.builder().build());
doAnswer(invocation -> null).when(asyncMetricsDataHandler)
.updateMetricsDataCompletedInHandler(IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp()),
MetricType.BOARD);
MetricType.BOARD, true);
generateReporterService.generateBoardReport(request);

verify(kanbanService, never()).fetchDataFromKanban(eq(request));
Expand All @@ -270,7 +271,7 @@ void shouldThrowErrorWhenJiraBoardSettingIsNull() {
.thenReturn(MetricsDataCompleted.builder().build());
doAnswer(invocation -> null).when(asyncMetricsDataHandler)
.updateMetricsDataCompletedInHandler(IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp()),
MetricType.BOARD);
MetricType.BOARD, true);

generateReporterService.generateBoardReport(request);

Expand All @@ -296,7 +297,7 @@ void shouldSaveReportResponseWithVelocityAndUpdateMetricCompletedWhenVelocityMet
.thenReturn(MetricsDataCompleted.builder().build());
doAnswer(invocation -> null).when(asyncMetricsDataHandler)
.updateMetricsDataCompletedInHandler(IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp()),
MetricType.BOARD);
MetricType.BOARD, true);
when(velocityCalculator.calculateVelocity(any()))
.thenReturn(Velocity.builder().velocityForSP(10).velocityForCards(20).build());
when(kanbanService.fetchDataFromKanban(request)).thenReturn(FetchedData.CardCollectionInfo.builder()
Expand Down Expand Up @@ -329,7 +330,7 @@ void shouldSaveReportResponseWithCycleTimeAndUpdateMetricCompletedWhenCycleTimeM
when(asyncMetricsDataHandler.getMetricsDataCompleted(any()))
.thenReturn(MetricsDataCompleted.builder().boardMetricsCompleted(true).build());
doAnswer(invocation -> null).when(asyncMetricsDataHandler)
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.BOARD);
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.BOARD, true);
when(cycleTimeCalculator.calculateCycleTime(any(), any())).thenReturn(CycleTime.builder()
.averageCycleTimePerSP(10)
.totalTimeForCards(15)
Expand Down Expand Up @@ -366,7 +367,7 @@ void shouldSaveReportResponseWithClassificationAndUpdateMetricCompletedWhenClass
.thenReturn(MetricsDataCompleted.builder().build());
doAnswer(invocation -> null).when(asyncMetricsDataHandler)
.updateMetricsDataCompletedInHandler(IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp()),
MetricType.BOARD);
MetricType.BOARD, true);
List<Classification> classifications = List.of(Classification.builder().build());
when(classificationCalculator.calculate(any(), any())).thenReturn(classifications);
when(kanbanService.fetchDataFromKanban(request)).thenReturn(FetchedData.CardCollectionInfo.builder()
Expand Down Expand Up @@ -399,7 +400,7 @@ void shouldUpdateMetricCompletedWhenExceptionStart4() {
.thenReturn(MetricsDataCompleted.builder().build());
doAnswer(invocation -> null).when(asyncMetricsDataHandler)
.updateMetricsDataCompletedInHandler(IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp()),
MetricType.BOARD);
MetricType.BOARD, true);

generateReporterService.generateBoardReport(request);

Expand Down Expand Up @@ -430,7 +431,7 @@ void shouldAsyncToGenerateCsvAndGenerateReportWhenFetchRight() {
.thenReturn(Rework.builder().totalReworkCards(2).build());
doAnswer(invocation -> null).when(asyncMetricsDataHandler)
.updateMetricsDataCompletedInHandler(IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp()),
MetricType.BOARD);
MetricType.BOARD, true);

generateReporterService.generateBoardReport(request);
verify(asyncReportRequestHandler).putReport(any(), responseArgumentCaptor.capture());
Expand All @@ -456,7 +457,7 @@ void shouldGenerateCsvFile() {
when(asyncMetricsDataHandler.getMetricsDataCompleted(any()))
.thenReturn(MetricsDataCompleted.builder().doraMetricsCompleted(false).build());
doAnswer(invocation -> null).when(asyncMetricsDataHandler)
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.DORA);
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.DORA, true);
List<PipelineCSVInfo> pipelineCSVInfos = List.of();
when(pipelineService.generateCSVForPipelineWithCodebase(any(), any(), any(), any(), any()))
.thenReturn(pipelineCSVInfos);
Expand All @@ -483,7 +484,7 @@ void shouldThrowErrorWhenCodeSettingIsNullButSourceControlMetricsIsNotEmpty() {
when(asyncMetricsDataHandler.getMetricsDataCompleted(any()))
.thenReturn(MetricsDataCompleted.builder().doraMetricsCompleted(true).build());
doAnswer(invocation -> null).when(asyncMetricsDataHandler)
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.DORA);
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.DORA, true);
List<PipelineCSVInfo> pipelineCSVInfos = List.of();
when(pipelineService.generateCSVForPipelineWithCodebase(any(), any(), any(), any(), any()))
.thenReturn(pipelineCSVInfos);
Expand Down Expand Up @@ -512,7 +513,7 @@ void shouldThrowErrorWhenBuildKiteSettingIsNullButPipelineMetricsIsNotEmpty() {
when(asyncMetricsDataHandler.getMetricsDataCompleted(any()))
.thenReturn(MetricsDataCompleted.builder().doraMetricsCompleted(true).build());
doAnswer(invocation -> null).when(asyncMetricsDataHandler)
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.DORA);
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.DORA, true);
List<PipelineCSVInfo> pipelineCSVInfos = List.of();
when(pipelineService.generateCSVForPipelineWithCodebase(any(), any(), any(), any(), any()))
.thenReturn(pipelineCSVInfos);
Expand Down Expand Up @@ -545,7 +546,7 @@ void shouldGenerateCsvWithPipelineReportWhenPipeLineMetricIsNotEmpty() {
when(asyncMetricsDataHandler.getMetricsDataCompleted(any()))
.thenReturn(MetricsDataCompleted.builder().doraMetricsCompleted(false).build());
doAnswer(invocation -> null).when(asyncMetricsDataHandler)
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.DORA);
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.DORA, true);
List<PipelineCSVInfo> pipelineCSVInfos = List.of();
when(pipelineService.generateCSVForPipelineWithCodebase(any(), any(), any(), any(), any()))
.thenReturn(pipelineCSVInfos);
Expand Down Expand Up @@ -591,7 +592,7 @@ void shouldUpdateMetricCompletedWhenGenerateCsvWithPipelineReportFailed() {
when(asyncMetricsDataHandler.getMetricsDataCompleted(any()))
.thenReturn(MetricsDataCompleted.builder().doraMetricsCompleted(true).build());
doAnswer(invocation -> null).when(asyncMetricsDataHandler)
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.DORA);
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.DORA, false);
List<PipelineCSVInfo> pipelineCSVInfos = List.of();
when(pipelineService.generateCSVForPipelineWithCodebase(any(), any(), any(), any(), any()))
.thenReturn(pipelineCSVInfos);
Expand All @@ -603,8 +604,7 @@ void shouldUpdateMetricCompletedWhenGenerateCsvWithPipelineReportFailed() {

verify(asyncExceptionHandler).put(eq(request.getPipelineReportId()), any());

verify(asyncMetricsDataHandler, times(1)).updateMetricsDataCompletedInHandler(
eq(IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp())), any());
verify(asyncMetricsDataHandler, times(1)).updateMetricsDataCompletedInHandler(any(), any(), anyBoolean());
}

@Test
Expand All @@ -621,7 +621,7 @@ void shouldGenerateCsvWithSourceControlReportWhenSourceControlMetricIsNotEmpty()
when(asyncMetricsDataHandler.getMetricsDataCompleted(any()))
.thenReturn(MetricsDataCompleted.builder().doraMetricsCompleted(false).build());
doAnswer(invocation -> null).when(asyncMetricsDataHandler)
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.DORA);
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.DORA, true);
List<PipelineCSVInfo> pipelineCSVInfos = List.of();
when(pipelineService.generateCSVForPipelineWithCodebase(any(), any(), any(), any(), any()))
.thenReturn(pipelineCSVInfos);
Expand Down Expand Up @@ -660,7 +660,7 @@ void shouldGenerateCsvWithCachedDataWhenBuildKiteDataAlreadyExisted() {
when(asyncMetricsDataHandler.getMetricsDataCompleted(any()))
.thenReturn(MetricsDataCompleted.builder().doraMetricsCompleted(false).build());
doAnswer(invocation -> null).when(asyncMetricsDataHandler)
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.DORA);
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.DORA, true);
List<PipelineCSVInfo> pipelineCSVInfos = List.of();
when(pipelineService.generateCSVForPipelineWithCodebase(any(), any(), any(), any(), any()))
.thenReturn(pipelineCSVInfos);
Expand Down Expand Up @@ -699,7 +699,7 @@ void shouldUpdateMetricCompletedWhenGenerateCsvWithSourceControlReportFailed() {
when(asyncMetricsDataHandler.getMetricsDataCompleted(any()))
.thenReturn(MetricsDataCompleted.builder().doraMetricsCompleted(true).build());
doAnswer(invocation -> null).when(asyncMetricsDataHandler)
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.DORA);
.updateMetricsDataCompletedInHandler(TIMESTAMP, MetricType.DORA, true);
List<PipelineCSVInfo> pipelineCSVInfos = List.of();
when(pipelineService.generateCSVForPipelineWithCodebase(any(), any(), any(), any(), any()))
.thenReturn(pipelineCSVInfos);
Expand All @@ -710,8 +710,7 @@ void shouldUpdateMetricCompletedWhenGenerateCsvWithSourceControlReportFailed() {
generateReporterService.generateDoraReport(request);

verify(asyncExceptionHandler).put(eq(request.getSourceControlReportId()), any());
verify(asyncMetricsDataHandler, times(1)).updateMetricsDataCompletedInHandler(
eq(IdUtil.getDataCompletedPrefix(request.getCsvTimeStamp())), any());
verify(asyncMetricsDataHandler, times(1)).updateMetricsDataCompletedInHandler(any(), any(), anyBoolean());
}

}
Expand Down
Loading

0 comments on commit 5fe4ce9

Please sign in to comment.