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 2024/08/30 12:37:57 UTC

(camel) 02/13: CAMEL-21144: camel-core - Backlog tracer allow to turn off capture data as xml/json

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch bl-xml
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 425c5dd022a94aad84a177870bff8962544522c5
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Aug 30 10:02:27 2024 +0200

    CAMEL-21144: camel-core - Backlog tracer allow to turn off capture data as xml/json
---
 .../apache/camel/component/file/GenericFile.java   |  3 +-
 .../camel/component/file/GenericFileConsumer.java  |  4 +-
 .../org/apache/camel/ExchangeConstantProvider.java |  3 +-
 .../src/main/java/org/apache/camel/Exchange.java   |  1 +
 .../java/org/apache/camel/ExchangePropertyKey.java |  3 ++
 .../apache/camel/impl/console/TraceDevConsole.java | 55 ++++++++++++++++------
 .../org/apache/camel/main/ProfileConfigurer.java   |  3 +-
 .../org/apache/camel/support/MessageHelper.java    |  8 ++--
 8 files changed, 56 insertions(+), 24 deletions(-)

diff --git a/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFile.java b/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFile.java
index 5d2c4027bbe..322f5a61772 100644
--- a/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFile.java
+++ b/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFile.java
@@ -23,6 +23,7 @@ import java.util.Map;
 import java.util.function.LongSupplier;
 
 import org.apache.camel.Exchange;
