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 c919f78e778 camel-jbang - Add --output option to debug command. (#12241) c919f78e778 is described below commit c919f78e7783d2dfa28edc08a8e71e871781b399 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Tue Nov 28 16:01:28 2023 +0100 camel-jbang - Add --output option to debug command. (#12241) --- .../camel/dsl/jbang/core/commands/Debug.java | 26 ++++++++++++ .../core/commands/action/MessageTableHelper.java | 47 +-------------------- .../dsl/jbang/core/common/CamelCommandHelper.java | 48 ++++++++++++++++++++++ 3 files changed, 76 insertions(+), 45 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Debug.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Debug.java index ad7ccb612e9..3117e2e909f 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Debug.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Debug.java @@ -20,6 +20,7 @@ import java.io.BufferedReader; import java.io.Console; import java.io.File; import java.io.FileInputStream; +import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringWriter; @@ -31,6 +32,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; import org.apache.camel.dsl.jbang.core.commands.action.MessageTableHelper; +import org.apache.camel.dsl.jbang.core.common.CamelCommandHelper; import org.apache.camel.main.KameletMain; import org.apache.camel.util.FileUtil; import org.apache.camel.util.IOHelper; @@ -56,6 +58,10 @@ public class Debug extends Run { description = "To set breakpoint at the given node id (Multiple ids can be separated by comma). If no breakpoint is set, then the first route is automatic selected.") String breakpoint; + @CommandLine.Option(names = { "--output" }, + description = "File to store the current message body (will override). This allows for manual inspecting the message later.") + String output; + @CommandLine.Option(names = { "--stop-on-exit" }, defaultValue = "true", description = "Whether to stop the running Camel on exit") boolean stopOnExit = true; @@ -431,6 +437,26 @@ public class Debug extends Run { this.waitForUser.set(true); } if (this.waitForUser.get()) { + // save current message to file + if (output != null && this.suspendedRow != null) { + JsonObject j = this.suspendedRow.message; + if (j != null) { + j = j.getMap("body"); + if (j != null) { + String b = j.getString("value"); + if (b != null) { + b = CamelCommandHelper.valueAsStringPretty(b, false); + try { + File f = new File(output); + IOHelper.writeText(b, f); + } catch (IOException e) { + // ignore + } + } + } + } + } + String msg = " Breakpoint suspended. Press ENTER to continue."; if (loggingColor) { AnsiConsole.out().println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(msg).reset()); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/MessageTableHelper.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/MessageTableHelper.java index 6c927821e6e..bf2b88dfcc6 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/MessageTableHelper.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/MessageTableHelper.java @@ -24,8 +24,7 @@ import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; import com.github.freva.asciitable.HorizontalAlign; import com.github.freva.asciitable.OverflowBehaviour; -import org.apache.camel.dsl.jbang.core.common.JSonHelper; -import org.apache.camel.dsl.jbang.core.common.XmlHelper; +import org.apache.camel.dsl.jbang.core.common.CamelCommandHelper; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; import org.apache.camel.util.json.Jsoner; @@ -260,49 +259,7 @@ public class MessageTableHelper { } String valueAsStringPretty() { - if (value == null) { - return "null"; - } - boolean json = false; - String s = value.toString(); - if (!s.isEmpty()) { - try { - s = Jsoner.unescape(s); - if (loggingColor) { - s = JSonHelper.colorPrint(s, 2, true); - } else { - s = JSonHelper.prettyPrint(s, 2); - } - if (s != null && !s.isEmpty()) { - json = true; - } - } catch (Exception e) { - // ignore as not json - } - if (s == null || s.isEmpty()) { - s = value.toString(); - } - if (!json) { - // try with xml - try { - s = Jsoner.unescape(s); - if (loggingColor) { - s = XmlHelper.colorPrint(s, 2, true); - } else { - s = XmlHelper.prettyPrint(s, 2); - } - } catch (Exception e) { - // ignore as not xml - } - } - if (s == null || s.isEmpty()) { - s = value.toString(); - } - } - if (s == null) { - return "null"; - } - return s; + return CamelCommandHelper.valueAsStringPretty(value, loggingColor); } String valueAsStringRed() { diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CamelCommandHelper.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CamelCommandHelper.java index 46eb35423b4..26ba2d85884 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CamelCommandHelper.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CamelCommandHelper.java @@ -16,6 +16,8 @@ */ package org.apache.camel.dsl.jbang.core.common; +import org.apache.camel.util.json.Jsoner; + public final class CamelCommandHelper { private CamelCommandHelper() { @@ -39,4 +41,50 @@ public final class CamelCommandHelper { } } + public static String valueAsStringPretty(Object value, boolean loggingColor) { + if (value == null) { + return "null"; + } + boolean json = false; + String s = value.toString(); + if (!s.isEmpty()) { + try { + s = Jsoner.unescape(s); + if (loggingColor) { + s = JSonHelper.colorPrint(s, 2, true); + } else { + s = JSonHelper.prettyPrint(s, 2); + } + if (s != null && !s.isEmpty()) { + json = true; + } + } catch (Exception e) { + // ignore as not json + } + if (s == null || s.isEmpty()) { + s = value.toString(); + } + if (!json) { + // try with xml + try { + s = Jsoner.unescape(s); + if (loggingColor) { + s = XmlHelper.colorPrint(s, 2, true); + } else { + s = XmlHelper.prettyPrint(s, 2); + } + } catch (Exception e) { + // ignore as not xml + } + } + if (s == null || s.isEmpty()) { + s = value.toString(); + } + } + if (s == null) { + return "null"; + } + return s; + } + }