You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2016/07/28 08:52:18 UTC
svn commit: r1754365 - in /jackrabbit/trunk:
jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jmx/
jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/observation/
Author: mreutegg
Date: Thu Jul 28 08:52:18 2016
New Revision: 1754365
URL: http://svn.apache.org/viewvc?rev=1754365&view=rev
Log:
JCR-4000: More event stats in EventListenerMBean
Modified:
jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jmx/EventListenerMBean.java
jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jmx/package-info.java
jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/observation/ListenerTracker.java
Modified: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jmx/EventListenerMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jmx/EventListenerMBean.java?rev=1754365&r1=1754364&r2=1754365&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jmx/EventListenerMBean.java (original)
+++ jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jmx/EventListenerMBean.java Thu Jul 28 08:52:18 2016
@@ -71,6 +71,9 @@ public interface EventListenerMBean {
/** Ratio of time spent in event processing */
double getRatioOfTimeSpentProcessingEvents();
+ /** Ratio of time spent in event listener vs. the overall event processing */
+ double getEventConsumerTimeRatio();
+
/** Is user information accessed without checking if an event is external? */
boolean isUserInfoAccessedWithoutExternalsCheck();
@@ -84,6 +87,13 @@ public interface EventListenerMBean {
boolean isDateAccessedFromExternalEvent();
/**
+ * The time difference between the current system time and the head (oldest)
+ * element in the queue in milliseconds. This method returns zero if the
+ * queue is empty.
+ */
+ long getQueueBacklogMillis();
+
+ /**
* {@link org.apache.jackrabbit.api.stats.TimeSeries time series} of the number of
* items related to generating observation events that are currently queued by the
* system. The exact nature of these items is implementation specific and might not
Modified: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jmx/package-info.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jmx/package-info.java?rev=1754365&r1=1754364&r2=1754365&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jmx/package-info.java (original)
+++ jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jmx/package-info.java Thu Jul 28 08:52:18 2016
@@ -18,5 +18,5 @@
/**
* JMX management interfaces for JCR.
*/
-@aQute.bnd.annotation.Version("2.1.0")
+@aQute.bnd.annotation.Version("2.2.0")
package org.apache.jackrabbit.api.jmx;
Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/observation/ListenerTracker.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/observation/ListenerTracker.java?rev=1754365&r1=1754364&r2=1754365&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/observation/ListenerTracker.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/observation/ListenerTracker.java Thu Jul 28 08:52:18 2016
@@ -71,6 +71,8 @@ public class ListenerTracker {
private final AtomicLong eventDeliveryTime = new AtomicLong();
+ private final AtomicLong headTimestamp = new AtomicLong();
+
private final TimeSeriesMax queueLength = new TimeSeriesMax();
private final TimeSeriesRecorder eventCount = new TimeSeriesRecorder(true);
@@ -142,6 +144,19 @@ public class ListenerTracker {
}
/**
+ * Applications should call this to report the current queue length when an
+ * item is removed from the queue.
+ *
+ * @param length the length of the queue after the item was removed.
+ * @param headTimestamp the time in milliseconds when the head item was
+ * created and put into the queue.
+ */
+ public void recordQueueLength(long length, long headTimestamp) {
+ queueLength.recordValue(length);
+ this.headTimestamp.set(length == 0 ? 0 : headTimestamp);
+ }
+
+ /**
* Records the number of measured values over the past second and resets
* the counter. This method should be scheduled to be called once per
* second.
@@ -279,6 +294,12 @@ public class ListenerTracker {
/ Math.max(currentTimeMillis() - startTime, 1);
}
@Override
+ public double getEventConsumerTimeRatio() {
+ double consumerTime = sum(eventConsumerTime.getValuePerSecond());
+ double producerTime = sum(eventProducerTime.getValuePerSecond());
+ return consumerTime / Math.max(consumerTime + producerTime, 1);
+ }
+ @Override
public boolean isUserInfoAccessedWithoutExternalsCheck() {
return userInfoAccessedWithoutExternalsCheck.get();
}
@@ -295,6 +316,14 @@ public class ListenerTracker {
return dateAccessedFromExternalEvent.get();
}
@Override
+ public long getQueueBacklogMillis() {
+ long t = headTimestamp.get();
+ if (t > 0) {
+ t = currentTimeMillis() - t;
+ }
+ return t;
+ }
+ @Override
public CompositeData getQueueLength() {
return asCompositeData(queueLength, "queueLength");
}
@@ -361,4 +390,12 @@ public class ListenerTracker {
}
}
+ private static long sum(long[] values) {
+ long sum = 0;
+ for (long v : values) {
+ sum += v;
+ }
+ return sum;
+ }
+
}