From 519bb9cb527a6fccc7c16d26c5b46fa65c6c9830 Mon Sep 17 00:00:00 2001 From: Viktor Seifert Date: Wed, 15 Mar 2023 16:40:04 +0100 Subject: [PATCH 1/2] RED-6250: Changed function-timer metric to use code from metric commons --- .../redaction-service-server-v1/pom.xml | 1 + .../redaction/v1/server/Application.java | 3 +- .../v1/server/MetricsConfiguration.java | 32 +++++++++ .../service/analyze/AnalyzeService.java | 72 ++----------------- 4 files changed, 41 insertions(+), 67 deletions(-) create mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/MetricsConfiguration.java diff --git a/redaction-service-v1/redaction-service-server-v1/pom.xml b/redaction-service-v1/redaction-service-server-v1/pom.xml index 0ac78f12..6f115142 100644 --- a/redaction-service-v1/redaction-service-server-v1/pom.xml +++ b/redaction-service-v1/redaction-service-server-v1/pom.xml @@ -93,6 +93,7 @@ com.iqser.red.commons metric-commons + 1.6.0 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 cfd44b4c..38de3d24 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 @@ -9,7 +9,6 @@ import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; -import com.iqser.red.commons.spring.DefaultWebMvcConfiguration; import com.iqser.red.service.redaction.v1.server.client.RulesClient; import com.iqser.red.service.redaction.v1.server.multitenancy.AsyncConfig; import com.iqser.red.service.redaction.v1.server.multitenancy.MultiTenancyMessagingConfiguration; @@ -19,7 +18,7 @@ import com.iqser.red.service.redaction.v1.server.settings.RedactionServiceSettin import io.micrometer.core.aop.TimedAspect; import io.micrometer.core.instrument.MeterRegistry; -@Import({MultiTenancyWebConfiguration.class, AsyncConfig.class, MultiTenancyMessagingConfiguration.class}) +@Import({MultiTenancyWebConfiguration.class, AsyncConfig.class, MultiTenancyMessagingConfiguration.class, MetricsConfiguration.class}) @EnableFeignClients(basePackageClasses = RulesClient.class) @EnableConfigurationProperties(RedactionServiceSettings.class) @SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class}) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/MetricsConfiguration.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/MetricsConfiguration.java new file mode 100644 index 00000000..7f626eaa --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/MetricsConfiguration.java @@ -0,0 +1,32 @@ +package com.iqser.red.service.redaction.v1.server; + +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.iqser.gin4.commons.metrics.meters.FunctionTimerFactory; +import com.iqser.gin4.commons.metrics.meters.FunctionTimerValues; + +import io.micrometer.core.instrument.MeterRegistry; + +@Configuration +public class MetricsConfiguration { + + private static final String REDACTMANAGER_ANALYZE_PAGEWISE_METRIC_NAME = "redactmanager_analyze.pagewise"; + + + @Bean + public FunctionTimerFactory functionTimerFactory(MeterRegistry registry) { + + return new FunctionTimerFactory(registry); + } + + + @Bean + @Qualifier(REDACTMANAGER_ANALYZE_PAGEWISE_METRIC_NAME) + public FunctionTimerValues redactmanagerAnalyzePagewise(FunctionTimerFactory factory) { + + return factory.create(REDACTMANAGER_ANALYZE_PAGEWISE_METRIC_NAME); + } + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/analyze/AnalyzeService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/analyze/AnalyzeService.java index 2a54e3ad..b036e85a 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/analyze/AnalyzeService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/analyze/AnalyzeService.java @@ -8,13 +8,13 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; -import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import org.kie.api.runtime.KieContainer; 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; @@ -53,10 +53,8 @@ import com.iqser.red.service.redaction.v1.server.settings.RedactionServiceSettin import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; import io.micrometer.core.annotation.Timed; -import io.micrometer.core.instrument.FunctionTimer; -import io.micrometer.core.instrument.MeterRegistry; import lombok.AccessLevel; -import lombok.Getter; +import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.experimental.FieldDefaults; import lombok.extern.slf4j.Slf4j; @@ -64,8 +62,11 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Service @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) +@RequiredArgsConstructor public class AnalyzeService { + private static final String REDACTMANAGER_ANALYZE_PAGEWISE_METRIC_NAME = "redactmanager_analyze.pagewise"; + DictionaryService dictionaryService; DroolsExecutionService droolsExecutionService; EntityRedactionService entityRedactionService; @@ -80,50 +81,8 @@ public class AnalyzeService { ImageService imageService; ImportedRedactionService importedRedactionService; SectionFinder sectionFinder; - PagewiseCounter analyzeCounter = new PagewiseCounter(); - - @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") - public AnalyzeService(DictionaryService dictionaryService, - DroolsExecutionService droolsExecutionService, - EntityRedactionService entityRedactionService, - RedactionLogCreatorService redactionLogCreatorService, - RedactionStorageService redactionStorageService, - PdfSegmentationService pdfSegmentationService, - RedactionChangeLogService redactionChangeLogService, - LegalBasisClient legalBasisClient, - RedactionServiceSettings redactionServiceSettings, - SectionTextBuilderService sectionTextBuilderService, - SectionGridCreatorService sectionGridCreatorService, - ImageService imageService, - ImportedRedactionService importedRedactionService, - SectionFinder sectionFinder, - MeterRegistry meterRegistry) { - - this.dictionaryService = dictionaryService; - this.droolsExecutionService = droolsExecutionService; - this.entityRedactionService = entityRedactionService; - this.redactionLogCreatorService = redactionLogCreatorService; - this.redactionStorageService = redactionStorageService; - this.pdfSegmentationService = pdfSegmentationService; - this.redactionChangeLogService = redactionChangeLogService; - this.legalBasisClient = legalBasisClient; - this.redactionServiceSettings = redactionServiceSettings; - this.sectionTextBuilderService = sectionTextBuilderService; - this.sectionGridCreatorService = sectionGridCreatorService; - this.imageService = imageService; - this.importedRedactionService = importedRedactionService; - this.sectionFinder = sectionFinder; - - // This is just here as an example of how to do a timer with a counter. - // For a full implementation this should be moved to a common helper class. - FunctionTimer.builder("redactmanager_analyze.pagewise", // - analyzeCounter, // - PagewiseCounter::getTotalPageCount, // - PagewiseCounter::getTotalTimeMillis, // - TimeUnit.MILLISECONDS) // - .register(meterRegistry); - } + FunctionTimerValues redactmanagerAnalyzePagewiseValues; @Timed("redactmanager_analyzeDocumentStructure") @@ -296,7 +255,7 @@ public class AnalyzeService { long duration = System.currentTimeMillis() - startTime; - analyzeCounter.increase(text.getNumberOfPages(), duration); + redactmanagerAnalyzePagewiseValues.increase(text.getNumberOfPages(), duration); return AnalyzeResult.builder() .dossierId(analyzeRequest.getDossierId()) @@ -347,21 +306,4 @@ public class AnalyzeService { return SimplifiedText.builder().numberOfPages(numberOfPages).sectionTexts(sectionTexts).build(); } - - @FieldDefaults(level = AccessLevel.PRIVATE) - @Getter - private static final class PagewiseCounter { - - long totalPageCount; - long totalTimeMillis; - - - public void increase(long pageCount, long durationMillis) { - - totalPageCount += pageCount; - totalTimeMillis += durationMillis; - } - - } - } From fe5121b1edf784d5cc57abd9cd8e27f70dea0f4a Mon Sep 17 00:00:00 2001 From: Viktor Seifert Date: Wed, 15 Mar 2023 18:16:53 +0100 Subject: [PATCH 2/2] RED-6250: Switched to new metrics-commons version to not have to instantiate a factory (reduces code duplication) --- .../redaction-service-server-v1/pom.xml | 2 +- .../redaction/v1/server/MetricsConfiguration.java | 12 +++--------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/redaction-service-v1/redaction-service-server-v1/pom.xml b/redaction-service-v1/redaction-service-server-v1/pom.xml index 6f115142..41036d0f 100644 --- a/redaction-service-v1/redaction-service-server-v1/pom.xml +++ b/redaction-service-v1/redaction-service-server-v1/pom.xml @@ -93,7 +93,7 @@ com.iqser.red.commons metric-commons - 1.6.0 + 1.7.0 diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/MetricsConfiguration.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/MetricsConfiguration.java index 7f626eaa..cf26924c 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/MetricsConfiguration.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/MetricsConfiguration.java @@ -3,25 +3,19 @@ package com.iqser.red.service.redaction.v1.server; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import com.iqser.gin4.commons.metrics.MetricCommonsConfiguration; import com.iqser.gin4.commons.metrics.meters.FunctionTimerFactory; import com.iqser.gin4.commons.metrics.meters.FunctionTimerValues; -import io.micrometer.core.instrument.MeterRegistry; - @Configuration +@Import({MetricCommonsConfiguration.class}) public class MetricsConfiguration { private static final String REDACTMANAGER_ANALYZE_PAGEWISE_METRIC_NAME = "redactmanager_analyze.pagewise"; - @Bean - public FunctionTimerFactory functionTimerFactory(MeterRegistry registry) { - - return new FunctionTimerFactory(registry); - } - - @Bean @Qualifier(REDACTMANAGER_ANALYZE_PAGEWISE_METRIC_NAME) public FunctionTimerValues redactmanagerAnalyzePagewise(FunctionTimerFactory factory) {