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

davsclaus pushed a commit to branch feature/CAMEL-24328-jfr-tui-data
in repository https://gitbox.apache.org/repos/asf/camel.git

commit b7c39bdb05a05cad9b22b7339cb2281dcf7d0d08
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Aug 3 15:40:33 2026 +0200

    CAMEL-24328: Add snapshot timestamp to JFR dev console and show age in TUI
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    Signed-off-by: Claus Ibsen <[email protected]>
---
 .../org/apache/camel/runtime/jfr/CamelJfrDevConsole.java   |  1 +
 .../apache/camel/dsl/jbang/core/commands/tui/JfrTab.java   | 14 +++++++++++++-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git 
a/components/camel-jfr/src/main/java/org/apache/camel/runtime/jfr/CamelJfrDevConsole.java
 
b/components/camel-jfr/src/main/java/org/apache/camel/runtime/jfr/CamelJfrDevConsole.java
index e2a270a2834c..5bf275d8a889 100644
--- 
a/components/camel-jfr/src/main/java/org/apache/camel/runtime/jfr/CamelJfrDevConsole.java
+++ 
b/components/camel-jfr/src/main/java/org/apache/camel/runtime/jfr/CamelJfrDevConsole.java
@@ -281,6 +281,7 @@ public class CamelJfrDevConsole extends AbstractDevConsole {
 
         JsonObject result = new JsonObject();
         result.put("snapshot", true);
+        result.put("snapshotTimestamp", System.currentTimeMillis());
 
         Path tempFile = null;
         try (Recording snapshot = 
FlightRecorder.getFlightRecorder().takeSnapshot()) {
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/JfrTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/JfrTab.java
index 8102c0064e53..b6f4889b23a6 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/JfrTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/JfrTab.java
@@ -86,6 +86,7 @@ class JfrTab extends AbstractTab {
     private List<FailureEntry> failureData = List.of();
     private List<RedeliveryEntry> redeliveryData = List.of();
     private int snapshotEventCount;
+    private long snapshotTime;
     private boolean snapshotLoaded;
 
     // view state
@@ -338,7 +339,16 @@ class JfrTab extends AbstractTab {
 
         if (snapshotLoaded) {
             line1.add(Span.styled("  snapshot: ", LABEL));
-            line1.add(Span.styled(snapshotEventCount + " events", VALUE));
+            String ageLabel = "";
+            if (snapshotTime > 0) {
+                long agoSec = (System.currentTimeMillis() - snapshotTime) / 
1000;
+                if (agoSec >= 60) {
+                    ageLabel = " (" + (agoSec / 60) + "m ago)";
+                } else if (agoSec >= 5) {
+                    ageLabel = " (" + agoSec + "s ago)";
+                }
+            }
+            line1.add(Span.styled(snapshotEventCount + " events" + ageLabel, 
VALUE));
         }
         lines.add(Line.from(line1));
 
@@ -840,6 +850,8 @@ class JfrTab extends AbstractTab {
 
             errorMessage = null;
             message = null;
+            Long ts = jo.getLong("snapshotTimestamp");
+            snapshotTime = ts != null ? ts : System.currentTimeMillis();
             snapshotLoaded = true;
             tableState.select(0);
         });

Reply via email to