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