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);