From 03571697bfd62767a82527213f501ff0f4e63fa3 Mon Sep 17 00:00:00 2001 From: maverickstuder Date: Thu, 4 Jul 2024 13:26:57 +0200 Subject: [PATCH] RED-9123: Improve performance of re-analysis (Spike) * refactoring and more tracing --- .../service/AnalysisFinalizationService.java | 134 +++++++++++++++ .../service/AnalysisPreparationService.java | 20 ++- .../v1/server/service/AnalyzeService.java | 160 +++--------------- .../service/EntityLogCreatorService.java | 10 ++ .../NotFoundImportedEntitiesService.java | 12 +- 5 files changed, 193 insertions(+), 143 deletions(-) create mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalysisFinalizationService.java diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalysisFinalizationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalysisFinalizationService.java new file mode 100644 index 00000000..af0f2e8c --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalysisFinalizationService.java @@ -0,0 +1,134 @@ +package com.iqser.red.service.redaction.v1.server.service; + +import java.util.List; +import java.util.Set; + +import org.springframework.stereotype.Service; + +import com.iqser.gin4.commons.metrics.meters.FunctionTimerValues; +import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeResult; +import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.componentlog.ComponentLog; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLogChanges; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; +import com.iqser.red.service.redaction.v1.server.RedactionServiceSettings; +import com.iqser.red.service.redaction.v1.server.logger.Context; +import com.iqser.red.service.redaction.v1.server.model.KieWrapper; +import com.iqser.red.service.redaction.v1.server.model.component.Component; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.service.components.ComponentLogCreatorService; +import com.iqser.red.service.redaction.v1.server.service.drools.ComponentDroolsExecutionService; +import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; + +import io.micrometer.core.annotation.Timed; +import io.micrometer.observation.annotation.Observed; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import lombok.experimental.FieldDefaults; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +@RequiredArgsConstructor +@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) +public class AnalysisFinalizationService { + + RedactionStorageService redactionStorageService; + FunctionTimerValues redactmanagerAnalyzePagewiseValues; + ComponentLogCreatorService componentLogCreatorService; + RedactionServiceSettings redactionServiceSettings; + ComponentDroolsExecutionService componentDroolsExecutionService; + + + @Timed("redactmanager_finalizeAnalysis") + @Observed(name = "AnalysisFinalizationService", contextualName = "finalize-analysis") + public AnalyzeResult finalizeAnalysis(AnalyzeRequest analyzeRequest, + long startTime, + KieWrapper kieWrapperComponentRules, + EntityLogChanges entityLogChanges, + Document document, + int numberOfPages, + boolean isReanalysis, + Set addedFileAttributes, + Context context) { + + EntityLog entityLog = entityLogChanges.getEntityLog(); + + // as workaround for duplicate key exceptions occurring due to simultaneous analyses and reanalyses save instead of insert is used + // also analysis numbers should be incremented in every follow-up request, so checking if the log exists is not needed + if (!redactionStorageService.entityLogExists(analyzeRequest.getDossierId(), analyzeRequest.getFileId())) { + redactionStorageService.saveEntityLog(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), entityLog); + + } else { + redactionStorageService.updateEntityLogWithoutEntries(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), entityLog); + + if (!entityLogChanges.getNewEntityLogEntries().isEmpty()) { + redactionStorageService.saveEntityLogEntries(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), entityLogChanges.getNewEntityLogEntries()); + } + if (!entityLogChanges.getUpdatedEntityLogEntries().isEmpty()) { + redactionStorageService.updateEntityLogEntries(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), entityLogChanges.getUpdatedEntityLogEntries()); + } + } + + log.info("Created entity log for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); + + computeComponentsWhenRulesArePresent(analyzeRequest, kieWrapperComponentRules, document, addedFileAttributes, entityLog, context); + + long duration = System.currentTimeMillis() - startTime; + + redactmanagerAnalyzePagewiseValues.increase(numberOfPages, duration); + + return AnalyzeResult.builder() + .dossierId(analyzeRequest.getDossierId()) + .fileId(analyzeRequest.getFileId()) + .duration(duration) + .numberOfPages(numberOfPages) + .hasUpdates(entityLogChanges.hasChanges()) + .analysisVersion(redactionServiceSettings.getAnalysisVersion()) + .analysisNumber(analyzeRequest.getAnalysisNumber()) + .rulesVersion(entityLog.getRulesVersion()) + .componentRulesVersion(kieWrapperComponentRules.rulesVersion()) + .dictionaryVersion(entityLog.getDictionaryVersion()) + .legalBasisVersion(entityLog.getLegalBasisVersion()) + .dossierDictionaryVersion(entityLog.getDossierDictionaryVersion()) + .wasReanalyzed(isReanalysis) + .manualRedactions(analyzeRequest.getManualRedactions()) + .addedFileAttributes(addedFileAttributes) + .usedComponentMappings(analyzeRequest.getComponentMappings()) + .build(); + } + + + private void computeComponentsWhenRulesArePresent(AnalyzeRequest analyzeRequest, + KieWrapper kieWrapperComponentRules, + Document document, + Set addedFileAttributes, + EntityLog entityLog, + Context context) { + + if (!kieWrapperComponentRules.isPresent()) { + return; + } + + // We need the latest EntityLog entries for components rules execution + entityLog.setEntityLogEntry(redactionStorageService.getEntityLog(analyzeRequest.getDossierId(), analyzeRequest.getFileId()).getEntityLogEntry()); + + List components = componentDroolsExecutionService.executeRules(kieWrapperComponentRules.container(), + entityLog, + document, + addedFileAttributes, + analyzeRequest.getComponentMappings(), + context); + + log.info("Finished component rule execution for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); + + ComponentLog componentLog = componentLogCreatorService.buildComponentLog(analyzeRequest.getAnalysisNumber(), components, kieWrapperComponentRules.rulesVersion()); + + redactionStorageService.storeObject(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), FileType.COMPONENT_LOG, componentLog); + + log.info("Stored component log for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); + } + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalysisPreparationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalysisPreparationService.java index 65a16c5c..82acb5bf 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalysisPreparationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalysisPreparationService.java @@ -37,6 +37,8 @@ import com.iqser.red.service.redaction.v1.server.service.drools.KieContainerCrea import com.iqser.red.service.redaction.v1.server.storage.ObservedStorageService; import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; +import io.micrometer.core.annotation.Timed; +import io.micrometer.observation.annotation.Observed; import lombok.AccessLevel; import lombok.SneakyThrows; import lombok.experimental.FieldDefaults; @@ -81,6 +83,8 @@ public class AnalysisPreparationService { @SneakyThrows + @Timed("redactmanager_getAnalysisData") + @Observed(name = "AnalysisPreparationService", contextualName = "get-analysis-data") public AnalysisData getAnalysisData(AnalyzeRequest analyzeRequest) { CompletableFuture kieWrapperComponentRulesFuture = CompletableFuture.supplyAsync(() -> getKieWrapper(analyzeRequest, RuleFileType.COMPONENT), taskExecutor); @@ -118,6 +122,8 @@ public class AnalysisPreparationService { @SneakyThrows + @Timed("redactmanager_getReanalysisSetupData") + @Observed(name = "AnalysisPreparationService", contextualName = "get-reanalysis-setup-data") public ReanalysisSetupData getReanalysisSetupData(AnalyzeRequest analyzeRequest) { CompletableFuture entityLogFuture = CompletableFuture.supplyAsync(() -> getEntityLog(analyzeRequest), taskExecutor); @@ -131,6 +137,8 @@ public class AnalysisPreparationService { @SneakyThrows + @Timed("redactmanager_getReanalysisInitialProcessingData") + @Observed(name = "AnalysisPreparationService", contextualName = "get-reanalysis-initial-processing-data") public ReanalysisInitialProcessingData getReanalysisInitialProcessingData(AnalyzeRequest analyzeRequest, ReanalysisSetupData reanalysisSetupData) { CompletableFuture importedRedactionsFuture = CompletableFuture.supplyAsync(() -> getImportedRedactions(analyzeRequest), taskExecutor); @@ -157,6 +165,8 @@ public class AnalysisPreparationService { @SneakyThrows + @Timed("redactmanager_getReanalysisFinalProcessingData") + @Observed(name = "AnalysisPreparationService", contextualName = "get-reanalysis-final-processing-data") public ReanalysisFinalProcessingData getReanalysisFinalProcessingData(AnalyzeRequest analyzeRequest, ReanalysisSetupData reanalysisSetupData, ReanalysisInitialProcessingData reanalysisInitialProcessingData) { @@ -181,7 +191,7 @@ public class AnalysisPreparationService { } - public KieWrapper getKieWrapper(AnalyzeRequest analyzeRequest, RuleFileType ruleFileType) { + private KieWrapper getKieWrapper(AnalyzeRequest analyzeRequest, RuleFileType ruleFileType) { KieWrapper kieWrapperComponentRules = kieContainerCreationService.getLatestKieContainer(analyzeRequest.getDossierTemplateId(), ruleFileType); log.info("Updated {} Rules to Version {} for file {} in dossier {}", @@ -193,7 +203,7 @@ public class AnalysisPreparationService { } - public Document getDocument(AnalyzeRequest analyzeRequest) { + private Document getDocument(AnalyzeRequest analyzeRequest) { Document document = DocumentGraphMapper.toDocumentGraph(observedStorageService.getDocumentData(analyzeRequest.getDossierId(), analyzeRequest.getFileId())); log.info("Loaded Document Graph for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); @@ -201,7 +211,7 @@ public class AnalysisPreparationService { } - public ImportedRedactions getImportedRedactions(AnalyzeRequest analyzeRequest) { + private ImportedRedactions getImportedRedactions(AnalyzeRequest analyzeRequest) { ImportedRedactions importedRedactions = redactionStorageService.getImportedRedactions(analyzeRequest.getDossierId(), analyzeRequest.getFileId()); log.info("Loaded Imported Redactions for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); @@ -209,7 +219,7 @@ public class AnalysisPreparationService { } - public NerEntities getNerEntities(AnalyzeRequest analyzeRequest, Document document) { + private NerEntities getNerEntities(AnalyzeRequest analyzeRequest, Document document) { NerEntities nerEntities = getEntityRecognitionEntities(analyzeRequest, document); log.info("Loaded Ner Entities for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); @@ -217,7 +227,7 @@ public class AnalysisPreparationService { } - public NerEntities getNerEntitiesFiltered(AnalyzeRequest analyzeRequest, Document document, Set sectionsToReanalyseIds) { + private NerEntities getNerEntitiesFiltered(AnalyzeRequest analyzeRequest, Document document, Set sectionsToReanalyseIds) { NerEntities nerEntities = getEntityRecognitionEntitiesFilteredBySectionIds(analyzeRequest, document, sectionsToReanalyseIds); log.info("Loaded Ner Entities for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalyzeService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalyzeService.java index d0ee2e30..fccde4b3 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalyzeService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalyzeService.java @@ -9,31 +9,19 @@ import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; -import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.RequestBody; -import com.iqser.gin4.commons.metrics.meters.FunctionTimerValues; import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeResult; import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute; -import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.componentlog.ComponentLog; -import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLogChanges; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; -import com.iqser.red.service.redaction.v1.server.RedactionServiceSettings; import com.iqser.red.service.redaction.v1.server.logger.Context; -import com.iqser.red.service.redaction.v1.server.model.KieWrapper; -import com.iqser.red.service.redaction.v1.server.model.component.Component; -import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; import com.iqser.red.service.redaction.v1.server.service.AnalysisPreparationService.AnalysisData; -import com.iqser.red.service.redaction.v1.server.service.components.ComponentLogCreatorService; -import com.iqser.red.service.redaction.v1.server.service.drools.ComponentDroolsExecutionService; import com.iqser.red.service.redaction.v1.server.service.drools.EntityDroolsExecutionService; -import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; import com.knecon.fforesight.tenantcommons.TenantContext; import io.micrometer.core.annotation.Timed; @@ -51,15 +39,11 @@ import lombok.extern.slf4j.Slf4j; public class AnalyzeService { EntityDroolsExecutionService entityDroolsExecutionService; - ComponentDroolsExecutionService componentDroolsExecutionService; DictionarySearchService dictionarySearchService; EntityLogCreatorService entityLogCreatorService; - ComponentLogCreatorService componentLogCreatorService; - RedactionStorageService redactionStorageService; - RedactionServiceSettings redactionServiceSettings; NotFoundImportedEntitiesService notFoundImportedEntitiesService; - FunctionTimerValues redactmanagerAnalyzePagewiseValues; AnalysisPreparationService analysisPreparationService; + AnalysisFinalizationService analysisFinalizationService; @Timed("redactmanager_reanalyze") @@ -92,15 +76,15 @@ public class AnalyzeService { new ArrayList<>(), new ArrayList<>()); - return finalizeAnalysis(analyzeRequest, - startTime, - initialProcessingData.kieWrapperComponentRules(), - entityLogChanges, - setupData.document(), - setupData.document().getNumberOfPages(), - true, - Collections.emptySet(), - context); + return analysisFinalizationService.finalizeAnalysis(analyzeRequest, + startTime, + initialProcessingData.kieWrapperComponentRules(), + entityLogChanges, + setupData.document(), + setupData.document().getNumberOfPages(), + true, + Collections.emptySet(), + context); } context.setRuleVersion(initialProcessingData.kieWrapperEntityRules().rulesVersion()); @@ -134,15 +118,15 @@ public class AnalyzeService { notFoundImportedEntitiesService.processEntityLog(entityLogChanges.getEntityLog(), analyzeRequest, finalProcessingData.notFoundImportedEntries()); - return finalizeAnalysis(analyzeRequest, - startTime, - initialProcessingData.kieWrapperComponentRules(), - entityLogChanges, - setupData.document(), - setupData.document().getNumberOfPages(), - true, - new HashSet<>(allFileAttributes), - context); + return analysisFinalizationService.finalizeAnalysis(analyzeRequest, + startTime, + initialProcessingData.kieWrapperComponentRules(), + entityLogChanges, + setupData.document(), + setupData.document().getNumberOfPages(), + true, + new HashSet<>(allFileAttributes), + context); } @@ -187,103 +171,15 @@ public class AnalyzeService { notFoundImportedEntitiesService.processEntityLog(entityLogChanges.getEntityLog(), analyzeRequest, analysisData.notFoundImportedEntries()); - return finalizeAnalysis(analyzeRequest, - startTime, - analysisData.kieWrapperComponentRules(), - entityLogChanges, - analysisData.document(), - analysisData.document().getNumberOfPages(), - false, - new HashSet<>(allFileAttributes), - context); - } - - - private AnalyzeResult finalizeAnalysis(AnalyzeRequest analyzeRequest, - long startTime, - KieWrapper kieWrapperComponentRules, - EntityLogChanges entityLogChanges, - Document document, - int numberOfPages, - boolean isReanalysis, - Set addedFileAttributes, - Context context) { - - EntityLog entityLog = entityLogChanges.getEntityLog(); - - // as workaround for duplicate key exceptions occurring due to simultaneous analyses and reanalyses save instead of insert is used - // also analysis numbers should be incremented in every follow-up request, so checking if the log exists is not needed - if (!redactionStorageService.entityLogExists(analyzeRequest.getDossierId(), analyzeRequest.getFileId())) { - redactionStorageService.saveEntityLog(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), entityLog); - - } else { - redactionStorageService.updateEntityLogWithoutEntries(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), entityLog); - - if (!entityLogChanges.getNewEntityLogEntries().isEmpty()) { - redactionStorageService.saveEntityLogEntries(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), entityLogChanges.getNewEntityLogEntries()); - } - if (!entityLogChanges.getUpdatedEntityLogEntries().isEmpty()) { - redactionStorageService.updateEntityLogEntries(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), entityLogChanges.getUpdatedEntityLogEntries()); - } - } - - log.info("Created entity log for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); - - computeComponentsWhenRulesArePresent(analyzeRequest, kieWrapperComponentRules, document, addedFileAttributes, entityLog, context); - - long duration = System.currentTimeMillis() - startTime; - - redactmanagerAnalyzePagewiseValues.increase(numberOfPages, duration); - - return AnalyzeResult.builder() - .dossierId(analyzeRequest.getDossierId()) - .fileId(analyzeRequest.getFileId()) - .duration(duration) - .numberOfPages(numberOfPages) - .hasUpdates(entityLogChanges.hasChanges()) - .analysisVersion(redactionServiceSettings.getAnalysisVersion()) - .analysisNumber(analyzeRequest.getAnalysisNumber()) - .rulesVersion(entityLog.getRulesVersion()) - .componentRulesVersion(kieWrapperComponentRules.rulesVersion()) - .dictionaryVersion(entityLog.getDictionaryVersion()) - .legalBasisVersion(entityLog.getLegalBasisVersion()) - .dossierDictionaryVersion(entityLog.getDossierDictionaryVersion()) - .wasReanalyzed(isReanalysis) - .manualRedactions(analyzeRequest.getManualRedactions()) - .addedFileAttributes(addedFileAttributes) - .usedComponentMappings(analyzeRequest.getComponentMappings()) - .build(); - } - - - private void computeComponentsWhenRulesArePresent(AnalyzeRequest analyzeRequest, - KieWrapper kieWrapperComponentRules, - Document document, - Set addedFileAttributes, - EntityLog entityLog, - Context context) { - - if (!kieWrapperComponentRules.isPresent()) { - return; - } - - // We need the latest EntityLog entries for components rules execution - entityLog.setEntityLogEntry(redactionStorageService.getEntityLog(analyzeRequest.getDossierId(), analyzeRequest.getFileId()).getEntityLogEntry()); - - List components = componentDroolsExecutionService.executeRules(kieWrapperComponentRules.container(), - entityLog, - document, - addedFileAttributes, - analyzeRequest.getComponentMappings(), - context); - - log.info("Finished component rule execution for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); - - ComponentLog componentLog = componentLogCreatorService.buildComponentLog(analyzeRequest.getAnalysisNumber(), components, kieWrapperComponentRules.rulesVersion()); - - redactionStorageService.storeObject(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), FileType.COMPONENT_LOG, componentLog); - - log.info("Stored component log for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); + return analysisFinalizationService.finalizeAnalysis(analyzeRequest, + startTime, + analysisData.kieWrapperComponentRules(), + entityLogChanges, + analysisData.document(), + analysisData.document().getNumberOfPages(), + false, + new HashSet<>(allFileAttributes), + context); } } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityLogCreatorService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityLogCreatorService.java index 58684c34..a4b900c6 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityLogCreatorService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityLogCreatorService.java @@ -43,6 +43,8 @@ import com.iqser.red.service.redaction.v1.server.service.EntityChangeLogService. import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; import com.iqser.red.service.redaction.v1.server.utils.ManualChangesUtils; +import io.micrometer.core.annotation.Timed; +import io.micrometer.observation.annotation.Observed; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.experimental.FieldDefaults; @@ -70,6 +72,9 @@ public class EntityLogCreatorService { } + + @Timed("redactmanager_createInitialEntityLog") + @Observed(name = "EntityLogCreatorService", contextualName = "create-initial-entity-log") public EntityLogChanges createInitialEntityLog(AnalyzeRequest analyzeRequest, Document document, List notFoundEntities, @@ -109,6 +114,9 @@ public class EntityLogCreatorService { } + + @Timed("redactmanager_updateVersionsAndReturnChanges") + @Observed(name = "EntityLogCreatorService", contextualName = "update-versions-and-return-changes") public EntityLogChanges updateVersionsAndReturnChanges(EntityLog entityLog, DictionaryVersion dictionaryVersion, AnalyzeRequest analyzeRequest, @@ -126,6 +134,8 @@ public class EntityLogCreatorService { } + @Timed("redactmanager_updatePreviousEntityLog") + @Observed(name = "EntityLogCreatorService", contextualName = "update-previous-entity-log") public EntityLogChanges updatePreviousEntityLog(AnalyzeRequest analyzeRequest, Document document, EntityLog entityLogWithoutEntries, diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/NotFoundImportedEntitiesService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/NotFoundImportedEntitiesService.java index e4888dc2..2ef3505b 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/NotFoundImportedEntitiesService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/NotFoundImportedEntitiesService.java @@ -9,8 +9,9 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import org.springframework.stereotype.Service; + import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Change; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.ChangeType; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Engine; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog; @@ -20,11 +21,9 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ChangeFactory; import com.iqser.red.service.redaction.v1.server.model.PrecursorEntity; import com.iqser.red.service.redaction.v1.server.model.RectangleWithPage; -import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; - -import org.springframework.stereotype.Service; import io.micrometer.core.annotation.Timed; +import io.micrometer.observation.annotation.Observed; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -37,6 +36,7 @@ public class NotFoundImportedEntitiesService { @Timed("redactmanager_processEntityLog") + @Observed(name = "NotFoundImportedEntitiesService", contextualName = "process-entity-log") public void processEntityLog(EntityLog entityLog, AnalyzeRequest analyzeRequest, List notFoundEntities) { // recreate imported redactions with manual changes if (notFoundEntities == null || notFoundEntities.isEmpty()) { @@ -65,7 +65,7 @@ public class NotFoundImportedEntitiesService { } - public Map> mapImportedRedactionsOnPage(List importedEntities) { + private Map> mapImportedRedactionsOnPage(List importedEntities) { Map> importedRedactionsMap = new HashMap<>(); Set pageNumbers = importedEntities.stream() @@ -82,7 +82,7 @@ public class NotFoundImportedEntitiesService { } - public void addIntersections(EntityLogEntry entityLogEntry, Map> importedEntitiesMap, int analysisNumber) { + private void addIntersections(EntityLogEntry entityLogEntry, Map> importedEntitiesMap, int analysisNumber) { for (Position rectangle : entityLogEntry.getPositions()) { if (importedEntitiesMap.containsKey(rectangle.getPageNumber())) {