From e23432096cb0ed486a294ed210646bbd8682350e Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Wed, 8 Feb 2023 19:12:47 +0200 Subject: [PATCH] RED-4609 - adjusted some metrics, added tests for metrics --- ...ManualRedactionSurroundingTextService.java | 2 +- .../service/SurroundingWordsService.java | 2 +- .../AnalyseFileRealDataIntegrationTest.java | 11 +++++++ .../realdata/LiveDataIntegrationTest.java | 4 +++ .../server/utils/MetricValidationUtils.java | 29 +++++++++++++++++++ .../src/test/resources/application.yml | 10 ++++++- 6 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/utils/MetricValidationUtils.java diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ManualRedactionSurroundingTextService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ManualRedactionSurroundingTextService.java index 12ecdd22..a0135fc3 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ManualRedactionSurroundingTextService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ManualRedactionSurroundingTextService.java @@ -37,7 +37,7 @@ public class ManualRedactionSurroundingTextService { private final SurroundingWordsService surroundingWordsService; - @Timed("redactmanager_SurroundingTextAnalysis") + @Timed("redactmanager_surroundingTextAnalysis") public AnalyzeResult addSurroundingText(String dossierId, String fileId, ManualRedactions manualRedactions) { long startTime = System.currentTimeMillis(); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/SurroundingWordsService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/SurroundingWordsService.java index 48d4b684..1530469f 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/SurroundingWordsService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/SurroundingWordsService.java @@ -43,7 +43,7 @@ public class SurroundingWordsService { } - @Timed("redactmanager_addSurroundingText_tables") + @Timed("redactmanager_addSurroundingTextTables") public void addSurroundingText(Set entities, SearchableText searchableText, Dictionary dictionary, List cellstarts) { if (entities.isEmpty()) { diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/realdata/AnalyseFileRealDataIntegrationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/realdata/AnalyseFileRealDataIntegrationTest.java index de4cd80d..b9e94069 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/realdata/AnalyseFileRealDataIntegrationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/realdata/AnalyseFileRealDataIntegrationTest.java @@ -14,6 +14,7 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.do import com.iqser.red.service.redaction.v1.model.AnalyzeRequest; import com.iqser.red.service.redaction.v1.model.MessageType; import com.iqser.red.service.redaction.v1.server.annotate.AnnotationService; +import com.iqser.red.service.redaction.v1.server.utils.MetricValidationUtils; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -92,6 +93,16 @@ public class AnalyseFileRealDataIntegrationTest extends LiveDataIntegrationTest // IOUtils.write(annotated.getDocument(), new FileOutputStream(tempFile)); // log.warn("File saved to: {}",tempFile.getAbsolutePath()); // Runtime.getRuntime().exec("open "+tempFile.getAbsolutePath()); +// + + MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_getDeepCopyDictionary", 1, null); + MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_analyzeDocumentStructure", 1, null); + MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_getRedactionLog", 1, null); + MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_getText", 1, null); + MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_reanalyze", 1, null); + MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_analyze", 1, null); + MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_updateDictionary", 1, null); + } } diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/realdata/LiveDataIntegrationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/realdata/LiveDataIntegrationTest.java index 4251509f..e3a95bc8 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/realdata/LiveDataIntegrationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/realdata/LiveDataIntegrationTest.java @@ -16,6 +16,7 @@ import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService import com.iqser.red.storage.commons.StorageAutoConfiguration; import com.iqser.red.storage.commons.service.StorageService; +import io.micrometer.prometheus.PrometheusMeterRegistry; import lombok.SneakyThrows; import org.apache.commons.io.IOUtils; @@ -87,6 +88,9 @@ public class LiveDataIntegrationTest { @Autowired protected RedactionServiceSettings redactionServiceSettings; + @Autowired + protected PrometheusMeterRegistry prometheusMeterRegistry; + private List types; @Configuration diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/utils/MetricValidationUtils.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/utils/MetricValidationUtils.java new file mode 100644 index 00000000..d36714b2 --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/utils/MetricValidationUtils.java @@ -0,0 +1,29 @@ +package com.iqser.red.service.redaction.v1.server.utils; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +import java.util.concurrent.TimeUnit; + +import io.micrometer.prometheus.PrometheusMeterRegistry; +import io.micrometer.prometheus.PrometheusTimer; +import lombok.experimental.UtilityClass; + +@UtilityClass +public class MetricValidationUtils { + + public static void validateMetric(PrometheusMeterRegistry registry, String name, int invocationCount, Integer time) { + + var metricOptional = registry.getMeters().stream().filter(m -> m.getId().getName().equalsIgnoreCase(name)).findAny(); + assertThat(metricOptional.isPresent()).isTrue(); + PrometheusTimer metric = (PrometheusTimer) metricOptional.get(); + assertThat(metric.count()).isGreaterThanOrEqualTo(invocationCount); + if (time != null) { + // for actually timing the method ... + assertThat(metric.mean(TimeUnit.MILLISECONDS)).isGreaterThan(time); + } else { + // everything takes at least one nano-second - test the meter is correctly initialized + assertThat(metric.mean(TimeUnit.NANOSECONDS)).isGreaterThan(1); + } + } + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/application.yml b/redaction-service-v1/redaction-service-server-v1/src/test/resources/application.yml index c4489f06..2ff3f881 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/application.yml +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/application.yml @@ -25,4 +25,12 @@ storage: bucket-name: 'redaction' region: 'us-east-1' endpoint: 'https://s3.amazonaws.com' - backend: 's3' \ No newline at end of file + backend: 's3' + +management: + endpoint: + metrics.enabled: true + prometheus.enabled: true + health.enabled: true + endpoints.web.exposure.include: prometheus, health, metrics + metrics.export.prometheus.enabled: true