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);
          }

Reply via email to