gemmellr commented on code in PR #4126:
URL: https://github.com/apache/activemq-artemis/pull/4126#discussion_r909660602


##########
artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java:
##########
@@ -1770,8 +1770,26 @@ public String listConsumersAsJSON() throws Exception {
 
             if (consumer instanceof ServerConsumer) {
                ServerConsumer serverConsumer = (ServerConsumer) consumer;
-
-               JsonObjectBuilder obj = 
JsonLoader.createObjectBuilder().add("consumerID", 
serverConsumer.getID()).add("connectionID", 
serverConsumer.getConnectionID().toString()).add("sessionID", 
serverConsumer.getSessionID()).add("browseOnly", 
serverConsumer.isBrowseOnly()).add("creationTime", 
serverConsumer.getCreationTime());
+               List<MessageReference> deliveringMessages = 
consumer.getDeliveringMessages();
+               long deliveringMessageSize = 0;
+               for (int i = 0; i < deliveringMessages.size(); i++) {
+                  MessageReference messageReference =  
deliveringMessages.get(i);
+                  deliveringMessageSize += 
messageReference.getMessage().getEncodeSize();
+               }
+               long currentTime = System.currentTimeMillis();
+               long lastDeliveredTimeElapsed = 
serverConsumer.getLastDeliveredTime() == 0 ? 0 : currentTime - 
serverConsumer.getLastDeliveredTime();
+               long lastAckTimeElapsed = 
serverConsumer.getLastAcknowledgedTime() == 0 ? 0 : currentTime - 
serverConsumer.getLastAcknowledgedTime();
+               JsonObjectBuilder obj = JsonLoader.createObjectBuilder()
+                     .add("consumerID", serverConsumer.getID())
+                     .add("connectionID", 
serverConsumer.getConnectionID().toString())
+                     .add("sessionID", serverConsumer.getSessionID())
+                     .add("browseOnly", serverConsumer.isBrowseOnly())
+                     .add("creationTime", serverConsumer.getCreationTime())
+                     .add("deliveringCount", deliveringMessages.size())
+                     .add("deliveringSize", deliveringMessageSize)
+                     .add("messagesAcknowledged", 
serverConsumer.getMessagesAcknowledged())
+                     .add("lastDeliveredTimeElapsed", lastDeliveredTimeElapsed)
+                     .add("lastAcknowledgedTimeElapsed", lastAckTimeElapsed);

Review Comment:
   Appears to be a dupe of the bit from ActiveMQServerControlImpl? Meaning both 
will be broken in the same way currently. Seems like there is room for a shared 
impl.



##########
artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java:
##########
@@ -2752,7 +2753,27 @@ public String listAllConsumersAsJSON() throws Exception {
    }
 
    private JsonObject toJSONObject(ServerConsumer consumer) throws Exception {
-      JsonObjectBuilder obj = 
JsonLoader.createObjectBuilder().add("consumerID", 
consumer.getID()).add("connectionID", 
consumer.getConnectionID().toString()).add("sessionID", 
consumer.getSessionID()).add("queueName", 
consumer.getQueue().getName().toString()).add("browseOnly", 
consumer.isBrowseOnly()).add("creationTime", 
consumer.getCreationTime()).add("deliveringCount", 
consumer.getDeliveringMessages().size());
+      List<MessageReference> deliveringMessages = 
consumer.getDeliveringMessages();
+      long deliveringMessageSize = 0;
+      for (int i = 0; i < deliveringMessages.size(); i++) {
+         MessageReference messageReference =  deliveringMessages.get(i);
+         deliveringMessageSize += 
messageReference.getMessage().getEncodeSize();
+      }
+      long currentTime = System.currentTimeMillis();
+      long lastDeliveredTimeElapsed = consumer.getLastDeliveredTime() == 0 ? 0 
: currentTime - consumer.getLastDeliveredTime();
+      long lastAckTimeElapsed = consumer.getLastAcknowledgedTime() == 0 ? 0 : 
currentTime - consumer.getLastAcknowledgedTime();
+      JsonObjectBuilder obj = JsonLoader.createObjectBuilder()
+            .add("consumerID", consumer.getID())
+            .add("connectionID", consumer.getConnectionID().toString())
+            .add("sessionID", consumer.getSessionID())
+            .add("queueName", consumer.getQueue().getName().toString())
+            .add("browseOnly", consumer.isBrowseOnly())
+            .add("creationTime", consumer.getCreationTime())
+            .add("deliveringCount", deliveringMessages.size())
+            .add("deliveringSize", deliveringMessageSize)
+            .add("messagesAcknowledged", consumer.getMessagesAcknowledged())
+            .add("lastDeliveredTimeElapsed", lastDeliveredTimeElapsed)
+            .add("lastAcknowledgedTimeElapsed", lastAckTimeElapsed);

Review Comment:
   Screaming out for some constants.



##########
artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerView.java:
##########
@@ -111,6 +128,27 @@ public Object getField(ServerConsumer consumer, String 
fieldName) {
             return consumer.getConnectionRemoteAddress();
          case CREATION_TIME:
             return new Date(consumer.getCreationTime());
+         case DELIVERING_COUNT:
+            return consumer.getDeliveringMessages().size();
+         case DELIVERING_SIZE:
+            List<MessageReference> deliveringMessages = 
consumer.getDeliveringMessages();
+            long deliveringMessageSize = 0;
+            for (int i = 0; i < deliveringMessages.size(); i++) {
+               MessageReference messageReference =  deliveringMessages.get(i);
+               deliveringMessageSize += 
messageReference.getMessage().getEncodeSize();
+            }
+            return deliveringMessageSize;
+         case MESSAGES_ACKNOWLEDGED:
+            return consumer.getMessagesAcknowledged();
+         case LAST_DELIVERED_TIME_ELAPSED: {
+            long currentTime = System.nanoTime();
+            return consumer.getLastDeliveredTime() == 0 ? 0 : currentTime - 
consumer.getLastDeliveredTime();

Review Comment:
   Looks to be mixing nano and millis sourced values in a way thats broken.



##########
artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ConsumerInfo.java:
##########
@@ -62,4 +62,28 @@ public interface ConsumerInfo {
     */
    String getConnectionRemoteAddress();
 
+   /**
+    * Returns how many messages are out for delivery but not yet acknowledged
+    * @return delivering count
+    */
+   int getDeliveringCount();
+
+   /**
+    * Returns the time in nano seconds that the last message was delivered to 
a consumer

Review Comment:
   The impl is dealing in milliseconds in various places, but nano in 
others...some of the places are wrong and need updated. Ditto for those below.



##########
artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java:
##########
@@ -2752,7 +2753,27 @@ public String listAllConsumersAsJSON() throws Exception {
    }
 
    private JsonObject toJSONObject(ServerConsumer consumer) throws Exception {
-      JsonObjectBuilder obj = 
JsonLoader.createObjectBuilder().add("consumerID", 
consumer.getID()).add("connectionID", 
consumer.getConnectionID().toString()).add("sessionID", 
consumer.getSessionID()).add("queueName", 
consumer.getQueue().getName().toString()).add("browseOnly", 
consumer.isBrowseOnly()).add("creationTime", 
consumer.getCreationTime()).add("deliveringCount", 
consumer.getDeliveringMessages().size());
+      List<MessageReference> deliveringMessages = 
consumer.getDeliveringMessages();
+      long deliveringMessageSize = 0;
+      for (int i = 0; i < deliveringMessages.size(); i++) {
+         MessageReference messageReference =  deliveringMessages.get(i);
+         deliveringMessageSize += 
messageReference.getMessage().getEncodeSize();
+      }
+      long currentTime = System.currentTimeMillis();

Review Comment:
   This is using currentTimeMillis, which is epoch based millis....elsewhere 
consumer.getLastDeliveredTime() and consumer.getLastAcknowledgedTime() are 
documented as and sometimes being treated as nanoTime() values which thus have 
no defined starting point. Those two cant be used together in the way this 
does, one of the area seems like it has to be wrong. Elsewhere still it seems 
those values are actually using currentTimeMillis() despite the doc they are 
nanos.



##########
tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java:
##########
@@ -2713,6 +2714,10 @@ public void testListAllConsumersAsJSON() throws 
Exception {
       Assert.assertEquals(queueName.toString(), first.getString("queueName"));
       Assert.assertEquals(false, first.getBoolean("browseOnly"));
       Assert.assertEquals(0, 
first.getJsonNumber("deliveringCount").longValue());
+      Assert.assertEquals(0, 
first.getJsonNumber("deliveringSize").longValue());
+      Assert.assertEquals(0, 
first.getJsonNumber("messagesAcknowledged").longValue());
+      Assert.assertEquals(0, 
first.getJsonNumber("lastDeliveredTimeElapsed").longValue());
+      Assert.assertEquals(0, 
first.getJsonNumber("lastAcknowledgedTimeElapsed").longValue());

Review Comment:
   constants would be nice..



##########
artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/consumers.js:
##########
@@ -95,7 +95,12 @@ var Artemis;
               {name: "Address", visible: true},
               {name: "Remote Address", visible: true},
               {name: "Local Address", visible: true},
-              {name: "Creation Time", visible: true}
+              {name: "Creation Time", visible: true},
+              {name: "Delivering Count", visible: false},
+              {name: "Delivering Size", visible: false},
+              {name: "Messages Acknowledged", visible: false},
+              {name: "Last Delivered Time Elapsed", visible: false},
+              {name: "Last Acknowledged Time Elapsed", visible: false}

Review Comment:
   Seems like a lot of overhead to be added for columns that arent even visible 
normally?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to