Pull request #239: dossier stats optimization
Merge in RED/persistence-service from dossier-stats-optimization to master * commit 'effde5b16a439fdb5ba70ff9b88eda8c99abaf8d': checkstyle fix dossier stats optimization
This commit is contained in:
commit
b3b2456184
@ -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.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.DossierStats;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus;
|
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException.DOSSIER_NOT_FOUND_MESSAGE;
|
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 DossierService dossierService;
|
||||||
private final FileStatusService fileStatusService;
|
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) {
|
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();
|
DossierStats dossierStats = new DossierStats();
|
||||||
// get the dossier
|
|
||||||
DossierEntity dossierEntity = dossierService.getDossierById(dossierId);
|
|
||||||
if (dossierEntity.getStatus().equals(DossierStatus.DELETED)) {
|
if (dossierEntity.getStatus().equals(DossierStatus.DELETED)) {
|
||||||
throw new DossierNotFoundException(String.format(DOSSIER_NOT_FOUND_MESSAGE, dossierId));
|
throw new DossierNotFoundException(String.format(DOSSIER_NOT_FOUND_MESSAGE, dossierId));
|
||||||
}
|
}
|
||||||
@ -54,8 +75,8 @@ public class DossierStatsService {
|
|||||||
.filter(f -> !f.isHasSuggestions())
|
.filter(f -> !f.isHasSuggestions())
|
||||||
.filter(f -> !f.isHasUpdates())
|
.filter(f -> !f.isHasUpdates())
|
||||||
.findAny().ifPresent(
|
.findAny().ifPresent(
|
||||||
(v) -> dossierStats.setHasNoFlagsFilePresent(true)
|
(v) -> dossierStats.setHasNoFlagsFilePresent(true)
|
||||||
);
|
);
|
||||||
var fileCountPerProcessingStatus = files.stream().collect(Collectors.toMap(FileEntity::getProcessingStatus, e -> 1, Math::addExact));
|
var fileCountPerProcessingStatus = files.stream().collect(Collectors.toMap(FileEntity::getProcessingStatus, e -> 1, Math::addExact));
|
||||||
dossierStats.setFileCountPerProcessingStatus(fileCountPerProcessingStatus);
|
dossierStats.setFileCountPerProcessingStatus(fileCountPerProcessingStatus);
|
||||||
|
|
||||||
|
|||||||
@ -32,8 +32,6 @@ public class MetricsPrinterService {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
System.out.println("Metrics: "+metrics);
|
|
||||||
|
|
||||||
double count = 0;
|
double count = 0;
|
||||||
double total = 0;
|
double total = 0;
|
||||||
var counterResults = new ArrayList<Result>();
|
var counterResults = new ArrayList<Result>();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user