diff options
author | gjoranv <gv@verizonmedia.com> | 2019-12-22 03:20:31 +0100 |
---|---|---|
committer | gjoranv <gv@verizonmedia.com> | 2019-12-24 02:39:38 +0100 |
commit | fa02c26fe642e04047d5fe0c09cb75e82f3181f7 (patch) | |
tree | 81710476aab43f2afe55cb427b5ddaf292cf4ca2 /config-model | |
parent | b0bebf8c031082efcbb56364b5a896e5426163e5 (diff) |
Add application handler to MetricsProxyContainerCluster
+ Produce vespa-nodes config (to be renamed to metrics-nodes)
Diffstat (limited to 'config-model')
4 files changed, 81 insertions, 2 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsNodesConfigGenerator.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsNodesConfigGenerator.java new file mode 100644 index 00000000000..7f73529a208 --- /dev/null +++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsNodesConfigGenerator.java @@ -0,0 +1,32 @@ +/* + * Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + */ + +package com.yahoo.vespa.model.admin.metricsproxy; + +import ai.vespa.metricsproxy.http.MetricsHandler; +import ai.vespa.metricsproxy.http.application.VespaNodesConfig; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author gjoranv + */ +public class MetricsNodesConfigGenerator { + + public static List<VespaNodesConfig.Node.Builder> generate(List<MetricsProxyContainer> containers) { + return containers.stream() + .map(MetricsNodesConfigGenerator::toNodeBuilder) + .collect(Collectors.toList()); + } + + private static VespaNodesConfig.Node.Builder toNodeBuilder(MetricsProxyContainer container) { + return new VespaNodesConfig.Node.Builder() + .configId(container.getConfigId()) + .hostname(container.getHostName()) + .metricsPort(MetricsProxyContainer.BASEPORT) + .metricsPath(MetricsHandler.VALUES_PATH); + } + +} diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java index f0f7796acdb..8f3d2b73dc8 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java @@ -10,6 +10,9 @@ import ai.vespa.metricsproxy.core.MetricsManager; import ai.vespa.metricsproxy.core.MonitoringConfig; import ai.vespa.metricsproxy.core.VespaMetrics; import ai.vespa.metricsproxy.http.MetricsHandler; +import ai.vespa.metricsproxy.http.application.ApplicationMetricsHandler; +import ai.vespa.metricsproxy.http.application.ApplicationMetricsRetriever; +import ai.vespa.metricsproxy.http.application.VespaNodesConfig; import ai.vespa.metricsproxy.http.yamas.YamasHandler; import ai.vespa.metricsproxy.http.prometheus.PrometheusHandler; import ai.vespa.metricsproxy.metric.ExternalMetrics; @@ -67,7 +70,8 @@ public class MetricsProxyContainerCluster extends ContainerCluster<MetricsProxyC ApplicationDimensionsConfig.Producer, ConsumersConfig.Producer, MonitoringConfig.Producer, - ThreadpoolConfig.Producer + ThreadpoolConfig.Producer, + VespaNodesConfig.Producer { public static final Logger log = Logger.getLogger(MetricsProxyContainerCluster.class.getName()); @@ -110,9 +114,13 @@ public class MetricsProxyContainerCluster extends ContainerCluster<MetricsProxyC addMetricsProxyComponent(RpcServer.class); addMetricsProxyComponent(SystemPollerProvider.class); addMetricsProxyComponent(VespaMetrics.class); + addHttpHandler(MetricsHandler.class, MetricsHandler.V1_PATH); addHttpHandler(PrometheusHandler.class, PrometheusHandler.V1_PATH); addHttpHandler(YamasHandler.class, YamasHandler.V1_PATH); + + addHttpHandler(ApplicationMetricsHandler.class, ApplicationMetricsHandler.V1_PATH); + addMetricsProxyComponent(ApplicationMetricsRetriever.class); } private void addHttpHandler(Class<? extends ThreadedHttpRequestHandler> clazz, String bindingPath) { @@ -127,6 +135,11 @@ public class MetricsProxyContainerCluster extends ContainerCluster<MetricsProxyC protected void doPrepare(DeployState deployState) { } @Override + public void getConfig(VespaNodesConfig.Builder builder) { + builder.node.addAll(MetricsNodesConfigGenerator.generate(getContainers())); + } + + @Override public void getConfig(MonitoringConfig.Builder builder) { getSystemName().ifPresent(builder::systemName); getIntervalMinutes().ifPresent(builder::intervalMinutes); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java index a96e462ccac..6f541c80de2 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java @@ -6,6 +6,8 @@ package com.yahoo.vespa.model.admin.metricsproxy; import ai.vespa.metricsproxy.core.ConsumersConfig; import ai.vespa.metricsproxy.http.MetricsHandler; +import ai.vespa.metricsproxy.http.application.ApplicationMetricsHandler; +import ai.vespa.metricsproxy.http.application.VespaNodesConfig; import ai.vespa.metricsproxy.http.yamas.YamasHandler; import ai.vespa.metricsproxy.http.prometheus.PrometheusHandler; import ai.vespa.metricsproxy.metric.dimensions.ApplicationDimensionsConfig; @@ -40,8 +42,8 @@ import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.c import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.consumersConfigFromXml; import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.getApplicationDimensionsConfig; import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.getCustomConsumer; +import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.getMetricsNodesConfig; import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.getModel; -import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.configId; import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.getQrStartConfig; import static com.yahoo.vespa.model.admin.monitoring.DefaultPublicConsumer.DEFAULT_PUBLIC_CONSUMER_ID; import static com.yahoo.vespa.model.admin.monitoring.DefaultPublicMetrics.defaultPublicMetricSet; @@ -54,6 +56,8 @@ import static java.util.Collections.singleton; import static java.util.stream.Collectors.toList; import static org.hamcrest.CoreMatchers.endsWith; import static org.hamcrest.CoreMatchers.hasItem; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; @@ -123,6 +127,7 @@ public class MetricsProxyContainerClusterTest { assertThat(handlerClasses, hasItem(ComponentSpecification.fromString(MetricsHandler.class.getName()))); assertThat(handlerClasses, hasItem(ComponentSpecification.fromString(PrometheusHandler.class.getName()))); assertThat(handlerClasses, hasItem(ComponentSpecification.fromString(YamasHandler.class.getName()))); + assertThat(handlerClasses, hasItem(ComponentSpecification.fromString(ApplicationMetricsHandler.class.getName()))); } @Test @@ -293,6 +298,21 @@ public class MetricsProxyContainerClusterTest { assertEquals(MY_APPLICATION + "." + MY_INSTANCE, config.dimensions(AppDimensionNames.LEGACY_APPLICATION)); } + @Test + public void all_nodes_are_included_in_metrics_nodes_config() { + VespaModel hostedModel = getModel(servicesWithTwoNodes(), hosted); + VespaNodesConfig config = getMetricsNodesConfig(hostedModel); + assertEquals(2, config.node().size()); + assertNodeConfig(config.node(0)); + assertNodeConfig(config.node(1)); + } + + private void assertNodeConfig(VespaNodesConfig.Node node) { + assertFalse(node.configId().isEmpty()); + assertFalse(node.hostname().isEmpty()); + assertEquals(MetricsProxyContainer.BASEPORT, node.metricsPort()); + assertEquals(MetricsHandler.VALUES_PATH, node.metricsPath()); + } private static String servicesWithAdminOnly() { return String.join("\n", "<services>", @@ -303,4 +323,13 @@ public class MetricsProxyContainerClusterTest { ); } + private static String servicesWithTwoNodes() { + return String.join("\n", + "<services>", + " <container version='1.0' id='foo'>", + " <nodes count='2'/>", + " </container>", + "</services>"); + } + } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyModelTester.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyModelTester.java index 41021eb3a65..431d21be6bc 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyModelTester.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyModelTester.java @@ -5,6 +5,7 @@ package com.yahoo.vespa.model.admin.metricsproxy; import ai.vespa.metricsproxy.core.ConsumersConfig; +import ai.vespa.metricsproxy.http.application.VespaNodesConfig; import ai.vespa.metricsproxy.metric.dimensions.ApplicationDimensionsConfig; import ai.vespa.metricsproxy.metric.dimensions.NodeDimensionsConfig; import ai.vespa.metricsproxy.rpc.RpcConnectorConfig; @@ -78,6 +79,10 @@ class MetricsProxyModelTester { return new ConsumersConfig((ConsumersConfig.Builder) model.getConfig(new ConsumersConfig.Builder(), CLUSTER_CONFIG_ID)); } + static VespaNodesConfig getMetricsNodesConfig(VespaModel model) { + return new VespaNodesConfig((VespaNodesConfig.Builder) model.getConfig(new VespaNodesConfig.Builder(), CLUSTER_CONFIG_ID)); + } + static ApplicationDimensionsConfig getApplicationDimensionsConfig(VespaModel model) { return new ApplicationDimensionsConfig((ApplicationDimensionsConfig.Builder) model.getConfig(new ApplicationDimensionsConfig.Builder(), CLUSTER_CONFIG_ID)); } |