summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorgjoranv <gv@verizonmedia.com>2019-12-22 03:20:31 +0100
committergjoranv <gv@verizonmedia.com>2019-12-24 02:39:38 +0100
commitfa02c26fe642e04047d5fe0c09cb75e82f3181f7 (patch)
tree81710476aab43f2afe55cb427b5ddaf292cf4ca2 /config-model
parentb0bebf8c031082efcbb56364b5a896e5426163e5 (diff)
Add application handler to MetricsProxyContainerCluster
+ Produce vespa-nodes config (to be renamed to metrics-nodes)
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsNodesConfigGenerator.java32
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java15
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java31
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyModelTester.java5
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));
}