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/03 08:25:10 UTC

[camel] branch camel-3.x updated: CAMEL-19002: camel-jbang - Fix log command when lines do not start with timestamp

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

davsclaus pushed a commit to branch camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-3.x by this push:
     new 0636fa1aa99 CAMEL-19002: camel-jbang - Fix log command when lines do not start with timestamp
0636fa1aa99 is described below

commit 0636fa1aa9946e4d1f6cc6242c038ece06523177
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Feb 3 09:24:32 2023 +0100

    CAMEL-19002: camel-jbang - Fix log command when lines do not start with timestamp
---
 .../jbang/core/commands/action/CamelLogAction.java | 49 ++++++++++++++++------
 .../jbang/core/commands/process/StopProcess.java   |  4 +-
 2 files changed, 38 insertions(+), 15 deletions(-)

diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelLogAction.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelLogAction.java
index 75d934dadc6..4eee515eb80 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelLogAction.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelLogAction.java
@@ -254,18 +254,52 @@ public class CamelLogAction extends ActionBaseCommand {
     }
 
     private void dumpLogFiles(Map<Long, Row> rows, int tail) {
+        Set<String> names = new HashSet<>();
         List<String> lines = new ArrayList<>();
         for (Row row : rows.values()) {
             Queue<String> queue = row.fifo;
             if (queue != null) {
                 for (String l : queue) {
+                    names.add(row.name);
                     lines.add(row.name + "| " + l);
                 }
                 row.fifo.clear();
             }
         }
-        // sort lines
-        lines.sort(this::compareLogLine);
+
+        // only sort if there are multiple Camels running
+        if (names.size() > 1) {
+            // sort lines
+            final Map<String, String> lastTimestamp = new HashMap<>();
+            lines.sort((l1, l2) -> {
+                l1 = unescapeAnsi(l1);
+                l2 = unescapeAnsi(l2);
+
+                String n1 = StringHelper.before(l1, "| ");
+                String t1 = StringHelper.after(l1, "| ");
+                t1 = StringHelper.before(t1, "  ");
+                String n2 = StringHelper.before(l2, "| ");
+                String t2 = StringHelper.after(l2, "| ");
+                t2 = StringHelper.before(t2, "  ");
+
+                if (t1 == null) {
+                    t1 = lastTimestamp.get(n1);
+                }
+                if (t2 == null) {
+                    t2 = lastTimestamp.get(n2);
+                }
+                if (t1 == null && t2 == null) {
+                    return 0;
+                } else if (t1 == null) {
+                    return -1;
+                } else if (t2 == null) {
+                    return 1;
+                }
+                lastTimestamp.put(n1, t1);
+                lastTimestamp.put(n2, t2);
+                return t1.compareTo(t2);
+            });
+        }
         if (tail > 0) {
             // cut according to tail
             int pos = lines.size() - tail;
@@ -280,17 +314,6 @@ public class CamelLogAction extends ActionBaseCommand {
         });
     }
 
-    private int compareLogLine(String l1, String l2) {
-        l1 = unescapeAnsi(l1);
-        l2 = unescapeAnsi(l2);
-
-        String t1 = StringHelper.after(l1, "| ");
-        t1 = StringHelper.before(t1, "  ");
-        String t2 = StringHelper.after(l2, "| ");
-        t2 = StringHelper.before(t2, "  ");
-        return t1.compareTo(t2);
-    }
-
     protected void printLine(String name, String line) {
         if (!prefix) {
             name = null;
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/StopProcess.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/StopProcess.java
index 15497702695..2d3eb07691f 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/StopProcess.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/StopProcess.java
@@ -57,12 +57,12 @@ public class StopProcess extends ProcessBaseCommand {
             File dir = new File(System.getProperty("user.home"), ".camel");
             File pidFile = new File(dir, "" + pid);
             if (pidFile.exists()) {
-                System.out.println("Shutting down Camel integration (pid: " + pid + ")");
+                System.out.println("Shutting down Camel integration (PID: " + pid + ")");
                 FileUtil.deleteFile(pidFile);
             }
             if (kill) {
                 ProcessHandle.of(pid).ifPresent(ph -> {
-                    System.out.println("Killing Camel integration (pid: " + pid + ")");
+                    System.out.println("Killing Camel integration (PID: " + pid + ")");
                     ph.destroyForcibly();
                 });
             }