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 930aa79974d Kamelet debug (#11999)
930aa79974d is described below

commit 930aa79974da0d77c2b0856ad1dc32789c4d85f6
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Wed Nov 15 14:33:02 2023 +0100

    Kamelet debug (#11999)
    
    * CAMEL-20112: camel-core/camel-jbang: Do not debug inside 
kamelets/rest-dsl as it should be like a black-box and focus only debugging on 
custom routes.
    
    * camel-jbang - Debug command to show source in history with line number
    
    * CAMEL-20112: camel-core/camel-jbang: Do not debug inside 
kamelets/rest-dsl as it should be like a black-box and focus only debugging on 
custom routes.
---
 .../impl/debugger/DefaultBacklogDebugger.java      | 31 ++++++++++++++++++----
 .../apache/camel/impl/engine/DefaultChannel.java   | 19 ++++++++-----
 .../apache/camel/impl/console/DebugDevConsole.java | 20 +++++++++++++-
 .../camel/dsl/jbang/core/commands/Debug.java       | 10 +++++--
 4 files changed, 65 insertions(+), 15 deletions(-)

diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java
index abb841b6c4c..e37fccaecc5 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java
@@ -17,6 +17,7 @@
 package org.apache.camel.impl.debugger;
 
 import java.util.LinkedHashSet;
+import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
@@ -28,7 +29,9 @@ import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
+import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.LoggingLevel;
+import org.apache.camel.MessageHistory;
 import org.apache.camel.NamedNode;
 import org.apache.camel.NamedRoute;
 import org.apache.camel.NoTypeConversionAvailableException;
@@ -945,17 +948,19 @@ public final class DefaultBacklogDebugger extends 
ServiceSupport implements Back
         }
 
         @Override
+        @SuppressWarnings("unchecked")
         public void onEvent(Exchange exchange, ExchangeEvent event, NamedNode 
definition) {
             if (event instanceof ExchangeCompletedEvent || event instanceof 
CamelEvent.ExchangeFailedEvent) {
                 Throwable cause = null;
                 if (event instanceof CamelEvent.ExchangeFailedEvent fe) {
                     cause = fe.getCause();
                 }
+                NamedRoute route = getOriginalRoute(exchange);
                 String completedId = event.getExchange().getExchangeId();
                 try {
                     if (isSingleStepIncludeStartEnd() && singleStepExchangeId 
!= null
                             && singleStepExchangeId.equals(completedId)) {
-                        doCompleted(exchange, definition, cause);
+                        doCompleted(exchange, definition, route, cause);
                     }
                 } finally {
                     logger.log("ExchangeId: " + completedId + " is completed, 
so exiting single step mode.");
@@ -964,17 +969,33 @@ public final class DefaultBacklogDebugger extends 
ServiceSupport implements Back
             }
         }
 
-        private void doCompleted(Exchange exchange, NamedNode definition, 
Throwable cause) {
+        private NamedRoute getOriginalRoute(Exchange exchange) {
+            List<MessageHistory> list = 
exchange.getProperty(ExchangePropertyKey.MESSAGE_HISTORY, List.class);
+            if (list != null) {
+                for (MessageHistory h : list) {
+                    NamedNode n = h.getNode();
+                    NamedRoute nr = CamelContextHelper.getRoute(n);
+                    if (nr != null) {
+                        boolean skip = nr.isCreatedFromRest() || 
nr.isCreatedFromTemplate();
+                        if (!skip) {
+                            return nr;
+                        }
+                    }
+                }
+            }
+            return null;
+        }
+
+        private void doCompleted(Exchange exchange, NamedNode definition, 
NamedRoute route, Throwable cause) {
             // create pseudo-last step in single step mode
             long timestamp = System.currentTimeMillis();
             String toNode = CamelContextHelper.getRouteId(definition);
-            String routeId = CamelContextHelper.getRouteId(definition);
+            String routeId = route != null ? route.getRouteId() : toNode;
             String exchangeId = exchange.getExchangeId();
             String messageAsXml = dumpAsXml(exchange);
             String messageAsJSon = dumpAsJSon(exchange);
             long uid = debugCounter.incrementAndGet();
-            NamedRoute route = CamelContextHelper.getRoute(definition);
-            String source = LoggerHelper.getLineNumberLoggerName(route);
+            String source = LoggerHelper.getLineNumberLoggerName(route != null 
? route : definition);
 
             BacklogTracerEventMessage msg
                     = new DefaultBacklogTracerEventMessage(
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultChannel.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultChannel.java
index cd593716a05..02c6efefe2a 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultChannel.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultChannel.java
@@ -186,14 +186,19 @@ public class DefaultChannel extends 
CamelInternalProcessor implements Channel {
                 if (!camelContext.hasService(debugger)) {
                     camelContext.addService(debugger);
                 }
-                backlogDebuggerSetupInitialBreakpoints(definition, 
routeDefinition, first, debugger, targetOutputDef);
-                if (first && debugger.isSingleStepIncludeStartEnd()) {
-                    // add breakpoint on route input instead of first node
-                    addAdvice(new BacklogDebuggerAdvice(debugger, 
nextProcessor, routeDefinition.getInput()));
-                    // debugger captures message history, and we need to 
capture history of incoming
-                    addAdvice(new 
MessageHistoryAdvice(camelContext.getMessageHistoryFactory(), 
routeDefinition.getInput()));
+                // skip debugging inside rest-dsl (just a tiny facade) or 
kamelets / route-templates
+                boolean skip = routeDefinition.isCreatedFromRest() || 
routeDefinition.isCreatedFromTemplate();
+                if (!skip) {
+                    backlogDebuggerSetupInitialBreakpoints(definition, 
routeDefinition, first, debugger, targetOutputDef);
+                    if (first && debugger.isSingleStepIncludeStartEnd()) {
+                        // add breakpoint on route input instead of first node
+                        addAdvice(new BacklogDebuggerAdvice(debugger, 
nextProcessor, routeDefinition.getInput()));
+                        // debugger captures message history, and we need to 
capture history of incoming
+                        addAdvice(
+                                new 
MessageHistoryAdvice(camelContext.getMessageHistoryFactory(), 
routeDefinition.getInput()));
+                    }
+                    addAdvice(new BacklogDebuggerAdvice(debugger, 
nextProcessor, targetOutputDef));
                 }
-                addAdvice(new BacklogDebuggerAdvice(debugger, nextProcessor, 
targetOutputDef));
             }
         }
 
diff --git 
a/core/camel-console/src/main/java/org/apache/camel/impl/console/DebugDevConsole.java
 
b/core/camel-console/src/main/java/org/apache/camel/impl/console/DebugDevConsole.java
index f096eaf4ca1..6f6540ce673 100644
--- 
a/core/camel-console/src/main/java/org/apache/camel/impl/console/DebugDevConsole.java
+++ 
b/core/camel-console/src/main/java/org/apache/camel/impl/console/DebugDevConsole.java
@@ -24,11 +24,13 @@ import java.util.Map;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.MessageHistory;
+import org.apache.camel.NamedRoute;
 import org.apache.camel.Route;
 import org.apache.camel.spi.BacklogDebugger;
 import org.apache.camel.spi.BacklogTracerEventMessage;
 import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.annotations.DevConsole;
+import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.console.AbstractDevConsole;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -217,6 +219,17 @@ public class DebugDevConsole extends AbstractDevConsole {
 
         for (MessageHistory h : list) {
             JsonObject jo = new JsonObject();
+
+            if (h.getNode() != null) {
+                NamedRoute nr = CamelContextHelper.getRoute(h.getNode());
+                if (nr != null) {
+                    // skip debugging inside rest-dsl (just a tiny facade) or 
kamelets / route-templates
+                    boolean skip = nr.isCreatedFromRest() || 
nr.isCreatedFromTemplate();
+                    if (skip) {
+                        continue;
+                    }
+                }
+            }
             if (h.getRouteId() != null) {
                 jo.put("routeId", h.getRouteId());
             }
@@ -224,7 +237,12 @@ public class DebugDevConsole extends AbstractDevConsole {
             if (h.getNode() != null) {
                 jo.put("nodeId", h.getNode().getId());
                 if (h.getNode().getLocation() != null) {
-                    jo.put("location", h.getNode().getLocation());
+                    String loc = h.getNode().getLocation();
+                    // strip schema
+                    if (loc.contains(":")) {
+                        loc = StringHelper.after(loc, ":");
+                    }
+                    jo.put("location", loc);
                 }
                 if (h.getNode().getLineNumber() != -1) {
                     jo.put("line", h.getNode().getLineNumber());
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Debug.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Debug.java
index f5d788235e9..64b4afbe186 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Debug.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Debug.java
@@ -515,7 +515,7 @@ public class Debug extends Run {
 
                     String ids;
                     if (source) {
-                        ids = h.location;
+                        ids = locationAndLine(h.location, h.line);
                     } else {
                         ids = h.routeId + "/" + h.nodeId;
                     }
@@ -604,7 +604,7 @@ public class Debug extends Run {
         // node ids or source location
         String ids;
         if (source) {
-            ids = row.location;
+            ids = locationAndLine(row.location, -1);
         } else {
             ids = row.routeId + "/" + getId(row);
         }
@@ -642,6 +642,12 @@ public class Debug extends Run {
         System.out.println();
     }
 
+    private static String locationAndLine(String loc, int line) {
+        // shorten path as there is no much space
+        loc = FileUtil.stripPath(loc);
+        return line == -1 ? loc : loc + ":" + line;
+    }
+
     private void clearScreen() {
         AnsiConsole.out().print(Ansi.ansi().eraseScreen().cursor(1, 1));
     }

Reply via email to