diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java index a07608ebd7..e76b3c9678 100644 --- a/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java +++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java @@ -2242,6 +2242,13 @@ public interface AuditLogger extends BasicLogger { @Message(id = 601267, value = "User {0} is creating a core session on target resource {1} {2}", format = Message.Format.MESSAGE_FORMAT) void createCoreSession(String user, Object source, Object... args); + static void getProducedRate(Object source) { + LOGGER.getMessageCount(getCaller(), source); + } + + @LogMessage(level = Logger.Level.INFO) + @Message(id = 601268, value = "User {0} is getting produced message rate on target resource: {1} {2}", format = Message.Format.MESSAGE_FORMAT) + void getProducedRate(String user, Object source, Object... args); //hot path log using a different logger static void coreSendMessage(Object source, String user, Object... args) { diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/QueueControl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/QueueControl.java index 2443d277ca..bc4f38029b 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/QueueControl.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/QueueControl.java @@ -99,6 +99,12 @@ public interface QueueControl { @Attribute(desc = MESSAGE_COUNT_DESCRIPTION) long getMessageCount(); + /** + * Returns the rate of writing messages to the queue. + */ + @Attribute(desc = "rate of writing messages to the queue currently (based on default window function)") + float getProducedRate(); + /** * Returns the persistent size of all messages currently in this queue. The persistent size of a message * is the amount of space the message would take up on disk which is used to track how much data there diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java index b789347ba4..4f189216d8 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java @@ -249,6 +249,17 @@ public class QueueControlImpl extends AbstractControl implements QueueControl { } } + @Override + public float getProducedRate() { + if (AuditLogger.isEnabled()) { + AuditLogger.getProducedRate(queue); + } + checkStarted(); + + // This is an attribute, no need to blockOnIO + return queue.getRate(); + } + @Override public long getPersistentSize() { if (AuditLogger.isEnabled()) { @@ -842,7 +853,7 @@ public class QueueControlImpl extends AbstractControl implements QueueControl { AuditLogger.countMessages(queue, filterStr); } - Long value = intenalCountMessages(filterStr, null).get(null); + Long value = internalCountMessages(filterStr, null).get(null); return value == null ? 0 : value; } @@ -852,10 +863,10 @@ public class QueueControlImpl extends AbstractControl implements QueueControl { AuditLogger.countMessages(queue, filterStr, groupByProperty); } - return JsonUtil.toJsonObject(intenalCountMessages(filterStr, groupByProperty)).toString(); + return JsonUtil.toJsonObject(internalCountMessages(filterStr, groupByProperty)).toString(); } - private Map intenalCountMessages(final String filterStr, final String groupByPropertyStr) throws Exception { + private Map internalCountMessages(final String filterStr, final String groupByPropertyStr) throws Exception { checkStarted(); clearIO(); @@ -890,7 +901,7 @@ public class QueueControlImpl extends AbstractControl implements QueueControl { AuditLogger.countDeliveringMessages(queue, filterStr); } - Long value = intenalCountDeliveryMessages(filterStr, null).get(null); + Long value = internalCountDeliveryMessages(filterStr, null).get(null); return value == null ? 0 : value; } @@ -900,10 +911,10 @@ public class QueueControlImpl extends AbstractControl implements QueueControl { AuditLogger.countDeliveringMessages(queue, filterStr, groupByProperty); } - return JsonUtil.toJsonObject(intenalCountDeliveryMessages(filterStr, groupByProperty)).toString(); + return JsonUtil.toJsonObject(internalCountDeliveryMessages(filterStr, groupByProperty)).toString(); } - private Map intenalCountDeliveryMessages(final String filterStr, final String groupByPropertyStr) throws Exception { + private Map internalCountDeliveryMessages(final String filterStr, final String groupByPropertyStr) throws Exception { checkStarted(); clearIO(); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlUsingCoreTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlUsingCoreTest.java index 254a28702e..14f55c9c3d 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlUsingCoreTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlUsingCoreTest.java @@ -206,6 +206,11 @@ public class QueueControlUsingCoreTest extends QueueControlTest { return (Long) proxy.retrieveAttributeValue("messageCount", Long.class); } + @Override + public float getProducedRate() { + return (Long) proxy.retrieveAttributeValue("producedRate", Long.class); + } + @Override public long getMessagesAdded() { return (Integer) proxy.retrieveAttributeValue("messagesAdded", Integer.class);