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
commit e8faff9096772512c70c03bb95dfd58df03a80c5 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sat Oct 12 18:17:09 2024 +0200 CAMEL-21338: camel-core - Add boot startup time in INFO logging so it show the total time incl boot camel-jbang/camel-main/camel-spring-boot that may take some time also. --- .../src/main/java/org/apache/camel/ContextEvents.java | 6 ++++++ .../apache/camel/impl/engine/AbstractCamelContext.java | 18 ++++++++++++++++-- .../src/main/java/org/apache/camel/main/Main.java | 3 +++ .../main/java/org/apache/camel/main/MainSupport.java | 8 ++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/core/camel-api/src/main/java/org/apache/camel/ContextEvents.java b/core/camel-api/src/main/java/org/apache/camel/ContextEvents.java index 2c0e7673227..f6dfd270f79 100644 --- a/core/camel-api/src/main/java/org/apache/camel/ContextEvents.java +++ b/core/camel-api/src/main/java/org/apache/camel/ContextEvents.java @@ -21,6 +21,12 @@ package org.apache.camel; * Context events that can be traced by an {@link org.apache.camel.clock.EventClock} */ public enum ContextEvents { + + /** + * Boot event + */ + BOOT, + /** * Start event */ 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 c8195968755..a874ef3a18b 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 @@ -2739,8 +2739,22 @@ public abstract class AbstractCamelContext extends BaseService String start = TimeUtils.printDuration(taken, true); String init = TimeUtils.printDuration(initTaken, true); String built = TimeUtils.printDuration(buildTaken, true); - LOG.info("Apache Camel {} ({}) started in {} (build:{} init:{} start:{})", getVersion(), - camelContextExtension.getName(), total, built, init, start); + String boot = null; + Clock bc = getClock().get(ContextEvents.BOOT); + if (bc != null) { + // calculate boot time as time before camel is starting + long delta = bc.elapsed() - max; + if (delta > 0) { + boot = TimeUtils.printDuration(delta, true); + } + } + String msg = String.format("Apache Camel %s (%s) started in %s (build:%s init:%s start:%s", getVersion(), + camelContextExtension.getName(), total, built, init, start); + if (boot != null) { + msg += " boot:" + boot; + } + msg += ")"; + LOG.info(msg); } } diff --git a/core/camel-main/src/main/java/org/apache/camel/main/Main.java b/core/camel-main/src/main/java/org/apache/camel/main/Main.java index c2465a476d7..bdab0232182 100644 --- a/core/camel-main/src/main/java/org/apache/camel/main/Main.java +++ b/core/camel-main/src/main/java/org/apache/camel/main/Main.java @@ -20,7 +20,9 @@ import java.util.Map; import org.apache.camel.CamelConfiguration; import org.apache.camel.CamelContext; +import org.apache.camel.ContextEvents; import org.apache.camel.ProducerTemplate; +import org.apache.camel.clock.EventClock; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.spi.Registry; @@ -170,6 +172,7 @@ public class Main extends MainCommandLineSupport { // do not build/init camel context yet DefaultCamelContext answer = new DefaultCamelContext(false); answer.getCamelContextExtension().setRegistry(registry); + if (mainClass != null) { answer.getGlobalOptions().put("CamelMainClass", mainClass.getName()); } else { diff --git a/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java b/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java index fb814007e9e..fd508d6c75b 100644 --- a/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java +++ b/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java @@ -21,9 +21,14 @@ import java.util.concurrent.atomic.AtomicInteger; import org.apache.camel.CamelConfiguration; import org.apache.camel.CamelContext; +import org.apache.camel.ContextEvents; import org.apache.camel.ProducerTemplate; +import org.apache.camel.clock.Clock; +import org.apache.camel.clock.ContextClock; import org.apache.camel.spi.EventNotifier; +import org.apache.camel.support.ResetableClock; import org.apache.camel.support.service.ServiceHelper; +import org.apache.camel.util.StopWatch; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,6 +48,7 @@ public abstract class MainSupport extends BaseMainSupport { protected volatile ProducerTemplate camelTemplate; private String appName = "Apache Camel (Main)"; + private Clock clock; private int durationMaxIdleSeconds; private int durationMaxMessages; private long durationMaxSeconds; @@ -65,6 +71,7 @@ public abstract class MainSupport extends BaseMainSupport { protected void doInit() throws Exception { // we want this logging to be as early as possible LOG.info("{} {} is starting", appName, helper.getVersion()); + clock = new ResetableClock(); super.doInit(); } @@ -336,6 +343,7 @@ public abstract class MainSupport extends BaseMainSupport { if (camelContext == null) { throw new IllegalStateException("Created CamelContext is null"); } + camelContext.getClock().add(ContextEvents.BOOT, clock); postProcessCamelContext(camelContext); } }