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 4c4b0881854 camel-jbang - camel get processor - Use level of EIP node
in output to represent route tree.
4c4b0881854 is described below
commit 4c4b0881854452bed07e7ee5332157e8274134fc
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Sep 16 08:18:11 2022 +0200
camel-jbang - camel get processor - Use level of EIP node in output to
represent route tree.
---
.../apache/camel/impl/console/RouteDevConsole.java | 2 ++
.../camel/model/ProcessorDefinitionHelper.java | 16 +++++++++++++
.../management/mbean/ManagedProcessorMBean.java | 3 +++
.../camel/management/mbean/ManagedProcessor.java | 7 ++++++
.../apache/camel/management/ManagedChoiceTest.java | 12 ++++++++--
.../startup/LoggingStartupStepRecorder.java | 16 ++-----------
.../java/org/apache/camel/util/StringHelper.java | 28 ++++++++++++++++++++++
.../org/apache/camel/util/StringHelperTest.java | 11 +++++++++
.../commands/process/CamelProcessorStatus.java | 13 +++++-----
9 files changed, 86 insertions(+), 22 deletions(-)
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
index c8a68b722bc..9e8c68de25a 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
@@ -143,6 +143,7 @@ public class RouteDevConsole extends AbstractDevConsole {
sb.append("\n");
sb.append(String.format("\n Id: %s", mp.getProcessorId()));
sb.append(String.format("\n Processor: %s",
mp.getProcessorName()));
+ sb.append(String.format("\n Level: %d", mp.getLevel()));
if (mp.getSourceLocation() != null) {
String loc = mp.getSourceLocation();
if (mp.getSourceLineNumber() != null) {
@@ -269,6 +270,7 @@ public class RouteDevConsole extends AbstractDevConsole {
jo.put("source", loc);
}
jo.put("processor", mp.getProcessorName());
+ jo.put("level", mp.getLevel());
JsonObject stats = new JsonObject();
stats.put("exchangesTotal", mp.getExchangesTotal());
stats.put("exchangesFailed", mp.getExchangesFailed());
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
index 8197cffeb9f..24aff77ee90 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
@@ -411,4 +411,20 @@ public final class ProcessorDefinitionHelper {
}
}
+ /**
+ * Returns the level of the node in the route tree.
+ * Level 1 is the root level, level 2 is a child of an EIP, and so forth
+ */
+ public static int getNodeLevel(NamedNode node) {
+ int level = 0;
+ while (node != null && node.getParent() != null) {
+ boolean shallow = node instanceof OutputExpressionNode || node
instanceof OtherwiseDefinition;
+ node = node.getParent();
+ if (!shallow) {
+ level++;
+ }
+ }
+ return level;
+ }
+
}
diff --git
a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedProcessorMBean.java
b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedProcessorMBean.java
index e8935b1e6d1..1e0c899b613 100644
---
a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedProcessorMBean.java
+++
b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedProcessorMBean.java
@@ -45,6 +45,9 @@ public interface ManagedProcessorMBean extends
ManagedPerformanceCounterMBean {
@ManagedAttribute(description = "Processor Index")
Integer getIndex();
+ @ManagedAttribute(description = "Processor Level in the route tree")
+ int getLevel();
+
@ManagedAttribute(description = "Source file Location")
String getSourceLocation();
diff --git
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
index 8e8e76db59b..c36bb890eb9 100644
---
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
+++
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
@@ -40,6 +40,7 @@ public class ManagedProcessor extends
ManagedPerformanceCounter implements Manag
private final Processor processor;
private final ProcessorDefinition<?> definition;
private final String id;
+ private final int nodeLevel;
private String stepId;
private Route route;
private String sourceLocation;
@@ -48,6 +49,7 @@ public class ManagedProcessor extends
ManagedPerformanceCounter implements Manag
this.context = context;
this.processor = processor;
this.definition = definition;
+ this.nodeLevel = ProcessorDefinitionHelper.getNodeLevel(definition);
this.id =
definition.idOrCreate(context.adapt(ExtendedCamelContext.class).getNodeIdFactory());
StepDefinition step;
if (definition instanceof StepDefinition) {
@@ -101,6 +103,11 @@ public class ManagedProcessor extends
ManagedPerformanceCounter implements Manag
return definition.getIndex();
}
+ @Override
+ public int getLevel() {
+ return nodeLevel;
+ }
+
@Override
public String getSourceLocation() {
return sourceLocation;
diff --git
a/core/camel-management/src/test/java/org/apache/camel/management/ManagedChoiceTest.java
b/core/camel-management/src/test/java/org/apache/camel/management/ManagedChoiceTest.java
index 7462852ba25..5ea1d96b866 100644
---
a/core/camel-management/src/test/java/org/apache/camel/management/ManagedChoiceTest.java
+++
b/core/camel-management/src/test/java/org/apache/camel/management/ManagedChoiceTest.java
@@ -47,7 +47,7 @@ public class ManagedChoiceTest extends ManagementTestSupport {
// get the stats for the route
MBeanServer mbeanServer = getMBeanServer();
- // get the object name for the delayer
+ // get the object name for choice
ObjectName on = getCamelObjectName(TYPE_PROCESSOR, "mysend");
// should be on route1
@@ -60,9 +60,17 @@ public class ManagedChoiceTest extends ManagementTestSupport
{
String state = (String) mbeanServer.getAttribute(on, "State");
assertEquals(ServiceStatus.Started.name(), state);
+ int level = (Integer) mbeanServer.getAttribute(on, "Level");
+ assertEquals(1, level);
+
TabularData data = (TabularData) mbeanServer.invoke(on,
"choiceStatistics", null, null);
assertNotNull(data);
assertEquals(2, data.size());
+
+ // get the object name for mock:bar
+ on = getCamelObjectName(TYPE_PROCESSOR, "bar");
+ level = (Integer) mbeanServer.getAttribute(on, "Level");
+ assertEquals(2, level);
}
@Override
@@ -75,7 +83,7 @@ public class ManagedChoiceTest extends ManagementTestSupport {
.when(header("foo"))
.to("mock:foo")
.otherwise()
- .to("mock:bar");
+ .to("mock:bar").id("bar");
}
};
}
diff --git
a/core/camel-support/src/main/java/org/apache/camel/support/startup/LoggingStartupStepRecorder.java
b/core/camel-support/src/main/java/org/apache/camel/support/startup/LoggingStartupStepRecorder.java
index 993808753c1..6febde386e5 100644
---
a/core/camel-support/src/main/java/org/apache/camel/support/startup/LoggingStartupStepRecorder.java
+++
b/core/camel-support/src/main/java/org/apache/camel/support/startup/LoggingStartupStepRecorder.java
@@ -16,9 +16,8 @@
*/
package org.apache.camel.support.startup;
-import java.util.Arrays;
-
import org.apache.camel.StartupStep;
+import org.apache.camel.util.StringHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -37,7 +36,7 @@ public class LoggingStartupStepRecorder extends
DefaultStartupStepRecorder {
protected void onEndStep(StartupStep step) {
if (LOG.isInfoEnabled()) {
long delta = System.currentTimeMillis() - step.getBeginTime();
- String pad = padString(step.getLevel());
+ String pad = StringHelper.padString(step.getLevel());
String out = String.format("%s", pad + step.getType());
String out2 = String.format("%6s ms", delta);
String out3 = String.format("%s(%s)", step.getDescription(),
step.getName());
@@ -45,17 +44,6 @@ public class LoggingStartupStepRecorder extends
DefaultStartupStepRecorder {
}
}
- public static String padString(int level) {
- if (level == 0) {
- return "";
- } else {
- byte[] arr = new byte[level * 2];
- byte space = ' ';
- Arrays.fill(arr, space);
- return new String(arr);
- }
- }
-
@Override
public String toString() {
return "logging";
diff --git
a/core/camel-util/src/main/java/org/apache/camel/util/StringHelper.java
b/core/camel-util/src/main/java/org/apache/camel/util/StringHelper.java
index cdd24250211..7c3cf0ad284 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/StringHelper.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/StringHelper.java
@@ -17,6 +17,7 @@
package org.apache.camel.util;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -1111,4 +1112,31 @@ public final class StringHelper {
}
return text;
}
+
+ /**
+ * Pad the string with leading spaces
+ *
+ * @param level level (2 blanks per level)
+ */
+ public static String padString(int level) {
+ return padString(level, 2);
+ }
+
+ /**
+ * Pad the string with leading spaces
+ *
+ * @param level level
+ * @param blanks number of blanks per level
+ */
+ public static String padString(int level, int blanks) {
+ if (level == 0) {
+ return "";
+ } else {
+ byte[] arr = new byte[level * blanks];
+ byte space = ' ';
+ Arrays.fill(arr, space);
+ return new String(arr);
+ }
+ }
+
}
diff --git
a/core/camel-util/src/test/java/org/apache/camel/util/StringHelperTest.java
b/core/camel-util/src/test/java/org/apache/camel/util/StringHelperTest.java
index a9849bdd5a0..e9c0ad5628a 100644
--- a/core/camel-util/src/test/java/org/apache/camel/util/StringHelperTest.java
+++ b/core/camel-util/src/test/java/org/apache/camel/util/StringHelperTest.java
@@ -214,4 +214,15 @@ public class StringHelperTest {
}
assertFalse(it.hasNext());
}
+
+ @Test
+ public void testPad() {
+ assertEquals(" ", StringHelper.padString(1));
+ assertEquals(" ", StringHelper.padString(2));
+ assertEquals(" ", StringHelper.padString(3));
+ assertEquals(" ", StringHelper.padString(3, 1));
+ assertEquals(" ", StringHelper.padString(1, 1));
+ assertEquals("", StringHelper.padString(0));
+ assertEquals("", StringHelper.padString(0, 2));
+ }
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelProcessorStatus.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelProcessorStatus.java
index a15de84bc82..2bd2adde44e 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelProcessorStatus.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelProcessorStatus.java
@@ -26,6 +26,7 @@ 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.commands.CamelJBangMain;
+import org.apache.camel.util.StringHelper;
import org.apache.camel.util.json.JsonArray;
import org.apache.camel.util.json.JsonObject;
import picocli.CommandLine;
@@ -141,6 +142,7 @@ public class CamelProcessorStatus extends
ProcessBaseCommand {
rows.add(row);
row.processorId = o.getString("id");
row.processor = o.getString("processor");
+ row.level = o.getIntegerOrDefault("level", 0);
row.source = o.getString("source");
Map<String, ?> stats = o.getMap("statistics");
if (stats != null) {
@@ -215,7 +217,8 @@ public class CamelProcessorStatus extends
ProcessBaseCommand {
answer = r.processorId != null ? r.processorId : r.routeId;
}
if (r.processorId != null) {
- answer = " " + answer;
+ String pad = StringHelper.padString(r.level, 1);
+ answer = pad + answer;
}
return answer;
}
@@ -229,11 +232,8 @@ public class CamelProcessorStatus extends
ProcessBaseCommand {
}
protected String getProcessor(Row r) {
- String answer = r.processor;
- if (r.processorId != null) {
- answer = " " + answer;
- }
- return answer;
+ String pad = StringHelper.padString(r.level, 1);
+ return pad + r.processor;
}
static class Row {
@@ -243,6 +243,7 @@ public class CamelProcessorStatus extends
ProcessBaseCommand {
String routeId;
String processorId;
String processor;
+ int level;
String source;
String state;
String total;