This is an automated email from the ASF dual-hosted git repository.

jbertram pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/main by this push:
     new d0574b39af ARTEMIS-3765 Display validated user in Hawtio
     new 6135d6bbe9 This closes #4019
d0574b39af is described below

commit d0574b39afa4295b814a9f52865f08be456f0717
Author: aaron.hoffer <[email protected]>
AuthorDate: Mon Apr 4 13:34:46 2022 -0700

    ARTEMIS-3765 Display validated user in Hawtio
    
    This PR adds a "Validated User" column to the Hawtio plugin. The column is
    not visible by default. The "Validated User" column is available in the
    Session, Consumer, and Producer tabs of the artemis-navigation notebook.
    "Validated User" is also available for sort and filtering in those view.
    The "Validated Consumer" in the Producer view is always blank. I debugged
    as far as I could, but did not find the cause of the issue.
---
 .../src/main/webapp/plugin/js/components/browse.js   |  4 ++--
 .../main/webapp/plugin/js/components/consumers.js    |  3 +++
 .../main/webapp/plugin/js/components/producers.js    |  3 +++
 .../src/main/webapp/plugin/js/components/sessions.js |  3 +++
 .../management/impl/ActiveMQServerControlImpl.java   |  2 +-
 .../core/management/impl/view/ConsumerField.java     |  1 +
 .../core/management/impl/view/ConsumerView.java      |  3 +++
 .../core/management/impl/view/ProducerField.java     |  1 +
 .../core/management/impl/view/ProducerView.java      |  3 +++
 .../core/management/impl/view/SessionField.java      |  1 +
 .../core/management/impl/view/SessionView.java       |  3 +++
 .../view/predicate/ConnectionFilterPredicate.java    | 20 +++++++++++++-------
 .../impl/view/predicate/ConsumerFilterPredicate.java |  2 ++
 .../impl/view/predicate/ProducerFilterPredicate.java |  2 ++
 14 files changed, 41 insertions(+), 10 deletions(-)

diff --git 
a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/browse.js 
b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/browse.js
index 11310087ee..f32b2f66a3 100644
--- 
a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/browse.js
+++ 
b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/browse.js
@@ -244,7 +244,7 @@ var Artemis;
                 {name: "Large", visible: true},
                 {name: "Persistent Size", visible: true},
                 {name: "User ID", visible: true},
-                {name: "Validated User", visible: true},
+                {name: "Validated User", visible: false},
                 {name: "Original Queue (Expiry/DLQ's only)", visible: true}
            ]
         };
