ARTEMIS-3001 Provide address and queue count via ActiveMQServerControl

See https://issues.apache.org/jira/browse/ARTEMIS-3001
This commit is contained in:
sebthom 2020-11-17 20:21:18 +01:00 committed by Clebert Suconic
parent 9d97c3b6de
commit 80c51803da
5 changed files with 122 additions and 3 deletions

View File

@ -2770,7 +2770,6 @@ public interface AuditLogger extends BasicLogger {
@Message(id = 601739, value = "User {0} is requesting to stop broker connection {1}", format = Message.Format.MESSAGE_FORMAT)
void stopBrokerConnection(String user, String name);
static void startBrokerConnection(String name) {
LOGGER.startBrokerConnection(getCaller(), name);
}
@ -2779,4 +2778,19 @@ public interface AuditLogger extends BasicLogger {
@Message(id = 601740, value = "User {0} is requesting to start broker connection {1}", format = Message.Format.MESSAGE_FORMAT)
void startBrokerConnection(String user, String name);
static void getAddressCount(Object source) {
LOGGER.getAddressCount(getCaller(), source);
}
@LogMessage(level = Logger.Level.INFO)
@Message(id = 601741, value = "User {0} is getting address count on target resource: {1} {2}", format = Message.Format.MESSAGE_FORMAT)
void getAddressCount(String user, Object source, Object... args);
static void getQueueCount(Object source) {
LOGGER.getQueueCount(getCaller(), source);
}
@LogMessage(level = Logger.Level.INFO)
@Message(id = 601742, value = "User {0} is getting the queue count on target resource: {1} {2}", format = Message.Format.MESSAGE_FORMAT)
void getQueueCount(String user, Object source, Object... args);
}

View File

@ -394,11 +394,23 @@ public interface ActiveMQServerControl {
String getConnectorsAsJSON() throws Exception;
/**
* Returns the addresses created on this server.
* Returns the number of addresses created on this server.
*/
@Attribute(desc = "Addresses created on this server")
@Attribute(desc = "Number of addresses created on this server")
int getAddressCount();
/**
* Returns the names of the addresses created on this server.
*/
@Attribute(desc = "Names of the addresses created on this server")
String[] getAddressNames();
/**
* Returns the number of queues created on this server.
*/
@Attribute(desc = "Number of queues created on this server")
int getQueueCount();
/**
* Returns the names of the queues created on this server.
*/

View File

@ -1395,6 +1395,22 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
}
}
@Override
public int getQueueCount() {
if (AuditLogger.isEnabled()) {
AuditLogger.getQueueCount(this.server);
}
checkStarted();
clearIO();
try {
Object[] queueControls = server.getManagementService().getResources(QueueControl.class);
return queueControls.length;
} finally {
blockOnIO();
}
}
@Override
public String[] getQueueNames() {
return getQueueNames(null);
@ -1493,6 +1509,22 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
}
}
@Override
public int getAddressCount() {
if (AuditLogger.isEnabled()) {
AuditLogger.getAddressCount(this.server);
}
checkStarted();
clearIO();
try {
Object[] addresses = server.getManagementService().getResources(AddressControl.class);
return addresses.length;
} finally {
blockOnIO();
}
}
@Override
public String[] getAddressNames() {
if (AuditLogger.isEnabled()) {

View File

@ -661,6 +661,32 @@ public class ActiveMQServerControlTest extends ManagementTestBase {
serverControl.destroyQueue(name.toString());
}
@Test
public void testGetQueueCount() throws Exception {
SimpleString address = RandomUtil.randomSimpleString();
SimpleString name = RandomUtil.randomSimpleString();
ActiveMQServerControl serverControl = createManagementControl();
// due to replication, there can be another queue created for replicating
// management operations
Assert.assertFalse(ActiveMQServerControlTest.contains(name.toString(), serverControl.getQueueNames()));
int countBeforeCreate = serverControl.getQueueCount();
serverControl.createAddress(address.toString(), "ANYCAST");
if (legacyCreateQueue) {
serverControl.createQueue(address.toString(), "ANYCAST", name.toString(), null, true, -1, false, false);
} else {
serverControl.createQueue(new QueueConfiguration(name).setAddress(address).setRoutingType(RoutingType.ANYCAST).setDurable(true).setAutoCreateAddress(false).toJSON());
}
Assert.assertTrue(countBeforeCreate < serverControl.getQueueCount());
serverControl.destroyQueue(name.toString());
Assert.assertFalse(ActiveMQServerControlTest.contains(name.toString(), serverControl.getQueueNames()));
}
@Test
public void testGetQueueNames() throws Exception {
SimpleString address = RandomUtil.randomSimpleString();
@ -741,6 +767,31 @@ public class ActiveMQServerControlTest extends ManagementTestBase {
Assert.assertTrue(ActiveMQServerControlTest.contains(clusterConnection2, serverControl.getClusterConnectionNames()));
}
@Test
public void testGetAddressCount() throws Exception {
SimpleString address = RandomUtil.randomSimpleString();
SimpleString name = RandomUtil.randomSimpleString();
ActiveMQServerControl serverControl = createManagementControl();
// due to replication, there can be another queue created for replicating
// management operations
Assert.assertFalse(ActiveMQServerControlTest.contains(address.toString(), serverControl.getAddressNames()));
int countBeforeCreate = serverControl.getAddressCount();
if (legacyCreateQueue) {
serverControl.createQueue(address.toString(), "ANYCAST", name.toString(), null, true, -1, false, true);
} else {
serverControl.createQueue(new QueueConfiguration(name).setAddress(address).setRoutingType(RoutingType.ANYCAST).toJSON());
}
Assert.assertTrue(countBeforeCreate < serverControl.getAddressCount());
serverControl.destroyQueue(name.toString(), true, true);
Assert.assertFalse(ActiveMQServerControlTest.contains(address.toString(), serverControl.getAddressNames()));
}
@Test
public void testGetAddressNames() throws Exception {
SimpleString address = RandomUtil.randomSimpleString();

View File

@ -375,11 +375,21 @@ public class ActiveMQServerControlUsingCoreTest extends ActiveMQServerControlTes
return (String) proxy.retrieveAttributeValue("connectorsAsJSON");
}
@Override
public int getAddressCount() {
return (Integer) proxy.retrieveAttributeValue("addressCount", Integer.class);
}
@Override
public String[] getAddressNames() {
return (String[]) proxy.retrieveAttributeValue("addressNames", String.class);
}
@Override
public int getQueueCount() {
return (Integer) proxy.retrieveAttributeValue("queueCount", Integer.class);
}
@Override
public String[] getQueueNames() {
return (String[]) proxy.retrieveAttributeValue("queueNames", String.class);