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

Reply via email to