You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sirona.apache.org by rm...@apache.org on 2013/11/04 15:04:02 UTC

svn commit: r1538609 - in /incubator/sirona/trunk: ./ collector/src/main/java/org/apache/sirona/collector/server/ collector/src/main/java/org/apache/sirona/collector/server/store/gauge/ collector/src/main/resources/ collector/src/test/java/org/apache/s...

Author: rmannibucau
Date: Mon Nov  4 14:04:01 2013
New Revision: 1538609

URL: http://svn.apache.org/r1538609
Log:
cleaning up GaugeDataStore to split it up in local and remote API + adding @Local on plugins working only when colocalized with collectors + clean up of Unit

Added:
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CommonGaugeDataStore.java
      - copied, changed from r1538552, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeDataStore.java
    incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/Local.java
Modified:
    incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/Collector.java
    incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/gauge/DelegatedCollectorGaugeDataStore.java
    incubator/sirona/trunk/collector/src/main/resources/collector-sirona.properties
    incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/CubeDataStoreCompatibilityTest.java
    incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/HttpCollectorTest.java
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/counters/Unit.java
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/DefaultRepository.java
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CollectorGaugeDataStore.java
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DataStoreFactory.java
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DelegateDataStoreFactory.java
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeDataStore.java
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/InMemoryGaugeDataStore.java
    incubator/sirona/trunk/core/src/test/java/org/apache/sirona/counters/UnitTest.java
    incubator/sirona/trunk/jdbc/src/test/java/org/apache/sirona/jdbc/HsqlDBTest.java
    incubator/sirona/trunk/pom.xml
    incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/PluginRepository.java
    incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/jmx/JMXPlugin.java
    incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/thread/ThreadPlugin.java
    incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/web/WebPlugin.java
    incubator/sirona/trunk/src/site/markdown/configuration.md
    incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/registration/WebMonitoringInitializer.java
    incubator/sirona/trunk/web/src/test/java/org/apache/sirona/test/web/RequestPerformanceTest.java
    incubator/sirona/trunk/web/src/test/resources/sirona.properties

Modified: incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/Collector.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/Collector.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/Collector.java (original)
+++ incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/Collector.java Mon Nov  4 14:04:01 2013
@@ -21,14 +21,12 @@ import com.fasterxml.jackson.databind.De
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.sirona.Role;
 import org.apache.sirona.configuration.Configuration;
-import org.apache.sirona.store.CollectorCounterStore;
 import org.apache.sirona.counters.Counter;
 import org.apache.sirona.counters.Unit;
-import org.apache.sirona.store.CollectorGaugeDataStore;
 import org.apache.sirona.math.M2AwareStatisticalSummary;
 import org.apache.sirona.repositories.Repository;
-import org.apache.sirona.store.CounterDataStore;
-import org.apache.sirona.store.GaugeDataStore;
+import org.apache.sirona.store.CollectorCounterStore;
+import org.apache.sirona.store.CollectorGaugeDataStore;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
@@ -60,14 +58,14 @@ public class Collector extends HttpServl
         // force init to ensure we have stores
         Configuration.findOrCreateInstance(Repository.class);
 
