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());

Reply via email to