Author: chetanm
Date: Tue Nov 24 05:26:39 2015
New Revision: 1716032

URL: http://svn.apache.org/viewvc?rev=1716032&view=rev
Log:
OAK-3654 - Integrate with Metrics for various stats collection

Use NoopMeter for counters like Session Read, Write etc as they are managed 
within timers also

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProvider.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/NoopStats.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProviderTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProvider.java?rev=1716032&r1=1716031&r2=1716032&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProvider.java
 Tue Nov 24 05:26:39 2015
@@ -22,6 +22,7 @@ package org.apache.jackrabbit.oak.plugin
 import java.io.Closeable;
 import java.util.Hashtable;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ScheduledExecutorService;
 
 import javax.management.MBeanServer;
@@ -34,6 +35,7 @@ import com.codahale.metrics.MetricRegist
 import com.codahale.metrics.ObjectNameFactory;
 import com.codahale.metrics.RatioGauge;
 import com.codahale.metrics.Timer;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Maps;
 import org.apache.jackrabbit.api.stats.RepositoryStatistics;
 import org.apache.jackrabbit.api.stats.RepositoryStatistics.Type;
@@ -52,6 +54,16 @@ public class MetricStatisticsProvider im
 
     private static final String JMX_TYPE_METRICS = "Metrics";
 
+    /**
+     * Name of Meters for which NoopMeter is to be returned as there are 
corresponding
+     * Timer instances which internally manage the Meter
+     */
+    private static final Set<String> NOOP_METERS = ImmutableSet.of(
+            Type.SESSION_READ_COUNTER.name(), //Meter managed in 
SESSION_READ_DURATION
+            Type.SESSION_WRITE_COUNTER.name(), //Meter managed in 
SESSION_WRITE_DURATION
+            Type.QUERY_COUNT.name() //Meter managed in QUERY_DURATION
+    );
+
     private final Map<String, CompositeStats> statsRegistry = 
Maps.newHashMap();
     private final MetricRegistry registry;
     private final JmxReporter reporter;
@@ -87,6 +99,9 @@ public class MetricStatisticsProvider im
 
     @Override
     public MeterStats getMeter(String name) {
+        if (noopMeter(name)){
+            return NOOP.getMeter(name);
+        }
         return getStats(name, StatsType.METER);
     }
 
@@ -160,6 +175,10 @@ public class MetricStatisticsProvider im
                         
registry.timer(typeToName(Type.OBSERVATION_EVENT_DURATION))));
     }
 
+    private boolean noopMeter(String name) {
+        return NOOP_METERS.contains(name);
+    }
+
     private enum StatsType {METER, COUNTER, TIMER}
 
     private static class AvgGauge extends RatioGauge {

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/NoopStats.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/NoopStats.java?rev=1716032&r1=1716031&r2=1716032&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/NoopStats.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/NoopStats.java
 Tue Nov 24 05:26:39 2015
@@ -21,7 +21,7 @@ package org.apache.jackrabbit.oak.stats;
 
 import java.util.concurrent.TimeUnit;
 
-final class NoopStats implements TimerStats, MeterStats, CounterStats {
+public final class NoopStats implements TimerStats, MeterStats, CounterStats {
 
     public static final NoopStats INSTANCE = new NoopStats();
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProviderTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProviderTest.java?rev=1716032&r1=1716031&r2=1716032&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProviderTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProviderTest.java
 Tue Nov 24 05:26:39 2015
@@ -32,14 +32,16 @@ import javax.management.Query;
 import javax.management.QueryExp;
 
 import com.codahale.metrics.JmxReporter;
-import org.apache.jackrabbit.api.stats.RepositoryStatistics;
+import org.apache.jackrabbit.api.stats.RepositoryStatistics.Type;
 import org.apache.jackrabbit.oak.stats.CounterStats;
 import org.apache.jackrabbit.oak.stats.MeterStats;
+import org.apache.jackrabbit.oak.stats.NoopStats;
 import org.apache.jackrabbit.oak.stats.TimerStats;
 import org.junit.After;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
@@ -94,10 +96,10 @@ public class MetricStatisticsProviderTes
     @Test
     public void timeSeriesIntegration() throws Exception {
         statsProvider = new MetricStatisticsProvider(server, executorService);
-        MeterStats meterStats = 
statsProvider.getMeter(RepositoryStatistics.Type.QUERY_COUNT.name());
+        MeterStats meterStats = 
statsProvider.getMeter(Type.QUERY_COUNT.name());
 
         meterStats.mark(5);
-        assertEquals(5, 
statsProvider.getRepoStats().getCounter(RepositoryStatistics.Type.QUERY_COUNT).get());
+        assertEquals(5, 
statsProvider.getRepoStats().getCounter(Type.QUERY_COUNT).get());
     }
 
     @Test
@@ -107,6 +109,15 @@ public class MetricStatisticsProviderTes
         assertNotNull(server.getObjectInstance(new 
ObjectName("org.apache.jackrabbit.oak:type=Metrics,name=hello")));
     }
 
+    @Test
+    public void noopMeter() throws Exception{
+        statsProvider = new MetricStatisticsProvider(server, executorService);
+        assertEquals(statsProvider.getMeter(Type.SESSION_READ_COUNTER.name()), 
NoopStats.INSTANCE);
+        
assertEquals(statsProvider.getMeter(Type.SESSION_WRITE_COUNTER.name()), 
NoopStats.INSTANCE);
+        assertEquals(statsProvider.getMeter(Type.QUERY_COUNT.name()), 
NoopStats.INSTANCE);
+        
assertNotEquals(statsProvider.getMeter(Type.OBSERVATION_EVENT_COUNTER.name()), 
NoopStats.INSTANCE);
+    }
+
     @After
     public void cleanup() {
         statsProvider.close();


Reply via email to