-        final GaugeDataStore gds = Configuration.findOrCreateInstance(GaugeDataStore.class);
-        if (!CollectorGaugeDataStore.class.isInstance(gds)) {
+        final CollectorGaugeDataStore gds = Configuration.findOrCreateInstance(CollectorGaugeDataStore.class);
+        if (gds == null) {
             throw new IllegalStateException("Collector only works with " + CollectorGaugeDataStore.class.getName());
         }
         this.gaugeDataStore = CollectorGaugeDataStore.class.cast(gds);
 
-        final CounterDataStore cds = Configuration.findOrCreateInstance(CounterDataStore.class);
-        if (!CollectorCounterStore.class.isInstance(cds)) {
+        final CollectorCounterStore cds = Configuration.findOrCreateInstance(CollectorCounterStore.class);
+        if (cds == null) {
             throw new IllegalStateException("Collector only works with " + CollectorCounterStore.class.getName());
         }
         this.counterDataStore = CollectorCounterStore.class.cast(cds);

Modified: incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/gauge/DelegatedCollectorGaugeDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/gauge/DelegatedCollectorGaugeDataStore.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/gauge/DelegatedCollectorGaugeDataStore.java (original)
+++ incubator/sirona/trunk/collector/src/main/java/org/apache/sirona/collector/server/store/gauge/DelegatedCollectorGaugeDataStore.java Mon Nov  4 14:04:01 2013
@@ -96,7 +96,7 @@ public class DelegatedCollectorGaugeData
         return dataStores.keySet();
     }
 
-    @Override
+    @Override // TODO: see if using a period to aggregate data wouldn't make more sense
     public Map<Long, Double> getGaugeValues(final GaugeValuesRequest gaugeValuesRequest) {
         final Map<Long, Double> values = new TreeMap<Long, Double>();
         for (final Map.Entry<String, GaugeDataStore> marker : dataStores.entrySet()) {
@@ -142,14 +142,4 @@ public class DelegatedCollectorGaugeData
             store.gaugeStopped(gauge);
         }
     }
-
-    @Override
-    public void createOrNoopGauge(final Role role) {
-        throw new UnsupportedOperationException("Need a marker");
-    }
-
-    @Override
-    public void addToGauge(final Role role, final long time, final double value) {
-        throw new UnsupportedOperationException("Need a marker");
-    }
 }

Modified: incubator/sirona/trunk/collector/src/main/resources/collector-sirona.properties
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/collector/src/main/resources/collector-sirona.properties?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/collector/src/main/resources/collector-sirona.properties (original)
+++ incubator/sirona/trunk/collector/src/main/resources/collector-sirona.properties Mon Nov  4 14:04:01 2013
@@ -17,12 +17,3 @@
 
 # collector data store to aggregate data
 org.apache.sirona.store.DataStoreFactory = org.apache.sirona.collector.server.store.CollectorDataStoreFactory
-
-# web module doesn't need to register locally otherwise locally it will not set a marker and all will fail
-org.apache.sirona.web.activated = false
-org.apache.sirona.core.gauge.activated = false
-
-# deactivate plugins which are local since we can only rely on gauges and counters here
-JMX.activated = false
-Threads.activated = false
-Web.activated = false

Modified: incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/CubeDataStoreCompatibilityTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/CubeDataStoreCompatibilityTest.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/CubeDataStoreCompatibilityTest.java (original)
+++ incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/CubeDataStoreCompatibilityTest.java Mon Nov  4 14:04:01 2013
@@ -18,13 +18,12 @@ package org.apache.sirona.collector.serv
 
 import org.apache.sirona.Role;
 import org.apache.sirona.configuration.Configuration;
-import org.apache.sirona.store.CollectorCounterStore;
 import org.apache.sirona.counters.Counter;
 import org.apache.sirona.counters.DefaultCounter;
 import org.apache.sirona.counters.Unit;
 import org.apache.sirona.cube.CubeCounterDataStore;
 import org.apache.sirona.repositories.Repository;
