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/15 17:39:20 UTC

svn commit: r1542319 - in /incubator/sirona/trunk/core/src/main/java/org/apache/sirona: gauges/counter/CounterGauge.java store/counter/InMemoryCounterDataStore.java

Author: rmannibucau
Date: Fri Nov 15 16:39:19 2013
New Revision: 1542319

URL: http://svn.apache.org/r1542319
Log:
ability to automatically add with the flag org.apache.sirona.counter.with-gauge 3 gauges by counter (sum, max, hits)

Modified:
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/counter/CounterGauge.java
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/InMemoryCounterDataStore.java

Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/counter/CounterGauge.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/counter/CounterGauge.java?rev=1542319&r1=1542318&r2=1542319&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/counter/CounterGauge.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/counter/CounterGauge.java Fri Nov 15 16:39:19 2013
@@ -20,26 +20,29 @@ import org.apache.sirona.Role;
 import org.apache.sirona.configuration.Configuration;
 import org.apache.sirona.counters.Counter;
 import org.apache.sirona.counters.MetricData;
+import org.apache.sirona.counters.Unit;
 import org.apache.sirona.gauges.Gauge;
 
-public abstract class CounterGauge implements Gauge {
+public class CounterGauge implements Gauge {
     private final Counter counter;
     private final MetricData metric;
     private final boolean reset;
+    private final Role role;
 
     protected CounterGauge(final Counter counter) {
         this(counter, MetricData.Sum, true);
     }
 
-    protected CounterGauge(final Counter counter, final MetricData metric, final boolean reset) {
+    public CounterGauge(final Counter counter, final MetricData metric, final boolean reset) {
         this.counter = counter;
         this.metric = metric;
         this.reset = reset;
+        this.role = new Role(counter.getKey().getRole() + "-" + counter.getKey().getName() + "-" + metric.name(), Unit.UNARY);
     }
 
     @Override
     public Role role() {
-        return counter.getKey().getRole();
+        return role;
     }
 
     @Override

Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/InMemoryCounterDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/InMemoryCounterDataStore.java?rev=1542319&r1=1542318&r2=1542319&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/InMemoryCounterDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/counter/InMemoryCounterDataStore.java Fri Nov 15 16:39:19 2013
@@ -16,16 +16,24 @@
  */
 package org.apache.sirona.store.counter;
 
+import org.apache.sirona.configuration.Configuration;
 import org.apache.sirona.counters.Counter;
 import org.apache.sirona.counters.DefaultCounter;
+import org.apache.sirona.counters.MetricData;
+import org.apache.sirona.gauges.Gauge;
+import org.apache.sirona.gauges.counter.CounterGauge;
+import org.apache.sirona.repositories.Repository;
 
 import java.util.Collection;
+import java.util.LinkedList;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.locks.Lock;
 
 public class InMemoryCounterDataStore implements CounterDataStore {
+    protected final boolean gauged = Configuration.is(Configuration.CONFIG_PROPERTY_PREFIX + "counter.with-gauge", false);
     protected final ConcurrentMap<Counter.Key, Counter> counters = newCounterMap();
+    protected final Collection<Gauge> gauges = new LinkedList<Gauge>();
 
     protected ConcurrentMap<Counter.Key, Counter> newCounterMap() {
         return new ConcurrentHashMap<Counter.Key, Counter>(50);
@@ -43,14 +51,31 @@ public class InMemoryCounterDataStore im
             final Counter previous = counters.putIfAbsent(key, counter);
             if (previous != null) {
                 counter = previous;
+            } else if (gauged) {
+                newGauge(new CounterGauge(counter, MetricData.Sum, true));
+                newGauge(new CounterGauge(counter, MetricData.Max, true));
+                newGauge(new CounterGauge(counter, MetricData.Hits, true));
             }
         }
         return counter;
     }
 
+    private void newGauge(final Gauge gauge) {
+        Repository.INSTANCE.addGauge(gauge);
+        synchronized (gauges) {
+            gauges.add(gauge);
+        }
+    }
+
     @Override
     public void clearCounters() {
         counters.clear();
+        synchronized (gauges) {
+            for (final Gauge g : gauges) {
+                Repository.INSTANCE.stopGauge(g);
+            }
+            gauges.clear();
+        }
     }
 
     @Override