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

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

commit b21ab0e29ca69abab345102bf4f0a5e6b232547d
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Sat Feb 24 12:18:07 2024 +0100

    CAMEL-18858: camel-core - Mark route as created by Kamelet so we know this, 
so we can filter out in tooling and whereelse (kamelet is a blackbox)
---
 .../main/java/org/apache/camel/spi/UnitOfWork.java | 15 +++++++++++++++
 .../camel/impl/engine/DefaultUnitOfWork.java       | 22 ++++++++++++++++++++++
 .../management/mbean/ManagedCamelContext.java      | 10 +++++++---
 3 files changed, 44 insertions(+), 3 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/UnitOfWork.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/UnitOfWork.java
index b9d28cb530e..75b5de4cd2a 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/UnitOfWork.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/UnitOfWork.java
@@ -203,6 +203,21 @@ public interface UnitOfWork {
      */
     int routeStackLevel();
 
+    /**
+     * Gets the {@link Route} level-of-depth that this {@link UnitOfWork} 
currently is being routed through.
+     * <p/>
+     * Notice that an {@link Exchange} can be routed through multiple routes 
and thus the level of depth can change over
+     * time.
+     * <p>
+     * If level is 1 then the current route is at the first route (original 
route). Maybe be <tt>0</tt> if not routed
+     * through a route currently.
+     *
+     * @param  includeRouteTemplate whether to include routes created by route 
templates
+     * @param  includeKamelet       whether to include routes created by 
kamelets
+     * @return                      the route level-of-depth
+     */
+    int routeStackLevel(boolean includeRouteTemplate, boolean includeKamelet);
+
     /**
      * Whether the unit of work should call the before/after process methods 
or not.
      */
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
index c5230567ec3..51f8680b33f 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
@@ -367,6 +367,28 @@ public class DefaultUnitOfWork implements UnitOfWork {
         return routes.size();
     }
 
+    public int routeStackLevel(boolean includeRouteTemplate, boolean 
includeKamelet) {
+        if (includeKamelet && includeRouteTemplate) {
+            return routes.size();
+        }
+
+        int level = 0;
+        for (Route r : routes) {
+            if (r.isCreatedByKamelet()) {
+                if (includeKamelet) {
+                    level++;
+                }
+            } else if (r.isCreatedByRouteTemplate()) {
+                if (includeRouteTemplate) {
+                    level++;
+                }
+            } else {
+                level++;
+            }
+        }
+        return level;
+    }
+
     @Override
     public boolean isBeforeAfterProcess() {
         return false;
diff --git 
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
 
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
index c964039c948..000b07c00de 100644
--- 
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
+++ 
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
@@ -61,10 +61,14 @@ public class ManagedCamelContext extends 
ManagedPerformanceCounter implements Ti
     private final LoadTriplet load = new LoadTriplet();
     private final LoadThroughput thp = new LoadThroughput();
     private final String jmxDomain;
+    private final boolean includeRouteTemplates;
+    private final boolean includeKamelets;
 
     public ManagedCamelContext(CamelContext context) {
         this.context = context;
         this.jmxDomain = 
context.getManagementStrategy().getManagementAgent().getMBeanObjectDomainName();
+        this.includeRouteTemplates = 
context.getManagementStrategy().getManagementAgent().getRegisterRoutesCreateByTemplate();
+        this.includeKamelets = 
context.getManagementStrategy().getManagementAgent().getRegisterRoutesCreateByKamelet();
     }
 
     @Override
@@ -83,7 +87,7 @@ public class ManagedCamelContext extends 
ManagedPerformanceCounter implements Ti
         // we should only count this as 1 instead of 3.
         UnitOfWork uow = exchange.getUnitOfWork();
         if (uow != null) {
-            int level = uow.routeStackLevel();
+            int level = uow.routeStackLevel(includeRouteTemplates, 
includeKamelets);
             if (level <= 1) {
                 super.completedExchange(exchange, time);
             }
@@ -100,7 +104,7 @@ public class ManagedCamelContext extends 
ManagedPerformanceCounter implements Ti
         // we should only count this as 1 instead of 3.
         UnitOfWork uow = exchange.getUnitOfWork();
         if (uow != null) {
-            int level = uow.routeStackLevel();
+            int level = uow.routeStackLevel(includeRouteTemplates, 
includeKamelets);
             if (level <= 1) {
                 super.failedExchange(exchange);
             }
@@ -117,7 +121,7 @@ public class ManagedCamelContext extends 
ManagedPerformanceCounter implements Ti
         // we should only count this as 1 instead of 3.
         UnitOfWork uow = exchange.getUnitOfWork();
         if (uow != null) {
-            int level = uow.routeStackLevel();
+            int level = uow.routeStackLevel(includeRouteTemplates, 
includeKamelets);
             if (level <= 1) {
                 super.processExchange(exchange, type);
             }

Reply via email to