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 2012/03/12 13:54:59 UTC
svn commit: r1299655 - in /jackrabbit/trunk:
jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/
jackrabbit-core/src/test/java/org/apache/jackrabbit/core/stats/
Author: mreutegg
Date: Mon Mar 12 12:54:59 2012
New Revision: 1299655
URL: http://svn.apache.org/viewvc?rev=1299655&view=rev
Log:
JCR-3243: RepositoryStatistics should be more flexible
Added:
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/stats/RepositoryStatisticsImplTest.java (with props)
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/stats/TestAll.java (with props)
Modified:
jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/RepositoryStatistics.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/RepositoryStatisticsImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/TimeSeriesRecorder.java
Modified: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/RepositoryStatistics.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/RepositoryStatistics.java?rev=1299655&r1=1299654&r2=1299655&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/RepositoryStatistics.java (original)
+++ jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/RepositoryStatistics.java Mon Mar 12 12:54:59 2012
@@ -53,10 +53,20 @@ public interface RepositoryStatistics {
this.resetValueEachSecond = resetValueEachSecond;
}
+ public static Type getType(String type) {
+ Type realType = null;
+ try {
+ realType = Type.valueOf(type);
+ } catch (IllegalArgumentException ignore) {};
+ return realType;
+ }
+
public boolean isResetValueEachSecond() {
return resetValueEachSecond;
}
}
TimeSeries getTimeSeries(Type type);
+
+ TimeSeries getTimeSeries(String type, boolean resetValueEachSecond);
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/RepositoryStatisticsImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/RepositoryStatisticsImpl.java?rev=1299655&r1=1299654&r2=1299655&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/RepositoryStatisticsImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/RepositoryStatisticsImpl.java Mon Mar 12 12:54:59 2012
@@ -26,17 +26,16 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.jackrabbit.api.stats.RepositoryStatistics;
-import org.apache.jackrabbit.api.stats.RepositoryStatistics.Type;
import org.apache.jackrabbit.api.stats.TimeSeries;
public class RepositoryStatisticsImpl implements
- Iterable<Map.Entry<Type, TimeSeries>>, RepositoryStatistics {
+ Iterable<Map.Entry<String, TimeSeries>>, RepositoryStatistics {
- private final Map<Type, TimeSeriesRecorder> recorders =
- new HashMap<Type, TimeSeriesRecorder>();
+ private final Map<String, TimeSeriesRecorder> recorders =
+ new HashMap<String, TimeSeriesRecorder>();
- private final Map<Type, TimeSeriesAverage> avg =
- new HashMap<Type, TimeSeriesAverage>();
+ private final Map<String, TimeSeriesAverage> avg =
+ new HashMap<String, TimeSeriesAverage>();
public RepositoryStatisticsImpl() {
getOrCreateRecorder(Type.SESSION_COUNT);
@@ -55,7 +54,7 @@ public class RepositoryStatisticsImpl im
}
private void createAvg(Type count, Type duration, Type avgTs) {
- avg.put(avgTs, new TimeSeriesAverage(getOrCreateRecorder(duration),
+ avg.put(avgTs.name(), new TimeSeriesAverage(getOrCreateRecorder(duration),
getOrCreateRecorder(count)));
}
@@ -68,8 +67,8 @@ public class RepositoryStatisticsImpl im
}, 1, 1, TimeUnit.SECONDS);
}
- public synchronized Iterator<Entry<Type, TimeSeries>> iterator() {
- Map<Type, TimeSeries> map = new TreeMap<Type, TimeSeries>();
+ public synchronized Iterator<Entry<String, TimeSeries>> iterator() {
+ Map<String, TimeSeries> map = new TreeMap<String, TimeSeries>();
map.putAll(recorders);
map.putAll(avg);
return map.entrySet().iterator();
@@ -79,18 +78,29 @@ public class RepositoryStatisticsImpl im
return getOrCreateRecorder(type).getCounter();
}
+ public AtomicLong getCounter(String type, boolean resetValueEachSecond) {
+ return getOrCreateRecorder(type, resetValueEachSecond).getCounter();
+ }
+
public TimeSeries getTimeSeries(Type type) {
+ return getTimeSeries(type.name(), type.isResetValueEachSecond());
+ }
+
+ public TimeSeries getTimeSeries(String type, boolean resetValueEachSecond) {
if (avg.containsKey(type)) {
return avg.get(type);
- } else {
- return getOrCreateRecorder(type);
}
+ return getOrCreateRecorder(type, resetValueEachSecond);
}
private synchronized TimeSeriesRecorder getOrCreateRecorder(Type type) {
+ return getOrCreateRecorder(type.name(), type.isResetValueEachSecond());
+ }
+
+ private synchronized TimeSeriesRecorder getOrCreateRecorder(String type, boolean resetValueEachSecond) {
TimeSeriesRecorder recorder = recorders.get(type);
if (recorder == null) {
- recorder = new TimeSeriesRecorder(type);
+ recorder = new TimeSeriesRecorder(resetValueEachSecond);
recorders.put(type, recorder);
}
return recorder;
@@ -101,5 +111,4 @@ public class RepositoryStatisticsImpl im
recorder.recordOneSecond();
}
}
-
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/TimeSeriesRecorder.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/TimeSeriesRecorder.java?rev=1299655&r1=1299654&r2=1299655&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/TimeSeriesRecorder.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/TimeSeriesRecorder.java Mon Mar 12 12:54:59 2012
@@ -29,12 +29,12 @@ import org.apache.jackrabbit.api.stats.R
*/
class TimeSeriesRecorder implements TimeSeries {
- /** Type */
- private final Type type;
-
/** Value */
private final AtomicLong counter = new AtomicLong();
+ /** Whether to reset value each second */
+ private final boolean resetValueEachSecond;
+
/** Measured value per second over the last minute. */
private final long[] valuePerSecond = new long[60];
@@ -60,7 +60,11 @@ class TimeSeriesRecorder implements Time
private int weeks = 0;
public TimeSeriesRecorder(Type type) {
- this.type = type;
+ this(type.isResetValueEachSecond());
+ }
+
+ public TimeSeriesRecorder(boolean resetValueEachSecond) {
+ this.resetValueEachSecond = resetValueEachSecond;
}
/**
@@ -79,7 +83,7 @@ class TimeSeriesRecorder implements Time
* second.
*/
public synchronized void recordOneSecond() {
- if (type.isResetValueEachSecond()) {
+ if (resetValueEachSecond) {
valuePerSecond[seconds++] = counter.getAndSet(0);
} else {
valuePerSecond[seconds++] = counter.get();
@@ -133,7 +137,7 @@ class TimeSeriesRecorder implements Time
sum += array[i];
}
- if (type.isResetValueEachSecond()) {
+ if (resetValueEachSecond) {
return sum;
}
return sum / array.length;
@@ -154,5 +158,4 @@ class TimeSeriesRecorder implements Time
}
return reverse;
}
-
}
Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/stats/RepositoryStatisticsImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/stats/RepositoryStatisticsImplTest.java?rev=1299655&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/stats/RepositoryStatisticsImplTest.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/stats/RepositoryStatisticsImplTest.java Mon Mar 12 12:54:59 2012
@@ -0,0 +1,60 @@
+/*
+ * 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.Iterator;
+import java.util.Map.Entry;
+
+import junit.framework.TestCase;
+
+import org.apache.jackrabbit.api.stats.TimeSeries;
+
+public class RepositoryStatisticsImplTest extends TestCase {
+
+ private static final int DEFAULT_NUMBER_OF_ELEMENTS = 17;
+
+ public void testDefaultIterator() {
+ RepositoryStatisticsImpl repositoryStatistics = new RepositoryStatisticsImpl();
+
+ Iterator<Entry<String, TimeSeries>> iterator = repositoryStatistics.iterator();
+ int count = 0;
+ while (iterator.hasNext()) {
+ count++;
+ iterator.next();
+ }
+ assertEquals(DEFAULT_NUMBER_OF_ELEMENTS, count);
+ }
+
+ public void testIteratorWithSingleCustomType() {
+ RepositoryStatisticsImpl repositoryStatistics = new RepositoryStatisticsImpl();
+ String type = "customType";
+ repositoryStatistics.getCounter(type, false);
+
+ Iterator<Entry<String, TimeSeries>> iterator = repositoryStatistics.iterator();
+ int count = 0;
+ boolean customTypeExists = false;
+ while (iterator.hasNext()) {
+ count++;
+ Entry<String, TimeSeries> entry = iterator.next();
+ if (type.equals(entry.getKey())) {
+ customTypeExists = true;
+ }
+ }
+ assertEquals(DEFAULT_NUMBER_OF_ELEMENTS + 1, count);
+ assertTrue(customTypeExists);
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/stats/RepositoryStatisticsImplTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/stats/RepositoryStatisticsImplTest.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL
Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/stats/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/stats/TestAll.java?rev=1299655&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/stats/TestAll.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/stats/TestAll.java Mon Mar 12 12:54:59 2012
@@ -0,0 +1,43 @@
+/*
+ * 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 junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Test suite that includes all test cases for the stats module.
+ */
+public class TestAll extends TestCase {
+
+ /**
+ * Returns a <code>Test</code> suite that executes all tests inside this
+ * package.
+ *
+ * @return a <code>Test</code> suite that executes all tests inside this
+ * package.
+ */
+ public static Test suite() {
+ TestSuite suite = new TestSuite("Stats tests");
+
+ suite.addTestSuite(RepositoryStatisticsImplTest.class);
+ suite.addTestSuite(TimeSeriesRecorderTest.class);
+
+ return suite;
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/stats/TestAll.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/stats/TestAll.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL