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

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

commit baca9f8cf05541525504c92cbe216527cf4f81db
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Nov 17 14:32:14 2023 +0100

    CAMEL-20067: camel-core - Add debuggingStandby option
---
 .../src/main/java/org/apache/camel/CamelContext.java        | 12 ++++++++++++
 .../apache/camel/impl/debugger/DefaultBacklogDebugger.java  |  4 +++-
 .../org/apache/camel/impl/engine/AbstractCamelContext.java  | 13 ++++++++++++-
 .../java/org/apache/camel/impl/engine/DefaultChannel.java   |  2 +-
 .../java/org/apache/camel/impl/console/DebugDevConsole.java |  2 ++
 .../java/org/apache/camel/impl/CamelContextConfigurer.java  |  6 ++++++
 .../main/java/org/apache/camel/main/BaseMainSupport.java    |  5 +++--
 .../apache/camel/main/DefaultConfigurationConfigurer.java   |  5 +++++
 8 files changed, 44 insertions(+), 5 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java 
b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
index 041bb697acf..cbf1548e1dd 100644
--- a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
@@ -1180,6 +1180,18 @@ public interface CamelContext extends 
CamelContextLifecycle, RuntimeConfiguratio
      */
     boolean isBacklogTracingStandby();
 
+    /**
+     * Whether to set backlog debugger on standby. If on standby then the 
backlog debugger is installed and made
+     * available. Then the backlog debugger can be enabled later at runtime 
via JMX or via Java API.
+     */
+    void setDebugStandby(boolean debugStandby);
+
+    /**
+     * Whether to set backlog debugger on standby. If on standby then the 
backlog debugger is installed and made
+     * available. Then the backlog debugger can be enabled later at runtime 
via JMX or via Java API.
+     */
+    boolean isDebugStandby();
+
     /**
      * Whether backlog tracing should trace inner details from route templates 
(or kamelets). Turning this off can
      * reduce the verbosity of tracing when using many route templates, and 
allow to focus on tracing your own Camel
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 dacb5bbee3a..8ccc3a2cc01 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
@@ -139,7 +139,9 @@ public final class DefaultBacklogDebugger extends 
ServiceSupport implements Back
         // must enable message history for debugger to capture more details
         context.setMessageHistory(true);
 
-        return new DefaultBacklogDebugger(context, resolveSuspendMode());
+        DefaultBacklogDebugger answer = new DefaultBacklogDebugger(context, 
resolveSuspendMode());
+        answer.setStandby(context.isDebugStandby());
+        return answer;
     }
 
     /**
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 2d2726ea1d2..e4e0b4f63b6 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -237,6 +237,7 @@ public abstract class AbstractCamelContext extends 
BaseService
     private String tracingLoggingFormat;
     private Boolean modeline = Boolean.FALSE;
     private Boolean debug = Boolean.FALSE;
+    private Boolean debugStandby = Boolean.FALSE;
     private String debugBreakpoints;
     private Boolean messageHistory = Boolean.FALSE;
     private Boolean logMask = Boolean.FALSE;
@@ -1738,6 +1739,16 @@ public abstract class AbstractCamelContext extends 
BaseService
         return debug;
     }
 
+    @Override
+    public void setDebugStandby(boolean debugStandby) {
+        this.debugStandby = debugStandby;
+    }
+
+    @Override
+    public boolean isDebugStandby() {
+        return debugStandby != null && debugStandby;
+    }
+
     public void setDebuggingBreakpoints(String debugBreakpoints) {
         this.debugBreakpoints = debugBreakpoints;
     }
@@ -2254,7 +2265,7 @@ public abstract class AbstractCamelContext extends 
BaseService
                 }
             }
         }
-        if (!debuggerDetected && isDebugging()) {
+        if (!debuggerDetected && (isDebugging() || isDebugStandby())) {
             // debugging enabled but camel-debug was not auto-detected from 
classpath
             // so install default debugger
             BacklogDebugger backlog = 
DefaultBacklogDebugger.createDebugger(this);
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 84fb4e61f2a..07539ebedc0 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
@@ -174,7 +174,7 @@ public class DefaultChannel extends CamelInternalProcessor 
implements Channel {
 
         // then wrap the output with the tracer and debugger (debugger first,
         // as we do not want regular tracer to trace the debugger)
-        if (route.isDebugging()) {
+        if (camelContext.isDebugStandby() || route.isDebugging()) {
             final Debugger customDebugger = camelContext.getDebugger();
             if (customDebugger != null) {
                 // use custom debugger
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 161a458ce81..72100c0295a 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
@@ -67,6 +67,7 @@ public class DebugDevConsole extends AbstractDevConsole {
         if (backlog != null) {
             sb.append("Settings:");
             sb.append(String.format("\n    Enabled: %s", backlog.isEnabled()));
+            sb.append(String.format("\n    Standby: %s", backlog.isStandby()));
             sb.append(String.format("\n    Suspended Mode: %s", 
backlog.isSuspendMode()));
             sb.append(String.format("\n    Fallback Timeout: %ss", 
backlog.getFallbackTimeout())); // is in seconds
             sb.append(String.format("\n    Logging Level: %s", 
backlog.getLoggingLevel()));
@@ -151,6 +152,7 @@ public class DebugDevConsole extends AbstractDevConsole {
         BacklogDebugger backlog = 
getCamelContext().hasService(BacklogDebugger.class);
         if (backlog != null) {
             root.put("enabled", backlog.isEnabled());
+            root.put("standby", backlog.isStandby());
             root.put("suspendedMode", backlog.isSuspendMode());
             root.put("fallbackTimeout", backlog.getFallbackTimeout());
             root.put("loggingLevel", backlog.getLoggingLevel());
diff --git 
a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/CamelContextConfigurer.java
 
b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/CamelContextConfigurer.java
index 43067b7d8e7..36058f48b6b 100644
--- 
a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/CamelContextConfigurer.java
+++ 
b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/CamelContextConfigurer.java
@@ -39,6 +39,8 @@ public class CamelContextConfigurer extends 
org.apache.camel.support.component.P
         case "CaseInsensitiveHeaders": 
target.setCaseInsensitiveHeaders(property(camelContext, 
java.lang.Boolean.class, value)); return true;
         case "classresolver":
         case "ClassResolver": target.setClassResolver(property(camelContext, 
org.apache.camel.spi.ClassResolver.class, value)); return true;
+        case "debugstandby":
+        case "DebugStandby": target.setDebugStandby(property(camelContext, 
boolean.class, value)); return true;
         case "debugger":
         case "Debugger": target.setDebugger(property(camelContext, 
org.apache.camel.spi.Debugger.class, value)); return true;
         case "debugging":
@@ -158,6 +160,8 @@ public class CamelContextConfigurer extends 
org.apache.camel.support.component.P
         case "CaseInsensitiveHeaders": return java.lang.Boolean.class;
         case "classresolver":
         case "ClassResolver": return org.apache.camel.spi.ClassResolver.class;
+        case "debugstandby":
+        case "DebugStandby": return boolean.class;
         case "debugger":
         case "Debugger": return org.apache.camel.spi.Debugger.class;
         case "debugging":
@@ -278,6 +282,8 @@ public class CamelContextConfigurer extends 
org.apache.camel.support.component.P
         case "CaseInsensitiveHeaders": return 
target.isCaseInsensitiveHeaders();
         case "classresolver":
         case "ClassResolver": return target.getClassResolver();
+        case "debugstandby":
+        case "DebugStandby": return target.isDebugStandby();
         case "debugger":
         case "Debugger": return target.getDebugger();
         case "debugging":
diff --git 
a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java 
b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
index 3c9fe680d11..e04d05609b9 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
@@ -1561,7 +1561,7 @@ public abstract class BaseMainSupport extends BaseService 
{
         setPropertiesOnTarget(camelContext, config, properties, "camel.debug.",
                 failIfNotSet, true, autoConfiguredProperties);
 
-        if (!config.isEnabled()) {
+        if (!config.isEnabled() && !config.isStandby()) {
             return;
         }
 
@@ -1569,7 +1569,8 @@ public abstract class BaseMainSupport extends BaseService 
{
         camelContext.setSourceLocationEnabled(true);
 
         // enable debugger on camel
-        camelContext.setDebugging(true);
+        camelContext.setDebugging(config.isEnabled());
+        camelContext.setDebugStandby(config.isStandby());
 
         BacklogDebugger debugger = 
DefaultBacklogDebugger.createDebugger(camelContext);
         debugger.setStandby(config.isStandby());
diff --git 
a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
 
b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
index 3d958a06a0c..7b6f4bcedff 100644
--- 
a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
+++ 
b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
@@ -43,6 +43,7 @@ import org.apache.camel.model.Model;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ModelLifecycleStrategy;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
+import org.apache.camel.spi.BacklogDebugger;
 import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.spi.CliConnectorFactory;
@@ -395,6 +396,10 @@ public final class DefaultConfigurationConfigurer {
         if (bt != null) {
             
camelContext.getCamelContextExtension().addContextPlugin(BacklogTracer.class, 
bt);
         }
+        BacklogDebugger bd = getSingleBeanOfType(registry, 
BacklogDebugger.class);
+        if (bd != null) {
+            
camelContext.getCamelContextExtension().addContextPlugin(BacklogDebugger.class, 
bd);
+        }
         InflightRepository ir = getSingleBeanOfType(registry, 
InflightRepository.class);
         if (ir != null) {
             camelContext.setInflightRepository(ir);

Reply via email to