@@ -326,7 +326,7 @@ var Artemis;
                 header: 'User ID'
             },
             {
-                itemField: 'StringProperties',
+                itemField: 'validatedUser',
                 header: 'Validated User',
                 templateFn: function(value) {
                     return value._AMQ_VALIDATED_USER;
diff --git 
a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/consumers.js
 
b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/consumers.js
index 82ed5a2f8b..055e3e978a 100644
--- 
a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/consumers.js
+++ 
b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/consumers.js
@@ -87,6 +87,7 @@ var Artemis;
               {name: "ID", visible: true},
               {name: "Session", visible: true},
               {name: "Client ID", visible: true},
+              {name: "Validated User", visible: false},
               {name: "Protocol", visible: true},
               {name: "Queue", visible: true},
               {name: "Queue Type", visible: true},
@@ -121,6 +122,7 @@ var Artemis;
                 {id: 'session', name: 'Session'},
                 {id: 'clientID', name: 'Client ID'},
                 {id: 'user', name: 'User'},
+                {id: 'validatedUser', name: 'Validated User'},
                 {id: 'address', name: 'Address'},
                 {id: 'queue', name: 'Queue'},
                 {id: 'protocol', name: 'Protocol'},
@@ -168,6 +170,7 @@ var Artemis;
             { header: 'ID', itemField: 'id' },
             { header: 'Session', itemField: 'session' , templateFn: 
function(value, item) { return '<a href="#" onclick="selectSession(' + item.idx 
+ ')">' + $sanitize(value) + '</a>' }},
             { header: 'Client ID', itemField: 'clientID' },
+            { header: 'Validated User', itemField: 'validatedUser' },
             { header: 'Protocol', itemField: 'protocol' },
             { header: 'Queue', itemField: 'queue', templateFn: function(value, 
item) { return '<a href="#" onclick="selectQueue(' + item.idx + ')">' + 
$sanitize(value) + '</a>' }},
             { header: 'Queue Type', itemField: 'queueType' },
diff --git 
a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/producers.js
 
b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/producers.js
index b7a098c0f2..aebfa6d66d 100644
--- 
a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/producers.js
+++ 
b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/producers.js
@@ -73,6 +73,7 @@ var Artemis;
                 {name: "Client ID", visible: true},
                 {name: "Protocol", visible: true},
                 {name: "User", visible: true},
+                {name: "Validated User", visible: false},
                 {name: "Address", visible: true},
                 {name: "Remote Address", visible: true},
                 {name: "Local Address", visible: true}
@@ -102,6 +103,7 @@ var Artemis;
                 {id: 'session', name: 'Session'},
                 {id: 'clientID', name: 'Client ID'},
                 {id: 'user', name: 'User'},
+                {id: 'validatedUser', name: 'Validated User'},
                 {id: 'address', name: 'Address'},
                 {id: 'protocol', name: 'Protocol'},
                 {id: 'localAddress', name: 'Local Address'},
@@ -139,6 +141,7 @@ var Artemis;
             { header: 'Client ID', itemField: 'clientID' },
             { header: 'Protocol', itemField: 'protocol' },
             { header: 'User', itemField: 'user' },
+            { header: 'Validated User', name: 'validatedUser'},
             { header: 'Address', itemField: 'address', templateFn: 
function(value, item) { return '<a href="#" onclick="selectAddress(' + item.idx 
+ ')">' + $sanitize(value) + '</a>' }},
             { header: 'Remote Address', itemField: 'remoteAddress' },
             { header: 'Local Address', itemField: 'localAddress' }
diff --git 
a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/sessions.js
 
b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/sessions.js
index f69354c6fc..776866c16b 100644
--- 
a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/sessions.js
+++ 
b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/sessions.js
@@ -88,6 +88,7 @@ var Artemis;
                 {name: "ID", visible: true},
                 {name: "Connection", visible: true},
                 {name: "User", visible: true},
+                {name: "Validated User", visible: false},
                 {name: "Consumer Count", visible: true},
                 {name: "Producer Count", visible: true},
                 {name: "Creation Time", visible: true}
@@ -117,6 +118,7 @@ var Artemis;
                 {id: 'connectionID', name: 'Connection ID'},
                 {id: 'consumerCount', name: 'Consumer Count'},
                 {id: 'user', name: 'User'},
+                {id: 'validatedUser', name: 'Validated User'},
                 {id: 'protocol', name: 'Protocol'},
                 {id: 'clientID', name: 'Client ID'},
                 {id: 'localAddress', name: 'Local Address'},
@@ -162,6 +164,7 @@ var Artemis;
             { header: 'ID', itemField: 'id' },
             { header: 'Connection', itemField: 'connectionID', templateFn: 
function(value, item) { return '<a href="#" onclick="selectConnection(' + 
item.idx + ')">' + $sanitize(value) + '</a>' }},
             { header: 'User', itemField: 'user' },
+            { header: 'Validated User', itemField: 'validatedUser' },
             { header: 'Consumer Count', itemField: 'consumerCount', 
templateFn: function(value, item) { return '<a href="#" 
onclick="selectConsumers(' + item.idx + ')">' + $sanitize(value) + '</a>' }},
             { header: 'Producer Count', itemField: 'producerCount', 
templateFn: function(value, item) { return '<a href="#" 
onclick="selectProducers(' + item.idx + ')">' + $sanitize(value) + '</a>' }},
             { header: 'Creation Time', itemField: 'creationTime' }
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 841eac91e8..0d0fd06883 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
@@ -2651,7 +2651,7 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
       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());
+         obj.add("validatedUser", sess.getValidatedUser());
       }
 
       if (sess.getMetaData() != null) {
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerField.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerField.java
index 6269288d73..c0d2cf38f4 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerField.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerField.java
@@ -26,6 +26,7 @@ public enum ConsumerField {
    FILTER("filter"),
    ADDRESS("address"),
    USER("user"),
+   VALIDATED_USER("validatedUser"),
    PROTOCOL("protocol"),
    CLIENT_ID("clientID"),
    LOCAL_ADDRESS("localAddress"),
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerView.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerView.java
index 0c8c50c06f..77ffb304ae 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerView.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerView.java
@@ -63,6 +63,7 @@ public class ConsumerView extends 
ActiveMQAbstractView<ServerConsumer> {
          .add(ConsumerField.SESSION.getName(), 
toString(consumer.getSessionName()))
          .add(ConsumerField.CLIENT_ID.getName(), toString(consumerClientID))
          .add(ConsumerField.USER.getName(), toString(session.getUsername()))
+         .add(ConsumerField.VALIDATED_USER.getName(), 
toString(session.getValidatedUser()))
          .add(ConsumerField.PROTOCOL.getName(), 
toString(consumer.getConnectionProtocolName()))
          .add(ConsumerField.QUEUE.getName(), toString(consumer.getQueueName()))
          .add(ConsumerField.QUEUE_TYPE.getName(), 
toString(consumer.getQueueType()).toLowerCase())
@@ -92,6 +93,8 @@ public class ConsumerView extends 
ActiveMQAbstractView<ServerConsumer> {
             return consumer.getSessionName();
          case USER:
             return session.getUsername();
+         case VALIDATED_USER:
+            return session.getValidatedUser();
          case CLIENT_ID:
             return consumer.getConnectionClientID();
          case PROTOCOL:
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ProducerField.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ProducerField.java
index 3352dea8d3..87f9cb2ecc 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ProducerField.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ProducerField.java
@@ -24,6 +24,7 @@ public enum ProducerField {
    SESSION("session"),
    CONNECTION_ID("connectionID"),
    ADDRESS("address"), USER("user"),
+   VALIDATED_USER("validatedUser"),
    PROTOCOL("protocol"),
    CLIENT_ID("clientID"),
    LOCAL_ADDRESS("localAddress"),
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ProducerView.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ProducerView.java
index 30f2b680a7..cfddf7c65d 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ProducerView.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ProducerView.java
@@ -62,6 +62,7 @@ public class ProducerView extends 
ActiveMQAbstractView<ServerProducer> {
          .add(ProducerField.SESSION.getName(), toString(session.getName()))
          .add(ProducerField.CLIENT_ID.getName(), toString(sessionClientID))
          .add(ProducerField.USER.getName(), toString(session.getUsername()))
+         .add(ProducerField.VALIDATED_USER.getName(), 
toString(session.getValidatedUser()))
          .add(ProducerField.PROTOCOL.getName(), 
toString(session.getRemotingConnection().getProtocolName()))
          .add(ProducerField.ADDRESS.getName(), toString(producer.getAddress() 
!= null ? producer.getAddress() : session.getDefaultAddress()))
          .add(ProducerField.LOCAL_ADDRESS.getName(), 
toString(session.getRemotingConnection().getTransportConnection().getLocalAddress()))
@@ -88,6 +89,8 @@ public class ProducerView extends 
ActiveMQAbstractView<ServerProducer> {
             return session.getName();
          case USER:
             return session.getUsername();
+         case VALIDATED_USER:
+            return session.getValidatedUser();
          case CLIENT_ID:
             return session.getRemotingConnection().getClientID();
          case PROTOCOL:
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/SessionField.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/SessionField.java
index e4c8871c9a..f01c08393b 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/SessionField.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/SessionField.java
@@ -25,6 +25,7 @@ public enum SessionField {
    CONSUMER_COUNT("consumerCount"),
    PRODUCER_COUNT("producerCount"),
    USER("user"),
+   VALIDATED_USER("validatedUser"),
    PROTOCOL("protocol"),
    CLIENT_ID("clientID"),
    LOCAL_ADDRESS("localAddress"),
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/SessionView.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/SessionView.java
index 279e24f13f..fedc96f44b 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/SessionView.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/SessionView.java
@@ -42,6 +42,7 @@ public class SessionView extends 
ActiveMQAbstractView<ServerSession> {
       JsonObjectBuilder obj = JsonLoader.createObjectBuilder()
          .add(SessionField.ID.getName(), toString(session.getName()))
          .add(SessionField.USER.getName(), toString(session.getUsername()))
+         .add(SessionField.VALIDATED_USER.getName(), 
toString(session.getValidatedUser()))
          .add(SessionField.CREATION_TIME.getName(), new 
Date(session.getCreationTime()).toString())
          .add(SessionField.CONSUMER_COUNT.getName(), 
session.getConsumerCount())
          .add(SessionField.PRODUCER_COUNT.getName(), 
session.getProducerCount())
@@ -58,6 +59,8 @@ public class SessionView extends 
ActiveMQAbstractView<ServerSession> {
             return session.getName();
          case USER:
             return session.getUsername();
+         case VALIDATED_USER:
+            return session.getValidatedUser();
          case CREATION_TIME:
             return new Date(session.getCreationTime());
          case CONSUMER_COUNT:
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConnectionFilterPredicate.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConnectionFilterPredicate.java
index 6b4d214f92..63201dcd69 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConnectionFilterPredicate.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConnectionFilterPredicate.java
@@ -19,6 +19,7 @@ package 
org.apache.activemq.artemis.core.management.impl.view.predicate;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.function.Function;
 
 import org.apache.activemq.artemis.core.management.impl.view.ConnectionField;
 import org.apache.activemq.artemis.core.server.ActiveMQServer;
@@ -46,13 +47,7 @@ public class ConnectionFilterPredicate extends 
ActiveMQFilterPredicate<RemotingC
          case CLIENT_ID:
             return matches(connection.getClientID());
          case USERS:
-            List<ServerSession> sessions = 
server.getSessions(connection.getID().toString());
-            Set<String> users = new HashSet<>();
-            for (ServerSession session : sessions) {
-               String username = session.getUsername() == null ? "" : 
session.getUsername();
-               users.add(username);
-            }
-            return matchAny(users);
+            return matchAny(collectFromSessions(connection.getID().toString(), 
s-> s.getUsername()));
          case PROTOCOL:
             return matches(connection.getProtocolName());
          case SESSION_COUNT:
@@ -71,6 +66,17 @@ public class ConnectionFilterPredicate extends 
ActiveMQFilterPredicate<RemotingC
       return true;
    }
 
+   Set<String> collectFromSessions(String connectionId, 
Function<ServerSession, String> getter) {
+      List<ServerSession> sessions = server.getSessions(connectionId);
+      Set<String> sessionAttributes = new HashSet<>();
+      for (ServerSession session : sessions) {
+         String value = getter.apply(session);
+         String string = value == null ? "" : value;
+         sessionAttributes.add(string);
+      }
+      return sessionAttributes;
+   }
+
    @Override
    public void setField(String field) {
       if (field != null && !field.equals("")) {
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConsumerFilterPredicate.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConsumerFilterPredicate.java
index 2f3296b1fe..b42e5a473a 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConsumerFilterPredicate.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConsumerFilterPredicate.java
@@ -43,6 +43,8 @@ public class ConsumerFilterPredicate extends 
ActiveMQFilterPredicate<ServerConsu
             return matches(consumer.getSessionID());
          case USER:
             return 
matches(server.getSessionByID(consumer.getSessionID()).getUsername());
+         case VALIDATED_USER:
+            return 
matches(server.getSessionByID(consumer.getSessionID()).getValidatedUser());
          case ADDRESS:
             return matches(consumer.getQueue().getAddress());
          case QUEUE:
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ProducerFilterPredicate.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ProducerFilterPredicate.java
index ea5ab17bf9..45a2d6cc6f 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ProducerFilterPredicate.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ProducerFilterPredicate.java
@@ -45,6 +45,8 @@ public class ProducerFilterPredicate extends 
ActiveMQFilterPredicate<ServerProdu
             return matches(producer.getSessionID());
          case USER:
             return 
matches(server.getSessionByID(producer.getSessionID()).getUsername());
+         case VALIDATED_USER:
+            return 
matches(server.getSessionByID(producer.getSessionID()).getValidatedUser());
          case ADDRESS:
             return matches(producer.getAddress() != null ? 
producer.getAddress() : 
server.getSessionByID(producer.getSessionID()).getDefaultAddress());
          case PROTOCOL:

Reply via email to