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 99936661cde CAMEL-19055: camel-core - Backlog tracer capture thread id of the processed exchange 99936661cde is described below commit 99936661cde9bb6a518676d2a13d82944eec70ed Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Wed Feb 15 16:31:41 2023 +0100 CAMEL-19055: camel-core - Backlog tracer capture thread id of the processed exchange --- .../camel/spi/BacklogTracerEventMessage.java | 5 +++ .../debugger/DefaultBacklogTracerEventMessage.java | 11 ++++- .../core/commands/action/CamelTraceAction.java | 49 ++++++++++++++-------- 3 files changed, 47 insertions(+), 18 deletions(-) diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/BacklogTracerEventMessage.java b/core/camel-api/src/main/java/org/apache/camel/spi/BacklogTracerEventMessage.java index d13dda1aac4..873b0cc54b4 100644 --- a/core/camel-api/src/main/java/org/apache/camel/spi/BacklogTracerEventMessage.java +++ b/core/camel-api/src/main/java/org/apache/camel/spi/BacklogTracerEventMessage.java @@ -66,6 +66,11 @@ public interface BacklogTracerEventMessage { */ String getExchangeId(); + /** + * The name of the thread that is processing the message, when this event was captured. + */ + String getProcessingThreadName(); + /** * The content of the message as XML (body and headers) */ diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogTracerEventMessage.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogTracerEventMessage.java index ae9b44fbefb..168a4f2eaca 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogTracerEventMessage.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogTracerEventMessage.java @@ -35,10 +35,11 @@ public final class DefaultBacklogTracerEventMessage implements BacklogTracerEven private final boolean last; private final long uid; private final long timestamp; - private String location; + private final String location; private final String routeId; private final String toNode; private final String exchangeId; + private final String threadName; private final String messageAsXml; private final String messageAsJSon; private String exceptionAsXml; @@ -60,6 +61,7 @@ public final class DefaultBacklogTracerEventMessage implements BacklogTracerEven this.exchangeId = exchangeId; this.messageAsXml = messageAsXml; this.messageAsJSon = messageAsJSon; + this.threadName = Thread.currentThread().getName(); } /** @@ -110,6 +112,11 @@ public final class DefaultBacklogTracerEventMessage implements BacklogTracerEven return exchangeId; } + @Override + public String getProcessingThreadName() { + return threadName; + } + @Override public String getMessageAsXml() { return messageAsXml; @@ -188,6 +195,7 @@ public final class DefaultBacklogTracerEventMessage implements BacklogTracerEven String ts = new SimpleDateFormat(TIMESTAMP_FORMAT).format(timestamp); sb.append(prefix).append(" <timestamp>").append(ts).append("</timestamp>\n"); sb.append(prefix).append(" <elapsed>").append(getElapsed()).append("</elapsed>\n"); + sb.append(prefix).append(" <threadName>").append(getProcessingThreadName()).append("</threadName>\n"); sb.append(prefix).append(" <done>").append(isDone()).append("</done>\n"); sb.append(prefix).append(" <failed>").append(isFailed()).append("</failed>\n"); if (getLocation() != null) { @@ -239,6 +247,7 @@ public final class DefaultBacklogTracerEventMessage implements BacklogTracerEven jo.put("timestamp", timestamp); } jo.put("elapsed", getElapsed()); + jo.put("threadName", getProcessingThreadName()); jo.put("done", isDone()); jo.put("failed", isFailed()); try { 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 c71463539f8..364086f9439 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 @@ -77,9 +77,13 @@ public class CamelTraceAction extends ActionBaseCommand { description = "Print prefix with running Camel integration name.") boolean prefix = true; + @CommandLine.Option(names = { "--source" }, + description = "Prefer to display source filename/code instead of IDs") + boolean source; + @CommandLine.Option(names = { "--level" }, defaultValue = "0", description = "Detail level of tracing. 0=all events (default), 1=input+output") - int level = 0; + int level; @CommandLine.Option(names = { "--tail" }, description = "The number of traces from the end of the trace to show. Defaults to showing all traces.") @@ -334,10 +338,12 @@ public class CamelTraceAction extends ActionBaseCommand { row.elapsed = jo.getLong("elapsed"); row.failed = jo.getBoolean("failed"); row.done = jo.getBoolean("done"); + row.threadName = jo.getString("threadName"); row.message = jo.getMap("message"); row.exception = jo.getMap("exception"); row.exchangeId = row.message.getString("exchangeId"); - row.message.remove("exchangeId"); + + row.message.remove("exchangeId"); // we should exchange id elsewhere if (!showExchangeProperties) { row.message.remove("exchangeProperties"); } @@ -466,7 +472,7 @@ public class CamelTraceAction extends ActionBaseCommand { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); String ts = sdf.format(new Date(row.timestamp)); if (loggingColor) { - AnsiConsole.out().print(Ansi.ansi().fgBrightDefault().a(ts).reset()); + AnsiConsole.out().print(Ansi.ansi().fgBrightDefault().a(Ansi.Attribute.INTENSITY_FAINT).a(ts).reset()); } else { System.out.print(ts); } @@ -476,7 +482,7 @@ public class CamelTraceAction extends ActionBaseCommand { String p = String.format("%5.5s", row.pid); if (loggingColor) { AnsiConsole.out().print(Ansi.ansi().fgMagenta().a(p).reset()); - AnsiConsole.out().print(Ansi.ansi().fgBrightDefault().a(" --- ").reset()); + AnsiConsole.out().print(Ansi.ansi().fgBrightDefault().a(Ansi.Attribute.INTENSITY_FAINT).a(" --- ").reset()); } else { System.out.print(p); System.out.print(" --- "); @@ -499,27 +505,35 @@ public class CamelTraceAction extends ActionBaseCommand { System.out.print(eid); } System.out.print(" "); - // route/node id - String ids = row.routeId + "/" + getId(row); - if (ids.length() > 25) { - ids = ids.substring(ids.length() - 25); + // thread name + String tn = row.threadName; + if (tn.length() > 25) { + tn = tn.substring(tn.length() - 25); } - ids = String.format("[%25.25s]", ids); + tn = String.format("[%25.25s]", tn); if (loggingColor) { - AnsiConsole.out().print(Ansi.ansi().fgBrightDefault().a(ids).reset()); + AnsiConsole.out().print(Ansi.ansi().fgBrightDefault().a(Ansi.Attribute.INTENSITY_FAINT).a(tn).reset()); } else { - System.out.print(ids); + System.out.print(tn); } System.out.print(" "); - // source location - String code = String.format("%-35.35s", row.location != null ? row.location : ""); + // node ids or source location + String ids; + if (source) { + ids = row.location; + } else { + ids = row.routeId + "/" + getId(row); + } + if (ids.length() > 25) { + ids = ids.substring(ids.length() - 25); + } + ids = String.format("%-25.25s", ids); if (loggingColor) { - AnsiConsole.out().print(Ansi.ansi().fgCyan().a(code).reset()); - AnsiConsole.out().print(Ansi.ansi().fgBrightDefault().a(" : ").reset()); + AnsiConsole.out().print(Ansi.ansi().fgCyan().a(ids).reset()); } else { - System.out.print(code); - System.out.print(" : "); + System.out.print(ids); } + System.out.print(" : "); // uuid String u = String.format("%5.5s", row.uid); if (loggingColor) { @@ -663,6 +677,7 @@ public class CamelTraceAction extends ActionBaseCommand { boolean last; long uid; String exchangeId; + String threadName; String location; String routeId; String nodeId;