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;
+ }
+ }
+
}
}