You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/02/15 08:23:44 UTC

[camel] branch main updated: CAMEL-19033: camel-jbang - get trace -> trace

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


The following commit(s) were added to refs/heads/main by this push:
     new f4b3c89e47d CAMEL-19033: camel-jbang - get trace -> trace
f4b3c89e47d is described below

commit f4b3c89e47d4101a2cc3468b01e2ceaa00a01a5c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Feb 15 09:23:13 2023 +0100

    CAMEL-19033: camel-jbang - get trace -> trace
---
 .../camel/cli/connector/LocalCliConnector.java     |  3 +-
 .../core/commands/action/CamelTraceAction.java     | 36 +++++++++++++++++-----
 .../camel/dsl/jbang/core/common/JSonHelper.java    |  3 +-
 3 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
index a7a9af67fa2..921c9313653 100644
--- a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
+++ b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
@@ -436,7 +436,8 @@ public class LocalCliConnector extends ServiceSupport implements CliConnector, C
                     if (!arr.isEmpty()) {
                         // store traces in a special file
                         LOG.trace("Updating trace file: {}", traceFile);
-                        IOHelper.appendText(json.toJson(), traceFile);
+                        String data = json.toJson() + System.lineSeparator();
+                        IOHelper.appendText(data, traceFile);
                         json = arr.getMap(arr.size() - 1);
                         traceFilePos = json.getLong("uid");
                     }
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java
index da874e9dcec..c3a9a487f8f 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java
@@ -34,10 +34,12 @@ import java.util.Set;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.regex.Pattern;
 
+import org.apache.camel.catalog.impl.TimePatternConverter;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
 import org.apache.camel.dsl.jbang.core.common.JSonHelper;
 import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
 import org.apache.camel.util.StopWatch;
+import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
@@ -51,7 +53,6 @@ import picocli.CommandLine;
 public class CamelTraceAction extends ActionBaseCommand {
 
     // TODO: message dump in json or not (option)
-    // TODO: since
 
     private static final int NAME_MAX_WIDTH = 25;
     private static final int NAME_MIN_WIDTH = 10;
@@ -127,7 +128,7 @@ public class CamelTraceAction extends ActionBaseCommand {
         // find new pids
         updatePids(pids);
         if (!pids.isEmpty()) {
-            // read existing trace files (skip by tail)
+            // read existing trace files (skip by tail/since)
             if (find != null) {
                 findAnsi = Ansi.ansi().fg(Ansi.Color.BLACK).bg(Ansi.Color.YELLOW).a("$0").reset().toString();
                 for (int i = 0; i < find.length; i++) {
@@ -144,9 +145,20 @@ public class CamelTraceAction extends ActionBaseCommand {
                     grep[i] = f;
                 }
             }
+            Date limit = null;
+            if (since != null) {
+                long millis;
+                if (StringHelper.isDigit(since)) {
+                    // is in seconds by default
+                    millis = TimePatternConverter.toMilliSeconds(since) * 1000;
+                } else {
+                    millis = TimePatternConverter.toMilliSeconds(since);
+                }
+                limit = new Date(System.currentTimeMillis() - millis);
+            }
             // dump existing traces
             tailTraceFiles(pids, tail);
-            dumpTraceFiles(pids, tail);
+            dumpTraceFiles(pids, tail, limit);
         }
 
         if (follow) {
@@ -169,7 +181,7 @@ public class CamelTraceAction extends ActionBaseCommand {
                     }
                     int lines = readTraceFiles(pids);
                     if (lines > 0) {
-                        dumpTraceFiles(pids, 0);
+                        dumpTraceFiles(pids, 0, null);
                     } else {
                         Thread.sleep(100);
                     }
@@ -335,7 +347,7 @@ public class CamelTraceAction extends ActionBaseCommand {
         return null;
     }
 
-    private void dumpTraceFiles(Map<Long, Pid> pids, int tail) {
+    private void dumpTraceFiles(Map<Long, Pid> pids, int tail, Date limit) {
         Set<String> names = new HashSet<>();
         List<Row> rows = new ArrayList<>();
         for (Pid pid : pids.values()) {
@@ -386,7 +398,7 @@ public class CamelTraceAction extends ActionBaseCommand {
         }
 
         rows.forEach(r -> {
-            printTrace(r.name, r);
+            printTrace(r.name, r, limit);
         });
     }
 
@@ -403,13 +415,21 @@ public class CamelTraceAction extends ActionBaseCommand {
         return false;
     }
 
-    protected void printTrace(String name, Row row) {
+    private boolean isValidSince(Date limit, long timestamp) {
+        if (limit == null || timestamp == 0) {
+            return true;
+        }
+        Date row = new Date(timestamp);
+        return row.compareTo(limit) >= 0;
+    }
+
+    protected void printTrace(String name, Row row, Date limit) {
         if (!prefix) {
             name = null;
         }
 
         String json = getDataAsJSon(row);
-        boolean valid = isValidGrep(json);
+        boolean valid = isValidSince(limit, row.timestamp) && isValidGrep(json);
         if (!valid) {
             return;
         }
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/JSonHelper.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/JSonHelper.java
index facf7b82e93..137251e189e 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/JSonHelper.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/JSonHelper.java
@@ -57,7 +57,8 @@ public final class JSonHelper {
                             s = Ansi.ansi().fgBright(Ansi.Color.BLUE).a(s).reset().toString();
                         }
                     }
-                    default -> {}
+                    default -> {
+                    }
                 }
                 prev = type;
                 return s;