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

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


The following commit(s) were added to refs/heads/main by this push:
     new 578d86d72 [AMQ-9315] Add connectedTimestamp to Connection and JMX view
578d86d72 is described below

commit 578d86d726d80715825e5f927ef8af50e181d754
Author: Matt Pavlovich <[email protected]>
AuthorDate: Mon Oct 2 10:18:26 2023 -0500

    [AMQ-9315] Add connectedTimestamp to Connection and JMX view
---
 .../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 545cda1c7..8b0e76751 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
@@ -161,6 +161,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
@@ -218,6 +219,7 @@ public class TransportConnection implements Connection, 
Task, CommandVisitor {
             }
         });
         connected = true;
+        connectedTimestamp = System.currentTimeMillis();
     }
 
     /**
@@ -1724,4 +1726,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 1ab1113b8..3a778c5ad 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();

Reply via email to