diff options
Diffstat (limited to 'metrics-proxy/src/test')
5 files changed, 192 insertions, 1 deletions
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java index 074b7877430..155bbf094a1 100644 --- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java +++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java @@ -3,6 +3,7 @@ package ai.vespa.metricsproxy.http.application; import ai.vespa.metricsproxy.core.ConsumersConfig; import ai.vespa.metricsproxy.core.MetricsConsumers; +import ai.vespa.metricsproxy.metric.dimensions.PublicDimensions; import ai.vespa.metricsproxy.metric.model.json.GenericApplicationModel; import ai.vespa.metricsproxy.metric.model.json.GenericJsonModel; import ai.vespa.metricsproxy.metric.model.json.GenericMetrics; @@ -19,6 +20,7 @@ import org.junit.Test; import java.io.IOException; import java.util.Arrays; +import java.util.Map; import java.util.concurrent.Executors; import static ai.vespa.metricsproxy.TestUtil.getFileContents; @@ -34,6 +36,7 @@ import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options import static com.yahoo.collections.CollectionUtil.first; import static java.util.stream.Collectors.toList; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -138,6 +141,22 @@ public class ApplicationMetricsHandlerTest { } @Test + public void metrics_processors_are_applied() { + GenericApplicationModel jsonModel = getResponseAsJsonModel(DEFAULT_PUBLIC_CONSUMER_ID.id); + + GenericService searchnode = jsonModel.nodes.get(0).services.get(0); + Map<String, String> dimensions = searchnode.metrics.get(0).dimensions; + assertEquals(6, dimensions.size()); + assertEquals("music.default", dimensions.get(PublicDimensions.APPLICATION_ID)); + assertEquals("container/default", dimensions.get(PublicDimensions.CLUSTER_ID)); + assertEquals("us-west", dimensions.get(PublicDimensions.ZONE)); + assertEquals("search/", dimensions.get(PublicDimensions.API)); + assertEquals("music", dimensions.get(PublicDimensions.DOCUMENT_TYPE)); + assertEquals("qrserver0", dimensions.get(PublicDimensions.SERVICE_ID)); + assertFalse(dimensions.containsKey("non-public")); + } + + @Test public void consumer_is_propagated_in_uri_to_retriever() { GenericApplicationModel jsonModel = getResponseAsJsonModel(CUSTOM_CONSUMER); GenericJsonModel nodeModel = jsonModel.nodes.get(0); diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ClusterIdDimensionProcessorTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ClusterIdDimensionProcessorTest.java new file mode 100644 index 00000000000..0f4c6a885ec --- /dev/null +++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ClusterIdDimensionProcessorTest.java @@ -0,0 +1,63 @@ +package ai.vespa.metricsproxy.http.application; + +import ai.vespa.metricsproxy.metric.model.DimensionId; +import ai.vespa.metricsproxy.metric.model.MetricsPacket; +import org.junit.Test; + +import static ai.vespa.metricsproxy.metric.dimensions.PublicDimensions.CLUSTER_ID; +import static ai.vespa.metricsproxy.metric.dimensions.PublicDimensions.INTERNAL_CLUSTER_ID; +import static ai.vespa.metricsproxy.metric.dimensions.PublicDimensions.INTERNAL_CLUSTER_TYPE; +import static ai.vespa.metricsproxy.metric.model.DimensionId.toDimensionId; +import static ai.vespa.metricsproxy.metric.model.ServiceId.toServiceId; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +/** + * @author gjoranv + */ +public class ClusterIdDimensionProcessorTest { + private static final DimensionId NEW_ID_DIMENSION = toDimensionId(CLUSTER_ID); + + @Test + public void cluster_id_is_replaced_with_type_and_id() { + var builder = new MetricsPacket.Builder(toServiceId("foo")); + builder.putDimension(toDimensionId(INTERNAL_CLUSTER_TYPE), "type") ; + builder.putDimension(toDimensionId(INTERNAL_CLUSTER_ID), "id") ; + + assertEquals("type/id", newClusterId(builder)); + } + + @Test + public void cluster_id_is_type_when_id_is_null() { + var builder = new MetricsPacket.Builder(toServiceId("foo")); + builder.putDimension(toDimensionId(INTERNAL_CLUSTER_TYPE), "type") ; + + assertEquals(newClusterId(builder), "type"); + } + + @Test + public void cluster_id_is_id_when_type_is_null() { + var builder = new MetricsPacket.Builder(toServiceId("foo")); + builder.putDimension(toDimensionId(INTERNAL_CLUSTER_ID), "id") ; + + assertEquals(newClusterId(builder), "id"); + } + + @Test + public void cluster_id_is_not_added_when_both_type_and_id_are_null() { + var builder = new MetricsPacket.Builder(toServiceId("foo")); + + var processor = new ClusterIdDimensionProcessor(); + processor.process(builder); + + assertFalse(builder.getDimensionIds().contains(NEW_ID_DIMENSION)); + } + + private String newClusterId(MetricsPacket.Builder builder) { + var processor = new ClusterIdDimensionProcessor(); + processor.process(builder); + + return builder.getDimensionValue(NEW_ID_DIMENSION); + } + +} diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/PublicDimensionsProcessorTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/PublicDimensionsProcessorTest.java new file mode 100644 index 00000000000..c6f47d70a1f --- /dev/null +++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/PublicDimensionsProcessorTest.java @@ -0,0 +1,59 @@ +package ai.vespa.metricsproxy.http.application; + +import ai.vespa.metricsproxy.metric.model.MetricsPacket; +import org.junit.Test; + +import static ai.vespa.metricsproxy.http.application.PublicDimensionsProcessor.getPublicDimensions; +import static ai.vespa.metricsproxy.http.application.PublicDimensionsProcessor.toDimensionIds; +import static ai.vespa.metricsproxy.metric.dimensions.PublicDimensions.APPLICATION_ID; +import static ai.vespa.metricsproxy.metric.dimensions.PublicDimensions.commonDimensions; +import static ai.vespa.metricsproxy.metric.dimensions.PublicDimensions.publicDimensions; +import static ai.vespa.metricsproxy.metric.model.DimensionId.toDimensionId; +import static ai.vespa.metricsproxy.metric.model.ServiceId.toServiceId; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * @author gjoranv + */ +public class PublicDimensionsProcessorTest { + + @Test + public void non_public_dimensions_are_removed() { + var builder = new MetricsPacket.Builder(toServiceId("foo")) + .putDimension(toDimensionId("a"), ""); + + var processor = new PublicDimensionsProcessor(10); + processor.process(builder); + assertTrue(builder.getDimensionIds().isEmpty()); + } + + @Test + public void public_dimensions_are_retained() { + var builder = new MetricsPacket.Builder(toServiceId("foo")) + .putDimension(toDimensionId(APPLICATION_ID), "app"); + + var processor = new PublicDimensionsProcessor(10); + processor.process(builder); + assertEquals(1, builder.getDimensionIds().size()); + assertEquals(toDimensionId(APPLICATION_ID), builder.getDimensionIds().iterator().next()); + } + + @Test + public void common_dimensions_have_priority_when_there_are_too_many() { + var builder = new MetricsPacket.Builder(toServiceId("foo")); + getPublicDimensions() + .forEach(dimensionId -> builder.putDimension(dimensionId, dimensionId.id)); + assertEquals(publicDimensions.size(), builder.getDimensionIds().size()); + + var processor = new PublicDimensionsProcessor(commonDimensions.size()); + processor.process(builder); + + var includedDimensions = builder.getDimensionIds(); + assertEquals(commonDimensions.size(), includedDimensions.size()); + + toDimensionIds(commonDimensions).forEach(commonDimension -> + assertTrue(includedDimensions.contains(commonDimension))); + } + +} diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ServiceIdDimensionProcessorTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ServiceIdDimensionProcessorTest.java new file mode 100644 index 00000000000..3237abdbfa3 --- /dev/null +++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ServiceIdDimensionProcessorTest.java @@ -0,0 +1,43 @@ +package ai.vespa.metricsproxy.http.application; + +import ai.vespa.metricsproxy.metric.model.DimensionId; +import ai.vespa.metricsproxy.metric.model.MetricsPacket; +import org.junit.Test; + +import static ai.vespa.metricsproxy.metric.dimensions.PublicDimensions.INTERNAL_SERVICE_ID; +import static ai.vespa.metricsproxy.metric.dimensions.PublicDimensions.SERVICE_ID; +import static ai.vespa.metricsproxy.metric.model.DimensionId.toDimensionId; +import static ai.vespa.metricsproxy.metric.model.ServiceId.toServiceId; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +/** + * @author gjoranv + */ +public class ServiceIdDimensionProcessorTest { + private static final DimensionId NEW_ID_DIMENSION = toDimensionId(SERVICE_ID); + + @Test + public void new_service_id_is_added_when_internal_service_id_exists() { + var builder = new MetricsPacket.Builder(toServiceId("foo")); + builder.putDimension(toDimensionId(INTERNAL_SERVICE_ID), "service"); + + var processor = new ServiceIdDimensionProcessor(); + processor.process(builder); + + assertTrue(builder.getDimensionIds().contains(NEW_ID_DIMENSION)); + assertEquals("service", builder.getDimensionValue(NEW_ID_DIMENSION)); + } + + @Test + public void new_service_id_is_not_added_when_internal_service_id_is_null() { + var builder = new MetricsPacket.Builder(toServiceId("foo")); + + var processor = new ServiceIdDimensionProcessor(); + processor.process(builder); + + assertFalse(builder.getDimensionIds().contains(NEW_ID_DIMENSION)); + } + +} diff --git a/metrics-proxy/src/test/resources/generic-sample.json b/metrics-proxy/src/test/resources/generic-sample.json index de617895f86..c9b02696e69 100644 --- a/metrics-proxy/src/test/resources/generic-sample.json +++ b/metrics-proxy/src/test/resources/generic-sample.json @@ -33,7 +33,14 @@ "queries.count": 4 }, "dimensions": { - "documentType": "music" + "applicationId": "music.default", + "clustertype": "container", + "clusterid": "default", + "instance": "qrserver0", + "zone": "us-west", + "api": "search/", + "documenttype": "music", + "non-public": "will-be-removed" } } ] |