This is an automated email from the ASF dual-hosted git repository.
vavrtom pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git
The following commit(s) were added to refs/heads/main by this push:
new b57add218b QPID-8603: [Broker-J] Reset statistics (#143)
b57add218b is described below
commit b57add218bce181b9c9752b6c5dc5f54b4adf35d
Author: Daniil Kirilyuk <[email protected]>
AuthorDate: Thu Oct 20 07:36:47 2022 +0200
QPID-8603: [Broker-J] Reset statistics (#143)
---
.../store/berkeleydb/AbstractBDBMessageStore.java | 6 +
.../server/consumer/AbstractConsumerTarget.java | 7 +
.../qpid/server/consumer/ConsumerTarget.java | 2 +
.../qpid/server/exchange/AbstractExchange.java | 11 ++
.../java/org/apache/qpid/server/model/Broker.java | 24 ++-
.../org/apache/qpid/server/model/BrokerImpl.java | 22 +++
.../org/apache/qpid/server/model/BrokerLogger.java | 15 +-
.../model/ConfiguredObjectInjectedStatistic.java | 6 +
.../model/ConfiguredObjectMethodStatistic.java | 6 +
.../server/model/ConfiguredObjectStatistic.java | 2 +
.../org/apache/qpid/server/model/Connection.java | 50 ++++--
.../org/apache/qpid/server/model/Consumer.java | 15 +-
.../org/apache/qpid/server/model/Exchange.java | 20 ++-
.../apache/qpid/server/model/ManagedStatistic.java | 1 +
.../java/org/apache/qpid/server/model/Queue.java | 63 +++++--
.../java/org/apache/qpid/server/model/Session.java | 27 ++-
.../qpid/server/model/VirtualHostLogger.java | 15 +-
.../apache/qpid/server/model/port/AmqpPort.java | 7 +-
.../qpid/server/model/port/AmqpPortImpl.java | 8 +
.../apache/qpid/server/queue/AbstractQueue.java | 32 +++-
.../qpid/server/queue/QueueConsumerImpl.java | 8 +
.../apache/qpid/server/queue/QueueStatistics.java | 72 ++++++--
.../qpid/server/session/AbstractAMQPSession.java | 11 ++
.../qpid/server/store/MemoryMessageStore.java | 6 +
.../org/apache/qpid/server/store/MessageStore.java | 2 +
.../apache/qpid/server/store/NullMessageStore.java | 6 +
.../server/transport/AbstractAMQPConnection.java | 21 +++
.../server/virtualhost/AbstractVirtualHost.java | 19 ++
.../virtualhost/QueueManagingVirtualHost.java | 38 +++-
.../qpid/server/consumer/TestConsumerTarget.java | 6 +
.../server/exchange/ExchangeStatisticsTest.java | 170 ++++++++++++++++++
.../apache/qpid/server/model/BrokerTestHelper.java | 30 ++++
.../qpid/server/model/adapter/BrokerImplTest.java | 34 ++++
.../qpid/server/model/port/AmqpPortImplTest.java | 23 +++
.../qpid/server/queue/QueueStatisticsTest.java | 199 +++++++++++++++++++++
.../server/session/AbstractAMQPSessionTest.java | 39 +++-
.../protocol/v0_8/AMQPConnection_0_8Test.java | 31 ++++
.../protocol/v1_0/AMQPConnection_1_0ImplTest.java | 32 ++++
.../management/logger/brokerlogger/graylog/show.js | 5 +-
.../logger/virtualhostlogger/graylog/show.js | 5 +-
.../store/jdbc/AbstractJDBCMessageStore.java | 6 +
.../logging/logback/AbstractBrokerLogger.java | 2 -
.../server/logging/logback/AbstractLogger.java | 5 +
.../server/logging/logback/CompositeFilter.java | 8 +-
.../server/logging/logback/BrokerLoggerTest.java | 10 +-
.../logging/logback/VirtualHostLoggerTest.java | 79 ++++++++
.../server/management/amqp/ProxyMessageSource.java | 6 +
.../plugin/servlet/rest/ApiDocsServlet.java | 4 +-
.../java/resources/common/StatisticsWidget.html | 2 +
.../resources/js/qpid/common/StatisticsWidget.js | 15 ++
.../src/main/java/resources/js/qpid/common/util.js | 22 +++
.../java/resources/js/qpid/management/Broker.js | 1 +
.../resources/js/qpid/management/Connection.js | 5 +-
.../java/resources/js/qpid/management/Exchange.js | 1 +
.../java/resources/js/qpid/management/Queue.js | 1 +
.../resources/js/qpid/management/VirtualHost.js | 1 +
.../js/qpid/management/logger/brokerlogger/show.js | 14 +-
.../management/logger/virtualhostlogger/show.js | 22 ++-
.../resources/js/qpid/management/port/amqp/show.js | 1 +
.../java/resources/logger/brokerlogger/show.html | 3 +
.../resources/logger/virtualhostlogger/show.html | 3 +
61 files changed, 1204 insertions(+), 103 deletions(-)
diff --git
a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java
b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java
index cf2b81f63b..1d5de02218 100644
---
a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java
+++
b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java
@@ -262,6 +262,12 @@ public abstract class AbstractBDBMessageStore implements
MessageStore
return true;
}
+ @Override
+ public void resetStatistics()
+ {
+ _bytesEvacuatedFromMemory.set(0L);
+ }
+
@Override
public org.apache.qpid.server.store.Transaction newTransaction()
{
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/consumer/AbstractConsumerTarget.java
b/broker-core/src/main/java/org/apache/qpid/server/consumer/AbstractConsumerTarget.java
index 6733ed4c86..33c6bbe395 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/consumer/AbstractConsumerTarget.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/consumer/AbstractConsumerTarget.java
@@ -228,6 +228,13 @@ public abstract class AbstractConsumerTarget<T extends
AbstractConsumerTarget<T>
return _unacknowledgedBytes.longValue();
}
+ @Override
+ public void resetStatistics()
+ {
+ _unacknowledgedCount.set(0L);
+ _unacknowledgedBytes.set(0L);
+ }
+
protected abstract void doSend(final MessageInstanceConsumer consumer,
MessageInstance entry, boolean batch);
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/consumer/ConsumerTarget.java
b/broker-core/src/main/java/org/apache/qpid/server/consumer/ConsumerTarget.java
index 419673c3c8..0f5a111d92 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/consumer/ConsumerTarget.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/consumer/ConsumerTarget.java
@@ -59,6 +59,8 @@ public interface ConsumerTarget<T extends ConsumerTarget<T>>
long getUnacknowledgedMessages();
+ void resetStatistics();
+
AMQPSession<?,T> getSession();
void send(final MessageInstanceConsumer<T> consumer, MessageInstance
entry, boolean batch);
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java
b/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java
index 32a7ce1502..7742992566 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java
@@ -1108,6 +1108,17 @@ public abstract class AbstractExchange<T extends
AbstractExchange<T>>
}
}
+ @Override
+ public void resetStatistics()
+ {
+ _receivedMessageCount.set(0);
+ _receivedMessageSize.set(0);
+ _routedMessageCount.set(0);
+ _routedMessageSize.set(0);
+ _droppedMessageCount.set(0);
+ _droppedMessageSize.set(0);
+ }
+
@Override
protected void logCreated(final Map<String, Object> attributes,
final Outcome outcome)
diff --git a/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
b/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
index 456660060a..00aa628bcb 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
@@ -201,7 +201,8 @@ public interface Broker<X extends Broker<X>> extends
ConfiguredObject<X>, EventL
units = StatisticUnit.BYTES,
label = "Inbound",
description = "Total size of all messages received by the Broker.",
- metricName = "inbound_bytes_count")
+ metricName = "inbound_bytes_count",
+ resettable = true)
long getBytesIn();
@SuppressWarnings("unused")
@@ -209,7 +210,8 @@ public interface Broker<X extends Broker<X>> extends
ConfiguredObject<X>, EventL
units = StatisticUnit.BYTES,
label = "Outbound",
description = "Total size of all messages delivered by the
Broker.",
- metricName = "outbound_bytes_count")
+ metricName = "outbound_bytes_count",
+ resettable = true)
long getBytesOut();
@SuppressWarnings("unused")
@@ -217,7 +219,8 @@ public interface Broker<X extends Broker<X>> extends
ConfiguredObject<X>, EventL
units = StatisticUnit.MESSAGES,
label = "Inbound",
description = "Total number of messages received by the Broker.",
- metricName = "inbound_messages_count")
+ metricName = "inbound_messages_count",
+ resettable = true)
long getMessagesIn();
@SuppressWarnings("unused")
@@ -225,7 +228,8 @@ public interface Broker<X extends Broker<X>> extends
ConfiguredObject<X>, EventL
units = StatisticUnit.MESSAGES,
label = "Outbound",
description = "Total number of messages delivered by the Broker.",
- metricName = "outbound_messages_count")
+ metricName = "outbound_messages_count",
+ resettable = true)
long getMessagesOut();
@@ -234,7 +238,8 @@ public interface Broker<X extends Broker<X>> extends
ConfiguredObject<X>, EventL
units = StatisticUnit.MESSAGES,
label = "Transacted Inbound",
description = "Total number of messages delivered by the Broker
within a transaction.",
- metricName = "inbound_transacted_messages_count")
+ metricName = "inbound_transacted_messages_count",
+ resettable = true)
long getTransactedMessagesIn();
@SuppressWarnings("unused")
@@ -242,9 +247,13 @@ public interface Broker<X extends Broker<X>> extends
ConfiguredObject<X>, EventL
units = StatisticUnit.MESSAGES,
label = "Transacted Outbound",
description = "Total number of messages received by the Broker
within a transaction.",
- metricName = "outbound_transacted_messages_count")
+ metricName = "outbound_transacted_messages_count",
+ resettable = true)
long getTransactedMessagesOut();
+ @ManagedOperation(description = "Resets broker statistics",
changesConfiguredObjectState = true)
+ void resetStatistics();
+
@ManagedOperation(nonModifying = true,
description = "Initiates an orderly shutdown of the Broker.",
changesConfiguredObjectState = false)
@@ -332,7 +341,8 @@ public interface Broker<X extends Broker<X>> extends
ConfiguredObject<X>, EventL
units = StatisticUnit.BYTES,
label = "Maximum recorded size of inbound messages",
description = "Maximum size of messages published into the Broker
since start-up.",
- metricName = "inbound_message_size_high_watermark")
+ metricName = "inbound_message_size_high_watermark",
+ resettable = true)
long getInboundMessageSizeHighWatermark();
@ManagedOperation(nonModifying = true,
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/BrokerImpl.java
b/broker-core/src/main/java/org/apache/qpid/server/model/BrokerImpl.java
index 5d4b8ee1cc..d69d55900d 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/model/BrokerImpl.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/model/BrokerImpl.java
@@ -65,6 +65,7 @@ import
org.apache.qpid.server.configuration.IllegalConfigurationException;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
import org.apache.qpid.server.configuration.updater.TaskExecutorImpl;
import org.apache.qpid.server.logging.messages.BrokerMessages;
+import org.apache.qpid.server.model.port.AmqpPort;
import org.apache.qpid.server.model.preferences.Preference;
import org.apache.qpid.server.model.preferences.UserPreferences;
import org.apache.qpid.server.model.preferences.UserPreferencesImpl;
@@ -991,6 +992,27 @@ public class BrokerImpl extends
AbstractContainer<BrokerImpl> implements Broker<
return _documentationUrl;
}
+ @Override
+ public void resetStatistics()
+ {
+ _maximumMessageSize.set(0L);
+
+ _bytesIn.set(0L);
+ _bytesOut.set(0L);
+ _messagesIn.set(0L);
+ _messagesOut.set(0L);
+ _transactedMessagesIn.set(0L);
+ _transactedMessagesOut.set(0L);
+
+ getChildren(BrokerLogger.class).forEach(BrokerLogger::resetStatistics);
+ getChildren(Port.class).stream()
+ .filter(AmqpPort.class::isInstance).map(port -> (AmqpPort<?>)
port)
+ .forEach(AmqpPort::resetStatistics);
+ getVirtualHostNodes().stream().map(VirtualHostNode::getVirtualHost)
+ .filter(QueueManagingVirtualHost.class::isInstance).map(vh ->
(QueueManagingVirtualHost<?>) vh)
+ .forEach(QueueManagingVirtualHost::resetStatistics);
+ }
+
@Override
public void restart()
{
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/BrokerLogger.java
b/broker-core/src/main/java/org/apache/qpid/server/model/BrokerLogger.java
index 8c4ad5ba5b..75e35d0d31 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/model/BrokerLogger.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/model/BrokerLogger.java
@@ -28,9 +28,20 @@ public interface BrokerLogger<X extends BrokerLogger<X>>
extends ConfiguredObjec
void stopLogging();
- @ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.COUNT, label = "Errors", metricName = "errors_count")
+ @ManagedStatistic(statisticType = StatisticType.CUMULATIVE,
+ units = StatisticUnit.COUNT,
+ label = "Errors",
+ metricName = "errors_count",
+ resettable = true)
long getErrorCount();
- @ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.COUNT, label = "Warnings", metricName = "warnings_count")
+ @ManagedStatistic(statisticType = StatisticType.CUMULATIVE,
+ units = StatisticUnit.COUNT,
+ label = "Warnings",
+ metricName = "warnings_count",
+ resettable = true)
long getWarnCount();
+
+ @ManagedOperation(description = "Resets broker logger statistics",
changesConfiguredObjectState = true)
+ void resetStatistics();
}
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedStatistic.java
b/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedStatistic.java
index f1d9c6b747..6df6a5323e 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedStatistic.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedStatistic.java
@@ -165,4 +165,10 @@ final public class ConfiguredObjectInjectedStatistic<C
extends ConfiguredObject,
{
return _metricDisabled;
}
+
+ @Override
+ public boolean isResettable()
+ {
+ return false;
+ }
}
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodStatistic.java
b/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodStatistic.java
index 528d80ee41..cb7b12ed1a 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodStatistic.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodStatistic.java
@@ -78,4 +78,10 @@ public final class ConfiguredObjectMethodStatistic<C extends
ConfiguredObject, T
{
return _annotation.metricDisabled();
}
+
+ @Override
+ public boolean isResettable()
+ {
+ return _annotation.resettable();
+ }
}
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectStatistic.java
b/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectStatistic.java
index 4585b4241a..6cff8de750 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectStatistic.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectStatistic.java
@@ -33,4 +33,6 @@ public interface ConfiguredObjectStatistic<C extends
ConfiguredObject, T extends
String getMetricName();
boolean isMetricDisabled();
+
+ boolean isResettable();
}
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java
b/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java
index 39022d17bf..cfb7c9814b 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java
@@ -117,24 +117,32 @@ public interface Connection<X extends Connection<X>>
extends ConfiguredObject<X>
// See also QPID-7689:
https://issues.apache.org/jira/browse/QPID-7689?focusedCommentId=16022923#comment-16022923
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.BYTES, label = "Inbound",
- description = "Total size of all messages received by
this connection.", metricName = "inbound_bytes_count")
+ description = "Total size of all messages received by this
connection.",
+ metricName = "inbound_bytes_count",
+ resettable = true)
long getBytesIn();
// currently this reports outbound message content size without header.
// See also QPID-7689:
https://issues.apache.org/jira/browse/QPID-7689?focusedCommentId=16022923#comment-16022923
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.BYTES, label = "Outbound",
- description = "Total size of all messages delivered by
this connection.", metricName = "outbound_bytes_count")
+ description = "Total size of all messages delivered by this
connection.",
+ metricName = "outbound_bytes_count",
+ resettable = true)
long getBytesOut();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Inbound",
- description = "Total number of messages delivered by
this connection.", metricName = "inbound_messages_count")
+ description = "Total number of messages delivered by this
connection.",
+ metricName = "inbound_messages_count",
+ resettable = true)
long getMessagesIn();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Outbound",
- description = "Total number of messages received by this
connection.", metricName = "outbound_messages_count")
+ description = "Total number of messages received by this
connection.",
+ metricName = "outbound_messages_count",
+ resettable = true)
long getMessagesOut();
@SuppressWarnings("unused")
@@ -144,20 +152,23 @@ public interface Connection<X extends Connection<X>>
extends ConfiguredObject<X>
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME, units =
StatisticUnit.ABSOLUTE_TIME, label = "Last Inbound Message",
- description = "Time of last message received by the broker on this
connection. "
- + "If no message has been received the connection
creation time will be used.")
+ description = "Time of last message received by the broker on this
connection. " +
+ "If no message has been received the connection
creation time will be used.",
+ resettable = true)
Date getLastInboundMessageTime();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME, units =
StatisticUnit.ABSOLUTE_TIME, label = "Last Outbound Message",
- description = "Time of last message sent by the broker on this
connection. "
- + "If no message has been snt the connection
creation time will be used.")
+ description = "Time of last message sent by the broker on this
connection. " +
+ "If no message has been snt the connection creation
time will be used.",
+ resettable = true)
Date getLastOutboundMessageTime();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME, units =
StatisticUnit.ABSOLUTE_TIME, label = "Last Message",
- description = "Time of last message sent or received by the broker
on this connection. "
- + "If no message has been sent or received the
connection creation time will be used.")
+ description = "Time of last message sent or received by the broker
on this connection. " +
+ "If no message has been sent or received the
connection creation time will be used.",
+ resettable = true)
Date getLastMessageTime();
@SuppressWarnings("unused")
@@ -167,12 +178,16 @@ public interface Connection<X extends Connection<X>>
extends ConfiguredObject<X>
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.COUNT,
- label = "Transactions", description = "Total number of
transactions started.")
+ label = "Transactions",
+ description = "Total number of transactions started.",
+ resettable = true)
long getLocalTransactionBegins();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.COUNT,
- label = "Rolled-back Transactions", description = "Total number of
rolled-back transactions.")
+ label = "Rolled-back Transactions",
+ description = "Total number of rolled-back transactions.",
+ resettable = true)
long getLocalTransactionRollbacks();
@SuppressWarnings("unused")
@@ -188,14 +203,21 @@ public interface Connection<X extends Connection<X>>
extends ConfiguredObject<X>
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Transacted Inbound",
- description = "Total number of messages delivered by this
connection within a transaction.", metricName =
"transacted_inbound_messages_count")
+ description = "Total number of messages delivered by this
connection within a transaction.",
+ metricName = "transacted_inbound_messages_count",
+ resettable = true)
long getTransactedMessagesIn();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Transacted Outbound",
- description = "Total number of messages received by this
connection within a transaction.", metricName =
"transacted_outbound_messages_count")
+ description = "Total number of messages received by this
connection within a transaction.",
+ metricName = "transacted_outbound_messages_count",
+ resettable = true)
long getTransactedMessagesOut();
+ @ManagedOperation(description = "Resets connection statistics",
changesConfiguredObjectState = true)
+ void resetStatistics();
+
//children
Collection<Session> getSessions();
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java
b/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java
index 033f2634d1..e4fc698371 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java
@@ -69,10 +69,18 @@ public interface Consumer<X extends Consumer<X,T>, T
extends ConsumerTarget> ext
+ "consumers. Priority 2147483647 is the highest
priority.")
int getPriority();
- @ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.BYTES, label = "Outbound", metricName = "outbound_bytes_count")
+ @ManagedStatistic(statisticType = StatisticType.CUMULATIVE,
+ units = StatisticUnit.BYTES,
+ label = "Outbound",
+ metricName = "outbound_bytes_count",
+ resettable = true)
long getBytesOut();
- @ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Outbound", metricName =
"outbound_messages_count")
+ @ManagedStatistic(statisticType = StatisticType.CUMULATIVE,
+ units = StatisticUnit.MESSAGES,
+ label = "Outbound",
+ metricName = "outbound_messages_count",
+ resettable = true)
long getMessagesOut();
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME, units =
StatisticUnit.BYTES, label = "Prefetch")
@@ -81,6 +89,9 @@ public interface Consumer<X extends Consumer<X,T>, T extends
ConsumerTarget> ext
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME, units =
StatisticUnit.MESSAGES, label = "Prefetch")
long getUnacknowledgedMessages();
+ @ManagedOperation(description = "Resets consumer statistics",
changesConfiguredObjectState = true)
+ void resetStatistics();
+
long getConsumerNumber();
boolean isSuspended();
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java
b/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java
index f95c6a3948..36272b8bf3 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java
@@ -88,27 +88,35 @@ public interface Exchange<X extends Exchange<X>> extends
ConfiguredObject<X>, Me
// Statistics
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME, units =
StatisticUnit.COUNT, label = "Bindings",
- description = "Current number of bindings to this
exchange.", metricName = "bindings_total")
+ description = "Current number of bindings to this exchange.",
metricName = "bindings_total")
long getBindingCount();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.BYTES, label = "Dropped",
- description = "Total size of all unroutable messages
dropped by this exchange.", metricName = "dropped_bytes_count")
+ description = "Total size of all unroutable messages dropped by
this exchange.",
+ metricName = "dropped_bytes_count",
+ resettable = true)
long getBytesDropped();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.BYTES, label = "Inbound",
- description = "Total size of messages received by this
exchange.", metricName = "inbound_bytes_count")
+ description = "Total size of messages received by this exchange.",
+ metricName = "inbound_bytes_count",
+ resettable = true)
long getBytesIn();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Dropped",
- description = "Number of unroutable messages dropped by
this exchange.", metricName = "dropped_messages_count")
+ description = "Number of unroutable messages dropped by this
exchange.",
+ metricName = "dropped_messages_count",
+ resettable = true)
long getMessagesDropped();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Inbound",
- description = "Number of messages received by this
exchange.", metricName = "inbound_messages_count")
+ description = "Number of messages received by this exchange.",
+ metricName = "inbound_messages_count",
+ resettable = true)
long getMessagesIn();
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME, units =
StatisticUnit.COUNT, label = "Producers",
@@ -128,6 +136,8 @@ public interface Exchange<X extends Exchange<X>> extends
ConfiguredObject<X>, Me
boolean unbind(@Param(name="destination", mandatory = true) String
destination,
@Param(name="bindingKey", mandatory = true) String
bindingKey);
+ @ManagedOperation(changesConfiguredObjectState = true, description =
"Resets exchange statistics")
+ void resetStatistics();
/**
* @return true if the exchange will be deleted after all queues have been
detached
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/ManagedStatistic.java
b/broker-core/src/main/java/org/apache/qpid/server/model/ManagedStatistic.java
index 1bcd52e338..64ca72cbbe 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/model/ManagedStatistic.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/model/ManagedStatistic.java
@@ -35,4 +35,5 @@ public @interface ManagedStatistic
StatisticType statisticType();
String metricName() default "";
boolean metricDisabled() default false;
+ boolean resettable() default false;
}
diff --git a/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java
b/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java
index 1e1f5db950..e40763d883 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java
@@ -404,22 +404,26 @@ public interface Queue<X extends Queue<X>> extends
ConfiguredObject<X>,
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.BYTES, label = "Delivered (Persistent)",
- description = "Total size of all persistent messages
delivered by this queue.")
+ description = "Total size of all persistent messages delivered by
this queue.",
+ resettable = true)
long getPersistentDequeuedBytes();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Delivered (Persistent)",
- description = "Total number of persistent messages
delivered by this queue.")
+ description = "Total number of persistent messages delivered by
this queue.",
+ resettable = true)
long getPersistentDequeuedMessages();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.BYTES, label = "Enqueued (Persistent)",
- description = "Total size of all persistent messages
received by this queue.")
+ description = "Total size of all persistent messages received by
this queue.",
+ resettable = true)
long getPersistentEnqueuedBytes();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Enqueued (Persistent)",
- description = "Total number of persistent messages
received by this queue.")
+ description = "Total number of persistent messages received by
this queue.",
+ resettable = true)
long getPersistentEnqueuedMessages();
@SuppressWarnings("unused")
@@ -434,32 +438,44 @@ public interface Queue<X extends Queue<X>> extends
ConfiguredObject<X>,
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.BYTES, label = "Delivered",
- description = "Total size of all messages delivered by
this queue.", metricName = "dequeued_bytes_count")
+ description = "Total size of all messages delivered by this
queue.",
+ metricName = "dequeued_bytes_count",
+ resettable = true)
long getTotalDequeuedBytes();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Delivered",
- description = "Total number of messages delivered by
this queue.", metricName = "dequeued_messages_count")
+ description = "Total number of messages delivered by this queue.",
+ metricName = "dequeued_messages_count",
+ resettable = true)
long getTotalDequeuedMessages();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.BYTES, label = "Enqueued",
- description = "Total size of all messages received by
this queue.", metricName = "enqueue_bytes_count")
+ description = "Total size of all messages received by this queue.",
+ metricName = "enqueue_bytes_count",
+ resettable = true)
long getTotalEnqueuedBytes();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Enqueued",
- description = "Total number of messages received by this
queue.", metricName = "enqueued_messages_count")
+ description = "Total number of messages received by this queue.",
+ metricName = "enqueued_messages_count",
+ resettable = true)
long getTotalEnqueuedMessages();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.BYTES, label = "Expired",
- description = "Total size of all messages expired by message
time-to-live on this queue.", metricName = "expired_bytes_count")
+ description = "Total size of all messages expired by message
time-to-live on this queue.",
+ metricName = "expired_bytes_count",
+ resettable = true)
long getTotalExpiredBytes();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Expired",
- description = "Total number of messages expired by message
time-to-live on this queue.", metricName = "expired_messages_count")
+ description = "Total number of messages expired by message
time-to-live on this queue.",
+ metricName = "expired_messages_count",
+ resettable = true)
long getTotalExpiredMessages();
@@ -485,22 +501,30 @@ public interface Queue<X extends Queue<X>> extends
ConfiguredObject<X>,
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME, units =
StatisticUnit.BYTES, label = "Available HWM",
- description = "Maximum recorded size of available
messages.", metricName = "available_bytes_high_water_mark")
+ description = "Maximum recorded size of available messages.",
+ metricName = "available_bytes_high_water_mark",
+ resettable = true)
long getAvailableBytesHighWatermark();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME, units =
StatisticUnit.MESSAGES, label = "Available HWM",
- description = "Maximum recorded number of available
messages.", metricName = "available_messages_high_water_mark")
+ description = "Maximum recorded number of available messages.",
+ metricName = "available_messages_high_water_mark",
+ resettable = true)
int getAvailableMessagesHighWatermark();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME, units =
StatisticUnit.BYTES, label = "Queue Depth HWM",
- description = "Maximum recorded size of enqueued
messages.", metricName = "depth_bytes_high_water_mark")
+ description = "Maximum recorded size of enqueued messages.",
+ metricName = "depth_bytes_high_water_mark",
+ resettable = true)
long getQueueDepthBytesHighWatermark();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME, units =
StatisticUnit.MESSAGES, label = "Queue Depth HWM",
- description = "Maximum recorded number of enqueued
messages.", metricName = "depth_messages_high_water_mark")
+ description = "Maximum recorded number of enqueued messages.",
+ metricName = "depth_messages_high_water_mark",
+ resettable = true)
int getQueueDepthMessagesHighWatermark();
@SuppressWarnings("unused")
@@ -510,14 +534,21 @@ public interface Queue<X extends Queue<X>> extends
ConfiguredObject<X>,
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.BYTES, label = "Malformed",
- description = "Total size of enqueued malformed messages.",
metricName = "malformed_bytes_count")
+ description = "Total size of enqueued malformed messages.",
+ metricName = "malformed_bytes_count",
+ resettable = true)
long getTotalMalformedBytes();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Malformed",
- description = "Total number of enqueued malformed messages.",
metricName = "malformed_messages_count")
+ description = "Total number of enqueued malformed messages.",
+ metricName = "malformed_messages_count",
+ resettable = true)
long getTotalMalformedMessages();
+ @ManagedOperation(description = "Resets queue statistics",
changesConfiguredObjectState = true)
+ void resetStatistics();
+
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME, units =
StatisticUnit.COUNT, label = "Producers",
description = "Number of producers to this queue.", metricName =
"producers_count")
long getProducerCount();
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/Session.java
b/broker-core/src/main/java/org/apache/qpid/server/model/Session.java
index 36d73a817d..2bf9fe06dd 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/model/Session.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/model/Session.java
@@ -68,34 +68,49 @@ public interface Session<X extends Session<X>> extends
ConfiguredObject<X>
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.BYTES, label = "Inbound",
- description = "Total size of all messages received by this
session.", metricName = "inbound_bytes_count")
+ description = "Total size of all messages received by this
session.",
+ metricName = "inbound_bytes_count",
+ resettable = true)
long getBytesIn();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.BYTES, label = "Outbound",
- description = "Total size of all messages delivered by this
session.", metricName = "outbound_bytes_count")
+ description = "Total size of all messages delivered by this
session.",
+ metricName = "outbound_bytes_count",
+ resettable = true)
long getBytesOut();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Inbound",
- description = "Total number of messages delivered by this
session.", metricName = "inbound_messages_count")
+ description = "Total number of messages delivered by this
session.",
+ metricName = "inbound_messages_count",
+ resettable = true)
long getMessagesIn();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Outbound",
- description = "Total number of messages received by this
session.", metricName = "outbound_messages_count")
+ description = "Total number of messages received by this session.",
+ metricName = "outbound_messages_count",
+ resettable = true)
long getMessagesOut();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Transacted Inbound",
- description = "Total number of messages delivered by this session
within a transaction.", metricName = "transacted_inbound_messages_count")
+ description = "Total number of messages delivered by this session
within a transaction.",
+ metricName = "transacted_inbound_messages_count",
+ resettable = true)
long getTransactedMessagesIn();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Transacted Outbound",
- description = "Total number of messages received by this session
within a transaction.", metricName = "transacted_outbound_messages_count")
+ description = "Total number of messages received by this session
within a transaction.",
+ metricName = "transacted_outbound_messages_count",
+ resettable = true)
long getTransactedMessagesOut();
+ @ManagedOperation(description = "Resets session statistics",
changesConfiguredObjectState = true)
+ void resetStatistics();
+
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME, units =
StatisticUnit.COUNT, label = "Producers",
description = "Number of producers to this exchange.", metricName
= "producers_count")
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostLogger.java
b/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostLogger.java
index 6599a0f2a9..0d3907b2e4 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostLogger.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostLogger.java
@@ -25,9 +25,20 @@ public interface VirtualHostLogger <X extends
VirtualHostLogger<X>> extends Conf
{
void stopLogging();
- @ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.COUNT, label = "Errors", metricName = "errors_count")
+ @ManagedStatistic(statisticType = StatisticType.CUMULATIVE,
+ units = StatisticUnit.COUNT,
+ label = "Errors",
+ metricName = "errors_count",
+ resettable = true)
long getErrorCount();
- @ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.COUNT, label = "Warnings", metricName = "warnings_count")
+ @ManagedStatistic(statisticType = StatisticType.CUMULATIVE,
+ units = StatisticUnit.COUNT,
+ label = "Warnings",
+ metricName = "warnings_count",
+ resettable = true)
long getWarnCount();
+
+ @ManagedOperation(description = "Resets VirtualHostLogger statistics",
changesConfiguredObjectState = true)
+ void resetStatistics();
}
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java
b/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java
index 98aadbad04..b51f90d710 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java
@@ -28,6 +28,7 @@ import org.apache.qpid.server.model.DerivedAttribute;
import org.apache.qpid.server.model.ManagedAttribute;
import org.apache.qpid.server.model.ManagedContextDefault;
import org.apache.qpid.server.model.ManagedObject;
+import org.apache.qpid.server.model.ManagedOperation;
import org.apache.qpid.server.model.ManagedStatistic;
import org.apache.qpid.server.model.Port;
import org.apache.qpid.server.model.Protocol;
@@ -199,9 +200,13 @@ public interface AmqpPort<X extends AmqpPort<X>> extends
Port<X>
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.COUNT,
label = "Total Connections",
description = "Total number of connections made through this port
since broker startup",
- metricName = "aggregate_connection_count")
+ metricName = "aggregate_connection_count",
+ resettable = true)
long getTotalConnectionCount();
+ @ManagedOperation(description = "Resets port statistics",
changesConfiguredObjectState = true)
+ void resetStatistics();
+
@DerivedAttribute(description = "Maximum time allowed for a new connection
to send a protocol header."
+ " If the connection does not send a
protocol header within this time,"
+ " the connection will be aborted.")
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
b/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
index f59e280757..8a3143fbce 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
@@ -49,6 +49,7 @@ import org.apache.qpid.server.logging.messages.BrokerMessages;
import org.apache.qpid.server.logging.messages.PortMessages;
import org.apache.qpid.server.logging.subjects.PortLogSubject;
import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.Connection;
import org.apache.qpid.server.model.Container;
import org.apache.qpid.server.model.DefaultVirtualHostAlias;
import org.apache.qpid.server.model.HostNameAlias;
@@ -626,6 +627,13 @@ public class AmqpPortImpl extends
AbstractPort<AmqpPortImpl> implements AmqpPort
return _protocolHandshakeTimeout;
}
+ @Override
+ public void resetStatistics()
+ {
+ _totalConnectionCount.set(0L);
+ getChildren(Connection.class).forEach(Connection::resetStatistics);
+ }
+
@Override
public boolean getCloseWhenNoRoute()
{
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
b/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
index 7a660c5d5f..5fcd012c71 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
@@ -100,7 +100,28 @@ import org.apache.qpid.server.message.RejectType;
import org.apache.qpid.server.message.RoutingResult;
import org.apache.qpid.server.message.ServerMessage;
import org.apache.qpid.server.message.internal.InternalMessage;
-import org.apache.qpid.server.model.*;
+
+import org.apache.qpid.server.model.AbstractConfigurationChangeListener;
+import org.apache.qpid.server.model.AbstractConfiguredObject;
+import org.apache.qpid.server.model.AlternateBinding;
+import org.apache.qpid.server.model.Binding;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.Consumer;
+import org.apache.qpid.server.model.Content;
+import org.apache.qpid.server.model.CustomRestHeaders;
+import org.apache.qpid.server.model.Exchange;
+import org.apache.qpid.server.model.ExclusivityPolicy;
+import org.apache.qpid.server.model.LifetimePolicy;
+import org.apache.qpid.server.model.ManagedAttributeField;
+import org.apache.qpid.server.model.NamedAddressSpace;
+import org.apache.qpid.server.model.OverflowPolicy;
+import org.apache.qpid.server.model.PublishingLink;
+import org.apache.qpid.server.model.Queue;
+import org.apache.qpid.server.model.QueueNotificationListener;
+import org.apache.qpid.server.model.RestContentHeader;
+import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.StateTransition;
import org.apache.qpid.server.model.preferences.GenericPrincipal;
import org.apache.qpid.server.plugin.MessageConverter;
import org.apache.qpid.server.plugin.MessageFilterFactory;
@@ -310,7 +331,7 @@ public abstract class AbstractQueue<X extends
AbstractQueue<X>>
{
super.onCreate();
- if(isDurable() && (getLifetimePolicy() ==
LifetimePolicy.DELETE_ON_CONNECTION_CLOSE
+ if(isDurable() && (getLifetimePolicy() ==
LifetimePolicy.DELETE_ON_CONNECTION_CLOSE
|| getLifetimePolicy() ==
LifetimePolicy.DELETE_ON_SESSION_END))
{
Subject.doAs(getSubjectWithAddedSystemRights(),
@@ -1469,6 +1490,13 @@ public abstract class AbstractQueue<X extends
AbstractQueue<X>>
return _queueStatistics.getEnqueueCount();
}
+ @Override
+ public void resetStatistics()
+ {
+ _queueStatistics.reset();
+ getConsumers().forEach(Consumer::resetStatistics);
+ }
+
private void setLastSeenEntry(final QueueConsumer<?,?> sub, final
QueueEntry entry)
{
QueueContext subContext = sub.getQueueContext();
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java
b/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java
index a899b3c2e2..f0bb3138db 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java
@@ -511,6 +511,14 @@ class QueueConsumerImpl<T extends ConsumerTarget>
return _deliveredCount.longValue();
}
+ @Override
+ public void resetStatistics()
+ {
+ _deliveredBytes.set(0L);
+ _deliveredCount.set(0L);
+ _target.resetStatistics();
+ }
+
@Override
public void acquisitionRemoved(final QueueEntry node)
{
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/queue/QueueStatistics.java
b/broker-core/src/main/java/org/apache/qpid/server/queue/QueueStatistics.java
index ea0cc5b650..971a65dce8 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/queue/QueueStatistics.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/queue/QueueStatistics.java
@@ -57,92 +57,92 @@ final class QueueStatistics
private final AtomicInteger _malformedCount = new AtomicInteger();
private final AtomicLong _malformedSize = new AtomicLong();
- public final int getQueueCount()
+ public int getQueueCount()
{
return _queueCount.get();
}
- public final long getQueueSize()
+ public long getQueueSize()
{
return _queueSize.get();
}
- public final int getUnackedCount()
+ public int getUnackedCount()
{
return _unackedCount.get();
}
- public final long getUnackedSize()
+ public long getUnackedSize()
{
return _unackedSize.get();
}
- public final int getAvailableCount()
+ public int getAvailableCount()
{
return _availableCount.get();
}
- public final long getAvailableSize()
+ public long getAvailableSize()
{
return _availableSize.get();
}
- public final long getEnqueueCount()
+ public long getEnqueueCount()
{
return _enqueueCount.get();
}
- public final long getEnqueueSize()
+ public long getEnqueueSize()
{
return _enqueueSize.get();
}
- public final long getDequeueCount()
+ public long getDequeueCount()
{
return _dequeueCount.get();
}
- public final long getDequeueSize()
+ public long getDequeueSize()
{
return _dequeueSize.get();
}
- public final long getPersistentEnqueueCount()
+ public long getPersistentEnqueueCount()
{
return _persistentEnqueueCount.get();
}
- public final long getPersistentEnqueueSize()
+ public long getPersistentEnqueueSize()
{
return _persistentEnqueueSize.get();
}
- public final long getPersistentDequeueCount()
+ public long getPersistentDequeueCount()
{
return _persistentDequeueCount.get();
}
- public final long getPersistentDequeueSize()
+ public long getPersistentDequeueSize()
{
return _persistentDequeueSize.get();
}
- public final int getQueueCountHwm()
+ public int getQueueCountHwm()
{
return _queueCountHwm.get();
}
- public final long getQueueSizeHwm()
+ public long getQueueSizeHwm()
{
return _queueSizeHwm.get();
}
- public final int getAvailableCountHwm()
+ public int getAvailableCountHwm()
{
return _availableCountHwm.get();
}
- public final long getAvailableSizeHwm()
+ public long getAvailableSizeHwm()
{
return _availableSizeHwm.get();
}
@@ -258,4 +258,40 @@ final class QueueStatistics
_malformedCount.incrementAndGet();
_malformedSize.addAndGet(size);
}
+
+ void reset()
+ {
+ _queueCountHwm.set(_queueCount.get());
+ // _queueCount shouldn't be reset
+
+ _queueSizeHwm.set(_queueSize.get());
+ // _queueSize shouldn't be reset
+
+ // _unackedCount shouldn't be reset
+ // _unackedSize shouldn't be reset
+
+ _availableCountHwm.set(_availableCount.get());
+ // _availableCount shouldn't be reset
+
+ _availableSizeHwm.set(_availableSize.get());
+ // _availableSize shouldn't be reset
+
+ _dequeueCount.set(0L);
+ _dequeueSize.set(0L);
+
+ _enqueueCount.set(0L);
+ _enqueueSize.set(0L);
+
+ _persistentEnqueueCount.set(0L);
+ _persistentEnqueueSize.set(0L);
+
+ _persistentDequeueCount.set(0L);
+ _persistentDequeueSize.set(0L);
+
+ _expiredCount.set(0);
+ _expiredSize.set(0L);
+
+ _malformedCount.set(0);
+ _malformedSize.set(0L);
+ }
}
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/session/AbstractAMQPSession.java
b/broker-core/src/main/java/org/apache/qpid/server/session/AbstractAMQPSession.java
index 72840e1336..023e177420 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/session/AbstractAMQPSession.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/session/AbstractAMQPSession.java
@@ -387,6 +387,17 @@ public abstract class AbstractAMQPSession<S extends
AbstractAMQPSession<S, X>,
_connection.registerTransactedMessageReceived();
}
+ @Override
+ public void resetStatistics()
+ {
+ _bytesIn.set(0L);
+ _bytesOut.set(0L);
+ _messagesIn.set(0L);
+ _messagesOut.set(0L);
+ _transactedMessagesIn.set(0L);
+ _transactedMessagesOut.set(0L);
+ }
+
@Override
public long getProducerCount()
{
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/store/MemoryMessageStore.java
b/broker-core/src/main/java/org/apache/qpid/server/store/MemoryMessageStore.java
index 657be12592..0168ce0082 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/store/MemoryMessageStore.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/store/MemoryMessageStore.java
@@ -354,6 +354,12 @@ public class MemoryMessageStore implements MessageStore
return 0L;
}
+ @Override
+ public void resetStatistics()
+ {
+ // ignore
+ }
+
@Override
public Transaction newTransaction()
{
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java
b/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java
index a6bf9cf9f4..437feb94d3 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java
@@ -65,6 +65,8 @@ public interface MessageStore
long getBytesEvacuatedFromMemory();
+ void resetStatistics();
+
/**
* Is this store capable of persisting the data
*
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/store/NullMessageStore.java
b/broker-core/src/main/java/org/apache/qpid/server/store/NullMessageStore.java
index e6f6e29c91..f4f86f9095 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/store/NullMessageStore.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/store/NullMessageStore.java
@@ -108,6 +108,12 @@ public abstract class NullMessageStore implements
MessageStore, DurableConfigura
return 0L;
}
+ @Override
+ public void resetStatistics()
+ {
+ // ignore
+ }
+
@Override
public Transaction newTransaction()
{
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/transport/AbstractAMQPConnection.java
b/broker-core/src/main/java/org/apache/qpid/server/transport/AbstractAMQPConnection.java
index e21d1a260f..9b08201b17 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/transport/AbstractAMQPConnection.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/transport/AbstractAMQPConnection.java
@@ -72,6 +72,7 @@ import org.apache.qpid.server.model.Transport;
import org.apache.qpid.server.model.port.AmqpPort;
import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
import org.apache.qpid.server.security.auth.sasl.SaslSettings;
+import org.apache.qpid.server.session.AbstractAMQPSession;
import org.apache.qpid.server.stats.StatisticsGatherer;
import org.apache.qpid.server.store.StoreException;
import org.apache.qpid.server.transport.network.NetworkConnection;
@@ -742,6 +743,26 @@ public abstract class AbstractAMQPConnection<C extends
AbstractAMQPConnection<C,
return _transactedMessagesOut.get();
}
+ @Override
+ public void resetStatistics()
+ {
+ _lastMessageInboundTime = System.currentTimeMillis();
+ _lastMessageOutboundTime = System.currentTimeMillis();
+
+ _bytesIn.set(0L);
+ _bytesOut.set(0L);
+ _messagesIn.set(0L);
+ _messagesOut.set(0L);
+ _transactedMessagesIn.set(0L);
+ _transactedMessagesOut.set(0L);
+ _localTransactionBegins.set(0L);
+ _localTransactionRollbacks.set(0L);
+
+ getChildren(Session.class).stream()
+ .filter(AbstractAMQPSession.class::isInstance).map(session ->
(AbstractAMQPSession<?, ?>) session)
+ .forEach(AbstractAMQPSession::resetStatistics);
+ }
+
public AccessControlContext getAccessControllerContext()
{
return _accessControllerContext;
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
b/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
index 549776e01e..46b2d78a29 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
@@ -1572,6 +1572,25 @@ public abstract class AbstractVirtualHost<X extends
AbstractVirtualHost<X>> exte
return _defaultDestination;
}
+ @Override
+ public void resetStatistics()
+ {
+ _totalConnectionCount.set(0L);
+ _maximumMessageSize.set(0L);
+
+ _bytesIn.set(0L);
+ _bytesOut.set(0L);
+ _messagesIn.set(0L);
+ _messagesOut.set(0L);
+ _transactedMessagesIn.set(0L);
+ _transactedMessagesOut.set(0L);
+
+ _messageStore.resetStatistics();
+
+
getChildren(VirtualHostLogger.class).forEach(VirtualHostLogger::resetStatistics);
+ getChildren(Queue.class).forEach(Queue::resetStatistics);
+ getChildren(Exchange.class).forEach(Exchange::resetStatistics);
+ }
private ListenableFuture<Exchange<?>> addExchangeAsync(Map<String,Object>
attributes)
throws ReservedExchangeNameException,
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/virtualhost/QueueManagingVirtualHost.java
b/broker-core/src/main/java/org/apache/qpid/server/virtualhost/QueueManagingVirtualHost.java
index b03917afd5..21534d8a12 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/virtualhost/QueueManagingVirtualHost.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/virtualhost/QueueManagingVirtualHost.java
@@ -224,40 +224,54 @@ public interface QueueManagingVirtualHost<X extends
QueueManagingVirtualHost<X>>
long getConnectionCount();
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.COUNT, label = "Total Connections",
- description = "Total number of messaging connections made to this
virtualhost since broker startup", metricName = "aggregate_connection_count")
+ description = "Total number of messaging connections made to this
virtualhost since broker startup",
+ metricName = "aggregate_connection_count",
+ resettable = true)
long getTotalConnectionCount();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.BYTES, label = "Inbound",
- description = "Total size of all messages received by
this virtualhost.", metricName = "inbound_bytes_count")
+ description = "Total size of all messages received by this
virtualhost.",
+ metricName = "inbound_bytes_count",
+ resettable = true)
long getBytesIn();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.BYTES, label = "Outbound",
- description = "Total size of all messages delivered by
this virtualhost.", metricName = "outbound_bytes_count")
+ description = "Total size of all messages delivered by this
virtualhost.",
+ metricName = "outbound_bytes_count",
+ resettable = true)
long getBytesOut();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Inbound",
- description = "Total number of messages received by this
virtualhost.", metricName = "inbound_messages_count")
+ description = "Total number of messages received by this
virtualhost.",
+ metricName = "inbound_messages_count",
+ resettable = true)
long getMessagesIn();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES, label = "Outbound",
- description = "Total number of messages delivered by
this virtualhost.", metricName = "outbound_messages_count")
+ description = "Total number of messages delivered by this
virtualhost.",
+ metricName = "outbound_messages_count",
+ resettable = true)
long getMessagesOut();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES,
label = "Transacted Inbound",
- description = "Total number of messages delivered by this
virtualhost within a transaction.", metricName =
"inbound_transacted_messages_count")
+ description = "Total number of messages delivered by this
virtualhost within a transaction.",
+ metricName = "inbound_transacted_messages_count",
+ resettable = true)
long getTransactedMessagesIn();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.MESSAGES,
label = "Transacted Outbound",
- description = "Total number of messages received by this
virtualhost within a transaction.", metricName =
"outbound_transacted_messages_count")
+ description = "Total number of messages received by this
virtualhost within a transaction.",
+ metricName = "outbound_transacted_messages_count",
+ resettable = true)
long getTransactedMessagesOut();
@SuppressWarnings("unused")
@@ -284,16 +298,22 @@ public interface QueueManagingVirtualHost<X extends
QueueManagingVirtualHost<X>>
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.CUMULATIVE, units =
StatisticUnit.BYTES, label = "Evacuated Message Bytes",
- description = "Total Number of Bytes Evacuated from
Memory Due to Flow to Disk.")
+ description = "Total Number of Bytes Evacuated from Memory Due to
Flow to Disk.",
+ resettable = true)
long getBytesEvacuatedFromMemory();
@SuppressWarnings("unused")
@ManagedStatistic(statisticType = StatisticType.POINT_IN_TIME,
units = StatisticUnit.BYTES,
label = "Maximum recorded size of inbound messages",
- description = "Maximum size of message published into the Virtual
Host since start-up.", metricName = "inbound_message_size_high_water_mark")
+ description = "Maximum size of message published into the Virtual
Host since start-up.",
+ metricName = "inbound_message_size_high_water_mark",
+ resettable = true)
long getInboundMessageSizeHighWatermark();
+ @ManagedOperation(description = "Resets Virtual Host statistics",
changesConfiguredObjectState = true)
+ void resetStatistics();
+
@Override
@ManagedOperation(nonModifying = true, changesConfiguredObjectState =
false)
Collection<? extends Connection<?>> getConnections();
diff --git
a/broker-core/src/test/java/org/apache/qpid/server/consumer/TestConsumerTarget.java
b/broker-core/src/test/java/org/apache/qpid/server/consumer/TestConsumerTarget.java
index 9b0aa1a1f6..20a293ecbb 100644
---
a/broker-core/src/test/java/org/apache/qpid/server/consumer/TestConsumerTarget.java
+++
b/broker-core/src/test/java/org/apache/qpid/server/consumer/TestConsumerTarget.java
@@ -89,6 +89,12 @@ public class TestConsumerTarget implements
ConsumerTarget<TestConsumerTarget>
return 0;
}
+ @Override
+ public void resetStatistics()
+ {
+
+ }
+
public Queue<?> getQueue()
{
return queue;
diff --git
a/broker-core/src/test/java/org/apache/qpid/server/exchange/ExchangeStatisticsTest.java
b/broker-core/src/test/java/org/apache/qpid/server/exchange/ExchangeStatisticsTest.java
new file mode 100644
index 0000000000..9b9de685e1
--- /dev/null
+++
b/broker-core/src/test/java/org/apache/qpid/server/exchange/ExchangeStatisticsTest.java
@@ -0,0 +1,170 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.exchange;
+
+import static org.apache.qpid.server.filter.AMQPFilterTypes.JMS_SELECTOR;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import org.apache.qpid.server.message.AMQMessageHeader;
+import org.apache.qpid.server.message.InstanceProperties;
+import org.apache.qpid.server.message.RoutingResult;
+import org.apache.qpid.server.message.ServerMessage;
+import org.apache.qpid.server.model.BrokerTestHelper;
+import org.apache.qpid.server.model.Exchange;
+import org.apache.qpid.server.model.Queue;
+import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.store.TransactionLogResource;
+import org.apache.qpid.test.utils.UnitTestBase;
+
+public class ExchangeStatisticsTest extends UnitTestBase
+{
+ private VirtualHost<?> _vhost;
+ private Exchange<?> _exchange;
+
+ @Before
+ public void setUp() throws Exception
+ {
+ _vhost = BrokerTestHelper.createVirtualHost(getTestName(), this);
+ final Map<String, Object> attributes = Map.of(
+ Exchange.NAME, "test",
+ Exchange.DURABLE, false,
+ Exchange.TYPE, ExchangeDefaults.TOPIC_EXCHANGE_CLASS);
+ _exchange = _vhost.createChild(Exchange.class, attributes);
+ _exchange.open();
+ }
+
+ @Test
+ public void getStatistics()
+ {
+ final Map<String, Object> statistics = _exchange.getStatistics();
+
+ assertEquals(6, statistics.size());
+
+ assertTrue(statistics.containsKey("bindingCount"));
+ assertTrue(statistics.containsKey("bytesDropped"));
+ assertTrue(statistics.containsKey("bytesIn"));
+ assertTrue(statistics.containsKey("messagesDropped"));
+ assertTrue(statistics.containsKey("messagesIn"));
+ assertTrue(statistics.containsKey("producerCount"));
+
+ assertEquals(0L, _exchange.getStatistics().get("bindingCount"));
+ assertEquals(0L, _exchange.getStatistics().get("bytesDropped"));
+ assertEquals(0L, _exchange.getStatistics().get("bytesIn"));
+ assertEquals(0L, _exchange.getStatistics().get("messagesDropped"));
+ assertEquals(0L, _exchange.getStatistics().get("messagesIn"));
+ assertEquals(0L, _exchange.getStatistics().get("producerCount"));
+ }
+
+ @Test
+ public void bindingCount()
+ {
+ final Queue<?> queue = _vhost.createChild(Queue.class,
Map.of(Queue.NAME, getTestName() + "_queue"));
+
+ _exchange.bind(queue.getName(), "test",
Map.of(JMS_SELECTOR.toString(), "prop = True"), false);
+ assertEquals(1L, _exchange.getStatistics().get("bindingCount"));
+
+ _exchange.unbind(queue.getName(), "test");
+ assertEquals(0L, _exchange.getStatistics().get("bindingCount"));
+
+ queue.close();
+ }
+
+ @Test
+ public void messageRouted()
+ {
+ final InstanceProperties instanceProperties =
mock(InstanceProperties.class);
+ final ServerMessage<?> matchingMessage =
createTestMessage(Map.of("prop", true));
+ final Queue<?> queue = _vhost.createChild(Queue.class,
Map.of(Queue.NAME, getTestName() + "_queue"));
+
+ boolean bind = _exchange.bind(queue.getName(), "test",
Map.of(JMS_SELECTOR.toString(), "prop = True"), false);
+ assertTrue("Bind operation should be successful", bind);
+
+ final RoutingResult<ServerMessage<?>> result =
_exchange.route(matchingMessage, "test", instanceProperties);
+ assertTrue("Message with matching selector not routed to queue",
result.hasRoutes());
+
+ assertEquals(1L, _exchange.getStatistics().get("bindingCount"));
+ assertEquals(0L, _exchange.getStatistics().get("bytesDropped"));
+ assertEquals(100L, _exchange.getStatistics().get("bytesIn"));
+ assertEquals(1L, _exchange.getStatistics().get("messagesIn"));
+ assertEquals(0L, _exchange.getStatistics().get("messagesDropped"));
+
+ _exchange.resetStatistics();
+
+ assertEquals(1L, _exchange.getStatistics().get("bindingCount"));
+ assertEquals(0L, _exchange.getStatistics().get("bytesIn"));
+ assertEquals(0L, _exchange.getStatistics().get("bytesDropped"));
+ assertEquals(0L, _exchange.getStatistics().get("messagesIn"));
+ assertEquals(0L, _exchange.getStatistics().get("messagesDropped"));
+
+ queue.close();
+ }
+
+ @Test
+ public void messageNotRouted()
+ {
+ final InstanceProperties instanceProperties =
mock(InstanceProperties.class);
+ final ServerMessage<?> unmatchingMessage =
createTestMessage(Map.of("prop", false));
+ final Queue<?> queue = _vhost.createChild(Queue.class,
Map.of(Queue.NAME, getTestName() + "_queue"));
+
+ boolean bind = _exchange.bind(queue.getName(), "test",
Map.of(JMS_SELECTOR.toString(), "prop = True"), false);
+ assertTrue("Bind operation should be successful", bind);
+
+ final RoutingResult<ServerMessage<?>> result =
_exchange.route(unmatchingMessage, "test", instanceProperties);
+ assertFalse("Message without matching selector unexpectedly routed to
queue", result.hasRoutes());
+
+ assertEquals(1L, _exchange.getStatistics().get("bindingCount"));
+ assertEquals(100L, _exchange.getStatistics().get("bytesDropped"));
+ assertEquals(100L, _exchange.getStatistics().get("bytesIn"));
+ assertEquals(1L, _exchange.getStatistics().get("messagesIn"));
+ assertEquals(1L, _exchange.getStatistics().get("messagesDropped"));
+
+ _exchange.resetStatistics();
+
+ assertEquals(1L, _exchange.getStatistics().get("bindingCount"));
+ assertEquals(0L, _exchange.getStatistics().get("bytesIn"));
+ assertEquals(0L, _exchange.getStatistics().get("bytesDropped"));
+ assertEquals(0L, _exchange.getStatistics().get("messagesIn"));
+ assertEquals(0L, _exchange.getStatistics().get("messagesDropped"));
+
+ queue.close();
+ }
+
+ private ServerMessage<?> createTestMessage(final Map<String, Object>
headerValues)
+ {
+ final AMQMessageHeader header = mock(AMQMessageHeader.class);
+ headerValues.forEach((key, value) ->
when(header.getHeader(key)).thenReturn(value));
+ final ServerMessage<?> message = mock(ServerMessage.class);
+
when(message.isResourceAcceptable(any(TransactionLogResource.class))).thenReturn(true);
+ when(message.getMessageHeader()).thenReturn(header);
+ when(message.getSizeIncludingHeader()).thenReturn(100L);
+ return message;
+ }
+}
diff --git
a/broker-core/src/test/java/org/apache/qpid/server/model/BrokerTestHelper.java
b/broker-core/src/test/java/org/apache/qpid/server/model/BrokerTestHelper.java
index f140ec75e0..5864ef80c5 100644
---
a/broker-core/src/test/java/org/apache/qpid/server/model/BrokerTestHelper.java
+++
b/broker-core/src/test/java/org/apache/qpid/server/model/BrokerTestHelper.java
@@ -42,12 +42,17 @@ import javax.security.auth.Subject;
import org.apache.qpid.server.configuration.updater.CurrentThreadTaskExecutor;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
import org.apache.qpid.server.logging.EventLogger;
+import org.apache.qpid.server.message.AMQMessageHeader;
+import org.apache.qpid.server.message.MessageReference;
+import org.apache.qpid.server.message.ServerMessage;
import org.apache.qpid.server.security.AccessControl;
import org.apache.qpid.server.security.Result;
import org.apache.qpid.server.security.SecurityToken;
import org.apache.qpid.server.security.access.Operation;
import org.apache.qpid.server.session.AMQPSession;
import org.apache.qpid.server.store.DurableConfigurationStore;
+import org.apache.qpid.server.store.StoredMessage;
+import org.apache.qpid.server.store.TransactionLogResource;
import org.apache.qpid.server.store.preferences.PreferenceStore;
import org.apache.qpid.server.transport.AMQPConnection;
import org.apache.qpid.server.virtualhost.AbstractVirtualHost;
@@ -342,4 +347,29 @@ public class BrokerTestHelper
{
return mockWithSystemPrincipal(clazz, SYSTEM_PRINCIPAL);
}
+
+ @SuppressWarnings({"rawtypes", "unchecked"})
+ public static ServerMessage<?> createMessage(final Long id)
+ {
+ final AMQMessageHeader header = mock(AMQMessageHeader.class);
+ when(header.getMessageId()).thenReturn(String.valueOf(id));
+
+ final ServerMessage<?> message = mock(ServerMessage.class);
+ when(message.getMessageNumber()).thenReturn(id);
+ when(message.getMessageHeader()).thenReturn(header);
+ when(message.checkValid()).thenReturn(true);
+ when(message.getSizeIncludingHeader()).thenReturn(100L);
+ when(message.getArrivalTime()).thenReturn(System.currentTimeMillis());
+
+ final StoredMessage storedMessage = mock(StoredMessage.class);
+ when(message.getStoredMessage()).thenReturn(storedMessage);
+
+ final MessageReference ref = mock(MessageReference.class);
+ when(ref.getMessage()).thenReturn(message);
+
+ when(message.newReference()).thenReturn(ref);
+
when(message.newReference(any(TransactionLogResource.class))).thenReturn(ref);
+
+ return message;
+ }
}
diff --git
a/broker-core/src/test/java/org/apache/qpid/server/model/adapter/BrokerImplTest.java
b/broker-core/src/test/java/org/apache/qpid/server/model/adapter/BrokerImplTest.java
index 9563a9dfbc..68b152bbf4 100644
---
a/broker-core/src/test/java/org/apache/qpid/server/model/adapter/BrokerImplTest.java
+++
b/broker-core/src/test/java/org/apache/qpid/server/model/adapter/BrokerImplTest.java
@@ -247,6 +247,40 @@ public class BrokerImplTest extends UnitTestBase
verify(_preferenceStore).replace(Collections.singleton(preferenceId),
Collections.EMPTY_SET);
}
+ @Test
+ public void resetStatistics()
+ {
+ final Map<String, Object> brokerAttributes = Map.of(
+ "name", "Broker",
+ Broker.MODEL_VERSION, BrokerModel.MODEL_VERSION,
+ Broker.DURABLE, true);
+ _brokerImpl = new BrokerImpl(brokerAttributes, _systemConfig);
+ _brokerImpl.open();
+
+ _brokerImpl.registerMessageDelivered(100L);
+ _brokerImpl.registerMessageReceived(100L);
+ _brokerImpl.registerTransactedMessageDelivered();
+ _brokerImpl.registerTransactedMessageReceived();
+
+ final Map<String, Object> statisticsBeforeReset =
_brokerImpl.getStatistics();
+ assertEquals(100L, statisticsBeforeReset.get("bytesIn"));
+ assertEquals(100L, statisticsBeforeReset.get("bytesOut"));
+ assertEquals(1L, statisticsBeforeReset.get("messagesIn"));
+ assertEquals(1L, statisticsBeforeReset.get("messagesOut"));
+ assertEquals(1L, statisticsBeforeReset.get("transactedMessagesIn"));
+ assertEquals(1L, statisticsBeforeReset.get("transactedMessagesOut"));
+
+ _brokerImpl.resetStatistics();
+
+ final Map<String, Object> statisticsAfterReset =
_brokerImpl.getStatistics();
+ assertEquals(0L, statisticsAfterReset.get("bytesIn"));
+ assertEquals(0L, statisticsAfterReset.get("bytesOut"));
+ assertEquals(0L, statisticsAfterReset.get("messagesIn"));
+ assertEquals(0L, statisticsAfterReset.get("messagesOut"));
+ assertEquals(0L, statisticsAfterReset.get("transactedMessagesIn"));
+ assertEquals(0L, statisticsAfterReset.get("transactedMessagesOut"));
+ }
+
private Collection<Preference> getPreferencesAs(final Subject
testUserSubject)
{
return Subject.doAs(testUserSubject, new
PrivilegedAction<Collection<Preference>>()
diff --git
a/broker-core/src/test/java/org/apache/qpid/server/model/port/AmqpPortImplTest.java
b/broker-core/src/test/java/org/apache/qpid/server/model/port/AmqpPortImplTest.java
index 257c47bce6..4895824fdb 100644
---
a/broker-core/src/test/java/org/apache/qpid/server/model/port/AmqpPortImplTest.java
+++
b/broker-core/src/test/java/org/apache/qpid/server/model/port/AmqpPortImplTest.java
@@ -351,6 +351,29 @@ public class AmqpPortImplTest extends UnitTestBase
assertFalse(_port.acceptNewConnectionAndIncrementCount(new
InetSocketAddress("example.org", 0)));
}
+ @Test
+ public void resetStatistics()
+ {
+ final Map<String, Object> attributes = Map.of(
+ AmqpPort.PORT, 0,
+ AmqpPort.NAME, getTestName(),
+ AmqpPort.AUTHENTICATION_PROVIDER, AUTHENTICATION_PROVIDER_NAME,
+ AmqpPort.MAX_OPEN_CONNECTIONS, 10,
+ AmqpPort.CONTEXT,
Map.of(AmqpPort.OPEN_CONNECTIONS_WARN_PERCENT, "80"));
+ _port = new AmqpPortImpl(attributes, _broker);
+ _port.create();
+
+ _port.acceptNewConnectionAndIncrementCount(new
InetSocketAddress("example.org", 0));
+
+ final Map<String, Object> statisticsBeforeReset =
_port.getStatistics();
+ assertEquals(1L, statisticsBeforeReset.get("totalConnectionCount"));
+
+ _port.resetStatistics();
+
+ final Map<String, Object> statisticsAfterReset = _port.getStatistics();
+ assertEquals(0L, statisticsAfterReset.get("totalConnectionCount"));
+ }
+
private AmqpPortImpl createPort(final String portName)
{
return createPort(portName, Collections.emptyMap());
diff --git
a/broker-core/src/test/java/org/apache/qpid/server/queue/QueueStatisticsTest.java
b/broker-core/src/test/java/org/apache/qpid/server/queue/QueueStatisticsTest.java
new file mode 100644
index 0000000000..31049264d3
--- /dev/null
+++
b/broker-core/src/test/java/org/apache/qpid/server/queue/QueueStatisticsTest.java
@@ -0,0 +1,199 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.queue;
+
+import static org.apache.qpid.server.filter.AMQPFilterTypes.JMS_SELECTOR;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import org.apache.qpid.server.exchange.ExchangeDefaults;
+import org.apache.qpid.server.message.ServerMessage;
+import org.apache.qpid.server.model.BrokerTestHelper;
+import org.apache.qpid.server.model.Exchange;
+import org.apache.qpid.server.model.Queue;
+import org.apache.qpid.server.virtualhost.QueueManagingVirtualHost;
+import org.apache.qpid.test.utils.UnitTestBase;
+
+public class QueueStatisticsTest extends UnitTestBase
+{
+ private QueueManagingVirtualHost<?> _vhost;
+ private Queue<?> _queue;
+
+ @Before
+ public void setUp() throws Exception
+ {
+ _vhost = BrokerTestHelper.createVirtualHost(getClass().getName(),
this);
+ final Map<String,Object> attributes = Map.of(
+ Queue.NAME, "queue",
+ Queue.OWNER, "owner");
+ _queue = _vhost.createChild(Queue.class, attributes);
+ }
+
+ @Test
+ public void getStatistics()
+ {
+ final Map<String, Object> statistics = _queue.getStatistics();
+
+ assertEquals(27, statistics.size());
+
+ assertTrue(statistics.containsKey("availableBytes"));
+ assertTrue(statistics.containsKey("availableBytesHighWatermark"));
+ assertTrue(statistics.containsKey("availableMessages"));
+ assertTrue(statistics.containsKey("availableMessagesHighWatermark"));
+ assertTrue(statistics.containsKey("bindingCount"));
+ assertTrue(statistics.containsKey("consumerCount"));
+ assertTrue(statistics.containsKey("consumerCountWithCredit"));
+ assertTrue(statistics.containsKey("producerCount"));
+ assertTrue(statistics.containsKey("oldestMessageAge"));
+ assertTrue(statistics.containsKey("persistentDequeuedBytes"));
+ assertTrue(statistics.containsKey("persistentEnqueuedBytes"));
+ assertTrue(statistics.containsKey("persistentDequeuedMessages"));
+ assertTrue(statistics.containsKey("persistentEnqueuedMessages"));
+ assertTrue(statistics.containsKey("queueDepthBytes"));
+ assertTrue(statistics.containsKey("queueDepthBytesHighWatermark"));
+ assertTrue(statistics.containsKey("queueDepthMessages"));
+ assertTrue(statistics.containsKey("queueDepthMessagesHighWatermark"));
+ assertTrue(statistics.containsKey("totalDequeuedBytes"));
+ assertTrue(statistics.containsKey("totalDequeuedMessages"));
+ assertTrue(statistics.containsKey("totalMalformedBytes"));
+ assertTrue(statistics.containsKey("totalMalformedMessages"));
+ assertTrue(statistics.containsKey("totalEnqueuedBytes"));
+ assertTrue(statistics.containsKey("totalEnqueuedMessages"));
+ assertTrue(statistics.containsKey("totalExpiredBytes"));
+ assertTrue(statistics.containsKey("totalExpiredMessages"));
+ assertTrue(statistics.containsKey("unacknowledgedBytes"));
+ assertTrue(statistics.containsKey("unacknowledgedMessages"));
+
+ assertEquals(0L, statistics.get("availableBytes"));
+ assertEquals(0L, statistics.get("availableBytesHighWatermark"));
+ assertEquals(0, statistics.get("availableMessages"));
+ assertEquals(0, statistics.get("availableMessagesHighWatermark"));
+ assertEquals(0, statistics.get("bindingCount"));
+ assertEquals(0, statistics.get("consumerCount"));
+ assertEquals(0, statistics.get("consumerCountWithCredit"));
+ assertEquals(0L, statistics.get("producerCount"));
+ assertEquals(0L, statistics.get("oldestMessageAge"));
+ assertEquals(0L, statistics.get("persistentDequeuedBytes"));
+ assertEquals(0L, statistics.get("persistentEnqueuedBytes"));
+ assertEquals(0L, statistics.get("persistentDequeuedMessages"));
+ assertEquals(0L, statistics.get("persistentEnqueuedMessages"));
+ assertEquals(0L, statistics.get("queueDepthBytes"));
+ assertEquals(0L, statistics.get("queueDepthBytesHighWatermark"));
+ assertEquals(0, statistics.get("queueDepthMessages"));
+ assertEquals(0, statistics.get("queueDepthMessagesHighWatermark"));
+ assertEquals(0L, statistics.get("totalDequeuedBytes"));
+ assertEquals(0L, statistics.get("totalDequeuedMessages"));
+ assertEquals(0L, statistics.get("totalMalformedBytes"));
+ assertEquals(0L, statistics.get("totalMalformedMessages"));
+ assertEquals(0L, statistics.get("totalEnqueuedBytes"));
+ assertEquals(0L, statistics.get("totalEnqueuedMessages"));
+ assertEquals(0L, statistics.get("totalExpiredBytes"));
+ assertEquals(0L, statistics.get("totalExpiredMessages"));
+ assertEquals(0L, statistics.get("unacknowledgedBytes"));
+ assertEquals(0L, statistics.get("unacknowledgedMessages"));
+ }
+
+ @Test
+ public void bindingCount()
+ {
+ assertEquals(0, _queue.getStatistics().get("bindingCount"));
+
+ final Exchange<?> exchange = _vhost.createChild(Exchange.class, Map.of(
+ Exchange.NAME, "exchange",
+ Exchange.TYPE, ExchangeDefaults.TOPIC_EXCHANGE_CLASS));
+ exchange.bind(_queue.getName(), "test",
Map.of(JMS_SELECTOR.toString(), "prop = True"), false);
+ assertEquals(1, _queue.getStatistics().get("bindingCount"));
+
+ exchange.unbind(_queue.getName(), "test");
+ assertEquals(0, _queue.getStatistics().get("bindingCount"));
+
+ exchange.close();
+ }
+
+ @Test
+ public void resetStatistics()
+ {
+ final ServerMessage<?> message = BrokerTestHelper.createMessage(0L);
+ _queue.enqueue(message, null, null);
+
+ Map<String, Object> statistics = _queue.getStatistics();
+
+ assertEquals(100L, statistics.get("availableBytes"));
+ assertEquals(100L, statistics.get("availableBytesHighWatermark"));
+ assertEquals(1, statistics.get("availableMessages"));
+ assertEquals(1, statistics.get("availableMessagesHighWatermark"));
+ assertEquals(0, statistics.get("bindingCount"));
+ assertEquals(0, statistics.get("consumerCount"));
+ assertEquals(0, statistics.get("consumerCountWithCredit"));
+ assertEquals(0L, statistics.get("persistentDequeuedBytes"));
+ assertEquals(0L, statistics.get("persistentEnqueuedBytes"));
+ assertEquals(0L, statistics.get("persistentDequeuedMessages"));
+ assertEquals(0L, statistics.get("persistentEnqueuedMessages"));
+ assertEquals(100L, statistics.get("queueDepthBytes"));
+ assertEquals(100L, statistics.get("queueDepthBytesHighWatermark"));
+ assertEquals(1, statistics.get("queueDepthMessages"));
+ assertEquals(1, statistics.get("queueDepthMessagesHighWatermark"));
+ assertEquals(0L, statistics.get("totalDequeuedBytes"));
+ assertEquals(0L, statistics.get("totalDequeuedMessages"));
+ assertEquals(0L, statistics.get("totalMalformedBytes"));
+ assertEquals(0L, statistics.get("totalMalformedMessages"));
+ assertEquals(100L, statistics.get("totalEnqueuedBytes"));
+ assertEquals(1L, statistics.get("totalEnqueuedMessages"));
+ assertEquals(0L, statistics.get("totalExpiredBytes"));
+ assertEquals(0L, statistics.get("totalExpiredMessages"));
+ assertEquals(0L, statistics.get("unacknowledgedBytes"));
+ assertEquals(0L, statistics.get("unacknowledgedMessages"));
+
+ _queue.resetStatistics();
+ statistics = _queue.getStatistics();
+
+ assertEquals(100L, statistics.get("availableBytes"));
+ assertEquals(100L, statistics.get("availableBytesHighWatermark"));
+ assertEquals(1, statistics.get("availableMessages"));
+ assertEquals(1, statistics.get("availableMessagesHighWatermark"));
+ assertEquals(0, statistics.get("bindingCount"));
+ assertEquals(0, statistics.get("consumerCount"));
+ assertEquals(0, statistics.get("consumerCountWithCredit"));
+ assertEquals(0L, statistics.get("persistentDequeuedBytes"));
+ assertEquals(0L, statistics.get("persistentEnqueuedBytes"));
+ assertEquals(0L, statistics.get("persistentDequeuedMessages"));
+ assertEquals(0L, statistics.get("persistentEnqueuedMessages"));
+ assertEquals(100L, statistics.get("queueDepthBytes"));
+ assertEquals(100L, statistics.get("queueDepthBytesHighWatermark"));
+ assertEquals(1, statistics.get("queueDepthMessages"));
+ assertEquals(1, statistics.get("queueDepthMessagesHighWatermark"));
+ assertEquals(0L, statistics.get("totalDequeuedBytes"));
+ assertEquals(0L, statistics.get("totalDequeuedMessages"));
+ assertEquals(0L, statistics.get("totalMalformedBytes"));
+ assertEquals(0L, statistics.get("totalMalformedMessages"));
+ assertEquals(0L, statistics.get("totalEnqueuedBytes"));
+ assertEquals(0L, statistics.get("totalEnqueuedMessages"));
+ assertEquals(0L, statistics.get("totalExpiredBytes"));
+ assertEquals(0L, statistics.get("totalExpiredMessages"));
+ assertEquals(0L, statistics.get("unacknowledgedBytes"));
+ assertEquals(0L, statistics.get("unacknowledgedMessages"));
+ }
+}
diff --git
a/broker-core/src/test/java/org/apache/qpid/server/session/AbstractAMQPSessionTest.java
b/broker-core/src/test/java/org/apache/qpid/server/session/AbstractAMQPSessionTest.java
index f4e2a5935a..363149f43a 100644
---
a/broker-core/src/test/java/org/apache/qpid/server/session/AbstractAMQPSessionTest.java
+++
b/broker-core/src/test/java/org/apache/qpid/server/session/AbstractAMQPSessionTest.java
@@ -21,13 +21,11 @@
package org.apache.qpid.server.session;
import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-import java.net.InetSocketAddress;
import java.security.Principal;
-import java.util.UUID;
+import java.util.Map;
import org.junit.After;
import org.junit.Before;
@@ -38,7 +36,6 @@ import javax.security.auth.Subject;
import org.apache.qpid.server.configuration.updater.CurrentThreadTaskExecutor;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
-import org.apache.qpid.server.logging.EventLogger;
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.BrokerModel;
import org.apache.qpid.server.model.BrokerTestHelper;
@@ -46,9 +43,7 @@ import org.apache.qpid.server.model.Connection;
import org.apache.qpid.server.model.Model;
import org.apache.qpid.server.model.Queue;
import org.apache.qpid.server.model.Session;
-import org.apache.qpid.server.model.SystemConfig;
import org.apache.qpid.server.model.VirtualHost;
-import org.apache.qpid.server.security.SecurityToken;
import org.apache.qpid.server.security.auth.TestPrincipalUtils;
import org.apache.qpid.server.transport.AMQPConnection;
import org.apache.qpid.server.virtualhost.QueueManagingVirtualHost;
@@ -132,7 +127,37 @@ public class AbstractAMQPSessionTest extends UnitTestBase
verify(_connection).registerTransactedMessageReceived();
}
- private static class MockAMQPSession extends AbstractAMQPSession{
+ @Test
+ public void resetStatistics()
+ {
+ mockAMQPSession.resetStatistics();
+
+ mockAMQPSession.registerMessageDelivered(100);
+ mockAMQPSession.registerMessageReceived(100);
+ mockAMQPSession.registerTransactedMessageDelivered();
+ mockAMQPSession.registerTransactedMessageReceived();
+
+ final Map<String, Object> statisticsBeforeReset =
mockAMQPSession.getStatistics();
+ assertEquals(100L, statisticsBeforeReset.get("bytesIn"));
+ assertEquals(100L, statisticsBeforeReset.get("bytesOut"));
+ assertEquals(1L, statisticsBeforeReset.get("messagesIn"));
+ assertEquals(1L, statisticsBeforeReset.get("messagesOut"));
+ assertEquals(1L, statisticsBeforeReset.get("transactedMessagesIn"));
+ assertEquals(1L, statisticsBeforeReset.get("transactedMessagesOut"));
+
+ mockAMQPSession.resetStatistics();
+
+ final Map<String, Object> statisticsAfterReset =
mockAMQPSession.getStatistics();
+ assertEquals(0L, statisticsAfterReset.get("bytesIn"));
+ assertEquals(0L, statisticsAfterReset.get("bytesOut"));
+ assertEquals(0L, statisticsAfterReset.get("messagesIn"));
+ assertEquals(0L, statisticsAfterReset.get("messagesOut"));
+ assertEquals(0L, statisticsAfterReset.get("transactedMessagesIn"));
+ assertEquals(0L, statisticsAfterReset.get("transactedMessagesOut"));
+ }
+
+ private static class MockAMQPSession extends AbstractAMQPSession
+ {
protected MockAMQPSession(final Connection parent, final int sessionId)
{
diff --git
a/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Test.java
b/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Test.java
index 14e9c29405..b41dd6a6a3 100644
---
a/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Test.java
+++
b/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Test.java
@@ -32,6 +32,7 @@ import static org.mockito.Mockito.when;
import java.net.InetSocketAddress;
import java.util.Collections;
+import java.util.Map;
import javax.security.auth.Subject;
@@ -252,4 +253,34 @@ public class AMQPConnection_0_8Test extends UnitTestBase
conn.isClosing());
}
+ @Test
+ public void resetStatistics()
+ {
+ final AMQPConnection_0_8Impl connection =
+ new AMQPConnection_0_8Impl(_broker, _network, _port,
_transport, _protocol, 0, _ticker);
+ connection.create();
+ connection.setAddressSpace(_virtualHost);
+ connection.registerMessageReceived(100L);
+ connection.registerMessageDelivered(100L);
+ connection.registerTransactedMessageReceived();
+ connection.registerTransactedMessageDelivered();
+
+ final Map<String, Object> statisticsBeforeReset =
connection.getStatistics();
+ assertEquals(100L, statisticsBeforeReset.get("bytesIn"));
+ assertEquals(100L, statisticsBeforeReset.get("bytesOut"));
+ assertEquals(1L, statisticsBeforeReset.get("messagesIn"));
+ assertEquals(1L, statisticsBeforeReset.get("messagesOut"));
+ assertEquals(1L, statisticsBeforeReset.get("transactedMessagesIn"));
+ assertEquals(1L, statisticsBeforeReset.get("transactedMessagesOut"));
+
+ connection.resetStatistics();
+
+ final Map<String, Object> statisticsAfterReset =
connection.getStatistics();
+ assertEquals(0L, statisticsAfterReset.get("bytesIn"));
+ assertEquals(0L, statisticsAfterReset.get("bytesOut"));
+ assertEquals(0L, statisticsAfterReset.get("messagesIn"));
+ assertEquals(0L, statisticsAfterReset.get("messagesOut"));
+ assertEquals(0L, statisticsAfterReset.get("transactedMessagesIn"));
+ assertEquals(0L, statisticsAfterReset.get("transactedMessagesOut"));
+ }
}
diff --git
a/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0ImplTest.java
b/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0ImplTest.java
index 473c9dceec..ad21a79cdd 100644
---
a/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0ImplTest.java
+++
b/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0ImplTest.java
@@ -23,12 +23,14 @@ package org.apache.qpid.server.protocol.v1_0;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.net.SocketAddress;
import java.util.Iterator;
+import java.util.Map;
import org.junit.Before;
import org.junit.Test;
@@ -156,4 +158,34 @@ public class AMQPConnection_1_0ImplTest extends
UnitTestBase
// pass
}
}
+
+ @Test
+ public void resetStatistics()
+ {
+ final AMQPConnection_1_0Impl connection =
+ new AMQPConnection_1_0Impl(_broker, _network, _port,
Transport.TCP, 0, _aggregateTicket);
+ connection.setAddressSpace(_virtualHost);
+ connection.registerMessageReceived(100L);
+ connection.registerMessageDelivered(100L);
+ connection.registerTransactedMessageReceived();
+ connection.registerTransactedMessageDelivered();
+
+ final Map<String, Object> statisticsBeforeReset =
connection.getStatistics();
+ assertEquals(100L, statisticsBeforeReset.get("bytesIn"));
+ assertEquals(100L, statisticsBeforeReset.get("bytesOut"));
+ assertEquals(1L, statisticsBeforeReset.get("messagesIn"));
+ assertEquals(1L, statisticsBeforeReset.get("messagesOut"));
+ assertEquals(1L, statisticsBeforeReset.get("transactedMessagesIn"));
+ assertEquals(1L, statisticsBeforeReset.get("transactedMessagesOut"));
+
+ connection.resetStatistics();
+
+ final Map<String, Object> statisticsAfterReset =
connection.getStatistics();
+ assertEquals(0L, statisticsAfterReset.get("bytesIn"));
+ assertEquals(0L, statisticsAfterReset.get("bytesOut"));
+ assertEquals(0L, statisticsAfterReset.get("messagesIn"));
+ assertEquals(0L, statisticsAfterReset.get("messagesOut"));
+ assertEquals(0L, statisticsAfterReset.get("transactedMessagesIn"));
+ assertEquals(0L, statisticsAfterReset.get("transactedMessagesOut"));
+ }
}
diff --git
a/broker-plugins/graylog-logging-logback/src/main/java/resources/js/qpid/management/logger/brokerlogger/graylog/show.js
b/broker-plugins/graylog-logging-logback/src/main/java/resources/js/qpid/management/logger/brokerlogger/graylog/show.js
index fa42eeff0c..e0406298e4 100644
---
a/broker-plugins/graylog-logging-logback/src/main/java/resources/js/qpid/management/logger/brokerlogger/graylog/show.js
+++
b/broker-plugins/graylog-logging-logback/src/main/java/resources/js/qpid/management/logger/brokerlogger/graylog/show.js
@@ -49,7 +49,10 @@ define(["qpid/common/util",
util.updateAttributeNodes(this.attributeContainers, restData,
util.updateBooleanAttributeNode,
(containerObject, data, utl) =>
util.updateMapAttributeNode(containerObject, data, utl, fieldTemplate));
const bufferUsage =
String(restData["statistics"]["appenderBufferUsage"]);
- this.appenderBufferUsage.forEach(node => node.innerHTML =
bufferUsage);
+ if (this.appenderBufferUsage)
+ {
+ this.appenderBufferUsage.forEach(node => node.innerHTML =
bufferUsage);
+ }
}
return Graylog;
diff --git
a/broker-plugins/graylog-logging-logback/src/main/java/resources/js/qpid/management/logger/virtualhostlogger/graylog/show.js
b/broker-plugins/graylog-logging-logback/src/main/java/resources/js/qpid/management/logger/virtualhostlogger/graylog/show.js
index cdfef05f20..e493f1491e 100644
---
a/broker-plugins/graylog-logging-logback/src/main/java/resources/js/qpid/management/logger/virtualhostlogger/graylog/show.js
+++
b/broker-plugins/graylog-logging-logback/src/main/java/resources/js/qpid/management/logger/virtualhostlogger/graylog/show.js
@@ -49,7 +49,10 @@ define(["qpid/common/util",
util.updateAttributeNodes(this.attributeContainers, restData,
util.updateBooleanAttributeNode,
(containerObject, data, utl) =>
util.updateMapAttributeNode(containerObject, data, utl, fieldTemplate));
const bufferUsage =
String(restData["statistics"]["appenderBufferUsage"]);
- this.appenderBufferUsage.forEach(node => node.innerHTML =
bufferUsage);
+ if (this.appenderBufferUsage)
+ {
+ this.appenderBufferUsage.forEach(node => node.innerHTML =
bufferUsage);
+ }
}
return Graylog;
diff --git
a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java
b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java
index 7b405d4fbd..a5bd7b8900 100644
---
a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java
+++
b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java
@@ -1204,6 +1204,12 @@ public abstract class AbstractJDBCMessageStore
implements MessageStore
return _bytesEvacuatedFromMemory.get();
}
+ @Override
+ public void resetStatistics()
+ {
+ _bytesEvacuatedFromMemory.set(0L);
+ }
+
protected class JDBCTransaction implements Transaction
{
private final ConnectionWrapper _connWrapper;
diff --git
a/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/AbstractBrokerLogger.java
b/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/AbstractBrokerLogger.java
index 0983f213aa..61d38e898d 100644
---
a/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/AbstractBrokerLogger.java
+++
b/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/AbstractBrokerLogger.java
@@ -58,6 +58,4 @@ public abstract class AbstractBrokerLogger<X extends
AbstractBrokerLogger<X>> ex
{
return _virtualHostLogEventExcluded;
}
-
-
}
diff --git
a/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/AbstractLogger.java
b/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/AbstractLogger.java
index 071309e7f7..f23f63d722 100644
---
a/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/AbstractLogger.java
+++
b/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/AbstractLogger.java
@@ -135,6 +135,11 @@ public abstract class AbstractLogger<X extends
AbstractLogger<X>> extends Abstra
}
}
+ public void resetStatistics()
+ {
+ _compositeFilter.resetStatistics();
+ }
+
protected Appender<ILoggingEvent> getAppender()
{
return ROOT_LOGGER.getAppender(getName());
diff --git
a/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/CompositeFilter.java
b/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/CompositeFilter.java
index 843887607b..3efbddd96f 100644
---
a/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/CompositeFilter.java
+++
b/broker-plugins/logging-logback/src/main/java/org/apache/qpid/server/logging/logback/CompositeFilter.java
@@ -36,7 +36,7 @@ import ch.qos.logback.core.spi.FilterReply;
public class CompositeFilter extends Filter<ILoggingEvent>
{
- private List<Filter<ILoggingEvent>> _filterList = new
CopyOnWriteArrayList<>();
+ private final List<Filter<ILoggingEvent>> _filterList = new
CopyOnWriteArrayList<>();
private final AtomicLong _warnCount = new AtomicLong();
private final AtomicLong _errorCount = new AtomicLong();
@@ -105,4 +105,10 @@ public class CompositeFilter extends Filter<ILoggingEvent>
{
return _warnCount.get();
}
+
+ public void resetStatistics()
+ {
+ _errorCount.set(0L);
+ _warnCount.set(0L);
+ }
}
diff --git
a/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/BrokerLoggerTest.java
b/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/BrokerLoggerTest.java
index 1b939299ed..adff511d87 100644
---
a/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/BrokerLoggerTest.java
+++
b/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/BrokerLoggerTest.java
@@ -104,7 +104,10 @@ public class BrokerLoggerTest extends UnitTestBase
{
try
{
- _brokerLogger.delete();
+ if (_brokerLogger != null)
+ {
+ _brokerLogger.delete();
+ }
_taskExecutor.stopImmediately();
}
finally
@@ -242,6 +245,11 @@ public class BrokerLoggerTest extends UnitTestBase
assertEquals(1L, _brokerLogger.getWarnCount());
assertEquals(2L, _brokerLogger.getErrorCount());
+ _brokerLogger.resetStatistics();
+
+ assertEquals(0L, _brokerLogger.getWarnCount());
+ assertEquals(0L, _brokerLogger.getErrorCount());
+
errorFilter.delete();
}
diff --git
a/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/VirtualHostLoggerTest.java
b/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/VirtualHostLoggerTest.java
index 9cd651d097..85a40c342d 100644
---
a/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/VirtualHostLoggerTest.java
+++
b/broker-plugins/logging-logback/src/test/java/org/apache/qpid/server/logging/logback/VirtualHostLoggerTest.java
@@ -29,10 +29,14 @@ import static org.mockito.Mockito.when;
import java.io.File;
import java.security.Principal;
+import java.security.PrivilegedAction;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import java.util.Set;
+
+import javax.security.auth.Subject;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.Appender;
@@ -46,6 +50,7 @@ import
org.apache.qpid.server.configuration.updater.TaskExecutor;
import org.apache.qpid.server.configuration.updater.TaskExecutorImpl;
import org.apache.qpid.server.logging.EventLogger;
import org.apache.qpid.server.logging.LogFileDetails;
+import org.apache.qpid.server.logging.LogLevel;
import org.apache.qpid.server.model.AbstractConfiguredObject;
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.BrokerModel;
@@ -55,6 +60,7 @@ import org.apache.qpid.server.model.Model;
import org.apache.qpid.server.model.State;
import org.apache.qpid.server.model.SystemConfig;
import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.VirtualHostLogInclusionRule;
import org.apache.qpid.server.model.VirtualHostLogger;
import org.apache.qpid.server.model.VirtualHostNode;
import org.apache.qpid.server.security.AccessControl;
@@ -241,6 +247,70 @@ public class VirtualHostLoggerTest extends UnitTestBase
logger.stopLogging();
}
+ @Test
+ public void testStatistics()
+ {
+ final String loggerName = getTestName();
+ final VirtualHostFileLogger<?> logger = (VirtualHostFileLogger<?>)
createVirtualHostLogger();
+ logger.open();
+
+ final Logger messageLogger = LoggerFactory.getLogger(loggerName);
+
+ assertEquals(0L, logger.getWarnCount());
+ assertEquals(0L, logger.getErrorCount());
+
+ final VirtualHostLogInclusionRule<?> warnFilter = logger.createChild(
+ VirtualHostLogInclusionRule.class,
+ createInclusionRuleAttributes(loggerName, LogLevel.WARN));
+
+ final Subject subject = new Subject(false,
Set.of(_virtualHost.getPrincipal()), Set.of(), Set.of());
+ Subject.doAs(subject, (PrivilegedAction<Void>) () ->
+ {
+ messageLogger.warn("warn");
+ return null;
+ });
+
+ assertEquals(1L, logger.getWarnCount());
+ assertEquals(0L, logger.getErrorCount());
+
+ Subject.doAs(subject, (PrivilegedAction<Void>) () ->
+ {
+ messageLogger.error("error");
+ return null;
+ });
+ assertEquals(1L, logger.getWarnCount());
+ assertEquals(1L, logger.getErrorCount());
+
+ warnFilter.delete();
+
+ final VirtualHostLogInclusionRule<?> errorFilter = logger.createChild(
+ VirtualHostLogInclusionRule.class,
+ createInclusionRuleAttributes(loggerName, LogLevel.ERROR));
+
+ Subject.doAs(subject, (PrivilegedAction<Void>) () ->
+ {
+ messageLogger.warn("warn");
+ return null;
+ });
+ assertEquals(1L, logger.getWarnCount());
+ assertEquals(1L, logger.getErrorCount());
+
+ Subject.doAs(subject, (PrivilegedAction<Void>) () ->
+ {
+ messageLogger.error("error");
+ return null;
+ });
+ assertEquals(1L, logger.getWarnCount());
+ assertEquals(2L, logger.getErrorCount());
+
+ logger.resetStatistics();
+
+ assertEquals(0L, logger.getWarnCount());
+ assertEquals(0L, logger.getErrorCount());
+
+ errorFilter.delete();
+ }
+
private VirtualHostFileLogger createErrorredLogger()
{
Map<String, Object> attributes = new HashMap<>();
@@ -270,4 +340,13 @@ public class VirtualHostLoggerTest extends UnitTestBase
return _virtualHost.createChild(VirtualHostLogger.class, attributes);
}
+ private Map<String, Object> createInclusionRuleAttributes(final String
loggerName,
+ final LogLevel
logLevel)
+ {
+ return Map.of(
+ VirtualHostNameAndLevelLogInclusionRule.LOGGER_NAME,
loggerName,
+ VirtualHostNameAndLevelLogInclusionRule.LEVEL, logLevel,
+ VirtualHostNameAndLevelLogInclusionRule.NAME, "test",
+ ConfiguredObject.TYPE,
VirtualHostNameAndLevelLogInclusionRule.TYPE);
+ }
}
diff --git
a/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ProxyMessageSource.java
b/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ProxyMessageSource.java
index c49cffb179..10bca28832 100644
---
a/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ProxyMessageSource.java
+++
b/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ProxyMessageSource.java
@@ -301,6 +301,12 @@ public class ProxyMessageSource implements MessageSource,
MessageDestination
return _underlying.getUnacknowledgedMessages();
}
+ @Override
+ public void resetStatistics()
+ {
+ _underlying.resetStatistics();
+ }
+
@Override
public AMQPSession getSession()
{
diff --git
a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java
b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java
index ca1c9d2440..9c213e54b8 100644
---
a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java
+++
b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java
@@ -378,7 +378,7 @@ public class ApiDocsServlet extends AbstractServlet
{
writer.println("<table class=\"statistics\">");
writer.println("<thead>");
- writer.println("<tr><th class=\"name\">Statistic Name</th><th
class=\"type\">Type</th><th class=\"units\">Units</th><th
class=\"statisticType\">Stat Type</th><th
class=\"description\">Description</th></tr>");
+ writer.println("<tr><th class=\"name\">Statistic Name</th><th
class=\"type\">Type</th><th class=\"units\">Units</th><th
class=\"statisticType\">Stat Type</th><th
class=\"statisticResettable\">Resettable</th><th
class=\"description\">Description</th></tr>");
writer.println("</thead>");
writer.println("<tbody>");
@@ -392,6 +392,8 @@ public class ApiDocsServlet extends AbstractServlet
+ statistic.getUnits()
+ "</td><td class=\"stattype\">"
+ statistic.getStatisticType()
+ + "</td><td class=\"resettable\">"
+ + statistic.isResettable()
+ "</td><td class=\"description\">"
+ statistic.getDescription()
+ "</td></tr>");
diff --git
a/broker-plugins/management-http/src/main/java/resources/common/StatisticsWidget.html
b/broker-plugins/management-http/src/main/java/resources/common/StatisticsWidget.html
index 68f3e9819d..7e21245309 100644
---
a/broker-plugins/management-http/src/main/java/resources/common/StatisticsWidget.html
+++
b/broker-plugins/management-http/src/main/java/resources/common/StatisticsWidget.html
@@ -25,6 +25,8 @@
<div
data-dojo-attach-point="msgBytePairPointInTimeStatisticsGridContainer"></div>
<div
data-dojo-attach-point="otherPointInTimeStatisticsGridContainer"></div>
<div class="alignRight">
+ <button data-dojo-type="dijit/form/Button" type="button"
data-dojo-attach-point="resetStatisticsButton"
+ class="resetStatisticsButton">Reset Statistics</button>
<div data-dojo-attach-point="allStatsToggle"
data-dojo-type="dijit/form/ToggleButton"
data-dojo-props="label: 'Show more statistics',
iconClass: 'addIcon',
diff --git
a/broker-plugins/management-http/src/main/java/resources/js/qpid/common/StatisticsWidget.js
b/broker-plugins/management-http/src/main/java/resources/js/qpid/common/StatisticsWidget.js
index 34db71551e..91a17e7362 100644
---
a/broker-plugins/management-http/src/main/java/resources/js/qpid/common/StatisticsWidget.js
+++
b/broker-plugins/management-http/src/main/java/resources/js/qpid/common/StatisticsWidget.js
@@ -28,6 +28,7 @@ define(["dojox/lang/functional/object",
"dojo/on",
"dojo/mouse",
"dojo/number",
+ "dojo/query",
"dstore/Memory",
'dstore/Trackable',
"dojox/html/entities",
@@ -37,6 +38,7 @@ define(["dojox/lang/functional/object",
"dijit/Tooltip",
"dijit/registry",
"qpid/common/formatter",
+ "qpid/common/util",
"dojo/text!common/StatisticsWidget.html",
"dijit/form/ToggleButton",
"dojo/domReady!"],
@@ -50,6 +52,7 @@ define(["dojox/lang/functional/object",
on,
mouse,
number,
+ query,
Memory,
Trackable,
entities,
@@ -59,6 +62,7 @@ define(["dojox/lang/functional/object",
Tooltip,
registry,
formatter,
+ util,
template) {
return declare("qpid.common.StatisticsWidget",
@@ -75,9 +79,11 @@ define(["dojox/lang/functional/object",
statisticsPane: null,
allStatsToggle: null,
+ resetStatisticsButton: null,
// constructor arguments
category: null,
+ modelObj: null,
type: null,
management: null,
defaultStatistics: null,
@@ -208,6 +214,7 @@ define(["dojox/lang/functional/object",
this.statisticsPane.on("show", lang.hitch(this,
this.resize));
this.allStatsToggle.on("change", lang.hitch(this,
this._onStatsToggleChange));
+ this.resetStatisticsButton.on("click", lang.hitch(this,
this.resetStatistics));
},
startup: function ()
{
@@ -445,6 +452,14 @@ define(["dojox/lang/functional/object",
Tooltip.hide(rowNode);
});
}
+ },
+ resetStatistics: function()
+ {
+ util.resetStatistics(this.management,
+ this.modelObj,
+ this.resetStatisticsButton,
+ this.category,
+ this.modelObj.name);
}
});
});
diff --git
a/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
b/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
index 8b88d2bebd..1ee707aa49 100644
---
a/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
+++
b/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
@@ -1171,5 +1171,27 @@ define(["dojo/_base/xhr",
}
}
+ util.resetStatistics = function (management, modelObj,
resetStatisticsButton, category, name)
+ {
+ if (confirm("Are you sure you want to reset statistics for " +
category + " '" + name + "'?"))
+ {
+ resetStatisticsButton.set("disabled", true);
+ const obj =
+ {
+ type: category.toLowerCase(),
+ name: "resetStatistics",
+ parent: modelObj
+ };
+ const url = management.buildObjectURL(obj) +
+ (category === "Broker" ? "/resetStatistics" : "");
+ management.post({url: url}, {})
+ .then(null, management.xhrErrorHandler)
+ .always(function ()
+ {
+ resetStatisticsButton.set("disabled", false);
+ });
+ }
+ }
+
return util;
});
diff --git
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
index 4f8fb944c3..e0645654cb 100644
---
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
+++
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
@@ -1014,6 +1014,7 @@ define(["dojo/parser",
{
that.brokerStatistics = new
qpid.common.StatisticsWidget({
category: "Broker",
+ modelObj: that.brokerObj,
type: null,
management: that.controller.management,
defaultStatistics: ["messagesIn", "messagesOut"]
diff --git
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Connection.js
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Connection.js
index 1b9dcffd03..58f49f24ee 100644
---
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Connection.js
+++
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Connection.js
@@ -228,7 +228,7 @@ define(["dojo/parser",
{
return;
}
-
+ const that = this;
this.management.load(this.modelObj, { excludeInheritedContext:
true, depth: 0})
.then(lang.hitch(this, function (data)
{
@@ -238,8 +238,9 @@ define(["dojo/parser",
{
this.connectionStatistics = new StatisticsWidget({
category: "Connection",
+ modelObj: that.modelObj,
type: null,
- management: this.management,
+ management: that.management,
defaultStatistics: ["messagesIn", "messagesOut",
"lastIoTime"]
});
this.connectionStatistics.placeAt(this.connectionStatisticsNode);
diff --git
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Exchange.js
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Exchange.js
index ced2a1fa08..9d9e04cc93 100644
---
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Exchange.js
+++
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Exchange.js
@@ -282,6 +282,7 @@ define(["dojo/_base/xhr",
{
thisObj.exchangeStatistics = new StatisticsWidget({
category: "Exchange",
+ modelObj: thisObj.modelObj,
type: thisObj.exchangeData.type,
management: thisObj.management,
defaultStatistics: ["messagesIn",
"messagesDropped"]
diff --git
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js
index bff2a8c853..22b63d1606 100644
---
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js
+++
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js
@@ -671,6 +671,7 @@ define(["dojo/_base/declare",
{
thisObj.queueStatistics = new StatisticsWidget({
category: "Queue",
+ modelObj: thisObj.modelObj,
type: thisObj.queueData.type,
management: thisObj.management,
defaultStatistics: ["totalEnqueuedMessages",
"totalDequeuedMessages",
diff --git
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js
index 8d7ef9a407..00e846605c 100644
---
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js
+++
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js
@@ -730,6 +730,7 @@ define(["dojo/parser",
{
this.virtualhostStatistics = new StatisticsWidget({
category: "VirtualHost",
+ modelObj: this.modelObj,
type: this.vhostData.type,
management: this.management,
defaultStatistics: ["messagesIn", "messagesOut",
"totalDepthOfQueuesMessages"]
diff --git
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logger/brokerlogger/show.js
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logger/brokerlogger/show.js
index 552bea4dc7..56666c005d 100644
---
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logger/brokerlogger/show.js
+++
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logger/brokerlogger/show.js
@@ -19,11 +19,12 @@
*
*/
define(["qpid/common/util",
+ "dijit/registry",
"dojo/query",
"dojo/_base/lang",
"dojo/text!logger/brokerlogger/show.html",
"qpid/common/CategoryTabExtension",
- "dojo/domReady!"], function (util, query, lang, template,
CategoryTabExtension)
+ "dojo/domReady!"], function (util, registry, query, lang, template,
CategoryTabExtension)
{
function BrokerLogger(params)
{
@@ -40,6 +41,8 @@ define(["qpid/common/util",
BrokerLogger.prototype.postParse = function (containerNode)
{
this.virtualHostLogEventExcludedCheckboxContainer =
query(".virtualHostLogEventExcluded", containerNode)[0];
+ this._resetStatisticsButton =
registry.byNode(query(".resetStatistics", containerNode)[0]);
+ this._resetStatisticsButton.on("click", lang.hitch(this,
this.resetStatistics));
}
BrokerLogger.prototype.update = function (restData)
@@ -50,5 +53,14 @@ define(["qpid/common/util",
CategoryTabExtension.prototype.update.call(this, restData);
}
+ BrokerLogger.prototype.resetStatistics = function ()
+ {
+ util.resetStatistics(this.management,
+ this.modelObj,
+ this._resetStatisticsButton,
+ "BrokerLogger",
+ this.modelObj.name);
+ }
+
return BrokerLogger;
});
diff --git
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logger/virtualhostlogger/show.js
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logger/virtualhostlogger/show.js
index c0fe7a9e60..0c4dbe8b92 100644
---
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logger/virtualhostlogger/show.js
+++
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logger/virtualhostlogger/show.js
@@ -19,11 +19,12 @@
*
*/
define(["qpid/common/util",
+ "dijit/registry",
"dojo/query",
"dojo/_base/lang",
"dojo/text!logger/virtualhostlogger/show.html",
"qpid/common/CategoryTabExtension",
- "dojo/domReady!"], function (util, query, lang, template,
CategoryTabExtension)
+ "dojo/domReady!"], function (util, registry, query, lang, template,
CategoryTabExtension)
{
function VirtualHostLogger(params)
{
@@ -35,5 +36,22 @@ define(["qpid/common/util",
CategoryTabExtension.call(this, categoryExtensionParams);
}
- return util.extend(VirtualHostLogger, CategoryTabExtension);
+ util.extend(VirtualHostLogger, CategoryTabExtension);
+
+ VirtualHostLogger.prototype.postParse = function (containerNode)
+ {
+ this._resetStatisticsButton =
registry.byNode(query(".resetStatistics", containerNode)[0]);
+ this._resetStatisticsButton.on("click", lang.hitch(this,
this.resetStatistics));
+ }
+
+ VirtualHostLogger.prototype.resetStatistics = function ()
+ {
+ util.resetStatistics(this.management,
+ this.modelObj,
+ this._resetStatisticsButton,
+ "VirtualHostLogger",
+ this.modelObj.name);
+ }
+
+ return VirtualHostLogger;
});
diff --git
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/port/amqp/show.js
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/port/amqp/show.js
index aae7439dcc..c9e37e5289 100644
---
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/port/amqp/show.js
+++
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/port/amqp/show.js
@@ -128,6 +128,7 @@ define(["dojo/query",
{
this.portStatistics = new StatisticsWidget({
category: "Port",
+ modelObj: this.modelObj,
type: restData.type,
management: this.management,
defaultStatistics: ["connectionCount", "totalConnectionCount"]
diff --git
a/broker-plugins/management-http/src/main/java/resources/logger/brokerlogger/show.html
b/broker-plugins/management-http/src/main/java/resources/logger/brokerlogger/show.html
index bf80ca5741..70875f672f 100644
---
a/broker-plugins/management-http/src/main/java/resources/logger/brokerlogger/show.html
+++
b/broker-plugins/management-http/src/main/java/resources/logger/brokerlogger/show.html
@@ -24,4 +24,7 @@
<div class="virtualHostLogEventExcluded"><input type="checkbox"/></div>
</div>
<div class="typeSpecificAttributes"></div>
+ <div class="alignRight">
+ <button data-dojo-type="dijit/form/Button" type="button"
class="resetStatistics">Reset Statistics</button>
+ </div>
</div>
diff --git
a/broker-plugins/management-http/src/main/java/resources/logger/virtualhostlogger/show.html
b/broker-plugins/management-http/src/main/java/resources/logger/virtualhostlogger/show.html
index 2356b4f0b8..564fbbb908 100644
---
a/broker-plugins/management-http/src/main/java/resources/logger/virtualhostlogger/show.html
+++
b/broker-plugins/management-http/src/main/java/resources/logger/virtualhostlogger/show.html
@@ -20,4 +20,7 @@
-->
<div>
<div class="typeSpecificAttributes"></div>
+ <div class="alignRight">
+ <button data-dojo-type="dijit/form/Button" type="button"
class="resetStatistics">Reset Statistics</button>
+ </div>
</div>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]