You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2011/10/10 13:49:34 UTC
svn commit: r1180887 - in
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core:
jmx/TimeSeriesMBean.java jmx/TimeSeriesRecorder.java stats/
stats/RepositoryStatistics.java stats/TimeSeries.java
stats/TimeSeriesRecorder.java
Author: jukka
Date: Mon Oct 10 11:49:33 2011
New Revision: 1180887
URL: http://svn.apache.org/viewvc?rev=1180887&view=rev
Log:
JCR-3040: JMX Stats for the Session
Separate the time series collection from JMX support
Added:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/RepositoryStatistics.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/TimeSeries.java
- copied, changed from r1180845, jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jmx/TimeSeriesMBean.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/TimeSeriesRecorder.java
- copied, changed from r1180845, jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jmx/TimeSeriesRecorder.java
Removed:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jmx/TimeSeriesMBean.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jmx/TimeSeriesRecorder.java
Added: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/RepositoryStatistics.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/RepositoryStatistics.java?rev=1180887&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/RepositoryStatistics.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/RepositoryStatistics.java Mon Oct 10 11:49:33 2011
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.core.stats;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
+
+public class RepositoryStatistics {
+
+ private final Map<String, TimeSeriesRecorder> recorders =
+ new HashMap<String, TimeSeriesRecorder>();
+
+ public RepositoryStatistics(ScheduledExecutorService executor) {
+ executor.scheduleAtFixedRate(new Runnable() {
+ public void run() {
+ recordOneSecond();
+ }
+ }, 1, 1, TimeUnit.SECONDS);
+ }
+
+ public AtomicLong getCounter(String name) {
+ return getOrCreateRecorder(name).getCounter();
+ }
+
+ public TimeSeries getTimeSeries(String name) {
+ return getOrCreateRecorder(name);
+ }
+
+ private synchronized TimeSeriesRecorder getOrCreateRecorder(String name) {
+ TimeSeriesRecorder recorder = recorders.get(name);
+ if (recorder == null) {
+ recorder = new TimeSeriesRecorder();
+ recorders.put(name, recorder);
+ }
+ return recorder;
+ }
+
+ private synchronized void recordOneSecond() {
+ for (TimeSeriesRecorder recorder : recorders.values()) {
+ recorder.recordOneSecond();
+ }
+ }
+
+}
Copied: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/TimeSeries.java (from r1180845, jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jmx/TimeSeriesMBean.java)
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/TimeSeries.java?p2=jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/TimeSeries.java&p1=jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jmx/TimeSeriesMBean.java&r1=1180845&r2=1180887&rev=1180887&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jmx/TimeSeriesMBean.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/TimeSeries.java Mon Oct 10 11:49:33 2011
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.jackrabbit.core.jmx;
+package org.apache.jackrabbit.core.stats;
/**
* Interface for a time series of the number of events per
@@ -24,7 +24,7 @@ package org.apache.jackrabbit.core.jmx;
*
* @since Apache Jackrabbit 2.3.1
*/
-public interface TimeSeriesMBean {
+public interface TimeSeries {
/**
* Returns the number of events per second over the last minute.
Copied: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/TimeSeriesRecorder.java (from r1180845, jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jmx/TimeSeriesRecorder.java)
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/TimeSeriesRecorder.java?p2=jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/TimeSeriesRecorder.java&p1=jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jmx/TimeSeriesRecorder.java&r1=1180845&r2=1180887&rev=1180887&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jmx/TimeSeriesRecorder.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/TimeSeriesRecorder.java Mon Oct 10 11:49:33 2011
@@ -14,19 +14,20 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.jackrabbit.core.jmx;
+package org.apache.jackrabbit.core.stats;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
/**
* Recorder of a time series. An instance of this class records (and clears)
* the state of a given {@link AtomicLong} counter once every second and
- * exposes the collected time series through the {@link TimeSeriesMBean}
+ * exposes the collected time series through the {@link TimeSeries}
* interface.
*/
-public class TimeSeriesRecorder implements TimeSeriesMBean {
+class TimeSeriesRecorder implements TimeSeries {
+
+ /** Event counter */
+ private final AtomicLong counter = new AtomicLong();
/** Number of events per second over the last minute. */
private final long[] eventsPerSecond = new long[60];
@@ -52,28 +53,38 @@ public class TimeSeriesRecorder implemen
/** Current week (index in {@link #eventsPerWeek}) */
private int weeks = 0;
- public TimeSeriesRecorder(
- final AtomicLong counter, ScheduledExecutorService executor) {
- executor.scheduleAtFixedRate(new Runnable() {
- public void run() {
- eventsPerSecond[seconds++] = counter.getAndSet(0);
- if (seconds == eventsPerSecond.length) {
- seconds = 0;
- eventsPerMinute[minutes++] = sum(eventsPerSecond);
- }
- if (minutes == eventsPerMinute.length) {
- minutes = 0;
- eventsPerHour[hours++] = sum(eventsPerMinute);
- }
- if (hours == eventsPerHour.length) {
- hours = 0;
- eventsPerWeek[weeks++] = sum(eventsPerHour);
- }
- if (weeks == eventsPerWeek.length) {
- weeks = 0;
- }
- }
- }, 1, 1, TimeUnit.SECONDS);
+ /**
+ * Returns the {@link AtomicLong} instance used to count events for
+ * the time series.
+ *
+ * @return event counter
+ */
+ public AtomicLong getCounter() {
+ return counter;
+ }
+
+ /**
+ * Records the number of counted events over the past second and resets
+ * the counter. This method should be scheduled to be called once per
+ * second.
+ */
+ public synchronized void recordOneSecond() {
+ eventsPerSecond[seconds++] = counter.getAndSet(0);
+ if (seconds == eventsPerSecond.length) {
+ seconds = 0;
+ eventsPerMinute[minutes++] = sum(eventsPerSecond);
+ }
+ if (minutes == eventsPerMinute.length) {
+ minutes = 0;
+ eventsPerHour[hours++] = sum(eventsPerMinute);
+ }
+ if (hours == eventsPerHour.length) {
+ hours = 0;
+ eventsPerWeek[weeks++] = sum(eventsPerHour);
+ }
+ if (weeks == eventsPerWeek.length) {
+ weeks = 0;
+ }
}
//----------------------------------------------------------< TimeSeries >