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