+import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.WrappedFile;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.ObjectHelper;
@@ -126,7 +127,7 @@ public class GenericFile<T> implements WrappedFile<T> {
     private GenericFileMessage<T> commonBindToExchange(Exchange exchange) {
         Map<String, Object> headers;
 
-        exchange.setProperty(FileComponent.FILE_EXCHANGE_FILE, this);
+        exchange.setProperty(ExchangePropertyKey.FILE_EXCHANGE_FILE, this);
         GenericFileMessage<T> msg = new GenericFileMessage<>(exchange, this);
 
         headers = exchange.getMessage().hasHeaders() ? exchange.getMessage().getHeaders() : null;
diff --git a/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java b/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java
index aa1baceee75..9774e748fdd 100644
--- a/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java
+++ b/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java
@@ -267,7 +267,7 @@ public abstract class GenericFileConsumer<T> extends ScheduledBatchPollingConsum
         while (exchanges.size() > limit) {
             // must remove last
             Exchange exchange = exchanges.removeLast();
-            GenericFile<?> file = exchange.getProperty(FileComponent.FILE_EXCHANGE_FILE, GenericFile.class);
+            GenericFile<?> file = exchange.getProperty(ExchangePropertyKey.FILE_EXCHANGE_FILE, GenericFile.class);
             String key = file.getAbsoluteFilePath();
             endpoint.getInProgressRepository().remove(key);
             releaseExchange(exchange, true);
@@ -821,7 +821,7 @@ public abstract class GenericFileConsumer<T> extends ScheduledBatchPollingConsum
 
     @SuppressWarnings("unchecked")
     private GenericFile<T> getExchangeFileProperty(Exchange exchange) {
-        return (GenericFile<T>) exchange.getProperty(FileComponent.FILE_EXCHANGE_FILE);
+        return (GenericFile<T>) exchange.getProperty(ExchangePropertyKey.FILE_EXCHANGE_FILE);
     }
 
     @Override
diff --git a/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java b/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java
index 87d878c6a2c..d56d611cc2d 100644
--- a/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java
+++ b/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java
@@ -13,7 +13,7 @@ public class ExchangeConstantProvider {
 
     private static final Map<String, String> MAP;
     static {
-        Map<String, String> map = new HashMap<>(157);
+        Map<String, String> map = new HashMap<>(158);
         map.put("ACCEPT_CONTENT_TYPE", "CamelAcceptContentType");
         map.put("ACTIVE_SPAN", "OpenTracing.activeSpan");
         map.put("AGGREGATED_COLLECTION_GUARD", "CamelAggregatedCollectionGuard");
@@ -64,6 +64,7 @@ public class ExchangeConstantProvider {
         map.put("FAILURE_ROUTE_ID", "CamelFailureRouteId");
         map.put("FATAL_FALLBACK_ERROR_HANDLER", "CamelFatalFallbackErrorHandler");
         map.put("FILE_CONTENT_TYPE", "CamelFileContentType");
+        map.put("FILE_EXCHANGE_FILE", "CamelFileExchangeFile");
         map.put("FILE_LAST_MODIFIED", "CamelFileLastModified");
         map.put("FILE_LENGTH", "CamelFileLength");
         map.put("FILE_LOCAL_WORK_PATH", "CamelFileLocalWorkPath");
diff --git a/core/camel-api/src/main/java/org/apache/camel/Exchange.java b/core/camel-api/src/main/java/org/apache/camel/Exchange.java
index 250cfaa8348..82b0b115b08 100644
--- a/core/camel-api/src/main/java/org/apache/camel/Exchange.java
+++ b/core/camel-api/src/main/java/org/apache/camel/Exchange.java
@@ -175,6 +175,7 @@ public interface Exchange extends VariableAware {
     String FILE_LOCK_EXCLUSIVE_LOCK = "CamelFileLockExclusiveLock";
     String FILE_LOCK_RANDOM_ACCESS_FILE = "CamelFileLockRandomAccessFile";
     String FILE_LOCK_CHANNEL_FILE = "CamelFileLockChannelFile";
+    String FILE_EXCHANGE_FILE = "CamelFileExchangeFile";
     @Deprecated(since = "3.9.0")
     String FILTER_MATCHED = "CamelFilterMatched";
     String FILTER_NON_XML_CHARS = "CamelFilterNonXmlChars";
diff --git a/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java b/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java
index da612e93348..403a6b03739 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java
@@ -52,6 +52,7 @@ public enum ExchangePropertyKey {
     FAILURE_HANDLED(Exchange.FAILURE_HANDLED),
     FAILURE_ROUTE_ID(Exchange.FAILURE_ROUTE_ID),
     FATAL_FALLBACK_ERROR_HANDLER(Exchange.FATAL_FALLBACK_ERROR_HANDLER),
+    FILE_EXCHANGE_FILE(Exchange.FILE_EXCHANGE_FILE),
     GROUPED_EXCHANGE(Exchange.GROUPED_EXCHANGE),
     INTERCEPTED_ENDPOINT(Exchange.INTERCEPTED_ENDPOINT),
     INTERCEPT_SEND_TO_ENDPOINT_WHEN_MATCHED(Exchange.INTERCEPT_SEND_TO_ENDPOINT_WHEN_MATCHED),
@@ -142,6 +143,8 @@ public enum ExchangePropertyKey {
                 return FAILURE_ROUTE_ID;
             case Exchange.FATAL_FALLBACK_ERROR_HANDLER:
                 return FATAL_FALLBACK_ERROR_HANDLER;
+            case Exchange.FILE_EXCHANGE_FILE:
+                return FILE_EXCHANGE_FILE;
             case Exchange.GROUPED_EXCHANGE:
                 return GROUPED_EXCHANGE;
             case Exchange.INTERCEPTED_ENDPOINT:
diff --git a/core/camel-console/src/main/java/org/apache/camel/impl/console/TraceDevConsole.java b/core/camel-console/src/main/java/org/apache/camel/impl/console/TraceDevConsole.java
index 8fea16ac83a..8cc69cb4422 100644
--- a/core/camel-console/src/main/java/org/apache/camel/impl/console/TraceDevConsole.java
+++ b/core/camel-console/src/main/java/org/apache/camel/impl/console/TraceDevConsole.java
@@ -37,6 +37,11 @@ public class TraceDevConsole extends AbstractDevConsole {
               description = "Maximum capacity of last number of messages to capture (capacity must be between 50 and 1000)")
     private int capacity = 50;
 
+    /**
+     * Whether to enable or disable tracing
+     */
+    public static final String ACTION = "action";
+
     private Queue<BacklogTracerEventMessage> queue;
 
     public TraceDevConsole() {
@@ -61,15 +66,25 @@ public class TraceDevConsole extends AbstractDevConsole {
 
     protected String doCallText(Map<String, Object> options) {
         StringBuilder sb = new StringBuilder();
+        String action = (String) options.get(ACTION);
 
         BacklogTracer tracer = getCamelContext().getCamelContextExtension().getContextPlugin(BacklogTracer.class);
         if (tracer != null) {
-            for (BacklogTracerEventMessage t : tracer.dumpAllTracedMessages()) {
-                addMessage(t);
-            }
-            for (BacklogTracerEventMessage t : queue) {
-                String xml = t.toXml(0);
-                sb.append(xml).append("\n");
+            if ("start".equals(action) || "enable".equals(action)) {
+                tracer.setEnabled(true);
+                sb.append("Enabled: ").append(tracer.isEnabled()).append("\n");
+            } else if ("stop".equals(action) || "disable".equals(action)) {
+                tracer.setEnabled(false);
+                sb.append("Enabled: ").append(tracer.isEnabled()).append("\n");
+            } else {
+                sb.append("Enabled: ").append(tracer.isEnabled()).append("\n");
+                for (BacklogTracerEventMessage t : tracer.dumpAllTracedMessages()) {
+                    addMessage(t);
+                }
+                for (BacklogTracerEventMessage t : queue) {
+                    String json = t.toJSon(0);
+                    sb.append(json).append("\n");
+                }
             }
         }
 
@@ -89,18 +104,28 @@ public class TraceDevConsole extends AbstractDevConsole {
 
     protected JsonObject doCallJson(Map<String, Object> options) {
         JsonObject root = new JsonObject();
+        String action = (String) options.get(ACTION);
 
         BacklogTracer tracer = getCamelContext().getCamelContextExtension().getContextPlugin(BacklogTracer.class);
         if (tracer != null) {
-            for (BacklogTracerEventMessage t : tracer.dumpAllTracedMessages()) {
-                addMessage(t);
-            }
-
-            JsonArray arr = new JsonArray();
-            root.put("traces", arr);
-            for (BacklogTracerEventMessage t : queue) {
-                JsonObject jo = (JsonObject) t.asJSon();
-                arr.add(jo);
+            if ("start".equals(action) || "enable".equals(action)) {
+                tracer.setEnabled(true);
+                root.put("enabled", tracer.isEnabled());
+            } else if ("stop".equals(action) || "disable".equals(action)) {
+                tracer.setEnabled(false);
+                root.put("enabled", tracer.isEnabled());
+            } else {
+                for (BacklogTracerEventMessage t : tracer.dumpAllTracedMessages()) {
+                    addMessage(t);
+                }
+
+                JsonArray arr = new JsonArray();
+                root.put("enabled", tracer.isEnabled());
+                root.put("traces", arr);
+                for (BacklogTracerEventMessage t : queue) {
+                    JsonObject jo = (JsonObject) t.asJSon();
+                    arr.add(jo);
+                }
             }
         }
 
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/ProfileConfigurer.java b/core/camel-main/src/main/java/org/apache/camel/main/ProfileConfigurer.java
index 5bbf5f31dbd..227662d7546 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/ProfileConfigurer.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/ProfileConfigurer.java
@@ -44,10 +44,11 @@ public class ProfileConfigurer {
         }
 
         if ("dev".equals(profile)) {
-            // enable backlog tracing and we only need JSon
+            // make tracing enabled and limit to not capture too much data
             config.tracerConfig().withEnabled(true);
             config.tracerConfig().withTraceAsJSon(true);
             config.tracerConfig().withTraceAsXml(false);
+            config.tracerConfig().withBacklogSize(50);
         }
 
         configureCommon(camelContext, profile, config);
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 e3244186210..6284ddd56c0 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
@@ -547,8 +547,8 @@ public final class MessageHelper {
             Map<String, Object> properties = new TreeMap<>(message.getExchange().getAllProperties());
             for (Map.Entry<String, Object> entry : properties.entrySet()) {
                 String key = entry.getKey();
-                // skip message history
-                if (Exchange.MESSAGE_HISTORY.equals(key)) {
+                // skip some special that are too big
+                if (Exchange.MESSAGE_HISTORY.equals(key) || Exchange.GROUPED_EXCHANGE.equals(key) || Exchange.FILE_EXCHANGE_FILE.equals(key)) {
                     continue;
                 }
                 Object value = entry.getValue();
@@ -999,8 +999,8 @@ public final class MessageHelper {
                 String type = ObjectHelper.classCanonicalName(value);
                 JsonObject jh = new JsonObject();
                 String key = entry.getKey();
-                // skip message history
-                if (Exchange.MESSAGE_HISTORY.equals(key)) {
+                // skip some special that are too big
+                if (Exchange.MESSAGE_HISTORY.equals(key) || Exchange.GROUPED_EXCHANGE.equals(key) || Exchange.FILE_EXCHANGE_FILE.equals(key)) {
                     continue;
                 }
                 jh.put("key", key);