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 8bc150af413 camel-jbang - Fix tracer for 3.x with latest changes from 
main
8bc150af413 is described below

commit 8bc150af41344832f29c226d5fe3b817eb1de887
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Wed Mar 22 09:41:15 2023 +0100

    camel-jbang - Fix tracer for 3.x with latest changes from main
---
 .../main/java/org/apache/camel/util/IOHelper.java  | 13 +++++++++++
 .../camel/cli/connector/LocalCliConnector.java     | 26 +++++++++++++---------
 2 files changed, 29 insertions(+), 10 deletions(-)

diff --git a/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java 
b/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java
index b6d9b8f9e6d..ba1cfffcb9a 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java
@@ -472,6 +472,19 @@ public final class IOHelper {
         }
     }
 
+    /**
+     * Appends the text to the file.
+     */
+    public static void appendText(String text, File file) throws IOException {
+        if (!file.exists()) {
+            String path = FileUtil.onlyPath(file.getPath());
+            if (path != null) {
+                new File(path).mkdirs();
+            }
+        }
+        writeText(text, new FileOutputStream(file, true));
+    }
+
     /**
      * Writes the text to the file.
      */
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 75c19f72ad0..6d7dab139fc 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
@@ -53,6 +53,7 @@ import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.concurrent.ThreadHelper;
+import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
 import org.apache.camel.util.json.Jsoner;
 import org.slf4j.Logger;
@@ -79,6 +80,7 @@ public class LocalCliConnector extends ServiceSupport 
implements CliConnector, C
     private File actionFile;
     private File outputFile;
     private File traceFile;
+    private long traceFilePos; // keep track of trace offset
 
     public LocalCliConnector(CliConnectorFactory cliConnectorFactory) {
         this.cliConnectorFactory = cliConnectorFactory;
@@ -288,13 +290,6 @@ public class LocalCliConnector extends ServiceSupport 
implements CliConnector, C
                     LOG.trace("Updating output file: {}", outputFile);
                     IOHelper.writeText(json.toJson(), outputFile);
                 }
-            } else if ("trace".equals(action)) {
-                DevConsole dc = 
camelContext.getExtension(DevConsoleRegistry.class).resolveById("trace");
-                if (dc != null) {
-                    JsonObject json = (JsonObject) 
dc.call(DevConsole.MediaType.JSON);
-                    LOG.trace("Updating trace file: {}", traceFile);
-                    IOHelper.writeText(json.toJson(), traceFile);
-                }
             }
 
             // action done so delete file
@@ -430,10 +425,21 @@ public class LocalCliConnector extends ServiceSupport 
implements CliConnector, C
                 DevConsole dc12 = dcr.resolveById("trace");
                 if (dc12 != null) {
                     JsonObject json = (JsonObject) 
dc12.call(DevConsole.MediaType.JSON);
-                    if (json != null && !json.isEmpty()) {
-                        // special for trace messages which is stored in its 
own file
+                    JsonArray arr = json.getCollection("traces");
+                    // filter based on last uid
+                    if (traceFilePos > 0) {
+                        arr.removeIf(r -> {
+                            JsonObject jo = (JsonObject) r;
+                            return jo.getLong("uid") <= traceFilePos;
+                        });
+                    }
+                    if (arr != null && !arr.isEmpty()) {
+                        // store traces in a special file
                         LOG.trace("Updating trace file: {}", traceFile);
-                        IOHelper.writeText(json.toJson(), traceFile);
+                        String data = json.toJson() + System.lineSeparator();
+                        IOHelper.appendText(data, traceFile);
+                        json = arr.getMap(arr.size() - 1);
+                        traceFilePos = json.getLong("uid");
                     }
                 }
             }

Reply via email to