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;

Reply via email to