This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new b8f7e476965 CAMEL-21649: camel-metrics - Add option to configure 
InstrumentedThreadPoolFactory
b8f7e476965 is described below

commit b8f7e4769656134f86786bb543af23420a7ce0cf
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Fri Jan 24 09:37:15 2025 +0100

    CAMEL-21649: camel-metrics - Add option to configure 
InstrumentedThreadPoolFactory
---
 .../main/camel-main-configuration-metadata.json    |  1 +
 .../prometheus/MicrometerPrometheusConfigurer.java |  6 ++++++
 .../prometheus/MicrometerPrometheus.java           | 22 ++++++++++++++++++++++
 .../MetricsConfigurationPropertiesConfigurer.java  |  7 +++++++
 .../camel-main-configuration-metadata.json         |  1 +
 core/camel-main/src/main/docs/main.adoc            |  3 ++-
 .../camel/main/MetricsConfigurationProperties.java | 21 +++++++++++++++++++++
 7 files changed, 60 insertions(+), 1 deletion(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
index 5d75bf53c2a..ef2a4f79f63 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
@@ -190,6 +190,7 @@
     { "name": "camel.metrics.clearOnReload", "description": "Clear the 
captured metrics data when Camel is reloading routes such as when using Camel 
JBang.", "sourceType": "org.apache.camel.main.MetricsConfigurationProperties", 
"type": "boolean", "javaType": "boolean", "defaultValue": true },
     { "name": "camel.metrics.enabled", "description": "To enable Micrometer 
metrics.", "sourceType": 
"org.apache.camel.main.MetricsConfigurationProperties", "type": "boolean", 
"javaType": "boolean", "defaultValue": "false" },
     { "name": "camel.metrics.enableExchangeEventNotifier", "description": "Set 
whether to enable the MicrometerExchangeEventNotifier for capturing metrics on 
exchange processing times.", "sourceType": 
"org.apache.camel.main.MetricsConfigurationProperties", "type": "boolean", 
"javaType": "boolean", "defaultValue": true },
+    { "name": "camel.metrics.enableInstrumentedThreadPoolFactory", 
"description": "Set whether to gather performance information about Camel 
Thread Pools by injecting an InstrumentedThreadPoolFactory.", "sourceType": 
"org.apache.camel.main.MetricsConfigurationProperties", "type": "boolean", 
"javaType": "boolean", "defaultValue": false },
     { "name": "camel.metrics.enableMessageHistory", "description": "Set 
whether to enable the MicrometerMessageHistoryFactory for capturing metrics on 
individual route node processing times. Depending on the number of configured 
route nodes, there is the potential to create a large volume of metrics. 
Therefore, this option is disabled by default.", "sourceType": 
"org.apache.camel.main.MetricsConfigurationProperties", "type": "boolean", 
"javaType": "boolean", "defaultValue": "false" },
     { "name": "camel.metrics.enableRouteEventNotifier", "description": "Set 
whether to enable the MicrometerRouteEventNotifier for capturing metrics on the 
total number of routes and total number of routes running.", "sourceType": 
"org.apache.camel.main.MetricsConfigurationProperties", "type": "boolean", 
"javaType": "boolean", "defaultValue": true },
     { "name": "camel.metrics.enableRoutePolicy", "description": "Set whether 
to enable the MicrometerRoutePolicyFactory for capturing metrics on route 
processing times.", "sourceType": 
"org.apache.camel.main.MetricsConfigurationProperties", "type": "boolean", 
"javaType": "boolean", "defaultValue": true },
diff --git 
a/components/camel-micrometer-prometheus/src/generated/java/org/apache/camel/component/micrometer/prometheus/MicrometerPrometheusConfigurer.java
 
b/components/camel-micrometer-prometheus/src/generated/java/org/apache/camel/component/micrometer/prometheus/MicrometerPrometheusConfigurer.java
index 265a436b053..d3747fd89e7 100644
--- 
a/components/camel-micrometer-prometheus/src/generated/java/org/apache/camel/component/micrometer/prometheus/MicrometerPrometheusConfigurer.java
+++ 
b/components/camel-micrometer-prometheus/src/generated/java/org/apache/camel/component/micrometer/prometheus/MicrometerPrometheusConfigurer.java
@@ -30,6 +30,8 @@ public class MicrometerPrometheusConfigurer extends 
org.apache.camel.support.com
         case "clearOnReload": target.setClearOnReload(property(camelContext, 
boolean.class, value)); return true;
         case "enableexchangeeventnotifier":
         case "enableExchangeEventNotifier": 
target.setEnableExchangeEventNotifier(property(camelContext, boolean.class, 
value)); return true;
+        case "enableinstrumentedthreadpoolfactory":
+        case "enableInstrumentedThreadPoolFactory": 
target.setEnableInstrumentedThreadPoolFactory(property(camelContext, 
boolean.class, value)); return true;
         case "enablemessagehistory":
         case "enableMessageHistory": 
target.setEnableMessageHistory(property(camelContext, boolean.class, value)); 
return true;
         case "enablerouteeventnotifier":
@@ -57,6 +59,8 @@ public class MicrometerPrometheusConfigurer extends 
org.apache.camel.support.com
         case "clearOnReload": return boolean.class;
         case "enableexchangeeventnotifier":
         case "enableExchangeEventNotifier": return boolean.class;
+        case "enableinstrumentedthreadpoolfactory":
+        case "enableInstrumentedThreadPoolFactory": return boolean.class;
         case "enablemessagehistory":
         case "enableMessageHistory": return boolean.class;
         case "enablerouteeventnotifier":
@@ -85,6 +89,8 @@ public class MicrometerPrometheusConfigurer extends 
org.apache.camel.support.com
         case "clearOnReload": return target.isClearOnReload();
         case "enableexchangeeventnotifier":
         case "enableExchangeEventNotifier": return 
target.isEnableExchangeEventNotifier();
+        case "enableinstrumentedthreadpoolfactory":
+        case "enableInstrumentedThreadPoolFactory": return 
target.isEnableInstrumentedThreadPoolFactory();
         case "enablemessagehistory":
         case "enableMessageHistory": return target.isEnableMessageHistory();
         case "enablerouteeventnotifier":
diff --git 
a/components/camel-micrometer-prometheus/src/main/java/org/apache/camel/component/micrometer/prometheus/MicrometerPrometheus.java
 
b/components/camel-micrometer-prometheus/src/main/java/org/apache/camel/component/micrometer/prometheus/MicrometerPrometheus.java
index fa8b3d54152..f29b08e8a7d 100644
--- 
a/components/camel-micrometer-prometheus/src/main/java/org/apache/camel/component/micrometer/prometheus/MicrometerPrometheus.java
+++ 
b/components/camel-micrometer-prometheus/src/main/java/org/apache/camel/component/micrometer/prometheus/MicrometerPrometheus.java
@@ -47,6 +47,7 @@ import 
org.apache.camel.component.micrometer.messagehistory.MicrometerMessageHis
 import 
org.apache.camel.component.micrometer.messagehistory.MicrometerMessageHistoryNamingStrategy;
 import 
org.apache.camel.component.micrometer.routepolicy.MicrometerRoutePolicyFactory;
 import 
org.apache.camel.component.micrometer.routepolicy.MicrometerRoutePolicyNamingStrategy;
+import org.apache.camel.component.micrometer.spi.InstrumentedThreadPoolFactory;
 import org.apache.camel.component.platform.http.PlatformHttpComponent;
 import org.apache.camel.component.platform.http.main.MainHttpServer;
 import org.apache.camel.component.platform.http.vertx.VertxPlatformHttpRouter;
@@ -95,6 +96,8 @@ public class MicrometerPrometheus extends ServiceSupport 
implements CamelMetrics
     private boolean enableExchangeEventNotifier = true;
     @Metadata(defaultValue = "true")
     private boolean enableRouteEventNotifier = true;
+    @Metadata(defaultValue = "false")
+    private boolean enableInstrumentedThreadPoolFactory;
     @Metadata(defaultValue = "true")
     private boolean clearOnReload = true;
     @Metadata(defaultValue = "0.0.4", enums = "0.0.4,1.0.0")
@@ -187,6 +190,18 @@ public class MicrometerPrometheus extends ServiceSupport 
implements CamelMetrics
         this.enableRouteEventNotifier = enableRouteEventNotifier;
     }
 
