RED-4188 added timed dependencies and metric for calculateFlags since this method is calld several times per file each time something happens inside it

This commit is contained in:
Timo Bejan 2023-02-09 12:54:36 +02:00
parent 21d2087e9f
commit 00a6b2f075
6 changed files with 51 additions and 10 deletions

View File

@ -28,6 +28,9 @@ import com.iqser.red.service.peristence.v1.server.multitenancy.MultiTenancyWebCo
import com.iqser.red.service.peristence.v1.server.settings.FileManagementServiceSettings;
import com.iqser.red.service.persistence.management.v1.processor.PersistenceServiceProcessorConfiguration;
import io.micrometer.core.aop.TimedAspect;
import io.micrometer.core.instrument.MeterRegistry;
@EnableAsync
@EnableRetry
@EnableScheduling
@ -47,6 +50,11 @@ public class Application {
SpringApplication.run(Application.class, args);
}
@Bean
public TimedAspect timedAspect(MeterRegistry registry) {
return new TimedAspect(registry);
}
@Bean
public RetryTemplate retryTemplate(FileManagementServiceSettings settings) {

View File

@ -16,6 +16,7 @@ import com.iqser.red.service.redaction.v1.model.ChangeType;
import com.iqser.red.service.redaction.v1.model.ManualRedactionType;
import com.iqser.red.service.redaction.v1.model.RedactionLogEntry;
import io.micrometer.core.annotation.Timed;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -28,7 +29,7 @@ public class AnalysisFlagsCalculationService {
private final RedactionLogService redactionLogService;
private final ViewedPagesPersistenceService viewedPagesPersistenceService;
@Timed("redactmanager_calculateFlags")
public void calculateFlags(String dossierId, String fileId) {
long startTime = System.currentTimeMillis();

View File

@ -21,6 +21,7 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTes
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.service.TypeProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.peristence.v1.server.integration.utils.MetricValidationUtils;
import com.iqser.red.service.peristence.v1.server.service.FileManagementStorageService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.AddRedactionRequest;
@ -43,6 +44,7 @@ import com.iqser.red.service.redaction.v1.model.RedactionLog;
import com.iqser.red.service.redaction.v1.model.RedactionLogEntry;
import feign.FeignException;
import io.micrometer.prometheus.PrometheusMeterRegistry;
import lombok.SneakyThrows;
public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
@ -77,7 +79,6 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
@Autowired
private FileClient fileClient;
@Test
@SneakyThrows
public void testManualRedaction3641() {
@ -195,6 +196,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSING);
}
@ -588,6 +590,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
loadedResizeRedaction2 = manualRedactionClient.getResizeRedaction(file.getId(), resizeRedaction2.getAnnotationId());
assertThat(loadedResizeRedaction2.getStatus()).isEqualTo(AnnotationStatus.REQUESTED);
MetricValidationUtils.validateMetric(prometheusMeterRegistry,"redactmanager_calculateFlags",1,null);
}
}

View File

@ -84,6 +84,7 @@ import com.iqser.red.service.redaction.v1.model.RedactionResult;
import com.iqser.red.storage.commons.StorageAutoConfiguration;
import com.iqser.red.storage.commons.service.StorageService;
import io.micrometer.prometheus.PrometheusMeterRegistry;
import lombok.SneakyThrows;
@RunWith(SpringRunner.class)
@ -165,24 +166,21 @@ public abstract class AbstractPersistenceServerServiceTest {
protected EntryRepository entryRepository;
@Autowired
protected IndexInformationRepository indexInformationRepository;
@Autowired
protected FalsePositiveEntryRepository falsePositiveEntryRepository;
@Autowired
protected FalseRecommendationEntryRepository falseRecommendationEntryRepository;
@Autowired
protected ApplicationConfigRepository applicationConfigRepository;
@Autowired
protected TenantsClient tenantsClient;
@Autowired
protected TenantRepository tenantRepository;
@Autowired
private JdbcTemplate jdbcTemplate;
protected JdbcTemplate jdbcTemplate;
@Autowired
protected PrometheusMeterRegistry prometheusMeterRegistry;
@Before

View File

@ -0,0 +1,29 @@
package com.iqser.red.service.peristence.v1.server.integration.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);
}
}
}

View File

@ -66,9 +66,11 @@ metrics:
management:
endpoint:
metrics.enabled: false
metrics.enabled: true
prometheus.enabled: true
health.enabled: true
endpoints.web.exposure.include: prometheus, health, metrics
metrics.export.prometheus.enabled: true
logging.level.root: info