Repository: activemq-artemis Updated Branches: refs/heads/master 58c058f60 -> d6f9f810c
ARTEMIS-1198 add listAllSessionsAsJSON mgmnt method Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/92cb6951 Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/92cb6951 Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/92cb6951 Branch: refs/heads/master Commit: 92cb69513e0484ca63e7433ba6ab0e5b83f8a2a3 Parents: 58c058f Author: Justin Bertram <jbert...@apache.org> Authored: Tue Mar 6 14:17:42 2018 -0600 Committer: Clebert Suconic <clebertsuco...@apache.org> Committed: Tue Mar 6 18:46:20 2018 -0500 ---------------------------------------------------------------------- .../core/management/ActiveMQServerControl.java | 23 ++++++++++ .../impl/ActiveMQServerControlImpl.java | 24 ++++++++++ .../management/ActiveMQServerControlTest.java | 46 ++++++++++++++++++++ .../ActiveMQServerControlUsingCoreTest.java | 5 +++ 4 files changed, 98 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/92cb6951/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java ---------------------------------------------------------------------- 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 cfde85e..cbee288 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 @@ -905,6 +905,29 @@ public interface ActiveMQServerControl { String listSessionsAsJSON(@Parameter(desc = "a connection ID", name = "connectionID") String connectionID) throws Exception; /** + * Lists details about all sessions. + * The returned String is a JSON string containing details about each and every session, e.g.: + * <pre> + * [ + * { + * "sessionID":"e71d61d7-2176-11e8-9057-a0afbd82eaba", + * "creationTime":1520365520212, + * "consumerCount":1, + * "principal":"myUser" + * }, + * { + * "sessionID":"e718a6e6-2176-11e8-9057-a0afbd82eaba", + * "creationTime":1520365520191, + * "consumerCount":0, + * "principal":"guest" + * } + * ] + * </pre> + */ + @Operation(desc = "List all sessions as a JSON string", impact = MBeanOperationInfo.INFO) + String listAllSessionsAsJSON() throws Exception; + + /** * Lists all the sessions IDs for the specified connection ID. */ @Operation(desc = "List the sessions for the given connectionID", impact = MBeanOperationInfo.INFO) http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/92cb6951/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java ---------------------------------------------------------------------- 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 d0f0b5c..fe7792b 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 @@ -1864,6 +1864,30 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active } @Override + public String listAllSessionsAsJSON() throws Exception { + checkStarted(); + + clearIO(); + + JsonArrayBuilder array = JsonLoader.createArrayBuilder(); + try { + Set<ServerSession> sessions = server.getSessions(); + for (ServerSession sess : sessions) { + JsonObjectBuilder obj = JsonLoader.createObjectBuilder().add("sessionID", sess.getName()).add("creationTime", sess.getCreationTime()).add("consumerCount", sess.getServerConsumers().size()); + + if (sess.getValidatedUser() != null) { + obj.add("principal", sess.getValidatedUser()); + } + + array.add(obj); + } + } finally { + blockOnIO(); + } + return array.build().toString(); + } + + @Override public String listConsumersAsJSON(String connectionID) throws Exception { checkStarted(); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/92cb6951/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java index 2185e07..653b45c 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java @@ -1473,6 +1473,52 @@ public class ActiveMQServerControlTest extends ManagementTestBase { } @Test + public void testListAllSessionsAsJSON() throws Exception { + SimpleString queueName = new SimpleString(UUID.randomUUID().toString()); + server.addAddressInfo(new AddressInfo(queueName, RoutingType.ANYCAST)); + server.createQueue(queueName, RoutingType.ANYCAST, queueName, null, false, false); + ActiveMQServerControl serverControl = createManagementControl(); + + ServerLocator locator = createInVMNonHALocator(); + ClientSessionFactory factory = createSessionFactory(locator); + ServerLocator locator2 = createInVMNonHALocator(); + ClientSessionFactory factory2 = createSessionFactory(locator2); + ClientSession session1 = addClientSession(factory.createSession()); + Thread.sleep(5); + ClientSession session2 = addClientSession(factory2.createSession("myUser", "myPass", false, false, false, false, 0)); + session2.createConsumer(queueName); + + String jsonString = serverControl.listAllSessionsAsJSON(); + IntegrationTestLogger.LOGGER.info(jsonString); + Assert.assertNotNull(jsonString); + JsonArray array = JsonUtil.readJsonArray(jsonString); + Assert.assertEquals(2 + (usingCore() ? 1 : 0), array.size()); + JsonObject first; + JsonObject second; + if (array.getJsonObject(0).getJsonNumber("creationTime").longValue() < array.getJsonObject(1).getJsonNumber("creationTime").longValue()) { + first = array.getJsonObject(0); + second = array.getJsonObject(1); + } else { + first = array.getJsonObject(1); + second = array.getJsonObject(0); + } + + Assert.assertTrue(first.getString("sessionID").length() > 0); + Assert.assertEquals(((ClientSessionImpl) session1).getName(), first.getString("sessionID")); + Assert.assertTrue(first.getString("principal").length() > 0); + Assert.assertEquals("guest", first.getString("principal")); + Assert.assertTrue(first.getJsonNumber("creationTime").longValue() > 0); + Assert.assertEquals(0, first.getJsonNumber("consumerCount").longValue()); + + Assert.assertTrue(second.getString("sessionID").length() > 0); + Assert.assertEquals(((ClientSessionImpl) session2).getName(), second.getString("sessionID")); + Assert.assertTrue(second.getString("principal").length() > 0); + Assert.assertEquals("myUser", second.getString("principal")); + Assert.assertTrue(second.getJsonNumber("creationTime").longValue() > 0); + Assert.assertEquals(1, second.getJsonNumber("consumerCount").longValue()); + } + + @Test public void testListQueues() throws Exception { SimpleString queueName1 = new SimpleString("my_queue_one"); SimpleString queueName2 = new SimpleString("my_queue_two"); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/92cb6951/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java ---------------------------------------------------------------------- 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 57ead70..ce2e8cd 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 @@ -1003,6 +1003,11 @@ public class ActiveMQServerControlUsingCoreTest extends ActiveMQServerControlTes } @Override + public String listAllSessionsAsJSON() throws Exception { + return (String) proxy.invokeOperation("listAllSessionsAsJSON"); + } + + @Override public String listAddresses(@Parameter(name = "separator", desc = "Separator used on the string listing") String separator) throws Exception { return (String) proxy.invokeOperation("listAddresses", separator); }