diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UploadService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UploadService.java index ad7089ad9..a6f83104f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UploadService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UploadService.java @@ -27,6 +27,7 @@ import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity; import com.knecon.fforesight.tenantcommons.TenantContext; +import io.micrometer.observation.ObservationRegistry; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -41,6 +42,7 @@ public class UploadService { private final AuditPersistenceService auditPersistenceService; private final FileAttributesManagementService fileAttributesManagementService; private final StorageService storageService; + private final ObservationRegistry observationRegistry; @PreAuthorize("hasAuthority('" + WRITE_FILE_ATTRIBUTES + "')") @@ -67,6 +69,8 @@ public class UploadService { dossierManagementService.getDossierById(dossierId, false, false); var fileId = generateFileId(fileName, dossierId); + addFileIdToTrace(fileId); + var storageId = StorageIdUtils.getStorageId(dossierId, fileId, FileType.UNTOUCHED); try { @@ -88,7 +92,6 @@ public class UploadService { .build()); return FileUploadResult.builder().fileIds(Collections.singletonList(fileId)).build(); - } @@ -97,4 +100,11 @@ public class UploadService { return hashFunction.hashBytes((fileName + dossierId).getBytes(StandardCharsets.UTF_8)).toString(); } + private void addFileIdToTrace(String fileId){ + if(observationRegistry.getCurrentObservation() != null){ + observationRegistry.getCurrentObservation().highCardinalityKeyValue("fileId", fileId); + } + } + + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AutomaticAnalysisJob.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AutomaticAnalysisJob.java index 3abb8fef3..80a04dd77 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AutomaticAnalysisJob.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AutomaticAnalysisJob.java @@ -17,8 +17,9 @@ import com.iqser.red.service.persistence.management.v1.processor.utils.TenantUti import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileModel; import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantProvider; -import com.knecon.fforesight.tenantcommons.model.UpdateDetailsRequest; +import io.micrometer.observation.Observation; +import io.micrometer.observation.ObservationRegistry; import lombok.RequiredArgsConstructor; import lombok.Setter; import lombok.extern.slf4j.Slf4j; @@ -32,6 +33,7 @@ public class AutomaticAnalysisJob implements Job { private final FileManagementServiceSettings fileManagementServiceSettings; private final FileStatusService fileStatusService; private final TenantProvider tenantProvider; + private final ObservationRegistry observationRegistry; @Setter private boolean schedulingStopped; @@ -79,13 +81,7 @@ public class AutomaticAnalysisJob implements Job { var next = allStatusesIterator.next(); // in case the file doesn't have numberOfPages set, we assume an average. - if (next.isFullAnalysisRequired()) { - log.info("[Tenant:{}] Queued file: {} for automatic full analysis! ", TenantContext.getTenantId(), next.getFilename()); - fileStatusService.setStatusFullReprocess(next.getDossierId(), next.getId(), false, false); - } else if (next.isReanalysisRequired()) { - log.info("[Tenant:{}] Queued file: {} for automatic reanalysis! ", TenantContext.getTenantId(), next.getFilename()); - fileStatusService.setStatusReprocess(next.getDossierId(), next.getId(), false); - } + reanalyseFile(next); queuedFiles++; } @@ -99,17 +95,41 @@ public class AutomaticAnalysisJob implements Job { } + private void reanalyseFile(FileModel file) { + + Observation.createNotStarted("AutomaticAnalysisJob", observationRegistry) + .contextualName("scheduled-analysis") + .highCardinalityKeyValue("dossierTemplateId", file.getDossierTemplateId()) + .highCardinalityKeyValue("dossierId", file.getDossierId()) + .highCardinalityKeyValue("fileId", file.getId()) + .lowCardinalityKeyValue("tenantId", TenantContext.getTenantId()) + .observe(() -> { + + if (file.isFullAnalysisRequired()) { + log.info("[Tenant:{}] Queued file: {} for automatic full analysis! ", TenantContext.getTenantId(), file.getFilename()); + fileStatusService.setStatusFullReprocess(file.getDossierId(), file.getId(), false, false); + } else if (file.isReanalysisRequired()) { + log.info("[Tenant:{}] Queued file: {} for automatic reanalysis! ", TenantContext.getTenantId(), file.getFilename()); + fileStatusService.setStatusReprocess(file.getDossierId(), file.getId(), false); + } + }); + } + + private List getAllRelevantStatuses() { return fileStatusService.getAllRelevantStatusesForReanalysisScheduler(); } - public void stopForTenant(String tenantId){ + public void stopForTenant(String tenantId) { + stoppedTenants.add(tenantId); } - public void startForTenant(String tenantId){ + + public void startForTenant(String tenantId) { + stoppedTenants.remove(tenantId); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java index accf2aff2..9060d42ba 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java @@ -132,13 +132,7 @@ public class Application implements ApplicationContextAware { @Override public KeyValues getLowCardinalityKeyValues(ServerRequestObservationContext context) { // Make sure that KeyValues entries are already sorted by name for better performance - return super.getLowCardinalityKeyValues(context) - .and(getValueFromPathVariableOrRequestParam(context, "dossierId"), - getValueFromPathVariableOrRequestParam(context, "dossierTemplateId"), - getValueFromPathVariableOrRequestParam(context, "fileId"), - KeyValue.of("kubernetes.namespace", namespace), - KeyValue.of("service.version", version), - tenantId(context)); + return super.getLowCardinalityKeyValues(context).and(KeyValue.of("kubernetes.namespace", namespace), KeyValue.of("service.version", version), tenantId(context)); } @@ -148,10 +142,7 @@ public class Application implements ApplicationContextAware { return super.getHighCardinalityKeyValues(context) .and(getValueFromPathVariableOrRequestParam(context, "dossierId"), getValueFromPathVariableOrRequestParam(context, "dossierTemplateId"), - getValueFromPathVariableOrRequestParam(context, "fileId"), - KeyValue.of("kubernetes.namespace", namespace), - KeyValue.of("service.version", version), - tenantId(context)); + getValueFromPathVariableOrRequestParam(context, "fileId")); }