From 47188f0c7749ec328e4f9bc555c44b8ab2b90182 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Fri, 3 Mar 2023 15:16:12 +0100 Subject: Use the metric provider returned after configuration --- .../java/com/yahoo/application/Application.java | 2 +- .../com/yahoo/application/ApplicationTest.java | 22 ++++++++++++++++++ .../container/components/ComponentWithMetrics.java | 27 ++++++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 application/src/test/java/com/yahoo/application/container/components/ComponentWithMetrics.java (limited to 'application') diff --git a/application/src/main/java/com/yahoo/application/Application.java b/application/src/main/java/com/yahoo/application/Application.java index b4857d18459..d9234584630 100644 --- a/application/src/main/java/com/yahoo/application/Application.java +++ b/application/src/main/java/com/yahoo/application/Application.java @@ -345,7 +345,7 @@ public final class Application implements AutoCloseable { } // generate the services xml and load the container - private Application build() throws Exception { + public Application build() throws Exception { Application app = null; Exception exception = null; diff --git a/application/src/test/java/com/yahoo/application/ApplicationTest.java b/application/src/test/java/com/yahoo/application/ApplicationTest.java index 5b4a68756f0..6b394cdebd9 100644 --- a/application/src/test/java/com/yahoo/application/ApplicationTest.java +++ b/application/src/test/java/com/yahoo/application/ApplicationTest.java @@ -2,6 +2,7 @@ package com.yahoo.application; import com.yahoo.application.container.MockServer; +import com.yahoo.application.container.components.ComponentWithMetrics; import com.yahoo.application.container.docprocs.MockDocproc; import com.yahoo.application.container.handler.Request; import com.yahoo.application.container.handler.Response; @@ -15,6 +16,8 @@ import com.yahoo.docproc.Processing; import com.yahoo.document.DocumentRemove; import com.yahoo.document.DocumentType; import com.yahoo.jdisc.handler.RequestHandler; +import com.yahoo.metrics.simple.Bucket; +import com.yahoo.metrics.simple.jdisc.SimpleMetricConsumer; import com.yahoo.search.Query; import com.yahoo.search.Result; import com.yahoo.search.handler.SearchHandler; @@ -262,6 +265,25 @@ public class ApplicationTest { } } + @Test + void application_generation_metric() throws Exception { + try (ApplicationFacade app = new ApplicationFacade(Application.fromBuilder(new Application.Builder().container("default", new Application.Builder.Container() + .component(ComponentWithMetrics.class))))) { + var component = (ComponentWithMetrics)app.getComponentById(ComponentWithMetrics.class.getName()); + assertNotNull(component); + var metrics = (SimpleMetricConsumer)component.metrics().newInstance(); // not actually a new instance + assertNotNull(metrics); + int maxWaitMs = 10000; + Bucket snapshot = null; + while (maxWaitMs-- > 0 && ( snapshot = metrics.receiver().getSnapshot() ) == null) { + Thread.sleep(1); + } + assertNotNull(snapshot); + assertEquals(1, snapshot.getValuesForMetric("application_generation").size()); + assertEquals(0, snapshot.getValuesForMetric("application_generation").iterator().next().getValue().getLast()); + } + } + @Test void component_with_config() throws Exception { MockApplicationConfig config = new MockApplicationConfig(new MockApplicationConfig.Builder().mystruct(new MockApplicationConfig.Mystruct.Builder().id("foo").value("bar"))); diff --git a/application/src/test/java/com/yahoo/application/container/components/ComponentWithMetrics.java b/application/src/test/java/com/yahoo/application/container/components/ComponentWithMetrics.java new file mode 100644 index 00000000000..45bb9bd846d --- /dev/null +++ b/application/src/test/java/com/yahoo/application/container/components/ComponentWithMetrics.java @@ -0,0 +1,27 @@ +package com.yahoo.application.container.components; + +import com.yahoo.metrics.simple.jdisc.JdiscMetricsFactory; +import com.yahoo.search.Query; +import com.yahoo.search.Result; +import com.yahoo.search.Searcher; +import com.yahoo.search.searchchain.Execution; + +/** + * @author bratseth + */ +public class ComponentWithMetrics extends Searcher { + + private final JdiscMetricsFactory metrics; + + public ComponentWithMetrics(JdiscMetricsFactory metrics) { + this.metrics = metrics; + } + + public JdiscMetricsFactory metrics() { return metrics; } + + @Override + public Result search(Query query, Execution execution) { + return execution.search(query); + } + +} -- cgit v1.2.3