diff options
author | gjoranv <gv@verizonmedia.com> | 2019-08-29 15:48:37 +0200 |
---|---|---|
committer | gjoranv <gv@verizonmedia.com> | 2019-08-29 15:54:22 +0200 |
commit | 6089418702460cf36e3e0a552e56ff07242af672 (patch) | |
tree | e37d16e92de2fc62b10dc449a48a25935f4f049e /config-model | |
parent | 819d1c497ef38d2d034173db4c71d3498d989a06 (diff) |
Add PrometheusHandler to metrics-proxy clusters.
+ Add unit test verifying that http handlers are set up.
Diffstat (limited to 'config-model')
2 files changed, 28 insertions, 6 deletions
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 091c5a3acb4..44d981cf1c2 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,7 @@ 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.prometheus.PrometheusHandler; import ai.vespa.metricsproxy.metric.ExternalMetrics; import ai.vespa.metricsproxy.metric.dimensions.ApplicationDimensions; import ai.vespa.metricsproxy.metric.dimensions.ApplicationDimensionsConfig; @@ -22,6 +23,7 @@ import com.yahoo.config.model.producer.AbstractConfigProducerRoot; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Zone; import com.yahoo.container.handler.ThreadpoolConfig; +import com.yahoo.container.jdisc.ThreadedHttpRequestHandler; import com.yahoo.osgi.provider.model.ComponentModel; import com.yahoo.search.config.QrStartConfig; import com.yahoo.vespa.model.VespaModel; @@ -74,6 +76,7 @@ public class MetricsProxyContainerCluster extends ContainerCluster<MetricsProxyC static final String METRICS_PROXY_BUNDLE_NAME = "com.yahoo.vespa." + METRICS_PROXY_NAME; private static final String METRICS_HANDLER_BINDING = "/metrics/v1"; + private static final String PROMETHEUS_HANDLER_BINDING = "/prometheus/v1"; static final class AppDimensionNames { static final String ZONE = "zone"; @@ -98,7 +101,6 @@ public class MetricsProxyContainerCluster extends ContainerCluster<MetricsProxyC addPlatformBundle(METRICS_PROXY_BUNDLE_FILE); addClusterComponents(); - addGenericMetricsHandler(); } private void addClusterComponents() { @@ -110,13 +112,15 @@ public class MetricsProxyContainerCluster extends ContainerCluster<MetricsProxyC addMetricsProxyComponent(RpcServer.class); addMetricsProxyComponent(SystemPollerProvider.class); addMetricsProxyComponent(VespaMetrics.class); + addHttpHandler(MetricsHandler.class, METRICS_HANDLER_BINDING); + addHttpHandler(PrometheusHandler.class, PROMETHEUS_HANDLER_BINDING); } - private void addGenericMetricsHandler() { + private void addHttpHandler(Class<? extends ThreadedHttpRequestHandler> clazz, String bindingPath) { Handler<AbstractConfigProducer<?>> metricsHandler = new Handler<>( - new ComponentModel(MetricsHandler.class.getName(), null, METRICS_PROXY_BUNDLE_NAME, null)); - metricsHandler.addServerBindings("http://*" + METRICS_HANDLER_BINDING, - "http://*" + METRICS_HANDLER_BINDING + "/*"); + new ComponentModel(clazz.getName(), null, METRICS_PROXY_BUNDLE_NAME, null)); + metricsHandler.addServerBindings("http://*" + bindingPath, + "http://*" + bindingPath + "/*"); addComponent(metricsHandler); } 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 48c3e9fdda9..db29dbba306 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 @@ -5,7 +5,10 @@ package com.yahoo.vespa.model.admin.metricsproxy; import ai.vespa.metricsproxy.core.ConsumersConfig; +import ai.vespa.metricsproxy.http.MetricsHandler; +import ai.vespa.metricsproxy.http.prometheus.PrometheusHandler; import ai.vespa.metricsproxy.metric.dimensions.ApplicationDimensionsConfig; +import com.yahoo.component.ComponentSpecification; import com.yahoo.config.model.test.MockApplicationPackage; import com.yahoo.config.provision.Zone; import com.yahoo.container.BundlesConfig; @@ -15,10 +18,14 @@ import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyContainerCluster.AppDimensionNames; import com.yahoo.vespa.model.admin.monitoring.Metric; import com.yahoo.vespa.model.admin.monitoring.MetricSet; +import com.yahoo.vespa.model.container.component.Component; +import com.yahoo.vespa.model.container.component.Handler; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import java.util.Collection; + import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyContainerCluster.METRICS_PROXY_BUNDLE_FILE; import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyContainerCluster.zoneString; import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.CLUSTER_CONFIG_ID; @@ -36,13 +43,15 @@ import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.g 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; -import static com.yahoo.vespa.model.admin.monitoring.VespaMetricsConsumer.VESPA_CONSUMER_ID; import static com.yahoo.vespa.model.admin.monitoring.DefaultVespaMetrics.defaultVespaMetricSet; import static com.yahoo.vespa.model.admin.monitoring.NetworkMetrics.networkMetricSet; import static com.yahoo.vespa.model.admin.monitoring.SystemMetrics.systemMetricSet; import static com.yahoo.vespa.model.admin.monitoring.VespaMetricSet.vespaMetricSet; +import static com.yahoo.vespa.model.admin.monitoring.VespaMetricsConsumer.VESPA_CONSUMER_ID; 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.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; @@ -90,6 +99,15 @@ public class MetricsProxyContainerClusterTest { assertFalse(config.jvm().verbosegc()); } + @Test + public void http_handlers_are_set_up() { + VespaModel model = getModel(servicesWithAdminOnly(), self_hosted); + Collection<Handler<?>> handlers = model.getAdmin().getMetricsProxyCluster().getHandlers(); + Collection<ComponentSpecification> handlerClasses = handlers.stream().map(Component::getClassId).collect(toList()); + + assertThat(handlerClasses, hasItem(ComponentSpecification.fromString(MetricsHandler.class.getName()))); + assertThat(handlerClasses, hasItem(ComponentSpecification.fromString(PrometheusHandler.class.getName()))); + } @Test public void default_public_consumer_is_set_up_for_self_hosted() { |