This is an automated email from the ASF dual-hosted git repository.
clebertsuconic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git
The following commit(s) were added to refs/heads/master by this push:
new 405eb96 ARTEMIS-2636: Introduce Disk Usage Metrics
new 5518bcb This closes #3005
405eb96 is described below
commit 405eb969c14fc498aa8f46a56e70c6e39512532d
Author: Atri Sharma <[email protected]>
AuthorDate: Fri Mar 6 15:31:39 2020 +0530
ARTEMIS-2636: Introduce Disk Usage Metrics
ARTEMIS-2636: This commit introduces metrics to publish the amount of disk
used currently
---
.../apache/activemq/artemis/logs/AuditLogger.java | 16 ++++++++
.../api/core/management/ActiveMQServerControl.java | 15 +++++++-
.../management/impl/ActiveMQServerControlImpl.java | 45 ++++++++++++++++++++++
.../core/server/impl/ActiveMQServerImpl.java | 1 +
.../core/server/metrics/BrokerMetricNames.java | 2 +-
.../ActiveMQServerControlUsingCoreTest.java | 20 ++++++++++
6 files changed, 97 insertions(+), 2 deletions(-)
diff --git
a/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java
b/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java
index 70abebd..b934c9e 100644
---
a/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java
+++
b/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java
@@ -2284,4 +2284,20 @@ public interface AuditLogger extends BasicLogger {
@LogMessage(level = Logger.Level.INFO)
@Message(id = 601503, value = "User {0} is getting retroactiveResource
property on target resource: {1} {2}", format = Message.Format.MESSAGE_FORMAT)
void isRetroactiveResource(String user, Object source, Object... args);
+
+ static void getDiskStoreUsage(Object source) {
+ LOGGER.getDiskStoreUsage(getCaller(), source);
+ }
+
+ @LogMessage(level = Logger.Level.INFO)
+ @Message(id = 601504, value = "User {0} is getting disk store usage on
target resource: {1} {2}", format = Message.Format.MESSAGE_FORMAT)
+ void getDiskStoreUsage(String user, Object source, Object... args);
+
+ static void getDiskStoreUsagePercentage(Object source) {
+ LOGGER.getDiskStoreUsagePercentage(getCaller(), source);
+ }
+
+ @LogMessage(level = Logger.Level.INFO)
+ @Message(id = 601505, value = "User {0} is getting disk store usage
percentage on target resource: {1} {2}", format = Message.Format.MESSAGE_FORMAT)
+ void getDiskStoreUsagePercentage(String user, Object source, Object...
args);
}
diff --git
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java
index 63ee033..29ed3d7 100644
---
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java
+++
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java
@@ -27,7 +27,8 @@ import
org.apache.activemq.artemis.api.core.ActiveMQAddressDoesNotExistException
public interface ActiveMQServerControl {
String CONNECTION_COUNT_DESCRIPTION = "Number of clients connected to this
server";
String TOTAL_CONNECTION_COUNT_DESCRIPTION = "Number of clients which have
connected to this server since it was started";
- String ADDRESS_MEMORY_USAGE_DESCRIPTION = "Memory used by all the addresses
on broker for in-memory messages";
+ String ADDRESS_MEMORY_USAGE_DESCRIPTION = "Bytes used by all the addresses
on broker for in-memory messages";
+ String DISK_STORE_USAGE_DESCRIPTION = "Memory used by the disk store";
/**
* Returns this server's version.
@@ -443,11 +444,23 @@ public interface ActiveMQServerControl {
long getAddressMemoryUsage();
/**
+ * Returns the bytes used by the disk store
+ */
+ @Attribute(desc = DISK_STORE_USAGE_DESCRIPTION)
+ long getDiskStoreUsage();
+
+ /**
* Returns the memory used by all the addresses on broker as a percentage
of global maximum limit
*/
@Attribute(desc = "Memory used by all the addresses on broker as a
percentage of global maximum limit")
int getAddressMemoryUsagePercentage();
+ /**
+ * Returns the storage used by disk store
+ */
+ @Attribute(desc = "Memory used by the disk store")
+ int getDiskStoreUsagePercentage();
+
// Operations ----------------------------------------------------
@Operation(desc = "Isolate the broker", impact = MBeanOperationInfo.ACTION)
boolean freezeReplication();
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
index a63f523..4431d70 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
@@ -107,6 +107,7 @@ import
org.apache.activemq.artemis.core.server.cluster.ha.HAPolicy;
import org.apache.activemq.artemis.core.server.cluster.ha.LiveOnlyPolicy;
import org.apache.activemq.artemis.core.server.cluster.ha.ScaleDownPolicy;
import
org.apache.activemq.artemis.core.server.cluster.ha.SharedStoreSlavePolicy;
+import org.apache.activemq.artemis.core.server.files.FileStoreMonitor;
import org.apache.activemq.artemis.core.server.group.GroupingHandler;
import org.apache.activemq.artemis.core.server.impl.Activation;
import org.apache.activemq.artemis.core.server.impl.AddressInfo;
@@ -131,6 +132,8 @@ import org.apache.activemq.artemis.utils.SecurityFormatter;
import org.apache.activemq.artemis.utils.collections.TypedProperties;
import org.jboss.logging.Logger;
+import static
org.apache.activemq.artemis.core.server.files.FileStoreMonitor.calculateUsage;
+
public class ActiveMQServerControlImpl extends AbstractControl implements
ActiveMQServerControl, NotificationEmitter,
org.apache.activemq.artemis.core.server.management.NotificationListener {
// Constants -----------------------------------------------------
private static final Logger logger =
Logger.getLogger(ActiveMQServerControlImpl.class);
@@ -708,6 +711,28 @@ public class ActiveMQServerControlImpl extends
AbstractControl implements Active
}
@Override
+ public long getDiskStoreUsage() {
+ if (AuditLogger.isEnabled()) {
+ AuditLogger.getDiskStoreUsage(this.server);
+ }
+ checkStarted();
+ clearIO();
+ try {
+ //this should not happen but if it does, return -1 to highlight it is
not working
+ if (server.getPagingManager() == null) {
+ return -1L;
+ }
+
+ long usableSpace = server.getPagingManager().getDiskUsableSpace();
+ long totalSpace = server.getPagingManager().getDiskTotalSpace();
+
+ return (long) FileStoreMonitor.calculateUsage(usableSpace,
totalSpace);
+ } finally {
+ blockOnIO();
+ }
+ }
+
+ @Override
public int getAddressMemoryUsagePercentage() {
if (AuditLogger.isEnabled()) {
AuditLogger.getAddressMemoryUsagePercentage(this.server);
@@ -727,6 +752,26 @@ public class ActiveMQServerControlImpl extends
AbstractControl implements Active
}
@Override
+ public int getDiskStoreUsagePercentage() {
+ if (AuditLogger.isEnabled()) {
+ AuditLogger.getDiskStoreUsagePercentage(this.server);
+ }
+ long globalMaxSize = getGlobalMaxSize();
+ // no max size set implies 0% used
+ if (globalMaxSize <= 0) {
+ return 0;
+ }
+
+ long diskUsed = getDiskStoreUsage();
+ if (diskUsed <= 0) {
+ return 0;
+ }
+
+ double result = 100 * calculateUsage(diskUsed, globalMaxSize);
+ return (int) result;
+ }
+
+ @Override
public boolean freezeReplication() {
if (AuditLogger.isEnabled()) {
AuditLogger.freezeReplication(this.server);
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
index f7a6fc9..a46ad55 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
@@ -2996,6 +2996,7 @@ public class ActiveMQServerImpl implements ActiveMQServer
{
builder.register(BrokerMetricNames.CONNECTION_COUNT, this, metrics
-> Double.valueOf(getConnectionCount()),
ActiveMQServerControl.CONNECTION_COUNT_DESCRIPTION);
builder.register(BrokerMetricNames.TOTAL_CONNECTION_COUNT, this,
metrics -> Double.valueOf(getTotalConnectionCount()),
ActiveMQServerControl.TOTAL_CONNECTION_COUNT_DESCRIPTION);
builder.register(BrokerMetricNames.ADDRESS_MEMORY_USAGE, this,
metrics -> Double.valueOf(getPagingManager().getGlobalSize()),
ActiveMQServerControl.ADDRESS_MEMORY_USAGE_DESCRIPTION);
+ builder.register(BrokerMetricNames.DISK_STORE_USAGE, this, metrics
-> Double.valueOf(getPagingManager().getDiskTotalSpace() -
getPagingManager().getDiskUsableSpace()),
ActiveMQServerControl.DISK_STORE_USAGE_DESCRIPTION);
});
}
}
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/metrics/BrokerMetricNames.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/metrics/BrokerMetricNames.java
index f487eec..47ef5cf 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/metrics/BrokerMetricNames.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/metrics/BrokerMetricNames.java
@@ -22,5 +22,5 @@ public class BrokerMetricNames {
public static final String CONNECTION_COUNT = "connection.count";
public static final String TOTAL_CONNECTION_COUNT =
"total.connection.count";
public static final String ADDRESS_MEMORY_USAGE = "address.memory.usage";
-
+ public static final String DISK_STORE_USAGE = "disk.store.usage";
}
diff --git
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java
index cc3dcb3..0418a4e 100644
---
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java
+++
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java
@@ -742,6 +742,26 @@ public class ActiveMQServerControlUsingCoreTest extends
ActiveMQServerControlTes
}
@Override
+ public long getDiskStoreUsage() {
+ try {
+ return (Long) proxy.invokeOperation("getDiskStoreUsage");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return 0;
+ }
+
+ @Override
+ public int getDiskStoreUsagePercentage() {
+ try {
+ return (Integer) proxy.invokeOperation(Integer.TYPE,
"getDiskUseStorePercentage");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return 0;
+ }
+
+ @Override
public boolean freezeReplication() {
return false;