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:
parent
21d2087e9f
commit
00a6b2f075
@ -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) {
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user