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/03/30 09:14:20 UTC

[camel] 02/02: camel-jbang - Trace to show read position of stream cache body

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

commit e3719648b603e95cd1413f7240372c39b4d89b1f
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Mar 30 11:13:55 2023 +0200

    camel-jbang - Trace to show read position of stream cache body
---
 .../org/apache/camel/support/MessageHelper.java    | 19 ++++++++++--
 .../core/commands/action/CamelTraceAction.java     | 35 ++++++++++++++++++++--
 2 files changed, 49 insertions(+), 5 deletions(-)

diff --git a/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
index 4a4b1b755df..c0617cf16d1 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
@@ -588,10 +588,17 @@ public final class MessageHelper {
         if (includeBody) {
             sb.append(prefix);
             sb.append("  <body");
-            String type = ObjectHelper.classCanonicalName(message.getBody());
+            Object body = message.getBody();
+            String type = ObjectHelper.classCanonicalName(body);
             if (type != null) {
                 sb.append(" type=\"").append(type).append("\"");
             }
+            if (body instanceof StreamCache) {
+                long pos = ((StreamCache) body).position();
+                if (pos != -1) {
+                    sb.append(" position=\"").append(pos).append("\"");
+                }
+            }
             sb.append(">");
 
             String xml = extractBodyForLogging(message, null, allowCachedStreams, allowStreams, allowFiles, maxChars);
@@ -959,11 +966,17 @@ public final class MessageHelper {
         if (includeBody) {
             JsonObject jb = new JsonObject();
             jo.put("body", jb);
-            String type = ObjectHelper.classCanonicalName(message.getBody());
+            Object body = message.getBody();
+            String type = ObjectHelper.classCanonicalName(body);
             if (type != null) {
                 jb.put("type", type);
             }
-
+            if (body instanceof StreamCache) {
+                long pos = ((StreamCache) body).position();
+                if (pos != -1) {
+                    jb.put("position", pos);
+                }
+            }
             String data = extractBodyForLogging(message, null, allowCachedStreams, allowStreams, allowFiles, maxChars);
             if (data != null) {
                 jb.put("value", Jsoner.escape(data));
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 25decbdf775..e49429b20cd 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
@@ -740,7 +740,7 @@ public class CamelTraceAction extends ActionBaseCommand {
 
         // body and type
         JsonObject jo = r.message.getMap("body");
-        TableRow bodyRow = new TableRow("Body", jo.getString("type"), null, jo.get("value"));
+        TableRow bodyRow = new TableRow("Body", jo.getString("type"), null, jo.get("value"), jo.getLong("position"));
         String tab5 = AsciiTable.getTable(AsciiTable.NO_BORDERS, List.of(bodyRow), Arrays.asList(
                 new Column().dataAlign(HorizontalAlign.LEFT)
                         .minWidth(showExchangeProperties ? 12 : 10).with(TableRow::kindAsString),
@@ -896,18 +896,28 @@ public class CamelTraceAction extends ActionBaseCommand {
         String type;
         String key;
         Object value;
+        Long position;
 
         TableRow(String kind, String type, String key, Object value) {
+            this(kind, type, key, value, null);
+        }
+
+        TableRow(String kind, String type, String key, Object value, Long position) {
             this.kind = kind;
             this.type = type;
             this.key = key;
             this.value = value;
+            this.position = position;
         }
 
         String valueAsString() {
             return value != null ? value.toString() : "null";
         }
 
+        String positionAsString() {
+            return position != null ? position.toString() : "null";
+        }
+
         String valueAsStringPretty() {
             if (value == null) {
                 return "null";
@@ -992,6 +1002,10 @@ public class CamelTraceAction extends ActionBaseCommand {
                 s = type.substring(21);
             } else if (type.startsWith("java.lang.") || type.startsWith("java.util.")) {
                 s = type.substring(10);
+            } else if (type.startsWith("org.apache.camel.support.")) {
+                s = type.substring(25);
+            } else if (type.startsWith("org.apache.camel.converter.stream.")) {
+                s = type.substring(34);
             } else {
                 s = type;
             }
@@ -1010,13 +1024,22 @@ public class CamelTraceAction extends ActionBaseCommand {
                 s = type.substring(21);
             } else if (type.startsWith("java.lang.") || type.startsWith("java.util.")) {
                 s = type.substring(10);
+            } else if (type.startsWith("org.apache.camel.support.")) {
+                s = type.substring(25);
+            } else if (type.startsWith("org.apache.camel.converter.stream.")) {
+                s = type.substring(34);
             } else {
                 s = type;
             }
             s = "(" + s + ")";
             int l = valueLength();
-            if (l != -1) {
+            long p = posLength();
+            if (l != -1 & p != -1) {
+                s = s + " (position: " + p + " length: " + l + ")";
+            } else if (l != -1) {
                 s = s + " (length: " + l + ")";
+            } else if (p != -1) {
+                s = s + " (position: " + p + ")";
             }
             if (loggingColor) {
                 s = Ansi.ansi().fgBrightDefault().a(Ansi.Attribute.INTENSITY_FAINT).a(s).reset().toString();
@@ -1058,6 +1081,14 @@ public class CamelTraceAction extends ActionBaseCommand {
             }
         }
 
+        long posLength() {
+            if (position == null) {
+                return -1;
+            } else {
+                return position;
+            }
+        }
+
     }
 
 }