diff --git a/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/NetworkDestinationView.java b/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/NetworkDestinationView.java index 5cdf02413c..970ca3390e 100644 --- a/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/NetworkDestinationView.java +++ b/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/NetworkDestinationView.java @@ -74,7 +74,7 @@ public void messageSent(){ } public long getLastAccessTime(){ - return timeStatistic.getLastSampleTime(); + return timeStatistic.getLastSampleTimeOrStartTime(); } public void close(){ diff --git a/activemq-broker/src/main/java/org/apache/activemq/plugin/StatisticsBroker.java b/activemq-broker/src/main/java/org/apache/activemq/plugin/StatisticsBroker.java index 1d9af16f65..2c785278f2 100644 --- a/activemq-broker/src/main/java/org/apache/activemq/plugin/StatisticsBroker.java +++ b/activemq-broker/src/main/java/org/apache/activemq/plugin/StatisticsBroker.java @@ -160,6 +160,10 @@ else if (dest instanceof Topic) { tempFirstMessage.clear(); } } + // NOTICE: Client-side, you may get the broker "now" Timestamp by msg.getJMSTimestamp() + // This allows for calculating inactivity. + // When no message is enqueued since broker start (or statistics reset) it returns 0 + statsMessage.setLong("lastMessageTimestamp", stats.getEnqueues().getLastSampleTime()); statsMessage.setJMSCorrelationID(messageSend.getCorrelationId()); sendStats(producerExchange.getConnectionContext(), statsMessage, replyTo); } diff --git a/activemq-client/src/main/java/org/apache/activemq/management/JMSEndpointStatsImpl.java b/activemq-client/src/main/java/org/apache/activemq/management/JMSEndpointStatsImpl.java index 4c54f0839d..db3a2bbc7f 100644 --- a/activemq-client/src/main/java/org/apache/activemq/management/JMSEndpointStatsImpl.java +++ b/activemq-client/src/main/java/org/apache/activemq/management/JMSEndpointStatsImpl.java @@ -129,7 +129,7 @@ public String toString() { public void onMessage() { if (enabled) { - long start = messageCount.getLastSampleTime(); + long start = messageCount.getLastSampleTimeOrStartTime(); messageCount.increment(); long end = messageCount.getLastSampleTime(); messageRateTime.addTime(end - start); diff --git a/activemq-client/src/main/java/org/apache/activemq/management/StatisticImpl.java b/activemq-client/src/main/java/org/apache/activemq/management/StatisticImpl.java index 1dbcc80c69..54121338b1 100644 --- a/activemq-client/src/main/java/org/apache/activemq/management/StatisticImpl.java +++ b/activemq-client/src/main/java/org/apache/activemq/management/StatisticImpl.java @@ -37,13 +37,13 @@ public StatisticImpl(String name, String unit, String description) { this.unit = unit; this.description = description; this.startTime = System.currentTimeMillis(); - this.lastSampleTime = this.startTime; + this.lastSampleTime = 0; } public synchronized void reset() { if(isDoReset()) { this.startTime = System.currentTimeMillis(); - this.lastSampleTime = this.startTime; + this.lastSampleTime = 0; } } @@ -80,6 +80,9 @@ public synchronized long getLastSampleTime() { return this.lastSampleTime; } + public synchronized long getLastSampleTimeOrStartTime(){ + return lastSampleTime == 0 ? startTime : lastSampleTime; + } /** * @return the enabled */ diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/management/TimeStatisticTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/management/TimeStatisticTest.java index 88ec2eac1c..cfced2990f 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/management/TimeStatisticTest.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/management/TimeStatisticTest.java @@ -30,6 +30,8 @@ public void testStatistic() throws Exception { TimeStatisticImpl stat = new TimeStatisticImpl("myTimer", "millis", "myDescription"); assertStatistic(stat, "myTimer", "millis", "myDescription"); + assertEquals("Check if lastSimpleTime is 0 for new statistic", 0, stat.getLastSampleTime()); + assertEquals(0, stat.getCount()); stat.addTime(100); @@ -59,6 +61,7 @@ public void testStatistic() throws Exception { LOG.info("Stat is: " + stat); stat.reset(); + assertEquals("Check if lastSimpleTime is 0 on statistic reset", 0, stat.getLastSampleTime()); assertEquals(0, stat.getCount()); assertEquals(0, stat.getMinTime()); diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/plugin/BrokerStatisticsPluginTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/plugin/BrokerStatisticsPluginTest.java index c20d6b8fd7..988af7e34c 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/plugin/BrokerStatisticsPluginTest.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/plugin/BrokerStatisticsPluginTest.java @@ -218,6 +218,7 @@ public void testDestinationStatsWithFirstMessageTimestamp() throws Exception { assertEquals(1, reply.getLong("size")); assertTrue(reply.getJMSTimestamp() > 0); assertTrue(reply.getLong("firstMessageTimestamp") > 0); + assertTrue(reply.getLong("lastMessageTimestamp") >= msg.getJMSTimestamp()); // Assert that we got the brokerInTime for the first message in queue as value of key "firstMessageTimestamp" assertTrue(System.currentTimeMillis() >= reply.getLong("firstMessageTimestamp")); assertEquals(Message.DEFAULT_PRIORITY, reply.getJMSPriority());