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: