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/10 10:38:51 UTC
[camel] 02/05: CAMEL-19027: camel-console - Add dev console for backlog tracer
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch trace-console
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 1c5c850d341d8505f65a3e1ae1ae92cfc10b03d7
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Feb 10 09:28:36 2023 +0100
CAMEL-19027: camel-console - Add dev console for backlog tracer
---
.../camel/impl/engine/AbstractCamelContext.java | 9 ++++++
.../apache/camel/impl/console/TraceConsole.java | 36 +++++++++++++++++-----
2 files changed, 38 insertions(+), 7 deletions(-)
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 9eab5d8bb63..726a7344dbd 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -482,7 +482,16 @@ public abstract class AbstractCamelContext extends BaseService
if (type.isInstance(this)) {
return type.cast(this);
}
+ // lookup by direct implementatiin
Object extension = extensions.get(type);
+ if (extension == null) {
+ // fallback and lookup via interfaces
+ for (Object e : extensions.values()) {
+ if (type.isInstance(e)) {
+ return type.cast(e);
+ }
+ }
+ }
if (extension instanceof Supplier) {
extension = ((Supplier) extension).get();
setExtension(type, (T) extension);
diff --git a/core/camel-console/src/main/java/org/apache/camel/impl/console/TraceConsole.java b/core/camel-console/src/main/java/org/apache/camel/impl/console/TraceConsole.java
index 685cab3d49c..f7d82ddf928 100644
--- a/core/camel-console/src/main/java/org/apache/camel/impl/console/TraceConsole.java
+++ b/core/camel-console/src/main/java/org/apache/camel/impl/console/TraceConsole.java
@@ -16,9 +16,12 @@
*/
package org.apache.camel.impl.console;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
import org.apache.camel.spi.BacklogTracer;
+import org.apache.camel.spi.BacklogTracerEventMessage;
import org.apache.camel.spi.Configurer;
import org.apache.camel.spi.annotations.DevConsole;
import org.apache.camel.support.console.AbstractDevConsole;
@@ -28,26 +31,45 @@ import org.apache.camel.util.json.JsonObject;
@Configurer(bootstrap = true)
public class TraceConsole extends AbstractDevConsole {
- private BacklogTracer tracer;
-
public TraceConsole() {
super("camel", "trace", "Camel Tracing", "Trace routed messages");
}
- @Override
- protected void doBuild() throws Exception {
- tracer = getCamelContext().getExtension(BacklogTracer.class);
- }
-
protected String doCallText(Map<String, Object> options) {
StringBuilder sb = new StringBuilder();
+ BacklogTracer tracer = getCamelContext().getExtension(BacklogTracer.class);
+ if (tracer != null) {
+ for (BacklogTracerEventMessage t : tracer.dumpAllTracedMessages()) {
+ String xml = t.toXml(0);
+ sb.append(xml).append("\n");
+ }
+ }
+
return sb.toString();
}
protected JsonObject doCallJson(Map<String, Object> options) {
JsonObject root = new JsonObject();
+ BacklogTracer tracer = getCamelContext().getExtension(BacklogTracer.class);
+ if (tracer != null) {
+ List<JsonObject> arr = new ArrayList<>();
+ root.put("traces", arr);
+ for (BacklogTracerEventMessage t : tracer.dumpAllTracedMessages()) {
+ JsonObject jo = new JsonObject();
+ jo.put("uid", t.getUid());
+ jo.put("exchangeId", t.getExchangeId());
+ jo.put("routeId", t.getRouteId());
+ jo.put("nodeId", t.getToNode());
+ if (t.getTimestamp() > 0) {
+ jo.put("timestamp", t.getTimestamp());
+ }
+ // TODO: message body/headers as json
+ arr.add(jo);
+ }
+ }
+
return root;
}