Author: chetanm
Date: Wed Nov 25 06:59:45 2015
New Revision: 1716312

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

Exposed the MetricRegistry instance to OSGi ServiceRegistry

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/StatisticsProviderFactory.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/StatisticsProviderFactoryTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/StatisticsProviderFactory.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/StatisticsProviderFactory.java?rev=1716312&r1=1716311&r2=1716312&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/StatisticsProviderFactory.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/StatisticsProviderFactory.java
 Wed Nov 25 06:59:45 2015
@@ -21,12 +21,16 @@ package org.apache.jackrabbit.oak.plugin
 
 import java.io.Closeable;
 import java.io.IOException;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 
 import javax.management.MBeanServer;
 
+import com.google.common.collect.Lists;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -77,25 +81,28 @@ public class StatisticsProviderFactory {
     @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY)
     private MBeanServer server;
     private StatisticsProvider statisticsProvider;
-    private ServiceRegistration registration;
+    private List<ServiceRegistration> regs = Lists.newArrayList();
     private ScheduledExecutorService executor;
+    private BundleContext bundleContext;
 
     @Activate
     private void activate(BundleContext context, Map<String, Object> config) {
+        this.bundleContext = context;
         String providerType = 
PropertiesUtil.toString(config.get(PROVIDER_TYPE), TYPE_AUTO);
         statisticsProvider = createProvider(providerType);
 
         if (statisticsProvider != null) {
-            registration = 
context.registerService(StatisticsProvider.class.getName(),
-                    statisticsProvider, null);
+            
regs.add(context.registerService(StatisticsProvider.class.getName(),
+                    statisticsProvider, null));
         }
     }
 
     @Deactivate
     private void deactivate() throws IOException {
-        if (registration != null) {
-            registration.unregister();
+        for (ServiceRegistration reg : regs){
+            reg.unregister();
         }
+        regs.clear();
 
         if (statisticsProvider instanceof Closeable) {
             ((Closeable) statisticsProvider).close();
@@ -127,7 +134,13 @@ public class StatisticsProviderFactory {
     }
 
     private StatisticsProvider createMetricsProvider(ScheduledExecutorService 
executor) {
-        return new 
org.apache.jackrabbit.oak.plugins.metric.MetricStatisticsProvider(server, 
executor);
+        org.apache.jackrabbit.oak.plugins.metric.MetricStatisticsProvider 
metricProvider =
+         new 
org.apache.jackrabbit.oak.plugins.metric.MetricStatisticsProvider(server, 
executor);
+        Dictionary<Object, Object> dictionary = new Hashtable<Object, 
Object>();
+        dictionary.put("name", "oak");
+        
regs.add(bundleContext.registerService("com.codahale.metrics.MetricRegistry",
+                metricProvider.getRegistry(),  dictionary));
+        return metricProvider;
     }
 
     private boolean isMetricSupportPresent() {

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/StatisticsProviderFactoryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/StatisticsProviderFactoryTest.java?rev=1716312&r1=1716311&r2=1716312&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/StatisticsProviderFactoryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/StatisticsProviderFactoryTest.java
 Wed Nov 25 06:59:45 2015
@@ -24,6 +24,7 @@ import java.util.Collections;
 
 import javax.management.MBeanServer;
 
+import com.codahale.metrics.MetricRegistry;
 import com.google.common.collect.ImmutableMap;
 import org.apache.jackrabbit.oak.stats.DefaultStatisticsProvider;
 import org.apache.jackrabbit.oak.stats.StatisticsProvider;
@@ -33,6 +34,7 @@ import org.junit.After;
 import org.junit.Rule;
 import org.junit.Test;
 
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
@@ -51,6 +53,7 @@ public class StatisticsProviderFactoryTe
     public void autoMode() throws Exception {
         MockOsgi.activate(service, context.bundleContext(), 
Collections.<String, Object>emptyMap());
         assertTrue(context.getService(StatisticsProvider.class) instanceof 
MetricStatisticsProvider);
+        assertNotNull(context.getService(MetricRegistry.class));
 
         MockOsgi.deactivate(service);
         assertNull(context.getService(StatisticsProvider.class));


Reply via email to