From 9c097475ffccdb0663dc4372e21f0bad406944a5 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Tue, 15 Feb 2022 14:53:18 +0200 Subject: [PATCH] dossier stats optimization --- .../server/service/DossierStatsService.java | 31 ++++++++++++++++--- .../server/utils/MetricsPrinterService.java | 2 -- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierStatsService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierStatsService.java index c52960469..7c4ad59cb 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierStatsService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierStatsService.java @@ -5,12 +5,14 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier. import com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStats; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus; - import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import static com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException.DOSSIER_NOT_FOUND_MESSAGE; @@ -23,10 +25,29 @@ public class DossierStatsService { private final DossierService dossierService; private final FileStatusService fileStatusService; + private Map dossierStatsMap = new HashMap<>(); + + + @Scheduled(fixedDelay = 10000, initialDelay = 1000) + public void computeDossierStats() { + log.info("Computing Dossier Stats ... "); + long start = System.currentTimeMillis(); + Map dossierStatsComputeMap = new HashMap<>(); + dossierService.getAllDossiers().forEach(d -> dossierStatsComputeMap.put(d.getId(), computeDossierStats(d))); + dossierStatsMap.clear(); + dossierStatsMap = dossierStatsComputeMap; + log.info("Dossier Stats Computed in {}ms", (System.currentTimeMillis() - start)); + } + public DossierStats getDossierStats(String dossierId) { + return dossierStatsMap.getOrDefault(dossierId, computeDossierStats(dossierService.getDossierById(dossierId))); + } + + private DossierStats computeDossierStats(DossierEntity dossierEntity) { + var dossierId = dossierEntity.getId(); + DossierStats dossierStats = new DossierStats(); - // get the dossier - DossierEntity dossierEntity = dossierService.getDossierById(dossierId); + if (dossierEntity.getStatus().equals(DossierStatus.DELETED)) { throw new DossierNotFoundException(String.format(DOSSIER_NOT_FOUND_MESSAGE, dossierId)); } @@ -54,8 +75,8 @@ public class DossierStatsService { .filter(f -> !f.isHasSuggestions()) .filter(f -> !f.isHasUpdates()) .findAny().ifPresent( - (v) -> dossierStats.setHasNoFlagsFilePresent(true) - ); + (v) -> dossierStats.setHasNoFlagsFilePresent(true) + ); var fileCountPerProcessingStatus = files.stream().collect(Collectors.toMap(FileEntity::getProcessingStatus, e -> 1, Math::addExact)); dossierStats.setFileCountPerProcessingStatus(fileCountPerProcessingStatus); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/MetricsPrinterService.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/MetricsPrinterService.java index c722b4221..ae2c759aa 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/MetricsPrinterService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/MetricsPrinterService.java @@ -32,8 +32,6 @@ public class MetricsPrinterService { } }); - System.out.println("Metrics: "+metrics); - double count = 0; double total = 0; var counterResults = new ArrayList();