diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java index c59d22c3e..f01d8b0fc 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/scheduler/AutomaticAnalysisScheduler.java @@ -10,6 +10,7 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.do import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.AmqpAdmin; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @@ -24,6 +25,8 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ma public class AutomaticAnalysisScheduler { + @Value("${persistence-service.automaticAnalysis.pageFactor:500}") + private int pageFactor; private final FileStatusService fileStatusService; private final ReanalysisRequiredStatusService reanalysisRequiredStatusService; private final AmqpAdmin amqpAdmin; @@ -39,17 +42,20 @@ public class AutomaticAnalysisScheduler { redactionQueueInfo.getMessageCount(), redactionQueueInfo.getConsumerCount()); // only 1 file in queue - if (redactionQueueInfo.getMessageCount() <= 1) { + var consumerCount = redactionQueueInfo.getConsumerCount(); + if (redactionQueueInfo.getMessageCount() <= consumerCount) { // queue up 5 files - var allStatuses= getAllStatuses(); + var allStatuses = getAllStatuses(); var allStatusesIterator = allStatuses.iterator(); - int queuedCount = 0; log.info("Files that require reanalysis: {}", allStatuses.size()); - while (queuedCount < 5 && allStatusesIterator.hasNext()) { + var worstCaseScenarioQueuedPages = 0; + + while (worstCaseScenarioQueuedPages < pageFactor * consumerCount && allStatusesIterator.hasNext()) { var next = allStatusesIterator.next(); if (next.isAnalysisRequired()) { - queuedCount += 1; + // in case the file doesn't have numberOfPages set, we assume an average. + worstCaseScenarioQueuedPages += next.getNumberOfPages() <= 0 ? pageFactor : next.getNumberOfPages(); log.info("Queued file: {} for automatic analysis!", next.getFilename()); fileStatusService.setStatusReprocess(next.getDossierId(), next.getId(), 1); }