-import org.apache.sirona.store.CounterDataStore;
+import org.apache.sirona.store.CollectorCounterStore;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -52,7 +51,7 @@ public class CubeDataStoreCompatibilityT
     public void cubeMe() {
         new SeeMyProtectedStuffStore().doPush();
 
-        final CollectorCounterStore store = CollectorCounterStore.class.cast(Configuration.getInstance(CounterDataStore.class));
+        final CollectorCounterStore store = Configuration.getInstance(CollectorCounterStore.class);
         final Counter counter1 = store.getOrCreateCounter(new Counter.Key(new Role("cube", Unit.UNARY), "client"));
         final Counter counter1Client1 = store.getOrCreateCounter(new Counter.Key(new Role("cube", Unit.UNARY), "client"), "local");
 

Modified: incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/HttpCollectorTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/HttpCollectorTest.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/HttpCollectorTest.java (original)
+++ incubator/sirona/trunk/collector/src/test/java/org/apache/sirona/collector/server/HttpCollectorTest.java Mon Nov  4 14:04:01 2013
@@ -18,12 +18,14 @@ package org.apache.sirona.collector.serv
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.sirona.Role;
-import org.apache.sirona.store.CollectorCounterStore;
 import org.apache.sirona.configuration.Configuration;
 import org.apache.sirona.counters.Counter;
 import org.apache.sirona.counters.Unit;
+import org.apache.sirona.reporting.web.template.MapBuilder;
 import org.apache.sirona.repositories.Repository;
-import org.apache.sirona.store.CounterDataStore;
+import org.apache.sirona.store.CollectorCounterStore;
+import org.apache.sirona.store.CollectorGaugeDataStore;
+import org.apache.sirona.store.GaugeValuesRequest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -33,10 +35,12 @@ import java.io.OutputStream;
 import java.io.StringWriter;
 import java.net.HttpURLConnection;
 import java.net.URL;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 public class HttpCollectorTest {
     private CollectorServer server;
@@ -56,7 +60,7 @@ public class HttpCollectorTest {
     }
 
     @Test
-    public void collect() throws Exception {
+    public void collectCounter() throws Exception {
         {
             final Event[] events1 = new Event[2];
             {
@@ -87,7 +91,7 @@ public class HttpCollectorTest {
             doPost(events2);
         }
 
-        final CollectorCounterStore store = CollectorCounterStore.class.cast(Configuration.getInstance(CounterDataStore.class));
+        final CollectorCounterStore store = Configuration.getInstance(CollectorCounterStore.class);
         final Counter counter1 = store.getOrCreateCounter(new Counter.Key(new Role("role1", Unit.UNARY), "counter1"));
         final Counter counter1Client1 = store.getOrCreateCounter(new Counter.Key(new Role("role1", Unit.UNARY), "counter1"), "client1");
         final Counter counter1Client2 = store.getOrCreateCounter(new Counter.Key(new Role("role1", Unit.UNARY), "counter1"), "client2");
@@ -96,6 +100,63 @@ public class HttpCollectorTest {
         assertCounter(counter1Client2, 190, 46, 612, 64, 8.83176, 78, 654);
     }
 
+    @Test
+    public void collectGauges() throws Exception {
+        final Date pushDate = new Date(); // we aggregated only if push was done on the exactly same date so ensuring it
+        {
+            final Event[] events1 = new Event[1];
+            {
+                events1[0] = new Event();
+                events1[0].setTime(pushDate);
+                events1[0].setType("gauge");
+                events1[0].setData(new MapBuilder<String, Object>()
+                    .set("role", "event-role")
+                    .set("unit", Unit.UNARY.getName())
+                    .set("value", 5)
+                    .set("marker", "node1")
+                    .build());
+            }
+            doPost(events1);
+        }
+
+        {
+            final Event[] events2 = new Event[2];
+            {
+                events2[0] = new Event();
+                events2[0].setTime(pushDate);
+                events2[0].setType("gauge");
+                events2[0].setData(new MapBuilder<String, Object>()
+                    .set("role", "event-role")
+                    .set("unit", Unit.UNARY.getName())
+                    .set("value", 15)
+                    .set("marker", "node2")
+                    .build());
+            }
+            {
+                events2[1] = new Event();
+                events2[1].setTime(pushDate);
+                events2[1].setType("gauge");
+                events2[1].setData(new MapBuilder<String, Object>()
+                    .set("role", "event2-role")
+                    .set("unit", Unit.UNARY.getName())
+                    .set("value", 25)
+                    .set("marker", "node2")
+                    .build());
+            }
+            doPost(events2);
+        }
+
+        final CollectorGaugeDataStore store = Configuration.getInstance(CollectorGaugeDataStore.class);
+        final GaugeValuesRequest gaugeValuesRequest = new GaugeValuesRequest(0, System.currentTimeMillis() + 1000, new Role("event-role", Unit.UNARY));
+        final Map<Long, Double> aggregated = store.getGaugeValues(gaugeValuesRequest);
+        final Map<Long, Double> node1 = store.getGaugeValues(gaugeValuesRequest, "node1");
+        final Map<Long, Double> node2 = store.getGaugeValues(gaugeValuesRequest, "node2");
+        assertEquals(1, aggregated.size());
+        assertTrue(aggregated.containsValue(20.));
+        assertTrue(node1.containsValue(5.));
+        assertTrue(node2.containsValue(15.));
+    }
+
     private void doPost(final Event[] events) throws Exception {
         final URL url = new URL("http://localhost:" + server.getPort());
 

Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/counters/Unit.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/counters/Unit.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/counters/Unit.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/counters/Unit.java Mon Nov  4 14:04:01 2013
@@ -18,13 +18,8 @@
 package org.apache.sirona.counters;
 
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArraySet;
 
 /**
  * Units allow monitored data to have get typed. A primary unit is the
@@ -109,10 +104,6 @@ public class Unit implements Comparable<
 
     private Unit primary;
 
-    private List<Unit> derived;
-
-    public Set<Unit> primaryUnits = new CopyOnWriteArraySet<Unit>();
-
 
     public static Unit get(String name) {
         return UNITS.get(name);
@@ -127,9 +118,6 @@ public class Unit implements Comparable<
         this.name = name;
         this.primary = this;
         this.scale = 1;
-        this.derived = new ArrayList<Unit>();
-        this.derived.add(this);
-        primaryUnits.add(this);
         UNITS.put(name, this);
     }
 
@@ -144,25 +132,9 @@ public class Unit implements Comparable<
         this.name = name;
         this.primary = derived.isPrimary() ? derived : derived.getPrimary();
         this.scale = scale * derived.getScale();
-        primary.derived.add(this);
-        Collections.sort(primary.derived);
         UNITS.put(name, this);
     }
 
-    public Unit getDerived(String name) {
-        for (Unit unit : derived) {
-            if (unit.name.equals(name)) {
-                return unit;
-            }
-        }
-        return null;
-    }
-
-    public List<Unit> getDerived() {
-        return Collections.unmodifiableList(derived);
-    }
-
-
     public String getName() {
         return name;
     }

Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/DefaultRepository.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/DefaultRepository.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/DefaultRepository.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/repositories/DefaultRepository.java Mon Nov  4 14:04:01 2013
@@ -26,6 +26,7 @@ import org.apache.sirona.gauges.DefaultG
 import org.apache.sirona.gauges.Gauge;
 import org.apache.sirona.stopwatches.CounterStopWatch;
 import org.apache.sirona.stopwatches.StopWatch;
+import org.apache.sirona.store.CommonGaugeDataStore;
 import org.apache.sirona.store.CounterDataStore;
 import org.apache.sirona.store.DataStoreFactory;
 import org.apache.sirona.store.GaugeDataStore;
@@ -36,7 +37,7 @@ import java.util.Map;
 
 public class DefaultRepository implements Repository {
     private final CounterDataStore counterDataStore;
-    private final GaugeDataStore gaugeDataStore;
+    private final CommonGaugeDataStore gaugeDataStore;
     private final DefaultGaugeManager gaugeManager;
 
     public DefaultRepository() {
@@ -46,37 +47,61 @@ public class DefaultRepository implement
         } catch (final MonitoringException e) {
             // no-op
         }
+        if (counter == null) {
+            try {
+                counter = Configuration.findOrCreateInstance(CollectorCounterStore.class);
+            } catch (final MonitoringException e) {
+                // no-op
+            }
+        }
 
-        GaugeDataStore gauge = null;
+        CommonGaugeDataStore gauge = null;
         try {
             gauge = Configuration.findOrCreateInstance(GaugeDataStore.class);
         } catch (final MonitoringException e) {
             // no-op
         }
+        if (gauge == null) {
+            try {
+                gauge = Configuration.findOrCreateInstance(CollectorGaugeDataStore.class);
+            } catch (final MonitoringException e) {
+                // no-op
+            }
+        }
 
         if (counter == null) {
             counter = Configuration.findOrCreateInstance(DataStoreFactory.class).getCounterDataStore();
-            Configuration.setSingletonInstance(CounterDataStore.class, counter);
             if (CollectorCounterStore.class.isInstance(counter)) {
                 Configuration.setSingletonInstance(CollectorCounterStore.class, counter);
+            } else {
+                Configuration.setSingletonInstance(CounterDataStore.class, counter);
             }
         }
 
         if (gauge == null) {
             gauge = Configuration.findOrCreateInstance(DataStoreFactory.class).getGaugeDataStore();
-            Configuration.setSingletonInstance(GaugeDataStore.class, gauge);
             if (CollectorGaugeDataStore.class.isInstance(gauge)) {
                 Configuration.setSingletonInstance(CollectorGaugeDataStore.class, gauge);
+            } else {
+                Configuration.setSingletonInstance(GaugeDataStore.class, gauge);
             }
         }
+
         this.counterDataStore = counter;
         this.gaugeDataStore = gauge;
-        this.gaugeManager = new DefaultGaugeManager(this.gaugeDataStore);
+
+        if (GaugeDataStore.class.isInstance(this.gaugeDataStore)) {
+            this.gaugeManager = new DefaultGaugeManager(GaugeDataStore.class.cast(this.gaugeDataStore));
+        } else {
+            this.gaugeManager = null;
+        }
     }
 
     @Configuration.Destroying
     public void stopGaugeTimers() {
-        gaugeManager.stop();
+        if (gaugeManager != null) {
+            gaugeManager.stop();
+        }
     }
 
     @Override
@@ -116,11 +141,15 @@ public class DefaultRepository implement
 
     @Override
     public void addGauge(final Gauge gauge) {
-        gaugeManager.addGauge(gauge);
+        if (gaugeManager != null) {
+            gaugeManager.addGauge(gauge);
+        }
     }
 
     @Override
     public void stopGauge(final Gauge role) {
-        gaugeManager.stopGauge(role);
+        if (gaugeManager != null) {
+            gaugeManager.stopGauge(role);
+        }
     }
 }

Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CollectorGaugeDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CollectorGaugeDataStore.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CollectorGaugeDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CollectorGaugeDataStore.java Mon Nov  4 14:04:01 2013
@@ -17,13 +17,11 @@
 package org.apache.sirona.store;
 
 import org.apache.sirona.Role;
-import org.apache.sirona.store.GaugeDataStore;
-import org.apache.sirona.store.GaugeValuesRequest;
 
 import java.util.Collection;
 import java.util.Map;
 
-public interface CollectorGaugeDataStore extends GaugeDataStore {
+public interface CollectorGaugeDataStore extends CommonGaugeDataStore {
     Map<Long, Double> getGaugeValues(GaugeValuesRequest gaugeValuesRequest, String marker);
     void createOrNoopGauge(Role role, String marker);
     void addToGauge(Role role, long time, double value, String marker);

Copied: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CommonGaugeDataStore.java (from r1538552, incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeDataStore.java)
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CommonGaugeDataStore.java?p2=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CommonGaugeDataStore.java&p1=incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeDataStore.java&r1=1538552&r2=1538609&rev=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/CommonGaugeDataStore.java Mon Nov  4 14:04:01 2013
@@ -21,13 +21,9 @@ import org.apache.sirona.Role;
 import java.util.Collection;
 import java.util.Map;
 
-public interface GaugeDataStore {
+public interface CommonGaugeDataStore {
     Map<Long, Double> getGaugeValues(GaugeValuesRequest gaugeValuesRequest);
 
-    void createOrNoopGauge(Role role);
-
-    void addToGauge(Role role, long time, double value);
-
     Collection<Role> gauges();
 
     Role findGaugeRole(String name);

Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DataStoreFactory.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DataStoreFactory.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DataStoreFactory.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DataStoreFactory.java Mon Nov  4 14:04:01 2013
@@ -17,9 +17,7 @@
 package org.apache.sirona.store;
 
 public interface DataStoreFactory {
-
     CounterDataStore getCounterDataStore();
 
-    GaugeDataStore getGaugeDataStore();
-
+    CommonGaugeDataStore getGaugeDataStore();
 }

Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DelegateDataStoreFactory.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DelegateDataStoreFactory.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DelegateDataStoreFactory.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/DelegateDataStoreFactory.java Mon Nov  4 14:04:01 2013
@@ -19,9 +19,9 @@ package org.apache.sirona.store;
 public class DelegateDataStoreFactory implements DataStoreFactory {
 
     private final CounterDataStore counterDataStore;
-    private final GaugeDataStore gaugeDataStore;
+    private final CommonGaugeDataStore gaugeDataStore;
 
-    public DelegateDataStoreFactory(CounterDataStore counterDataStore, GaugeDataStore gaugeDataStore) {
+    public DelegateDataStoreFactory(CounterDataStore counterDataStore, CommonGaugeDataStore gaugeDataStore) {
         this.counterDataStore = counterDataStore;
         this.gaugeDataStore = gaugeDataStore;
     }
@@ -32,9 +32,7 @@ public class DelegateDataStoreFactory im
     }
 
     @Override
-    public GaugeDataStore getGaugeDataStore() {
+    public CommonGaugeDataStore getGaugeDataStore() {
         return gaugeDataStore;
     }
-
-
 }

Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeDataStore.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/GaugeDataStore.java Mon Nov  4 14:04:01 2013
@@ -18,19 +18,8 @@ package org.apache.sirona.store;
 
 import org.apache.sirona.Role;
 
-import java.util.Collection;
-import java.util.Map;
-
-public interface GaugeDataStore {
-    Map<Long, Double> getGaugeValues(GaugeValuesRequest gaugeValuesRequest);
-
+public interface GaugeDataStore extends CommonGaugeDataStore {
     void createOrNoopGauge(Role role);
 
     void addToGauge(Role role, long time, double value);
-
-    Collection<Role> gauges();
-
-    Role findGaugeRole(String name);
-
-    void gaugeStopped(Role gauge);
 }

Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/InMemoryGaugeDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/InMemoryGaugeDataStore.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/InMemoryGaugeDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/InMemoryGaugeDataStore.java Mon Nov  4 14:04:01 2013
@@ -33,7 +33,7 @@ public class InMemoryGaugeDataStore impl
     protected final Map<String, Role> roleMapping = new ConcurrentHashMap<String, Role>();
 
     @Override
-    public Map<Long, Double> getGaugeValues(GaugeValuesRequest gaugeValuesRequest) {
+    public Map<Long, Double> getGaugeValues(final GaugeValuesRequest gaugeValuesRequest) {
         final Map<Long, Double> map = gauges.get(gaugeValuesRequest.getRole());
         if (map == null) {
             return Collections.emptyMap();

Modified: incubator/sirona/trunk/core/src/test/java/org/apache/sirona/counters/UnitTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/test/java/org/apache/sirona/counters/UnitTest.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/test/java/org/apache/sirona/counters/UnitTest.java (original)
+++ incubator/sirona/trunk/core/src/test/java/org/apache/sirona/counters/UnitTest.java Mon Nov  4 14:04:01 2013
@@ -19,7 +19,6 @@ package org.apache.sirona.counters;
 
 import org.junit.Test;
 
-import static org.apache.sirona.counters.Unit.Time.HOUR;
 import static org.apache.sirona.counters.Unit.Time.MICROSECOND;
 import static org.apache.sirona.counters.Unit.Time.MILLISECOND;
 import static org.apache.sirona.counters.Unit.Time.NANOSECOND;
@@ -31,15 +30,6 @@ import static org.junit.Assert.assertEqu
  */
 public class UnitTest {
     @Test
-    public void derived() {
-        assertEquals(NANOSECOND, HOUR.getPrimary());
-        assertEquals(NANOSECOND, NANOSECOND.getDerived("ns"));
-        assertEquals(MICROSECOND, NANOSECOND.getDerived("us"));
-        assertEquals(MILLISECOND, NANOSECOND.getDerived("ms"));
-        assertEquals(SECOND, NANOSECOND.getDerived("s"));
-    }
-
-    @Test
     public void scales() {
         assertEquals(1L, NANOSECOND.getScale());
         assertEquals(1000L, MICROSECOND.getScale());

Modified: incubator/sirona/trunk/jdbc/src/test/java/org/apache/sirona/jdbc/HsqlDBTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/jdbc/src/test/java/org/apache/sirona/jdbc/HsqlDBTest.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/jdbc/src/test/java/org/apache/sirona/jdbc/HsqlDBTest.java (original)
+++ incubator/sirona/trunk/jdbc/src/test/java/org/apache/sirona/jdbc/HsqlDBTest.java Mon Nov  4 14:04:01 2013
@@ -39,7 +39,6 @@ import static org.junit.Assert.assertTha
 import static org.junit.Assert.assertTrue;
 
 public class HsqlDBTest {
-
     @BeforeClass
     public static void init() {
         MonitoringDriver.load();

Modified: incubator/sirona/trunk/pom.xml
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/pom.xml?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/pom.xml (original)
+++ incubator/sirona/trunk/pom.xml Mon Nov  4 14:04:01 2013
@@ -57,18 +57,18 @@
 
   <modules>
     <module>core</module>
-    <module>jdbc</module>
     <module>aop</module>
+    <module>jdbc</module>
+    <module>jpa</module>
+    <module>aspectj</module>
     <module>cdi</module>
     <module>spring</module>
-    <module>aspectj</module>
     <module>jta</module>
     <module>web</module>
     <module>reporting</module>
     <module>graphite</module>
     <module>cube</module>
     <module>collector</module>
-    <module>jpa</module>
   </modules>
 
   <developers>

Added: incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/Local.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/Local.java?rev=1538609&view=auto
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/Local.java (added)
+++ incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/Local.java Mon Nov  4 14:04:01 2013
@@ -0,0 +1,27 @@
+/*
+ * 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.sirona.reporting.web.plugin;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface Local {
+}

Modified: incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/PluginRepository.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/PluginRepository.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/PluginRepository.java (original)
+++ incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/PluginRepository.java Mon Nov  4 14:04:01 2013
@@ -20,6 +20,7 @@ import org.apache.sirona.configuration.C
 import org.apache.sirona.reporting.web.handler.internal.EndpointInfo;
 import org.apache.sirona.reporting.web.handler.internal.Invoker;
 import org.apache.sirona.spi.SPI;
+import org.apache.sirona.util.Environment;
 
 import java.util.Collection;
 import java.util.Map;
@@ -35,7 +36,12 @@ public final class PluginRepository {
     public static final String ACTIVATED_FLAG = ".activated";
 
     static {
+        final boolean acceptLocal = !Environment.isCollector();
         for (final Plugin plugin : SPI.INSTANCE.find(Plugin.class, Plugin.class.getClassLoader())) {
+            if (!acceptLocal && plugin.getClass().getAnnotation(Local.class) != null) {
+                continue;
+            }
+
             final String name = plugin.name();
             if (name == null) {
                 throw new IllegalArgumentException("plugin name can't be null");

Modified: incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/jmx/JMXPlugin.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/jmx/JMXPlugin.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/jmx/JMXPlugin.java (original)
+++ incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/jmx/JMXPlugin.java Mon Nov  4 14:04:01 2013
@@ -16,8 +16,10 @@
  */
 package org.apache.sirona.reporting.web.plugin.jmx;
 
+import org.apache.sirona.reporting.web.plugin.Local;
 import org.apache.sirona.reporting.web.plugin.Plugin;
 
+@Local
 public class JMXPlugin implements Plugin {
     @Override
     public String name() {

Modified: incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/thread/ThreadPlugin.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/thread/ThreadPlugin.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/thread/ThreadPlugin.java (original)
+++ incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/thread/ThreadPlugin.java Mon Nov  4 14:04:01 2013
@@ -16,8 +16,10 @@
  */
 package org.apache.sirona.reporting.web.plugin.thread;
 
+import org.apache.sirona.reporting.web.plugin.Local;
 import org.apache.sirona.reporting.web.plugin.Plugin;
 
+@Local
 public class ThreadPlugin implements Plugin {
     @Override
     public String name() {

Modified: incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/web/WebPlugin.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/web/WebPlugin.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/web/WebPlugin.java (original)
+++ incubator/sirona/trunk/reporting/src/main/java/org/apache/sirona/reporting/web/plugin/web/WebPlugin.java Mon Nov  4 14:04:01 2013
@@ -16,8 +16,10 @@
  */
 package org.apache.sirona.reporting.web.plugin.web;
 
+import org.apache.sirona.reporting.web.plugin.Local;
 import org.apache.sirona.reporting.web.plugin.Plugin;
 
+@Local
 public class WebPlugin implements Plugin {
     @Override
     public String name() {

Modified: incubator/sirona/trunk/src/site/markdown/configuration.md
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/src/site/markdown/configuration.md?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/src/site/markdown/configuration.md (original)
+++ incubator/sirona/trunk/src/site/markdown/configuration.md Mon Nov  4 14:04:01 2013
@@ -75,3 +75,5 @@ or to call manually `Configuration.shutd
 #### CDI
 
 * org.apache.sirona.cdi.enabled: a boolean to activate/deactivate CDI interceptors config
+* org.apache.sirona.cdi.performance: list of intercepted beans for performances (prefix:org.superbiz, regex:.*Service...)
+* org.apache.sirona.cdi.jta: list of intercepted beans for JTA

Modified: incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/registration/WebMonitoringInitializer.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/registration/WebMonitoringInitializer.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/registration/WebMonitoringInitializer.java (original)
+++ incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/registration/WebMonitoringInitializer.java Mon Nov  4 14:04:01 2013
@@ -18,6 +18,7 @@ package org.apache.sirona.web.registrati
 
 import org.apache.sirona.configuration.Configuration;
 import org.apache.sirona.repositories.Repository;
+import org.apache.sirona.util.Environment;
 import org.apache.sirona.web.discovery.GaugeDiscoveryListener;
 import org.apache.sirona.web.lifecycle.SironaLifecycle;
 import org.apache.sirona.web.servlet.MonitoringFilter;
@@ -37,6 +38,10 @@ public class WebMonitoringInitializer im
 
     @Override
     public void onStartup(final Set<Class<?>> classes, final ServletContext ctx) throws ServletException {
+        if (Environment.isCollector()) {
+            return;
+        }
+
         final String activated = ctx.getInitParameter(ACTIVATED);
         if (FALSE.equalsIgnoreCase(Configuration.getProperty(ACTIVATED, activated))) {
             return;

Modified: incubator/sirona/trunk/web/src/test/java/org/apache/sirona/test/web/RequestPerformanceTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/web/src/test/java/org/apache/sirona/test/web/RequestPerformanceTest.java?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/web/src/test/java/org/apache/sirona/test/web/RequestPerformanceTest.java (original)
+++ incubator/sirona/trunk/web/src/test/java/org/apache/sirona/test/web/RequestPerformanceTest.java Mon Nov  4 14:04:01 2013
@@ -84,7 +84,7 @@ public class RequestPerformanceTest {
         final TextPage page = newClient().getPage(base.toExternalForm() + "hit");
         assertEquals(HttpURLConnection.HTTP_OK, page.getWebResponse().getStatusCode());
         Thread.sleep(1000);
-        assertEquals(1, statusGaugeSum(role) - before);
+        assertEquals("" + Repository.INSTANCE.getGaugeValues(0, System.currentTimeMillis() + 1000, role), 1, statusGaugeSum(role) - before);
     }
 
     @Test

Modified: incubator/sirona/trunk/web/src/test/resources/sirona.properties
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/web/src/test/resources/sirona.properties?rev=1538609&r1=1538608&r2=1538609&view=diff
==============================================================================
--- incubator/sirona/trunk/web/src/test/resources/sirona.properties (original)
+++ incubator/sirona/trunk/web/src/test/resources/sirona.properties Mon Nov  4 14:04:01 2013
@@ -12,4 +12,4 @@
 # 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.
-org.apache.sirona.gauge.web.status.period = 150
+org.apache.sirona.web.gauge.status.period = 150