+    public boolean isEnableInstrumentedThreadPoolFactory() {
+        return enableInstrumentedThreadPoolFactory;
+    }
+
+    /**
+     * Set whether to gather performance information about Camel Thread Pools 
by injecting an
+     * InstrumentedThreadPoolFactory.
+     */
+    public void setEnableInstrumentedThreadPoolFactory(boolean 
enableInstrumentedThreadPoolFactory) {
+        this.enableInstrumentedThreadPoolFactory = 
enableInstrumentedThreadPoolFactory;
+    }
+
     public boolean isClearOnReload() {
         return clearOnReload;
     }
@@ -316,6 +331,13 @@ public class MicrometerPrometheus extends ServiceSupport 
implements CamelMetrics
             camelContext.setMessageHistoryFactory(factory);
         }
 
+        if (isEnableInstrumentedThreadPoolFactory()) {
+            InstrumentedThreadPoolFactory instrumentedThreadPoolFactory = new 
InstrumentedThreadPoolFactory(
+                    meterRegistry,
+                    
camelContext.getExecutorServiceManager().getThreadPoolFactory());
+            
camelContext.getExecutorServiceManager().setThreadPoolFactory(instrumentedThreadPoolFactory);
+        }
+
         if (clearOnReload) {
             camelContext.getManagementStrategy().addEventNotifier(new 
SimpleEventNotifierSupport() {
 
diff --git 
a/core/camel-main/src/generated/java/org/apache/camel/main/MetricsConfigurationPropertiesConfigurer.java
 
b/core/camel-main/src/generated/java/org/apache/camel/main/MetricsConfigurationPropertiesConfigurer.java
index d3d2739b918..bd05608129b 100644
--- 
a/core/camel-main/src/generated/java/org/apache/camel/main/MetricsConfigurationPropertiesConfigurer.java
+++ 
b/core/camel-main/src/generated/java/org/apache/camel/main/MetricsConfigurationPropertiesConfigurer.java
@@ -25,6 +25,7 @@ public class MetricsConfigurationPropertiesConfigurer extends 
org.apache.camel.s
         map.put("Binders", java.lang.String.class);
         map.put("ClearOnReload", boolean.class);
         map.put("EnableExchangeEventNotifier", boolean.class);
+        map.put("EnableInstrumentedThreadPoolFactory", boolean.class);
         map.put("EnableMessageHistory", boolean.class);
         map.put("EnableRouteEventNotifier", boolean.class);
         map.put("EnableRoutePolicy", boolean.class);
@@ -45,6 +46,8 @@ public class MetricsConfigurationPropertiesConfigurer extends 
org.apache.camel.s
         case "clearOnReload": target.setClearOnReload(property(camelContext, 
boolean.class, value)); return true;
         case "enableexchangeeventnotifier":
         case "enableExchangeEventNotifier": 
target.setEnableExchangeEventNotifier(property(camelContext, boolean.class, 
value)); return true;
+        case "enableinstrumentedthreadpoolfactory":
+        case "enableInstrumentedThreadPoolFactory": 
target.setEnableInstrumentedThreadPoolFactory(property(camelContext, 
boolean.class, value)); return true;
         case "enablemessagehistory":
         case "enableMessageHistory": 
target.setEnableMessageHistory(property(camelContext, boolean.class, value)); 
return true;
         case "enablerouteeventnotifier":
@@ -76,6 +79,8 @@ public class MetricsConfigurationPropertiesConfigurer extends 
org.apache.camel.s
         case "clearOnReload": return boolean.class;
         case "enableexchangeeventnotifier":
         case "enableExchangeEventNotifier": return boolean.class;
+        case "enableinstrumentedthreadpoolfactory":
+        case "enableInstrumentedThreadPoolFactory": return boolean.class;
         case "enablemessagehistory":
         case "enableMessageHistory": return boolean.class;
         case "enablerouteeventnotifier":
@@ -103,6 +108,8 @@ public class MetricsConfigurationPropertiesConfigurer 
extends org.apache.camel.s
         case "clearOnReload": return target.isClearOnReload();
         case "enableexchangeeventnotifier":
         case "enableExchangeEventNotifier": return 
target.isEnableExchangeEventNotifier();
+        case "enableinstrumentedthreadpoolfactory":
+        case "enableInstrumentedThreadPoolFactory": return 
target.isEnableInstrumentedThreadPoolFactory();
         case "enablemessagehistory":
         case "enableMessageHistory": return target.isEnableMessageHistory();
         case "enablerouteeventnotifier":
diff --git 
a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
 
b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
index 5d75bf53c2a..ef2a4f79f63 100644
--- 
a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
+++ 
b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
@@ -190,6 +190,7 @@
     { "name": "camel.metrics.clearOnReload", "description": "Clear the 
captured metrics data when Camel is reloading routes such as when using Camel 
JBang.", "sourceType": "org.apache.camel.main.MetricsConfigurationProperties", 
"type": "boolean", "javaType": "boolean", "defaultValue": true },
     { "name": "camel.metrics.enabled", "description": "To enable Micrometer 
metrics.", "sourceType": 
"org.apache.camel.main.MetricsConfigurationProperties", "type": "boolean", 
"javaType": "boolean", "defaultValue": "false" },
     { "name": "camel.metrics.enableExchangeEventNotifier", "description": "Set 
whether to enable the MicrometerExchangeEventNotifier for capturing metrics on 
exchange processing times.", "sourceType": 
"org.apache.camel.main.MetricsConfigurationProperties", "type": "boolean", 
"javaType": "boolean", "defaultValue": true },
+    { "name": "camel.metrics.enableInstrumentedThreadPoolFactory", 
"description": "Set whether to gather performance information about Camel 
Thread Pools by injecting an InstrumentedThreadPoolFactory.", "sourceType": 
"org.apache.camel.main.MetricsConfigurationProperties", "type": "boolean", 
"javaType": "boolean", "defaultValue": false },
     { "name": "camel.metrics.enableMessageHistory", "description": "Set 
whether to enable the MicrometerMessageHistoryFactory for capturing metrics on 
individual route node processing times. Depending on the number of configured 
route nodes, there is the potential to create a large volume of metrics. 
Therefore, this option is disabled by default.", "sourceType": 
"org.apache.camel.main.MetricsConfigurationProperties", "type": "boolean", 
"javaType": "boolean", "defaultValue": "false" },
     { "name": "camel.metrics.enableRouteEventNotifier", "description": "Set 
whether to enable the MicrometerRouteEventNotifier for capturing metrics on the 
total number of routes and total number of routes running.", "sourceType": 
"org.apache.camel.main.MetricsConfigurationProperties", "type": "boolean", 
"javaType": "boolean", "defaultValue": true },
     { "name": "camel.metrics.enableRoutePolicy", "description": "Set whether 
to enable the MicrometerRoutePolicyFactory for capturing metrics on route 
processing times.", "sourceType": 
"org.apache.camel.main.MetricsConfigurationProperties", "type": "boolean", 
"javaType": "boolean", "defaultValue": true },
diff --git a/core/camel-main/src/main/docs/main.adoc 
b/core/camel-main/src/main/docs/main.adoc
index b771efc13b8..c4a41bb9cb4 100644
--- a/core/camel-main/src/main/docs/main.adoc
+++ b/core/camel-main/src/main/docs/main.adoc
@@ -480,7 +480,7 @@ The camel.opentelemetry supports 5 options, which are 
listed below.
 
 
 === Camel Micrometer Metrics configurations
-The camel.metrics supports 11 options, which are listed below.
+The camel.metrics supports 12 options, which are listed below.
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
@@ -489,6 +489,7 @@ The camel.metrics supports 11 options, which are listed 
below.
 | *camel.metrics.clearOnReload* | Clear the captured metrics data when Camel 
is reloading routes such as when using Camel JBang. | true | boolean
 | *camel.metrics.enabled* | To enable Micrometer metrics. | false | boolean
 | *camel.metrics.enableExchange{zwsp}EventNotifier* | Set whether to enable 
the MicrometerExchangeEventNotifier for capturing metrics on exchange 
processing times. | true | boolean
+| *camel.metrics.enable{zwsp}InstrumentedThreadPoolFactory* | Set whether to 
gather performance information about Camel Thread Pools by injecting an 
InstrumentedThreadPoolFactory. | false | boolean
 | *camel.metrics.enableMessage{zwsp}History* | Set whether to enable the 
MicrometerMessageHistoryFactory for capturing metrics on individual route node 
processing times. Depending on the number of configured route nodes, there is 
the potential to create a large volume of metrics. Therefore, this option is 
disabled by default. | false | boolean
 | *camel.metrics.enableRouteEvent{zwsp}Notifier* | Set whether to enable the 
MicrometerRouteEventNotifier for capturing metrics on the total number of 
routes and total number of routes running. | true | boolean
 | *camel.metrics.enableRoute{zwsp}Policy* | Set whether to enable the 
MicrometerRoutePolicyFactory for capturing metrics on route processing times. | 
true | boolean
diff --git 
a/core/camel-main/src/main/java/org/apache/camel/main/MetricsConfigurationProperties.java
 
b/core/camel-main/src/main/java/org/apache/camel/main/MetricsConfigurationProperties.java
index cd3a206c87a..02e9b96c78d 100644
--- 
a/core/camel-main/src/main/java/org/apache/camel/main/MetricsConfigurationProperties.java
+++ 
b/core/camel-main/src/main/java/org/apache/camel/main/MetricsConfigurationProperties.java
@@ -40,6 +40,8 @@ public class MetricsConfigurationProperties implements 
BootstrapCloseable {
     private boolean enableExchangeEventNotifier = true;
     @Metadata(defaultValue = "true")
     private boolean enableRouteEventNotifier = true;
+    @Metadata(defaultValue = "false")
+    private boolean enableInstrumentedThreadPoolFactory;
     @Metadata(defaultValue = "true")
     private boolean clearOnReload = true;
     @Metadata(defaultValue = "0.0.4", enums = "0.0.4,1.0.0")
@@ -141,6 +143,17 @@ public class MetricsConfigurationProperties implements 
BootstrapCloseable {
         this.enableRouteEventNotifier = enableRouteEventNotifier;
     }
 
+    public boolean isEnableInstrumentedThreadPoolFactory() {
+        return enableInstrumentedThreadPoolFactory;
+    }
+
+    /**
+     * Set whether to gather performance information about Camel Thread Pools 
by injecting an InstrumentedThreadPoolFactory.
+     */
+    public void setEnableInstrumentedThreadPoolFactory(boolean 
enableInstrumentedThreadPoolFactory) {
+        this.enableInstrumentedThreadPoolFactory = 
enableInstrumentedThreadPoolFactory;
+    }
+
     public boolean isClearOnReload() {
         return clearOnReload;
     }
@@ -261,6 +274,14 @@ public class MetricsConfigurationProperties implements 
BootstrapCloseable {
         return this;
     }
 
+    /**
+     * Set whether to gather performance information about Camel Thread Pools 
by injecting an InstrumentedThreadPoolFactory.
+     */
+    public MetricsConfigurationProperties 
withEnableInstrumentedThreadPoolFactory(boolean 
enableInstrumentedThreadPoolFactory) {
+        this.enableInstrumentedThreadPoolFactory = 
enableInstrumentedThreadPoolFactory;
+        return this;
+    }
+
     /**
      * Clear the captured metrics data when Camel is reloading routes such as 
when using Camel JBang.
      */

Reply via email to