This is an automated email from the ASF dual-hosted git repository. andy pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/jena.git
commit 510680cf290cc14d6edf594627c15f87569701b0 Author: Andy Seaborne <[email protected]> AuthorDate: Sun Nov 3 19:48:01 2024 +0000 Separate Micrometer usage from Prometheus --- ...heusMetricsProvider.java => FusekiMetrics.java} | 46 +++++----------------- .../fuseki/metrics/MetricsProviderRegistry.java | 17 +++++++- .../jena/fuseki/metrics/SimpleMetricsProvider.java | 1 + .../fuseki/metrics/prometheus/InitPrometheus.java | 2 +- .../prometheus/PrometheusMetricsProvider.java | 27 ++----------- .../org/apache/jena/fuseki/main/FusekiServer.java | 6 +-- .../jena/fuseki/webapp/FusekiServerListener.java | 2 +- 7 files changed, 33 insertions(+), 68 deletions(-) diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/prometheus/PrometheusMetricsProvider.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/FusekiMetrics.java similarity index 61% copy from jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/prometheus/PrometheusMetricsProvider.java copy to jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/FusekiMetrics.java index e181009828..9de0485c17 100644 --- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/prometheus/PrometheusMetricsProvider.java +++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/FusekiMetrics.java @@ -1,4 +1,4 @@ -/** +/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -15,36 +15,27 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.jena.fuseki.metrics.prometheus; + +package org.apache.jena.fuseki.metrics; + +import java.io.File; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics; -import io.micrometer.core.instrument.binder.system.DiskSpaceMetrics; import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics; import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics; import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics; +import io.micrometer.core.instrument.binder.system.DiskSpaceMetrics; import io.micrometer.core.instrument.binder.system.FileDescriptorMetrics; import io.micrometer.core.instrument.binder.system.ProcessorMetrics; import io.micrometer.core.instrument.binder.system.UptimeMetrics; -import io.micrometer.prometheusmetrics.PrometheusConfig; -import io.micrometer.prometheusmetrics.PrometheusMeterRegistry; -import java.io.File; -import jakarta.servlet.ServletOutputStream; -import org.apache.jena.fuseki.metrics.MetricsProvider; -import org.apache.jena.fuseki.servlets.HttpAction; -import org.apache.jena.fuseki.servlets.ServletOps; -import org.apache.jena.riot.WebContent; /** + * The choice of metrics for Fuseki. */ -public class PrometheusMetricsProvider implements MetricsProvider { - - private PrometheusMeterRegistry meterRegistry; - - public PrometheusMetricsProvider() { - meterRegistry = new PrometheusMeterRegistry( PrometheusConfig.DEFAULT ); - meterRegistry.config().commonTags( "application", "fuseki" ); +public class FusekiMetrics { + public static void registerMetrics(MeterRegistry meterRegistry) { new FileDescriptorMetrics().bindTo( meterRegistry ); new ProcessorMetrics().bindTo( meterRegistry ); new ClassLoaderMetrics().bindTo( meterRegistry ); @@ -59,23 +50,4 @@ public class PrometheusMetricsProvider implements MetricsProvider { new JvmMemoryMetrics().bindTo( meterRegistry ); new JvmThreadMetrics().bindTo( meterRegistry ); } - - @Override - public MeterRegistry getMeterRegistry() { - return meterRegistry; - } - - @Override - public void scrape(HttpAction action) { - try (ServletOutputStream out = action.getResponseOutputStream()) { - ServletOps.success(action); - action.setResponseContentType( WebContent.contentTypeTextPlain ); - action.setResponseCharacterEncoding( WebContent.charsetUTF8 ); - - out.write( meterRegistry.scrape().getBytes() ); - } catch (Throwable t) { - ServletOps.errorOccurred( t ); - } - } - } diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/MetricsProviderRegistry.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/MetricsProviderRegistry.java index bac6b9d16e..cf37350da7 100644 --- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/MetricsProviderRegistry.java +++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/MetricsProviderRegistry.java @@ -30,6 +30,8 @@ public class MetricsProviderRegistry { return metricsProvider; } + /** @deprecated Use {@link #set(MetricsProvider)} */ + @Deprecated(forRemoval = true) public static void put(MetricsProvider metricsProvider, int priority) { if (priority < MetricsProviderRegistry.priority) { MetricsProviderRegistry.priority = priority; @@ -37,8 +39,21 @@ public class MetricsProviderRegistry { } } - /** Bind each data access point in a DataAccessPointRegistry to Prometheus. */ + public static void set(MetricsProvider metricsProvider) { + MetricsProviderRegistry.priority = Integer.MAX_VALUE; + MetricsProviderRegistry.metricsProvider = metricsProvider; + } + + /* + * @deprecated Use {@link #dataAccessPointMetrics}. + */ + @Deprecated(forRemoval = true) public static void bindPrometheus(DataAccessPointRegistry dapRegistry) { + dataAccessPointMetrics(dapRegistry); + } + + /** Bind each data access point in a DataAccessPointRegistry to the system Micrometer {@link MeterRegistry}. */ + public static void dataAccessPointMetrics(DataAccessPointRegistry dapRegistry) { try { MeterRegistry meterRegistry = MetricsProviderRegistry.get().getMeterRegistry(); if (meterRegistry != null) { diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/SimpleMetricsProvider.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/SimpleMetricsProvider.java index 7a2bca77a3..6cd62f0699 100644 --- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/SimpleMetricsProvider.java +++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/SimpleMetricsProvider.java @@ -44,6 +44,7 @@ public class SimpleMetricsProvider implements MetricsProvider { HttpServletResponse response = action.getResponse(); StringBuilder sbuff = new StringBuilder(1000); + // Text-based dump format. Unstable. try { meterRegistry.forEachMeter(meter->{ Id id = meter.getId(); diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/prometheus/InitPrometheus.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/prometheus/InitPrometheus.java index 76bad737d4..8da041724b 100644 --- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/prometheus/InitPrometheus.java +++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/prometheus/InitPrometheus.java @@ -24,7 +24,7 @@ public class InitPrometheus implements JenaSubsystemLifecycle { @Override public void start() { - MetricsProviderRegistry.put(new PrometheusMetricsProvider(), level()); + MetricsProviderRegistry.set(new PrometheusMetricsProvider()); } @Override diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/prometheus/PrometheusMetricsProvider.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/prometheus/PrometheusMetricsProvider.java index e181009828..c2cd09e4f2 100644 --- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/prometheus/PrometheusMetricsProvider.java +++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/prometheus/PrometheusMetricsProvider.java @@ -18,24 +18,17 @@ package org.apache.jena.fuseki.metrics.prometheus; import io.micrometer.core.instrument.MeterRegistry; -import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics; -import io.micrometer.core.instrument.binder.system.DiskSpaceMetrics; -import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics; -import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics; -import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics; -import io.micrometer.core.instrument.binder.system.FileDescriptorMetrics; -import io.micrometer.core.instrument.binder.system.ProcessorMetrics; -import io.micrometer.core.instrument.binder.system.UptimeMetrics; import io.micrometer.prometheusmetrics.PrometheusConfig; import io.micrometer.prometheusmetrics.PrometheusMeterRegistry; -import java.io.File; import jakarta.servlet.ServletOutputStream; +import org.apache.jena.fuseki.metrics.FusekiMetrics; import org.apache.jena.fuseki.metrics.MetricsProvider; import org.apache.jena.fuseki.servlets.HttpAction; import org.apache.jena.fuseki.servlets.ServletOps; import org.apache.jena.riot.WebContent; /** + * Prometheus setup. */ public class PrometheusMetricsProvider implements MetricsProvider { @@ -44,20 +37,7 @@ public class PrometheusMetricsProvider implements MetricsProvider { public PrometheusMetricsProvider() { meterRegistry = new PrometheusMeterRegistry( PrometheusConfig.DEFAULT ); meterRegistry.config().commonTags( "application", "fuseki" ); - - new FileDescriptorMetrics().bindTo( meterRegistry ); - new ProcessorMetrics().bindTo( meterRegistry ); - new ClassLoaderMetrics().bindTo( meterRegistry ); - new UptimeMetrics().bindTo( meterRegistry ); - for (File root : File.listRoots()) { - new DiskSpaceMetrics(root).bindTo( meterRegistry ); - } - // Has a warning about resource closing. - @SuppressWarnings("resource") - JvmGcMetrics x = new JvmGcMetrics(); - x.bindTo( meterRegistry ); - new JvmMemoryMetrics().bindTo( meterRegistry ); - new JvmThreadMetrics().bindTo( meterRegistry ); + FusekiMetrics.registerMetrics(meterRegistry); } @Override @@ -77,5 +57,4 @@ public class PrometheusMetricsProvider implements MetricsProvider { ServletOps.errorOccurred( t ); } } - } diff --git a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java index c7f1c0aca1..a63361f5f4 100644 --- a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java +++ b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java @@ -1372,10 +1372,8 @@ public class FusekiServer { } private void bindPrometheus(DataAccessPointRegistry dapRegistry) { - if ( withMetrics ) { - // Connect to Prometheus metrics. - MetricsProviderRegistry.bindPrometheus(dapRegistry); - } + if ( withMetrics ) + MetricsProviderRegistry.dataAccessPointMetrics(dapRegistry); } /** diff --git a/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/webapp/FusekiServerListener.java b/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/webapp/FusekiServerListener.java index f274dadf0c..469e396f32 100644 --- a/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/webapp/FusekiServerListener.java +++ b/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/webapp/FusekiServerListener.java @@ -102,7 +102,7 @@ public class FusekiServerListener implements ServletContextListener { //Fuseki.configLog.info("Register: "+dap.getName()); }); - MetricsProviderRegistry.bindPrometheus(dataAccessPointRegistry); + MetricsProviderRegistry.dataAccessPointMetrics(dataAccessPointRegistry); } catch (Throwable th) { Fuseki.serverLog.error("Exception in initialization: {}", th.getMessage());
