From 90b5d7d055fccc23bdf6748cd61e94c74ea107bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Fri, 15 Dec 2023 09:50:25 +0100 Subject: [PATCH] RED-5223: Added @Observed annotations for interesting methods --- .../build.gradle.kts | 2 +- .../redaction/v1/server/Application.java | 6 ++++++ .../v1/server/service/DictionaryService.java | 11 +++++++---- .../drools/EntityDroolsExecutionService.java | 18 ++++++++++++++++-- .../drools/KieContainerCreationService.java | 3 +++ .../storage/RedactionStorageService.java | 5 +++-- 6 files changed, 36 insertions(+), 9 deletions(-) diff --git a/redaction-service-v1/redaction-service-server-v1/build.gradle.kts b/redaction-service-v1/redaction-service-server-v1/build.gradle.kts index 4c073099..50fb28b5 100644 --- a/redaction-service-v1/redaction-service-server-v1/build.gradle.kts +++ b/redaction-service-v1/redaction-service-server-v1/build.gradle.kts @@ -16,7 +16,7 @@ val layoutParserVersion = "0.75.0" val jacksonVersion = "2.15.2" val droolsVersion = "9.44.0.Final" val pdfBoxVersion = "3.0.0" -val persistenceServiceVersion = "2.270.0" +val persistenceServiceVersion = "2.275.0" val springBootStarterVersion = "3.1.5" configurations { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/Application.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/Application.java index ab3bd66f..bdf58303 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/Application.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/Application.java @@ -17,6 +17,8 @@ import com.knecon.fforesight.tenantcommons.MultiTenancyAutoConfiguration; import io.micrometer.core.aop.TimedAspect; import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.observation.ObservationRegistry; +import io.micrometer.observation.aop.ObservedAspect; @ImportAutoConfiguration({MultiTenancyAutoConfiguration.class}) @Import({MetricsConfiguration.class, StorageAutoConfiguration.class}) @@ -31,6 +33,10 @@ public class Application { SpringApplication.run(Application.class, args); } + @Bean + public ObservedAspect observedAspect(ObservationRegistry observationRegistry) { + return new ObservedAspect(observationRegistry); + } @Bean public TimedAspect timedAspect(MeterRegistry registry) { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DictionaryService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DictionaryService.java index b3f83294..bcc96f8c 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DictionaryService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DictionaryService.java @@ -23,20 +23,21 @@ import com.iqser.red.service.dictionarymerge.commons.DictionaryEntry; import com.iqser.red.service.dictionarymerge.commons.DictionaryEntryModel; import com.iqser.red.service.dictionarymerge.commons.DictionaryMergeService; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.Colors; +import com.iqser.red.service.redaction.v1.server.RedactionServiceSettings; import com.iqser.red.service.redaction.v1.server.client.DictionaryClient; import com.iqser.red.service.redaction.v1.server.model.dictionary.Dictionary; -import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryIncrement; -import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryModel; -import com.iqser.red.service.redaction.v1.server.model.dictionary.TenantDictionary; import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryEntries; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryIncrement; import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryIncrementValue; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryModel; import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryRepresentation; import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryVersion; -import com.iqser.red.service.redaction.v1.server.RedactionServiceSettings; +import com.iqser.red.service.redaction.v1.server.model.dictionary.TenantDictionary; import com.knecon.fforesight.tenantcommons.TenantContext; import feign.FeignException; import io.micrometer.core.annotation.Timed; +import io.micrometer.observation.annotation.Observed; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; @@ -73,6 +74,7 @@ public class DictionaryService { @SneakyThrows + @Observed(name = "DictionaryService", contextualName = "update-dictionary") @Timed("redactmanager_updateDictionary") public DictionaryVersion updateDictionary(String dossierTemplateId, String dossierId) { @@ -94,6 +96,7 @@ public class DictionaryService { @SneakyThrows + @Observed(name = "DictionaryService", contextualName = "update-dictionary-increments") @Timed("redactmanager_getDictionaryIncrements") public DictionaryIncrement getDictionaryIncrements(String dossierTemplateId, DictionaryVersion fromVersion, String dossierId) { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/EntityDroolsExecutionService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/EntityDroolsExecutionService.java index f9156cdc..2520ce07 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/EntityDroolsExecutionService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/EntityDroolsExecutionService.java @@ -27,6 +27,8 @@ import com.iqser.red.service.redaction.v1.server.service.document.EntityEnrichme import com.iqser.red.service.redaction.v1.server.utils.exception.DroolsTimeoutException; import io.micrometer.core.annotation.Timed; +import io.micrometer.observation.ObservationRegistry; +import io.micrometer.observation.annotation.Observed; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.experimental.FieldDefaults; @@ -39,6 +41,7 @@ import lombok.extern.slf4j.Slf4j; public class EntityDroolsExecutionService { EntityEnrichmentService entityEnrichmentService; + ObservationRegistry observationRegistry; RedactionServiceSettings settings; @@ -56,6 +59,7 @@ public class EntityDroolsExecutionService { @Timed("redactmanager_executeRules") + @Observed(name = "EntityDroolsExecutionService", contextualName = "execute-entity-rules") public List executeRules(KieContainer kieContainer, Document document, List sectionsToAnalyze, @@ -64,6 +68,8 @@ public class EntityDroolsExecutionService { ManualRedactions manualRedactions, NerEntities nerEntities) { + addNumberOfPagesAndSectionsToAnalyseToTrace(document.getNumberOfPages(), sectionsToAnalyze.size()); + KieSession kieSession = kieContainer.newKieSession(); EntityCreationService entityCreationService = new EntityCreationService(entityEnrichmentService, kieSession); ManualChangesApplicationService manualChangesApplicationService = new ManualChangesApplicationService(entityCreationService); @@ -93,7 +99,6 @@ public class EntityDroolsExecutionService { kieSession.getAgenda().getAgendaGroup("LOCAL_DICTIONARY_ADDS").setFocus(); - CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> { kieSession.fireAllRules(); return null; @@ -103,7 +108,7 @@ public class EntityDroolsExecutionService { completableFuture.orTimeout(settings.getDroolsExecutionTimeoutSecs(), TimeUnit.SECONDS).get(); } catch (ExecutionException e) { kieSession.dispose(); - if(e.getCause() instanceof TimeoutException){ + if (e.getCause() instanceof TimeoutException) { throw new DroolsTimeoutException(e, false, RuleFileType.ENTITY); } throw new RuntimeException(e); @@ -128,4 +133,13 @@ public class EntityDroolsExecutionService { return fileAttributes; } + + private void addNumberOfPagesAndSectionsToAnalyseToTrace(int numberOfPages, int sectionsToAnalyse) { + + if (observationRegistry.getCurrentObservation() != null) { + observationRegistry.getCurrentObservation().highCardinalityKeyValue("numberOfPages", String.valueOf(numberOfPages)); + observationRegistry.getCurrentObservation().highCardinalityKeyValue("sectionsToAnalyse", String.valueOf(sectionsToAnalyse)); + } + } + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/KieContainerCreationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/KieContainerCreationService.java index 8cf28549..1e9e3f92 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/KieContainerCreationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/KieContainerCreationService.java @@ -20,6 +20,7 @@ import com.iqser.red.service.redaction.v1.server.utils.exception.DroolsTimeoutEx import com.knecon.fforesight.tenantcommons.TenantContext; import feign.FeignException; +import io.micrometer.observation.annotation.Observed; import lombok.RequiredArgsConstructor; @Service @@ -29,6 +30,8 @@ public class KieContainerCreationService { private final RulesClient rulesClient; + @Observed(name = "KieContainerCreationService", + contextualName = "get-kie-container") public KieWrapper getLatestKieContainer(String dossierTemplateId, RuleFileType ruleFileType) { try { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RedactionStorageService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RedactionStorageService.java index 468fa5b5..92f3b169 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RedactionStorageService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RedactionStorageService.java @@ -5,12 +5,11 @@ import java.io.FileInputStream; import java.io.InputStream; import java.util.stream.Collectors; -import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.imported.ImportedRedactions; - import org.springframework.stereotype.Service; 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.imported.ImportedRedactions; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLog; import com.iqser.red.service.redaction.v1.server.client.model.NerEntitiesModel; @@ -25,6 +24,7 @@ import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.Do import com.knecon.fforesight.tenantcommons.TenantContext; import io.micrometer.core.annotation.Timed; +import io.micrometer.observation.annotation.Observed; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; @@ -120,6 +120,7 @@ public class RedactionStorageService { } + @Observed(name = "RedactionStorageService", contextualName = "get-document-data") @Timed("redactmanager_getDocumentGraph") public DocumentData getDocumentData(String dossierId, String fileId) {