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

clebertsuconic pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git

commit 3c46871f7996203903e924e36e71a04619572e98
Author: Clebert Suconic <[email protected]>
AuthorDate: Mon May 6 15:38:06 2024 -0400

    ARTEMIS-4743 Allow single line header option
    
    This option would restore the previous presentation form without the line
    split on the header.
    
    Also some improvements on loop options
---
 .../artemis/cli/commands/queue/StatQueue.java      | 63 ++++++++++++++++------
 .../resources/CliFunctionTest/testQueueStat.groovy |  5 ++
 .../tests/compatibility/CLIFunctionTest.java       |  2 +-
 3 files changed, 54 insertions(+), 16 deletions(-)

diff --git 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/queue/StatQueue.java
 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/queue/StatQueue.java
index 3f6d1175c1..694e558503 100644
--- 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/queue/StatQueue.java
+++ 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/queue/StatQueue.java
@@ -105,8 +105,21 @@ public class StatQueue extends ConnectionAbstract {
    @Option(names = "--loop", description = "Keep Queue Stat in a forever loop, 
that you can interrupt with Ctrl-C, sleeping for --loop-time between each 
iteration.")
    private boolean useLoop = false;
 
+   private static final long DEFAULT_SLEEP = 60_000;
    @Option(names = "--loop-sleep", description = "Amount of Milliseconds to 
sleep before each iteration on queue stat. Default=60000")
-   private long loopSleep = 60_000;
+   private long loopSleep = -1;
+
+   @Option(names = "--single-line-header", description = "Use a single line on 
the header titles")
+   private boolean singleLineHeader = false;
+
+   public boolean isSingleLineHeader() {
+      return singleLineHeader;
+   }
+
+   public StatQueue setSingleLineHeader(boolean singleLineHeader) {
+      this.singleLineHeader = singleLineHeader;
+      return this;
+   }
 
    private int statCount = 0;
 
@@ -173,10 +186,19 @@ public class StatQueue extends ConnectionAbstract {
 
       singleExeuction(context, filter);
 
+      if (loopSleep != -1) {
+         // if --loop-sleep was passed as an argument, it is assumed the user 
also meant --loop
+         useLoop = true;
+      }
+
+      if (useLoop && loopSleep == -1) {
+         loopSleep = DEFAULT_SLEEP;
+      }
+
       while (useLoop) {
          getActionContext().out.println("Waiting " + loopSleep + " before 
another queue stat iteration");
          Thread.sleep(loopSleep);
-         getActionContext().out.print(new Date() + ">> Queue stat results for 
" + getBrokerInstance());
+         getActionContext().out.println(new Date() + ">> Queue stat results 
for " + getBrokerInstance());
          try {
             singleExeuction(context, filter);
          } catch (Throwable e) {
@@ -254,16 +276,20 @@ public class StatQueue extends ConnectionAbstract {
 
       FIELD[] fields = FIELD.values();
       for (int i = 0; i < fields.length; i++) {
-         ArrayList<String> splitTitleArrayList = new ArrayList<>();
-         String[]  splitTitleStringArray = fields[i].toString().split("_");
-         centralize[i] = fields[i].center;
+         if (singleLineHeader) {
+            columnSizes[i] = fields[i].toString().length();
+         } else {
+            ArrayList<String> splitTitleArrayList = new ArrayList<>();
+            String[] splitTitleStringArray = fields[i].toString().split("_");
+            centralize[i] = fields[i].center;
 
-         for (String s : splitTitleStringArray) {
-            splitTitleArrayList.add(s);
-            columnSizes[i] = Math.max(columnSizes[i], s.length());
-         }
+            for (String s : splitTitleStringArray) {
+               splitTitleArrayList.add(s);
+               columnSizes[i] = Math.max(columnSizes[i], s.length());
+            }
 
-         fieldTitles[i] = splitTitleArrayList;
+            fieldTitles[i] = splitTitleArrayList;
+         }
       }
 
       for (int i = 0; i < array.size(); i++) {
@@ -271,7 +297,12 @@ public class StatQueue extends ConnectionAbstract {
       }
 
       TableOut tableOut = new TableOut("|", 2, columnSizes);
-      tableOut.print(getActionContext().out, fieldTitles, centralize);
+
+      if (singleLineHeader) {
+         printHeadings(columnSizes);
+      } else {
+         tableOut.print(getActionContext().out, fieldTitles, centralize);
+      }
 
       for (int i = 0; i < array.size(); i++) {
          if (!includeManagement && 
array.getJsonObject(i).getString("name").contains(MANAGEMENT_QUEUE)) {
@@ -309,17 +340,19 @@ public class StatQueue extends ConnectionAbstract {
       }
    }
 
-   private void printHeadings(int[] columnSizes, TableOut tableOut) {
-      String[] columns = new String[columnSizes.length];
+   private void printHeadings(int[] columnSizes) {
+      // add 10 for the various '|' characters
+      StringBuilder stringBuilder = new 
StringBuilder(Arrays.stream(columnSizes).sum() + FIELD.values().length + 
1).append('|');
 
       int i = 0;
       for (FIELD e: FIELD.values()) {
-         columns[i++] = e.toString();
+         stringBuilder.append(paddingString(new StringBuilder(e.toString()), 
columnSizes[i++])).append('|');
       }
 
-      tableOut.print(getActionContext().out, columns);
+      getActionContext().out.println(stringBuilder);
    }
 
+
    private void printQueueStats(JsonObject jsonObject, int[] columnSizes, 
boolean[] center, TableOut tableOut) {
 
       //should not happen but just in case..
diff --git 
a/tests/compatibility-tests/src/main/resources/CliFunctionTest/testQueueStat.groovy
 
b/tests/compatibility-tests/src/main/resources/CliFunctionTest/testQueueStat.groovy
index 0c1a445f4a..e5a6f0dc4f 100644
--- 
a/tests/compatibility-tests/src/main/resources/CliFunctionTest/testQueueStat.groovy
+++ 
b/tests/compatibility-tests/src/main/resources/CliFunctionTest/testQueueStat.groovy
@@ -22,3 +22,8 @@ import 
org.apache.activemq.artemis.cli.commands.queue.StatQueue
 Run.setEmbedded(true)
 StatQueue statQueue = new StatQueue()
 statQueue.execute(new ActionContext())
+try {
+    statQueue.setSingleLineHeader(true)
+    statQueue.execute(new ActionContext())
+} catch (Throwable ignored) {
+}
diff --git 
a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/CLIFunctionTest.java
 
b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/CLIFunctionTest.java
index 4ba969902e..892233c739 100644
--- 
a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/CLIFunctionTest.java
+++ 
b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/CLIFunctionTest.java
@@ -58,7 +58,7 @@ public class CLIFunctionTest extends ClasspathBase {
    @Test
    public void testQueueStat() throws Throwable {
       try {
-         setVariable(serverClassloader, "persistent", Boolean.TRUE);
+         setVariable(serverClassloader, "persistent", Boolean.FALSE);
          startServer(serverFolder.getRoot(), serverClassloader, "server", null,
                      false, "servers/artemisServer.groovy",
                      "ARTEMIS", "ARTEMIS", "ARTEMIS");

Reply via email to