dossier stats optimization

This commit is contained in:
Timo Bejan 2022-02-15 14:53:18 +02:00
parent 44347564c7
commit 9c097475ff
2 changed files with 26 additions and 7 deletions

View File

@ -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<String, DossierStats> dossierStatsMap = new HashMap<>();
@Scheduled(fixedDelay = 10000, initialDelay = 1000)
public void computeDossierStats() {
log.info("Computing Dossier Stats ... ");
long start = System.currentTimeMillis();
Map<String, DossierStats> 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);

View File

@ -32,8 +32,6 @@ public class MetricsPrinterService {
}
});
System.out.println("Metrics: "+metrics);
double count = 0;
double total = 0;
var counterResults = new ArrayList<Result>();