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

pcongiusti 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 2285d1d0eb3 feat(components): camel-micrometer exchanges last timestamp
2285d1d0eb3 is described below

commit 2285d1d0eb3a5f51680019323e85936fcb0334fd
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Fri Jun 13 16:28:50 2025 +0200

    feat(components): camel-micrometer exchanges last timestamp
    
    Added a new meter to include the timestamp of the last executed exchange
---
 .../component/micrometer/MicrometerConstants.java     |  1 +
 .../MicrometerExchangeEventNotifier.java              | 19 +++++++++++++++++++
 .../MicrometerExchangeEventNotifierDynamicTest.java   |  2 +-
 .../MicrometerExchangeEventNotifierStaticTest.java    |  2 +-
 4 files changed, 22 insertions(+), 2 deletions(-)

diff --git 
a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerConstants.java
 
b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerConstants.java
index ff3255dc0e4..99796818746 100644
--- 
a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerConstants.java
+++ 
b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerConstants.java
@@ -59,6 +59,7 @@ public final class MicrometerConstants {
     public static final String DEFAULT_CAMEL_ROUTES_RELOADED = 
"camel.routes.reloaded";
 
     public static final String APP_INFO_METER_NAME = "app.info";
+    public static final String CAMEL_EXCHANGE_LAST_TIME_METER_NAME = 
"camel.exchanges.last.timestamp";
 
     public static final String ROUTE_ID_TAG = "routeId";
     public static final String NODE_ID_TAG = "nodeId";
diff --git 
a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifier.java
 
b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifier.java
index a7dcd88a87e..e5806e015cc 100644
--- 
a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifier.java
+++ 
b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifier.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.micrometer.eventnotifier;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
 import java.util.function.Predicate;
 
 import io.micrometer.core.instrument.Gauge;
@@ -27,6 +28,7 @@ import io.micrometer.core.instrument.Tags;
 import io.micrometer.core.instrument.Timer;
 import org.apache.camel.Exchange;
 import org.apache.camel.Route;
+import org.apache.camel.component.micrometer.MicrometerConstants;
 import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.spi.CamelEvent.ExchangeCompletedEvent;
 import org.apache.camel.spi.CamelEvent.ExchangeCreatedEvent;
@@ -39,6 +41,9 @@ import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.SimpleEventNotifierSupport;
 
 public class MicrometerExchangeEventNotifier extends 
AbstractMicrometerEventNotifier<ExchangeEvent> {
+    // Used as a backing value for the camel exchange last timestamp meter
+    private static AtomicLong lastExchangeTimestampHolder = new AtomicLong(0);
+
     private InflightRepository inflightRepository;
 
     private final Map<String, Meter> meterMap = new HashMap<>();
@@ -198,6 +203,20 @@ public class MicrometerExchangeEventNotifier extends 
AbstractMicrometerEventNoti
         if (sample != null) {
             sample.stop(getMeterRegistry().timer(name, tags));
         }
+        setLastTimeExchange();
+    }
+
+    private void setLastTimeExchange() {
+        Gauge meter = 
getMeterRegistry().find(MicrometerConstants.CAMEL_EXCHANGE_LAST_TIME_METER_NAME).gauge();
+        if (meter == null) {
+            meter = Gauge.builder(
+                    MicrometerConstants.CAMEL_EXCHANGE_LAST_TIME_METER_NAME,
+                    
MicrometerExchangeEventNotifier.lastExchangeTimestampHolder,
+                    AtomicLong::get)
+                    .description("Last exchange processed time in milliseconds 
since the Unix epoch")
+                    .register(getMeterRegistry());
+        }
+        
MicrometerExchangeEventNotifier.lastExchangeTimestampHolder.set(System.currentTimeMillis());
     }
 
 }
diff --git 
a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifierDynamicTest.java
 
b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifierDynamicTest.java
index 8d76fdaebec..55e193a4383 100644
--- 
a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifierDynamicTest.java
+++ 
b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifierDynamicTest.java
@@ -72,7 +72,7 @@ public class MicrometerExchangeEventNotifierDynamicTest 
extends AbstractMicromet
         Set<MeterRegistry> set = meterRegistry.getRegistries();
         assertEquals(2, set.size());
         for (MeterRegistry mr : set) {
-            assertEquals(15, mr.getMeters().size());
+            assertEquals(16, mr.getMeters().size());
             int counter = 0;
             for (Meter m : mr.getMeters()) {
                 if 
(m.getId().getName().equals(MicrometerConstants.DEFAULT_CAMEL_EXCHANGE_EVENT_METER_NAME)
 &&
diff --git 
a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifierStaticTest.java
 
b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifierStaticTest.java
index 4892f341bfb..7b93188a09e 100644
--- 
a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifierStaticTest.java
+++ 
b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerExchangeEventNotifierStaticTest.java
@@ -59,7 +59,7 @@ public class MicrometerExchangeEventNotifierStaticTest 
extends MicrometerExchang
         Set<MeterRegistry> set = meterRegistry.getRegistries();
         assertEquals(2, set.size());
         for (MeterRegistry mr : set) {
-            assertEquals(6, mr.getMeters().size());
+            assertEquals(7, mr.getMeters().size());
             int counter = 0;
             for (Meter m : mr.getMeters()) {
                 if 
(m.getId().getName().equals(MicrometerConstants.DEFAULT_CAMEL_EXCHANGE_EVENT_METER_NAME)
 &&

Reply via email to