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