Pull request #67: RED-4609 - adjusted some metrics, added tests for metrics
Merge in RED/search-service from RED-4609 to master * commit 'a2c9ed15c2d143848db7890e1c6b522892a38a84': RED-4609 - adjusted some metrics, added tests for metrics
This commit is contained in:
commit
286aa0a23b
@ -148,7 +148,6 @@ public class IndexingMessageReceiver {
|
||||
}
|
||||
|
||||
|
||||
@Timed("redactmanager_indexFile")
|
||||
private void indexFile(Dossier dossier, FileModel file) {
|
||||
|
||||
fileStatusProcessingUpdateClient.indexing(dossier.getId(), file.getId());
|
||||
|
||||
@ -19,7 +19,7 @@ public class TextStorageService {
|
||||
private final StorageService storageService;
|
||||
|
||||
|
||||
@Timed("redactmanager_getText-search")
|
||||
@Timed("redactmanager_getTextSearchService")
|
||||
public Text getText(String dossierId, String fileId) {
|
||||
|
||||
try {
|
||||
|
||||
@ -54,10 +54,10 @@ public abstract class AbstractElasticsearchIntegrationTest {
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private IndexCreatorService indexCreationService;
|
||||
protected IndexCreatorService indexCreationService;
|
||||
|
||||
@Autowired
|
||||
private StorageService storageService;
|
||||
protected StorageService storageService;
|
||||
|
||||
@Configuration
|
||||
@EnableAutoConfiguration(exclude = {StorageAutoConfiguration.class, RabbitAutoConfiguration.class})
|
||||
|
||||
@ -0,0 +1,90 @@
|
||||
package com.iqser.red.service.search.v1.server.service;
|
||||
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
|
||||
import com.iqser.red.service.search.v1.model.IndexMessage;
|
||||
import com.iqser.red.service.search.v1.model.IndexMessageType;
|
||||
import com.iqser.red.service.search.v1.model.SearchRequest;
|
||||
import com.iqser.red.service.search.v1.server.client.DossierClient;
|
||||
import com.iqser.red.service.search.v1.server.client.FileStatusClient;
|
||||
import com.iqser.red.service.search.v1.server.client.FileStatusProcessingUpdateClient;
|
||||
import com.iqser.red.service.search.v1.server.client.IndexInformationClient;
|
||||
import com.iqser.red.service.search.v1.server.controller.SearchController;
|
||||
import com.iqser.red.service.search.v1.server.model.Text;
|
||||
import com.iqser.red.service.search.v1.server.queue.IndexingMessageReceiver;
|
||||
import com.iqser.red.service.search.v1.server.service.utils.MetricValidationUtils;
|
||||
|
||||
import io.micrometer.prometheus.PrometheusMeterRegistry;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
public class MetricsIntegrationTest extends AbstractElasticsearchIntegrationTest {
|
||||
|
||||
@Autowired
|
||||
private ObjectMapper objectMapper;
|
||||
@Autowired
|
||||
private IndexingMessageReceiver indexingMessageReceiver;
|
||||
@Autowired
|
||||
private PrometheusMeterRegistry prometheusMeterRegistry;
|
||||
@Autowired
|
||||
private SearchController searchController;
|
||||
@MockBean
|
||||
private FileStatusClient fileStatusClient;
|
||||
@MockBean
|
||||
private DossierClient dossierClient;
|
||||
@MockBean
|
||||
private FileStatusProcessingUpdateClient fileStatusProcessingUpdateClient;
|
||||
@MockBean
|
||||
private IndexInformationClient indexInformationClient;
|
||||
@MockBean
|
||||
private RabbitTemplate rabbitTemplate;
|
||||
|
||||
|
||||
@Test
|
||||
@SneakyThrows
|
||||
public void testMetrics() {
|
||||
|
||||
var dossier = new Dossier();
|
||||
dossier.setId("1");
|
||||
when(dossierClient.getDossierById("1", true, true)).thenReturn(dossier);
|
||||
|
||||
var file = new FileModel();
|
||||
file.setDossierId("1");
|
||||
file.setId("1");
|
||||
file.setWorkflowStatus(WorkflowStatus.NEW);
|
||||
when(fileStatusClient.getFileStatus("1", "1")).thenReturn(file);
|
||||
|
||||
ClassPathResource textResource = new ClassPathResource("files/Text2.json");
|
||||
Text text = objectMapper.readValue(textResource.getInputStream(), Text.class);
|
||||
storageService.storeJSONObject(TextStorageService.StorageIdUtils.getStorageId("1", "1", FileType.SIMPLIFIED_TEXT), text);
|
||||
|
||||
IndexMessage indexRequest = new IndexMessage();
|
||||
indexRequest.setDossierId("1");
|
||||
indexRequest.setFileId("1");
|
||||
indexRequest.setDossierTemplateId("1");
|
||||
indexRequest.setMessageType(IndexMessageType.INSERT);
|
||||
indexingMessageReceiver.receiveIndexingRequest(indexRequest);
|
||||
|
||||
indexRequest.setMessageType(IndexMessageType.UPDATE);
|
||||
indexingMessageReceiver.receiveIndexingRequest(indexRequest);
|
||||
|
||||
searchController.getDossierStatus(SearchRequest.builder().queryString("test").build());
|
||||
|
||||
MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_indexDocument", 1, null);
|
||||
MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_updateDocument", 1, null);
|
||||
MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_getTextSearchService", 1, null);
|
||||
MetricValidationUtils.validateMetric(prometheusMeterRegistry, "redactmanager_search", 1, null);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,29 @@
|
||||
package com.iqser.red.service.search.v1.server.service.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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -18,3 +18,13 @@ storage:
|
||||
elasticsearch:
|
||||
hosts:
|
||||
- 'localhost'
|
||||
|
||||
management:
|
||||
endpoint:
|
||||
metrics.enabled: true
|
||||
prometheus.enabled: true
|
||||
health.enabled: true
|
||||
endpoints.web.exposure.include: prometheus, health, metrics
|
||||
metrics.export.prometheus.enabled: true
|
||||
|
||||
persistence-service.url: 'http://mock.url'
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user