This is an automated email from the ASF dual-hosted git repository. mattrpav pushed a commit to branch activemq-5.17.x in repository https://gitbox.apache.org/repos/asf/activemq.git
commit 048d9809233cc74ba4e6c80a683dafb8ec4b9cf4 Author: Matt Pavlovich <[email protected]> AuthorDate: Mon Oct 2 10:18:26 2023 -0500 [AMQ-9315] Add connectedTimestamp to Connection and JMX view (cherry picked from commit 578d86d726d80715825e5f927ef8af50e181d754) --- .../src/main/java/org/apache/activemq/broker/Connection.java | 7 ++++++- .../java/org/apache/activemq/broker/TransportConnection.java | 7 +++++++ .../main/java/org/apache/activemq/broker/jmx/ConnectionView.java | 5 +++++ .../java/org/apache/activemq/broker/jmx/ConnectionViewMBean.java | 6 ++++++ .../org/apache/activemq/broker/scheduler/SchedulerBroker.java | 9 +++++++++ .../activemq/shiro/authc/DefaultAuthenticationPolicyTest.java | 9 +++++++++ .../broker/region/QueueOptimizedDispatchExceptionTest.java | 7 +++++++ 7 files changed, 49 insertions(+), 1 deletion(-) diff --git a/activemq-broker/src/main/java/org/apache/activemq/broker/Connection.java b/activemq-broker/src/main/java/org/apache/activemq/broker/Connection.java index 8548a95a4..26b1a5b18 100644 --- a/activemq-broker/src/main/java/org/apache/activemq/broker/Connection.java +++ b/activemq-broker/src/main/java/org/apache/activemq/broker/Connection.java @@ -121,7 +121,6 @@ public interface Connection extends Service { void updateClient(ConnectionControl control); - /** * Returns the number of active transactions established on this Connection. * @@ -136,4 +135,10 @@ public interface Connection extends Service { */ public Long getOldestActiveTransactionDuration(); + /** + * Returns the time in ms since epoch when connection was established. + * + * @return time in ms since epoch when connection was established. + */ + public Long getConnectedTimestamp(); } diff --git a/activemq-broker/src/main/java/org/apache/activemq/broker/TransportConnection.java b/activemq-broker/src/main/java/org/apache/activemq/broker/TransportConnection.java index 7533a714e..443e36817 100644 --- a/activemq-broker/src/main/java/org/apache/activemq/broker/TransportConnection.java +++ b/activemq-broker/src/main/java/org/apache/activemq/broker/TransportConnection.java @@ -163,6 +163,7 @@ public class TransportConnection implements Connection, Task, CommandVisitor { private TransportConnectionStateRegister connectionStateRegister = new SingleTransportConnectionStateRegister(); private final ReentrantReadWriteLock serviceLock = new ReentrantReadWriteLock(); private String duplexNetworkConnectorId; + private final long connectedTimestamp; /** * @param taskRunnerFactory - can be null if you want direct dispatch to the transport @@ -220,6 +221,7 @@ public class TransportConnection implements Connection, Task, CommandVisitor { } }); connected = true; + connectedTimestamp = System.currentTimeMillis(); } /** @@ -1726,4 +1728,9 @@ public class TransportConnection implements Connection, Task, CommandVisitor { public Response processBrokerSubscriptionInfo(BrokerSubscriptionInfo info) throws Exception { return null; } + + @Override + public Long getConnectedTimestamp() { + return this.connectedTimestamp; + } } diff --git a/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/ConnectionView.java b/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/ConnectionView.java index 937b4c079..48beb6ce5 100644 --- a/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/ConnectionView.java +++ b/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/ConnectionView.java @@ -191,4 +191,9 @@ public class ConnectionView implements ConnectionViewMBean { public boolean isNetworkConnection() { return connection.isNetworkConnection(); } + + @Override + public long getConnectedTimestamp() { + return connection.getConnectedTimestamp(); + } } diff --git a/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/ConnectionViewMBean.java b/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/ConnectionViewMBean.java index a0e399a13..1013a8e8b 100644 --- a/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/ConnectionViewMBean.java +++ b/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/ConnectionViewMBean.java @@ -133,4 +133,10 @@ public interface ConnectionViewMBean extends Service { */ @MBeanInfo("Connection is a network connection.") boolean isNetworkConnection(); + + /** + * @return the time in ms since epoch when connection was established + */ + @MBeanInfo("Time in ms since epoch when connection was established.") + long getConnectedTimestamp(); } diff --git a/activemq-broker/src/main/java/org/apache/activemq/broker/scheduler/SchedulerBroker.java b/activemq-broker/src/main/java/org/apache/activemq/broker/scheduler/SchedulerBroker.java index 1355a8823..c86a3a104 100644 --- a/activemq-broker/src/main/java/org/apache/activemq/broker/scheduler/SchedulerBroker.java +++ b/activemq-broker/src/main/java/org/apache/activemq/broker/scheduler/SchedulerBroker.java @@ -81,6 +81,9 @@ public class SchedulerBroker extends BrokerFilter implements JobListener { this.context.setSecurityContext(SecurityContext.BROKER_SECURITY_CONTEXT); // we only get response on unexpected error this.context.setConnection(new Connection() { + + private final long connectedTimestamp = System.currentTimeMillis(); + @Override public Connector getConnector() { return null; @@ -183,6 +186,12 @@ public class SchedulerBroker extends BrokerFilter implements JobListener { return null; } + + @Override + public Long getConnectedTimestamp() { + return connectedTimestamp; + } + @Override public void start() throws Exception {} diff --git a/activemq-shiro/src/test/java/org/apache/activemq/shiro/authc/DefaultAuthenticationPolicyTest.java b/activemq-shiro/src/test/java/org/apache/activemq/shiro/authc/DefaultAuthenticationPolicyTest.java index 0d390619d..a3060a935 100644 --- a/activemq-shiro/src/test/java/org/apache/activemq/shiro/authc/DefaultAuthenticationPolicyTest.java +++ b/activemq-shiro/src/test/java/org/apache/activemq/shiro/authc/DefaultAuthenticationPolicyTest.java @@ -218,6 +218,9 @@ public class DefaultAuthenticationPolicyTest { ConnectionContext ctx = new ConnectionContext(); Connection connection = new Connection() { + + private final long connectedTimestamp = System.currentTimeMillis(); + @Override public Connector getConnector() { return null; //To change body of implemented methods use File | Settings | File Templates. @@ -327,6 +330,12 @@ public class DefaultAuthenticationPolicyTest { public Long getOldestActiveTransactionDuration() { return null; //To change body of implemented methods use File | Settings | File Templates. } + + @Override + public Long getConnectedTimestamp() { + return connectedTimestamp; + } + }; ctx.setConnection(connection); diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/region/QueueOptimizedDispatchExceptionTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/region/QueueOptimizedDispatchExceptionTest.java index b46169e19..1e86ca629 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/region/QueueOptimizedDispatchExceptionTest.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/region/QueueOptimizedDispatchExceptionTest.java @@ -104,6 +104,8 @@ public class QueueOptimizedDispatchExceptionTest { final ConnectionContext contextNotInTx = new ConnectionContext(); contextNotInTx.setConnection(new Connection() { + private final long connectedTimestamp = System.currentTimeMillis(); + @Override public void stop() throws Exception { } @@ -207,6 +209,11 @@ public class QueueOptimizedDispatchExceptionTest { public Long getOldestActiveTransactionDuration() { return null; } + + @Override + public Long getConnectedTimestamp() { + return connectedTimestamp; + } }); final DestinationStatistics destinationStatistics = new DestinationStatistics();
