You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ni...@apache.org on 2008/04/15 11:58:31 UTC

svn commit: r648201 - in /commons/sandbox/monitoring/trunk/src: main/java/org/apache/commons/monitoring/ main/java/org/apache/commons/monitoring/aop/ main/java/org/apache/commons/monitoring/impl/monitors/ main/java/org/apache/commons/monitoring/impl/st...

Author: nicolas
Date: Tue Apr 15 02:58:28 2008
New Revision: 648201

URL: http://svn.apache.org/viewvc?rev=648201&view=rev
Log:
new "Role" concept to describe a statValue in a monitor. Includes name and Unit as a prototype for create-on-demand

Added:
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Role.java   (with props)
Modified:
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitor.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/StatValue.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Unit.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/aop/AbstractPerformanceInterceptor.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/monitors/AbstractMonitor.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/monitors/CompositeValuesMonitor.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/monitors/CreateValuesOnDemandMonitor.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/stopwatches/DefaultStopWatch.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/AbstractStatValue.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/CompositeCounter.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/CompositeGauge.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/ThreadSafeCounter.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/ThreadSafeGauge.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractRenderer.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/FlotRenderer.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/HtmlRenderer.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/JsonRenderer.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/OptionsSupport.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Renderer.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/XmlRenderer.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/NiceHtmlRenderer.java
    commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/MonitoringTest.java
    commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/CompositeValuesMonitorTest.java
    commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeCounterTest.java
    commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeGaugeTest.java
    commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/SecondaryReposioryTest.java
    commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/ThresholdListenerTest.java
    commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitor.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitor.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitor.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitor.java Tue Apr 15 02:58:28 2008
@@ -53,10 +53,13 @@
 public interface Monitor
 {
     /** default role key for code performances */
-    String PERFORMANCES = "performances";
+    Role<Counter> PERFORMANCES = new Role<Counter>( "performances", Unit.NANOS );
 
     /** default role for multi-thread concurrency */
-    String CONCURRENCY = "concurrency";
+    Role<Gauge> CONCURRENCY = new Role<Gauge>( "concurrency", Unit.UNARY );
+
+    /** default Role for the invocation failure counter */
+    Role<Counter> FAILURES = new Role<Counter>( "failures", Unit.UNARY );
 
     /**
      * @return the monitor key
@@ -64,7 +67,7 @@
     Key getKey();
 
     /**
-     * Get a Counter
+     * Retrieve a Counter
      *
      * @param role a unique identifier for a Counter in the monitor
      * @param unit the data unit to count
@@ -73,7 +76,15 @@
     Counter getCounter( String role );
 
     /**
-     * Get a Gauge
+     * Retrieve or create a Counter in the monitor
+     *
+     * @param role the Counter role in the monitor
+     * @return the Counter
+     */
+    Counter getCounter( Role<Counter> role );
+
+    /**
+     * Retrieve a Gauge in the monitor
      *
      * @param role a unique identifier for a Gauge in the monitor
      * @return the Gauge
@@ -81,6 +92,14 @@
     Gauge getGauge( String role );
 
     /**
+     * Retrieve or create a Gauge in the monitor
+     *
+     * @param role the gauge role in the monitor
+     * @return the Gauge
+     */
+    Gauge getGauge( Role<Gauge> role );
+
+    /**
      * Retrieve a StatValue.
      *
      * @param role a unique identifier for a StatValue in the monitor
@@ -89,10 +108,18 @@
     StatValue getValue( String role );
 
     /**
+     * Retrieve a StatValue in the monitor
+     *
+     * @param role the StatValue role in the monitor
+     * @return the StatValue
+     */
+    <T extends StatValue> T getValue( Role<T> role );
+
+    /**
      *
      * @return an unmodifiable collection of registered statValues roles
      */
-    Collection<String> getRoles();
+    Collection<Role> getRoles();
 
     /**
      *

Added: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Role.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Role.java?rev=648201&view=auto
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Role.java (added)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Role.java Tue Apr 15 02:58:28 2008
@@ -0,0 +1,119 @@
+/*
+ * 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.commons.monitoring;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class Role<T extends StatValue> implements Comparable<Role>
+{
+    private String name;
+
+    private Unit unit;
+
+    private static final Map<String, Role> ROLES = new ConcurrentHashMap<String, Role>();
+
+    public static Role<? extends StatValue> getRole( String name )
+    {
+        return ROLES.get( name );
+    }
+
+    public Role( String name, Unit unit )
+    {
+        super();
+        if (name == null)
+        {
+            throw new IllegalArgumentException( "A role name is required" );
+        }
+        if (unit == null)
+        {
+            throw new IllegalArgumentException( "A role unit is required" );
+        }
+        this.name = name;
+        this.unit = unit;
+        ROLES.put( name, this );
+    }
+
+    /**
+     * @return the role
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * @return the unit
+     */
+    public Unit getUnit()
+    {
+        return unit;
+    }
+
+    /**
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode()
+    {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ( ( name == null ) ? 0 : name.hashCode() );
+        result = prime * result + ( ( unit == null ) ? 0 : unit.hashCode() );
+        return result;
+    }
+
+    /**
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals( Object obj )
+    {
+        if ( this == obj )
+            return true;
+        if ( obj == null )
+            return false;
+        if ( getClass() != obj.getClass() )
+            return false;
+        final Role other = (Role) obj;
+        if ( name == null )
+        {
+            if ( other.name != null )
+                return false;
+        }
+        else if ( !name.equals( other.name ) )
+            return false;
+        if ( unit == null )
+        {
+            if ( other.unit != null )
+                return false;
+        }
+        else if ( !unit.equals( other.unit ) )
+            return false;
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public int compareTo( Role o )
+    {
+        return name.compareTo( o.name );
+    }
+
+}

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Role.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Role.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Role.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/StatValue.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/StatValue.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/StatValue.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/StatValue.java Tue Apr 15 02:58:28 2008
@@ -79,7 +79,7 @@
     /**
      * @return the role for this value in the monitor
      */
-    String getRole();
+    Role<? extends StatValue> getRole();
 
     /**
      * @return the (primary) data unit

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Unit.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Unit.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Unit.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Unit.java Tue Apr 15 02:58:28 2008
@@ -20,6 +20,8 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
 
 /**
  * Units allow monitored data to have get typed. A primary unit is the
@@ -53,7 +55,16 @@
 
 
     /** unit for basic item counters & gauges */
-    public static final Unit NONE = new Unit( "" );
+    // "BILLION" does not have same signification depending on state (10^12 or 10^9)
+    // we use International system of unit names to avoid confusion
+    // @see http://en.wikipedia.org/wiki/SI
+    public static final Unit UNARY = new Unit( "" );
+    public static final Unit DECA = new Unit( "da", UNARY, 10 );
+    public static final Unit HECTO = new Unit( "h", DECA, 10 );
+    public static final Unit KILO = new Unit( "k", HECTO, 10 );
+    public static final Unit MEGA = new Unit( "M", KILO, 1000 );
+    public static final Unit GIGA = new Unit( "G", MEGA, 1000 );
+    public static final Unit TERA = new Unit( "T", GIGA, 1000 );
 
     private final String name;
 
@@ -62,6 +73,8 @@
     private Unit primary;
 
     private List<Unit> derived;
+    
+    public Set<Unit> primaryUnits = new CopyOnWriteArraySet<Unit>();
 
     public Unit getDerived( String name )
     {
@@ -91,6 +104,7 @@
         this.scale = 1;
         this.derived = new ArrayList<Unit>();
         this.derived.add( this );
+        primaryUnits.add( this );
     }
 
     /**
@@ -141,6 +155,41 @@
     public String toString()
     {
         return name;
+    }
+
+    /**
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode()
+    {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ( ( name == null ) ? 0 : name.hashCode() );
+        return result;
+    }
+
+    /**
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals( Object obj )
+    {
+        if ( this == obj )
+            return true;
+        if ( obj == null )
+            return false;
+        if ( getClass() != obj.getClass() )
+            return false;
+        final Unit other = (Unit) obj;
+        if ( name == null )
+        {
+            if ( other.name != null )
+                return false;
+        }
+        else if ( !name.equals( other.name ) )
+            return false;
+        return true;
     }
 
 }

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/aop/AbstractPerformanceInterceptor.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/aop/AbstractPerformanceInterceptor.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/aop/AbstractPerformanceInterceptor.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/aop/AbstractPerformanceInterceptor.java Tue Apr 15 02:58:28 2008
@@ -35,9 +35,6 @@
 public abstract class AbstractPerformanceInterceptor<T>
 {
 
-    /** Role for the invocation failure counter */
-    private static final String FAILURE = "failure";
-
     protected Repository repository;
 
     protected String category;
@@ -112,7 +109,7 @@
     {
         if ( error != null )
         {
-            monitor.getCounter( FAILURE ).add( duration, Unit.NANOS );
+            monitor.getCounter( Monitor.FAILURES ).add( duration, Unit.NANOS );
         }
     }
 

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/monitors/AbstractMonitor.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/monitors/AbstractMonitor.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/monitors/AbstractMonitor.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/monitors/AbstractMonitor.java Tue Apr 15 02:58:28 2008
@@ -25,6 +25,7 @@
 import org.apache.commons.monitoring.Counter;
 import org.apache.commons.monitoring.Gauge;
 import org.apache.commons.monitoring.Monitor;
+import org.apache.commons.monitoring.Role;
 import org.apache.commons.monitoring.StatValue;
 
 /**
@@ -35,14 +36,14 @@
 public abstract class AbstractMonitor implements Monitor
 {
 
-    private final ConcurrentMap<String, StatValue> values;
+    private final ConcurrentMap<Role, StatValue> values;
     private final Key key;
 
     public AbstractMonitor( Key key )
     {
         super();
         this.key = key;
-        this.values = new ConcurrentHashMap<String, StatValue>();
+        this.values = new ConcurrentHashMap<Role, StatValue>();
     }
 
     /**
@@ -61,7 +62,12 @@
         return values.get( role );
     }
 
-    public final Collection<String> getRoles()
+    public final <T extends StatValue> T getValue( Role<T> role )
+    {
+        return (T) values.get( role );
+    }
+
+    public final Collection<Role> getRoles()
     {
         return Collections.unmodifiableCollection( values.keySet() );
     }
@@ -96,14 +102,24 @@
         }
     }
 
+    public Counter getCounter( Role<Counter> role )
+    {
+        return getValue( role );
+    }
+
     public Counter getCounter( String role )
     {
-        return (Counter) getValue( role );
+        return getCounter( (Role<Counter>) Role.getRole( role ) );
+    }
+
+    public Gauge getGauge( Role<Gauge> role )
+    {
+        return getValue( role );
     }
 
     public Gauge getGauge( String role )
     {
-        return (Gauge) getValue( role );
+        return getGauge( (Role<Gauge>) Role.getRole( role ) );
     }
 
 }

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/monitors/CompositeValuesMonitor.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/monitors/CompositeValuesMonitor.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/monitors/CompositeValuesMonitor.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/monitors/CompositeValuesMonitor.java Tue Apr 15 02:58:28 2008
@@ -19,6 +19,7 @@
 
 import org.apache.commons.monitoring.Counter;
 import org.apache.commons.monitoring.Gauge;
+import org.apache.commons.monitoring.Role;
 import org.apache.commons.monitoring.impl.values.CompositeCounter;
 import org.apache.commons.monitoring.impl.values.CompositeGauge;
 
@@ -38,13 +39,13 @@
     }
 
     @Override
-    protected Counter newCounterInstance( String role )
+    protected Counter newCounterInstance( Role<Counter> role )
     {
         return new CompositeCounter( role );
     }
 
     @Override
-    protected Gauge newGaugeInstance( String role )
+    protected Gauge newGaugeInstance( Role<Gauge> role )
     {
         return new CompositeGauge( role );
     }

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/monitors/CreateValuesOnDemandMonitor.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/monitors/CreateValuesOnDemandMonitor.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/monitors/CreateValuesOnDemandMonitor.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/monitors/CreateValuesOnDemandMonitor.java Tue Apr 15 02:58:28 2008
@@ -19,6 +19,7 @@
 
 import org.apache.commons.monitoring.Counter;
 import org.apache.commons.monitoring.Gauge;
+import org.apache.commons.monitoring.Role;
 import org.apache.commons.monitoring.impl.values.ThreadSafeCounter;
 import org.apache.commons.monitoring.impl.values.ThreadSafeGauge;
 
@@ -42,9 +43,9 @@
      * Retrieve a Counter or create a new one for the role
      */
     @Override
-    public Counter getCounter( String role )
+    public Counter getCounter( Role<Counter> role )
     {
-        Counter counter = (Counter) getValue( role );
+        Counter counter = getValue( role );
         if ( counter != null )
         {
             return counter;
@@ -57,7 +58,7 @@
     /**
      * Create a new Counter instance
      */
-    protected Counter newCounterInstance( String role )
+    protected Counter newCounterInstance( Role<Counter> role )
     {
         return new ThreadSafeCounter( role );
     }
@@ -66,9 +67,9 @@
      * Retrieve a Gauge or create a new one for the role
      */
     @Override
-    public Gauge getGauge( String role )
+    public Gauge getGauge( Role<Gauge> role )
     {
-        Gauge gauge = (Gauge) getValue( role );
+        Gauge gauge = getValue( role );
         if ( gauge != null )
         {
             return gauge;
@@ -81,7 +82,7 @@
     /**
      * Create a new Gauge instance
      */
-    protected Gauge newGaugeInstance( String role )
+    protected Gauge newGaugeInstance( Role<Gauge> role )
     {
         return  new ThreadSafeGauge( role );
     }

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/stopwatches/DefaultStopWatch.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/stopwatches/DefaultStopWatch.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/stopwatches/DefaultStopWatch.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/stopwatches/DefaultStopWatch.java Tue Apr 15 02:58:28 2008
@@ -27,7 +27,8 @@
  *
  * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
  */
-public class DefaultStopWatch implements StopWatch
+public class DefaultStopWatch
+    implements StopWatch
 {
     /** Time the probe was started */
     private final long startedAt;
@@ -62,12 +63,13 @@
         startedAt = nanotime();
         if ( monitor != null )
         {
-            monitor.getGauge( Monitor.CONCURRENCY ).increment(Unit.NONE);
+            monitor.getGauge( Monitor.CONCURRENCY ).increment( Unit.UNARY );
         }
     }
 
     /**
      * {@inheritDoc}
+     *
      * @see org.apache.commons.monitoring.StopWatch#getElapsedTime()
      */
     public long getElapsedTime()
@@ -85,6 +87,7 @@
 
     /**
      * {@inheritDoc}
+     *
      * @see org.apache.commons.monitoring.StopWatch#pause()
      */
     public void pause()
@@ -98,6 +101,7 @@
 
     /**
      * {@inheritDoc}
+     *
      * @see org.apache.commons.monitoring.StopWatch#resume()
      */
     public void resume()
@@ -112,6 +116,7 @@
 
     /**
      * {@inheritDoc}
+     *
      * @see org.apache.commons.monitoring.StopWatch#stop()
      */
     public void stop()
@@ -127,7 +132,7 @@
             stoped = true;
             if ( monitor != null )
             {
-                monitor.getGauge( Monitor.CONCURRENCY ).decrement(Unit.NONE);
+                monitor.getGauge( Monitor.CONCURRENCY ).decrement( Unit.UNARY );
                 monitor.getCounter( Monitor.PERFORMANCES ).add( getElapsedTime(), Unit.NANOS );
             }
         }
@@ -135,6 +140,7 @@
 
     /**
      * {@inheritDoc}
+     *
      * @see org.apache.commons.monitoring.StopWatch#stop(boolean)
      */
     public void stop( boolean canceled )
@@ -151,6 +157,7 @@
 
     /**
      * {@inheritDoc}
+     *
      * @see org.apache.commons.monitoring.StopWatch#cancel()
      */
     public void cancel()
@@ -160,7 +167,7 @@
             stoped = true;
             if ( monitor != null )
             {
-                monitor.getGauge( Monitor.CONCURRENCY ).decrement(Unit.NONE);
+                monitor.getGauge( Monitor.CONCURRENCY ).decrement( Unit.UNARY );
             }
         }
     }
@@ -203,6 +210,7 @@
 
     /**
      * {@inheritDoc}
+     *
      * @see org.apache.commons.monitoring.StopWatch#isStoped()
      */
     public boolean isStoped()
@@ -212,6 +220,7 @@
 
     /**
      * {@inheritDoc}
+     *
      * @see org.apache.commons.monitoring.StopWatch#isPaused()
      */
     public boolean isPaused()
@@ -245,6 +254,7 @@
 
     /**
      * {@inheritDoc}
+     *
      * @see org.apache.commons.monitoring.StopWatch#getMonitor()
      */
     public Monitor getMonitor()

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/AbstractStatValue.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/AbstractStatValue.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/AbstractStatValue.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/AbstractStatValue.java Tue Apr 15 02:58:28 2008
@@ -21,6 +21,7 @@
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.apache.commons.monitoring.Monitor;
+import org.apache.commons.monitoring.Role;
 import org.apache.commons.monitoring.StatValue;
 import org.apache.commons.monitoring.Unit;
 
@@ -30,12 +31,12 @@
  *
  * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
  */
-public abstract class AbstractStatValue
+public abstract class AbstractStatValue<T extends StatValue>
     implements StatValue
 {
     private Monitor monitor;
 
-    private String role;
+    private Role<T> role;
 
     private int hits;
 
@@ -47,10 +48,11 @@
 
     private List<Listener> listeners = new CopyOnWriteArrayList<Listener>();
 
-    public AbstractStatValue( String role )
+    public AbstractStatValue( Role<T> role )
     {
         super();
         this.role = role;
+        this.unit = role.getUnit();
     }
 
     public void addListener( Listener listener )
@@ -65,11 +67,6 @@
 
     protected long normalize( long value, Unit unit )
     {
-        if ( this.unit == null )
-        {
-            // Affect the statValue unit on first use
-            this.unit = unit.getPrimary();
-        }
         if ( !this.unit.isCompatible( unit ) )
         {
             throw new IllegalArgumentException( "role " + role + " is incompatible with unit " + unit );
@@ -152,7 +149,7 @@
         return monitor;
     }
 
-    public String getRole()
+    public Role<T> getRole()
     {
         return role;
     }

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/CompositeCounter.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/CompositeCounter.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/CompositeCounter.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/CompositeCounter.java Tue Apr 15 02:58:28 2008
@@ -23,6 +23,8 @@
 
 import org.apache.commons.monitoring.Composite;
 import org.apache.commons.monitoring.Counter;
+import org.apache.commons.monitoring.Gauge;
+import org.apache.commons.monitoring.Role;
 import org.apache.commons.monitoring.Unit;
 
 /**
@@ -44,7 +46,7 @@
         return Collections.unmodifiableCollection( secondary );
     }
 
-    public CompositeCounter( String role )
+    public CompositeCounter( Role<Counter> role )
     {
         super( role );
         this.secondary = new CopyOnWriteArrayList<Counter>();

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/CompositeGauge.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/CompositeGauge.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/CompositeGauge.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/CompositeGauge.java Tue Apr 15 02:58:28 2008
@@ -23,6 +23,7 @@
 
 import org.apache.commons.monitoring.Composite;
 import org.apache.commons.monitoring.Gauge;
+import org.apache.commons.monitoring.Role;
 
 /**
  * A composite implementation of {@link Gauge} that delegates to a primary
@@ -45,7 +46,7 @@
         return Collections.unmodifiableCollection( secondary );
     }
 
-    public CompositeGauge( String role )
+    public CompositeGauge( Role<Gauge> role )
     {
         super( role );
         this.secondary = new LinkedList<Gauge>();

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/ThreadSafeCounter.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/ThreadSafeCounter.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/ThreadSafeCounter.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/ThreadSafeCounter.java Tue Apr 15 02:58:28 2008
@@ -18,6 +18,7 @@
 package org.apache.commons.monitoring.impl.values;
 
 import org.apache.commons.monitoring.Counter;
+import org.apache.commons.monitoring.Role;
 import org.apache.commons.monitoring.Unit;
 
 /**
@@ -27,7 +28,7 @@
  * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
  */
 public class ThreadSafeCounter
-    extends AbstractStatValue
+    extends AbstractStatValue<Counter>
     implements Counter
 {
 
@@ -37,7 +38,7 @@
 
     private long sumOfSquares;
 
-    public ThreadSafeCounter( String role )
+    public ThreadSafeCounter( Role<Counter> role )
     {
         super( role );
     }

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/ThreadSafeGauge.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/ThreadSafeGauge.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/ThreadSafeGauge.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/values/ThreadSafeGauge.java Tue Apr 15 02:58:28 2008
@@ -18,6 +18,7 @@
 package org.apache.commons.monitoring.impl.values;
 
 import org.apache.commons.monitoring.Gauge;
+import org.apache.commons.monitoring.Role;
 import org.apache.commons.monitoring.Unit;
 
 /**
@@ -30,7 +31,7 @@
  * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
  */
 public class ThreadSafeGauge
-    extends AbstractStatValue
+    extends AbstractStatValue<Gauge>
     implements Gauge
 {
     private long value;
@@ -44,7 +45,7 @@
     // Use a double so that unset can be detected as "Not a Number"
     private double firstUse = Double.NaN;
 
-    public ThreadSafeGauge( String role )
+    public ThreadSafeGauge( Role<Gauge> role )
     {
         super( role );
     }

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractRenderer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractRenderer.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractRenderer.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractRenderer.java Tue Apr 15 02:58:28 2008
@@ -29,6 +29,7 @@
 
 import org.apache.commons.monitoring.Counter;
 import org.apache.commons.monitoring.Monitor;
+import org.apache.commons.monitoring.Role;
 import org.apache.commons.monitoring.StatValue;
 import org.apache.commons.monitoring.Unit;
 import org.apache.commons.monitoring.Monitor.Key;
@@ -75,8 +76,7 @@
 
     protected void prepareRendering( Context ctx, Collection<Monitor> monitors, Options options )
     {
-        List<String> roles = getRoles( monitors, options );
-        ctx.put( ROLES, roles );
+        ctx.put( ROLES, getRoles( monitors, options ) );
         ctx.put( MONITORS, monitors );
     }
 
@@ -110,15 +110,15 @@
     @SuppressWarnings( "unchecked" )
     protected void renderStatValues( Context ctx, Monitor monitor, Options options )
     {
-        List<String> roles = (List<String>) ctx.get( ROLES );
+        List<Role> roles = (List<Role>) ctx.get( ROLES );
         renderStatValues( ctx, monitor, options, roles );
     }
 
-    protected void renderStatValues( Context ctx, Monitor monitor, Options options, List<String> roles )
+    protected void renderStatValues( Context ctx, Monitor monitor, Options options, List<Role> roles )
     {
-        for ( Iterator<String> iterator = roles.iterator(); iterator.hasNext(); )
+        for ( Iterator<Role> iterator = roles.iterator(); iterator.hasNext(); )
         {
-            String role = iterator.next();
+            Role role = iterator.next();
             StatValue value = monitor.getValue( role );
             if ( value != null )
             {
@@ -141,7 +141,7 @@
      * @param ctx
      * @param role
      */
-    protected void renderMissingValue( Context ctx, String role )
+    protected void renderMissingValue( Context ctx, Role role )
     {
         // Nop
     }
@@ -169,7 +169,7 @@
 
     protected void render( Context ctx, StatValue value, Options options )
     {
-        String role = value.getRole();
+        Role role = value.getRole();
         if ( value instanceof Counter )
         {
             Counter counter = (Counter) value;
@@ -276,14 +276,14 @@
      * @param monitors
      * @return
      */
-    protected List<String> getRoles( Collection<Monitor> monitors, Options options )
+    protected List<Role> getRoles( Collection<Monitor> monitors, Options options )
     {
-        Set<String> roles = new HashSet<String>();
+        Set<Role> roles = new HashSet<Role>();
         for ( Monitor monitor : monitors )
         {
             if ( options.render( monitor ) )
             {
-                for ( String role : monitor.getRoles() )
+                for ( Role role : monitor.getRoles() )
                 {
                     if ( options.renderRole( role ) )
                     {
@@ -292,8 +292,8 @@
                 }
             }
         }
-        List<String> sorted = new ArrayList<String>( roles );
-        Collections.sort( sorted );
+        List<Role> sorted = new ArrayList<Role>( roles );
+        Collections.<Role>sort( sorted );
         return sorted;
     }
 

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/FlotRenderer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/FlotRenderer.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/FlotRenderer.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/FlotRenderer.java Tue Apr 15 02:58:28 2008
@@ -23,6 +23,7 @@
 import java.util.List;
 
 import org.apache.commons.monitoring.Monitor;
+import org.apache.commons.monitoring.Role;
 import org.apache.commons.monitoring.StatValue;
 import org.apache.commons.monitoring.Monitor.Key;
 import org.apache.commons.monitoring.listeners.Detachable;
@@ -72,9 +73,9 @@
         ctx.print( "$.plot($('#placeholder'), [" );
 
         int color = 0;
-        for ( Iterator<String> it = ( (Collection) ctx.get( ROLES ) ).iterator(); it.hasNext(); )
+        for ( Iterator<Role> it = ( (Collection<Role>) ctx.get( ROLES ) ).iterator(); it.hasNext(); )
         {
-            String role = it.next();
+            Role role = it.next();
             List<String> attribues = new ArrayList<String>();
             for ( String attribute : ATTRIBUTES )
             {
@@ -90,7 +91,7 @@
                 final String attribute = attr.next();
                 ctx.print( "{ color: " + color );
                 ctx.print( ", label: \"" );
-                ctx.print( role + "." + attribute );
+                ctx.print( role.getName() + "." + attribute );
                 ctx.print( "\", data: " );
                 ctx.print( "[" );
                 int x = 0;
@@ -113,7 +114,7 @@
                     render( ctx, value, new OptionsSupport()
                     {
                         @Override
-                        public boolean render( String role, String string )
+                        public boolean render( Role role, String string )
                         {
                             boolean render = string.equals( attribute );
                             if ( render )

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/HtmlRenderer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/HtmlRenderer.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/HtmlRenderer.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/HtmlRenderer.java Tue Apr 15 02:58:28 2008
@@ -24,6 +24,7 @@
 
 import org.apache.commons.monitoring.Counter;
 import org.apache.commons.monitoring.Monitor;
+import org.apache.commons.monitoring.Role;
 import org.apache.commons.monitoring.StatValue;
 import org.apache.commons.monitoring.Unit;
 import org.apache.commons.monitoring.Monitor.Key;
@@ -35,6 +36,7 @@
 public class HtmlRenderer
     extends AbstractRenderer
 {
+    protected static final String COLUMNS = "columns";
 
     public HtmlRenderer()
     {
@@ -94,7 +96,7 @@
     @SuppressWarnings( "unchecked" )
     protected void tableHead( Context ctx, Collection<Monitor> monitors, Options options )
     {
-        Collection<String> roles = (Collection<String>) ctx.get( "roles" );
+        Collection<Role> roles = (Collection<Role>) ctx.get( ROLES );
         Map<String, Integer> columns = new HashMap<String, Integer>();
 
         ctx.println( "<thead><tr>" );
@@ -107,7 +109,7 @@
         ctx.println( "<th rowspan='2'>name</th>" );
         ctx.println( "<th rowspan='2'>category</th>" );
         ctx.println( "<th rowspan='2'>subsystem</th>" );
-        for ( String role : roles )
+        for ( Role role : roles )
         {
             // Search the first monitor that has a StatValue for the role...
             for ( Monitor monitor : monitors )
@@ -130,14 +132,14 @@
                     ctx.print( "<td colspan='" );
                     ctx.print( String.valueOf( span ) );
                     ctx.print( "'>" );
-                    ctx.print( value.getRole() );
+                    ctx.print( value.getRole().getName() );
                     Unit unit = options.unitFor( value );
                     if ( unit != null && unit.getName().length() > 0 )
                     {
                         renderUnit( ctx, unit );
                     }
                     ctx.print( "</td>" );
-                    columns.put( role, span );
+                    columns.put( role.getName(), span );
                     break;
                 }
             }
@@ -151,7 +153,7 @@
             ctx.println( "<th>to</th>" );
         }
 
-        for ( String role : roles )
+        for ( Role role : roles )
         {
             for ( Monitor monitor : monitors )
             {
@@ -173,7 +175,7 @@
             }
         }
         ctx.println( "</tr></thead>" );
-        ctx.put( "columns", columns );
+        ctx.put( COLUMNS, columns );
     }
 
     protected void writeColumnHead( Context ctx, Options options, StatValue value, String attribute )
@@ -241,9 +243,9 @@
      */
     @SuppressWarnings("unchecked")
     @Override
-    protected void renderMissingValue( Context ctx, String role )
+    protected void renderMissingValue( Context ctx, Role role )
     {
-        Map<String, Integer> columns = (Map<String, Integer>) ctx.get( "columns" );
+        Map<String, Integer> columns = (Map<String, Integer>) ctx.get( COLUMNS );
         ctx.print( "<td colspan='" );
         ctx.print( String.valueOf( columns.get( role ) ) );
         ctx.print( "'>-</td>" );

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/JsonRenderer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/JsonRenderer.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/JsonRenderer.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/JsonRenderer.java Tue Apr 15 02:58:28 2008
@@ -22,6 +22,7 @@
 import java.util.List;
 
 import org.apache.commons.monitoring.Monitor;
+import org.apache.commons.monitoring.Role;
 import org.apache.commons.monitoring.StatValue;
 import org.apache.commons.monitoring.Monitor.Key;
 import org.apache.commons.monitoring.listeners.Detachable;
@@ -109,7 +110,7 @@
      * org.apache.commons.monitoring.reporting.Renderer.Options)
      */
     @Override
-    protected void renderStatValues( Context ctx, Monitor monitor, Options options, List<String> roles  )
+    protected void renderStatValues( Context ctx, Monitor monitor, Options options, List<Role> roles  )
     {
         if ( roles.size() > 0 )
         {
@@ -121,7 +122,7 @@
     @Override
     public void render( Context ctx, StatValue value, Options options )
     {
-        ctx.print( value.getRole() );
+        ctx.print( value.getRole().getName() );
         ctx.print( ":{" );
         super.render( ctx, value, options );
         ctx.print( "}" );

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/OptionsSupport.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/OptionsSupport.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/OptionsSupport.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/OptionsSupport.java Tue Apr 15 02:58:28 2008
@@ -25,6 +25,7 @@
 import java.util.Locale;
 
 import org.apache.commons.monitoring.Monitor;
+import org.apache.commons.monitoring.Role;
 import org.apache.commons.monitoring.StatValue;
 import org.apache.commons.monitoring.Unit;
 
@@ -41,12 +42,12 @@
         return true;
     }
 
-    public boolean render( String role, String attribute )
+    public boolean render( Role role, String attribute )
     {
         return true;
     }
 
-    public boolean renderRole( String role )
+    public boolean renderRole( Role role )
     {
         return true;
     }

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Renderer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Renderer.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Renderer.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Renderer.java Tue Apr 15 02:58:28 2008
@@ -23,6 +23,7 @@
 import java.util.Collection;
 
 import org.apache.commons.monitoring.Monitor;
+import org.apache.commons.monitoring.Role;
 import org.apache.commons.monitoring.StatValue;
 import org.apache.commons.monitoring.Unit;
 
@@ -33,7 +34,7 @@
  */
 public interface Renderer
 {
-    Collection<String> DEFAULT_ROLES = Arrays.asList( new String[] { Monitor.CONCURRENCY, Monitor.PERFORMANCES } );
+    Collection<Role> DEFAULT_ROLES = Arrays.asList( new Role[] { Monitor.CONCURRENCY, Monitor.PERFORMANCES } );
 
     String getContentType();
 
@@ -43,9 +44,9 @@
     {
         boolean render( Monitor object );
 
-        boolean render( String role, String attribute );
+        boolean render( Role role, String attribute );
 
-        boolean renderRole( String role );
+        boolean renderRole( Role role );
 
         Unit unitFor( StatValue value );
 

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java Tue Apr 15 02:58:28 2008
@@ -58,7 +58,7 @@
     @Override
     public void render( Context ctx, StatValue value, Options options )
     {
-        ctx.println( value.getRole() );
+        ctx.println( value.getRole().getName() );
         super.render( ctx, value, options );
         ctx.println( "" );
     }

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/XmlRenderer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/XmlRenderer.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/XmlRenderer.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/XmlRenderer.java Tue Apr 15 02:58:28 2008
@@ -99,7 +99,7 @@
     public void render( Context ctx, StatValue value, Options options )
     {
         ctx.print( "<" );
-        ctx.print( value.getRole() );
+        ctx.print( value.getRole().getName() );
         super.render( ctx, value, options );
         ctx.print( "/>" );
     }

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/NiceHtmlRenderer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/NiceHtmlRenderer.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/NiceHtmlRenderer.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/NiceHtmlRenderer.java Tue Apr 15 02:58:28 2008
@@ -19,6 +19,7 @@
 
 import java.util.Map;
 
+import org.apache.commons.monitoring.Role;
 import org.apache.commons.monitoring.Unit;
 import org.apache.commons.monitoring.reporting.Context;
 import org.apache.commons.monitoring.reporting.HtmlRenderer;
@@ -94,9 +95,9 @@
 
     @SuppressWarnings("unchecked")
     @Override
-    protected void renderMissingValue( Context ctx, String role )
+    protected void renderMissingValue( Context ctx, Role role )
     {
-        Map<String, Integer> columns = (Map<String, Integer>) ctx.get( "columns" );
+        Map<String, Integer> columns = (Map<String, Integer>) ctx.get( COLUMNS );
         ctx.print( "<td class='not-applicable' colspan='" );
         ctx.print( String.valueOf( columns.get( role ) ) );
         ctx.print( "'>-</td>" );

Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/MonitoringTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/MonitoringTest.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/MonitoringTest.java (original)
+++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/MonitoringTest.java Tue Apr 15 02:58:28 2008
@@ -31,6 +31,10 @@
 public class MonitoringTest
     extends TestCase
 {
+    public final static Role<Counter> COUNTER = new Role<Counter>( "COUNTER", Unit.UNARY );
+
+    public final static Role<Gauge> GAUGE = new Role<Gauge>( "GAUGE", Unit.UNARY );
+
 
     public void testStopWatchConcurrencyMonitoring()
         throws Exception
@@ -69,8 +73,8 @@
                     for ( int j = 0; j < loops; j++ )
                     {
                         Monitor monitor = Monitoring.getMonitor( "MonitoringTest.testMultiThreading", "test", "utils" );
-                        monitor.getCounter( "COUNTER" ).add( 1, Unit.NONE );
-                        monitor.getGauge( "GAUGE" ).increment(Unit.NONE);
+                        monitor.getCounter( COUNTER ).add( 1, Unit.UNARY );
+                        monitor.getGauge( GAUGE ).increment(Unit.UNARY);
                     }
                     try
                     {
@@ -90,11 +94,11 @@
 
         Monitor monitor = Monitoring.getMonitor( "MonitoringTest.testMultiThreading", "test", "utils" );
 
-        Counter counter = monitor.getCounter( "COUNTER" );
+        Counter counter = monitor.getCounter( COUNTER );
         assertEquals( counter.getClass() + " is not thread safe", threads * loops, counter.getHits() );
         assertEquals( counter.getClass() + " is not thread safe", threads * loops, counter.get() );
 
-        Gauge gauge = monitor.getGauge( "GAUGE" );
+        Gauge gauge = monitor.getGauge( GAUGE );
         assertEquals( gauge.getClass() + " is not thread safe", threads * loops, gauge.get() );
     }
 

Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/CompositeValuesMonitorTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/CompositeValuesMonitorTest.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/CompositeValuesMonitorTest.java (original)
+++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/CompositeValuesMonitorTest.java Tue Apr 15 02:58:28 2008
@@ -23,6 +23,7 @@
 import org.apache.commons.monitoring.Counter;
 import org.apache.commons.monitoring.Gauge;
 import org.apache.commons.monitoring.Monitor;
+import org.apache.commons.monitoring.MonitoringTest;
 import org.apache.commons.monitoring.Unit;
 import org.apache.commons.monitoring.impl.monitors.CompositeValuesMonitor;
 
@@ -53,25 +54,25 @@
         throws Exception
     {
         Monitor monitor = new CompositeValuesMonitor( new Monitor.Key( "MonitorTest.testComposite", "test", "utils" ) );
-        Counter counter = monitor.getCounter( "COUNTER" );
+        Counter counter = monitor.getCounter( MonitoringTest.COUNTER );
         Composite<Counter> composite = (Composite<Counter>) counter;
 
-        counter.add( 1, Unit.NANOS );
+        counter.add( 1, Unit.UNARY );
         assertEquals( 1, counter.get() );
 
         Counter secondary = composite.createSecondary();
         assertEquals( 0, secondary.get() );
 
-        counter.add( 1, Unit.NANOS );
+        counter.add( 1, Unit.UNARY );
         assertEquals( 2, counter.get() );
         assertEquals( 1, secondary.get() );
 
-        counter.set( 3, Unit.NANOS );
+        counter.set( 3, Unit.UNARY );
         assertEquals( 3, counter.get() );
         assertEquals( 3, secondary.get() );
 
         composite.removeSecondary( secondary );
-        counter.add( 1, Unit.NANOS );
+        counter.add( 1, Unit.UNARY );
         assertEquals( 4, counter.get() );
         assertEquals( 3, secondary.get() );
     }
@@ -81,36 +82,36 @@
         throws Exception
     {
         Monitor monitor = new CompositeValuesMonitor( new Monitor.Key( "MonitorTest.testComposite", "test", "utils" ) );
-        Gauge gauge = monitor.getGauge( "GAUGE" );
+        Gauge gauge = monitor.getGauge( MonitoringTest.GAUGE );
         Composite<Gauge> composite = (Composite<Gauge>) gauge;
 
-        gauge.increment(Unit.NONE);
+        gauge.increment(Unit.UNARY);
         assertEquals( 1, gauge.get() );
         Gauge secondary = composite.createSecondary();
         assertEquals( 1, secondary.get() );
 
-        gauge.increment(Unit.NONE);
+        gauge.increment(Unit.UNARY);
         assertEquals( 2, gauge.get() );
         assertEquals( 2, secondary.get() );
 
-        gauge.set( 3, Unit.NONE );
+        gauge.set( 3, Unit.UNARY );
         assertEquals( 3, gauge.get() );
         assertEquals( 3, secondary.get() );
 
-        gauge.add( 2, Unit.NONE );
+        gauge.add( 2, Unit.UNARY );
         assertEquals( 5, gauge.get() );
         assertEquals( 5, secondary.get() );
 
-        gauge.increment(Unit.NONE);
+        gauge.increment(Unit.UNARY);
         assertEquals( 6, gauge.get() );
         assertEquals( 6, secondary.get() );
 
-        gauge.decrement(Unit.NONE);
+        gauge.decrement(Unit.UNARY);
         assertEquals( 5, gauge.get() );
         assertEquals( 5, secondary.get() );
 
         composite.removeSecondary( secondary );
-        gauge.decrement(Unit.NONE);
+        gauge.decrement(Unit.UNARY);
         assertEquals( 4, gauge.get() );
         assertEquals( 5, secondary.get() );
     }

Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeCounterTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeCounterTest.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeCounterTest.java (original)
+++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeCounterTest.java Tue Apr 15 02:58:28 2008
@@ -20,6 +20,7 @@
 import junit.framework.TestCase;
 
 import org.apache.commons.monitoring.Counter;
+import org.apache.commons.monitoring.MonitoringTest;
 import org.apache.commons.monitoring.Unit;
 import org.apache.commons.monitoring.impl.values.ThreadSafeCounter;
 
@@ -30,49 +31,25 @@
     public void testValue()
         throws Exception
     {
-        Counter counter = new ThreadSafeCounter( "test" );
+        Counter counter = new ThreadSafeCounter( MonitoringTest.COUNTER );
 
-        counter.set( 1, Unit.NONE );
+        counter.set( 1, Unit.UNARY );
         assertEquals( 1, counter.getMin() );
         assertEquals( 1, counter.getMax() );
         assertEquals( 1, counter.get() );
 
-        counter.add( 10, Unit.NONE );
+        counter.add( 10, Unit.UNARY );
         assertEquals( 1, counter.getMin() );
         assertEquals( 10, counter.getMax() );
         assertEquals( 11, counter.get() );
 
-        counter.add( -2, Unit.NONE );
+        counter.add( -2, Unit.UNARY );
         assertEquals( -2, counter.getMin() );
         assertEquals( 10, counter.getMax() );
         assertEquals( 9, counter.get() );
 
         assertEquals( 3, counter.getHits() );
         assertEquals( 3.0D, counter.getMean(), 0D );
-    }
-
-
-    public void testUnits()
-        throws Exception
-    {
-        Counter counter = new ThreadSafeCounter( "test" );
-        assertNull( counter.getUnit() );
-        counter.set( 10, Unit.NANOS );
-        assertEquals( Unit.NANOS, counter.getUnit() );
-        assertEquals( 10, counter.get() );
-        counter.set( 10, Unit.SECOND );
-        assertEquals( Unit.NANOS, counter.getUnit() );
-        assertEquals( 10000000000L, counter.get() );
-
-        try
-        {
-            counter.add( 1, Unit.NONE );
-            fail( "incompatible unit not detected" );
-        }
-        catch (IllegalArgumentException e)
-        {
-            // Expected
-        }
     }
 
 }

Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeGaugeTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeGaugeTest.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeGaugeTest.java (original)
+++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeGaugeTest.java Tue Apr 15 02:58:28 2008
@@ -20,6 +20,8 @@
 import junit.framework.TestCase;
 
 import org.apache.commons.monitoring.Gauge;
+import org.apache.commons.monitoring.MonitoringTest;
+import org.apache.commons.monitoring.Role;
 import org.apache.commons.monitoring.Unit;
 import org.apache.commons.monitoring.impl.values.ThreadSafeGauge;
 
@@ -31,20 +33,20 @@
     public void testValue()
         throws Exception
     {
-        Gauge gauge = new ThreadSafeGauge( "test" );
+        Gauge gauge = new ThreadSafeGauge( MonitoringTest.GAUGE );
 
-        gauge.set( 1, Unit.NONE );
+        gauge.set( 1, Unit.UNARY );
         assertEquals( 1, gauge.getMin() );
         assertEquals( 1, gauge.getMax() );
         assertEquals( 1, gauge.get() );
 
-        gauge.increment(Unit.NONE);
+        gauge.increment(Unit.UNARY);
         assertEquals( 1, gauge.getMin() );
         assertEquals( 2, gauge.getMax() );
         assertEquals( 2, gauge.get() );
 
-        gauge.decrement(Unit.NONE);
-        gauge.decrement(Unit.NONE);
+        gauge.decrement(Unit.UNARY);
+        gauge.decrement(Unit.UNARY);
         assertEquals( 0, gauge.getMin() );
         assertEquals( 2, gauge.getMax() );
         assertEquals( 0, gauge.get() );
@@ -70,17 +72,17 @@
     public void testCompteMean()
         throws Exception
     {
-        Gauge gauge = new MockTimeGauge( "test" );
+        Gauge gauge = new MockTimeGauge( MonitoringTest.GAUGE );
 
         time = 0;
-        gauge.increment(Unit.NONE);
+        gauge.increment(Unit.UNARY);
         time++;
-        gauge.increment(Unit.NONE);
+        gauge.increment(Unit.UNARY);
         time++;
         time++;
-        gauge.decrement(Unit.NONE);
+        gauge.decrement(Unit.UNARY);
         time++;
-        gauge.decrement(Unit.NONE);
+        gauge.decrement(Unit.UNARY);
 
         assertEquals( 0, gauge.get() );
         assertEquals( 1.5D, gauge.getMean(), 0D );
@@ -96,7 +98,7 @@
         extends ThreadSafeGauge
     {
 
-        public MockTimeGauge( String role )
+        public MockTimeGauge( Role<Gauge> role )
         {
             super( role );
         }

Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/SecondaryReposioryTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/SecondaryReposioryTest.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/SecondaryReposioryTest.java (original)
+++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/SecondaryReposioryTest.java Tue Apr 15 02:58:28 2008
@@ -17,6 +17,8 @@
 
 package org.apache.commons.monitoring.listener;
 
+import static org.apache.commons.monitoring.MonitoringTest.COUNTER;
+import static org.apache.commons.monitoring.MonitoringTest.GAUGE;
 import junit.framework.TestCase;
 
 import org.apache.commons.monitoring.Repository;
@@ -26,7 +28,6 @@
 import org.apache.commons.monitoring.listeners.SecondaryRepository;
 
 /**
- *
  * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
  */
 public class SecondaryReposioryTest
@@ -36,33 +37,33 @@
         throws Exception
     {
         Repository.Observable primary = new DefaultRepository();
-        primary.getMonitor( "test" ).getCounter( "COUNTER" ).add( 10, Unit.NONE );
-        primary.getMonitor( "test" ).getGauge( "GAUGE" ).set( 5, Unit.NONE );
+        primary.getMonitor( "test" ).getCounter( COUNTER ).add( 10, Unit.UNARY );
+        primary.getMonitor( "test" ).getGauge( GAUGE ).set( 5, Unit.UNARY );
 
         SecondaryRepository secondary = new SecondaryRepository( primary );
         assertNotNull( secondary.getMonitor( "test" ) );
         assertNotNull( secondary.getMonitor( "test" ).getCounter( "COUNTER" ) );
-        assertNotNull( secondary.getMonitor( "test" ).getGauge( "GAUGE" ) );
+        assertNotNull( secondary.getMonitor( "test" ).getGauge( GAUGE ) );
         assertEquals( 0, secondary.getMonitor( "test" ).getCounter( "COUNTER" ).get() );
-        assertEquals( 5, secondary.getMonitor( "test" ).getGauge( "GAUGE" ).get() );
+        assertEquals( 5, secondary.getMonitor( "test" ).getGauge( GAUGE ).get() );
 
-        primary.getMonitor( "test" ).getCounter( "COUNTER" ).add( 10, Unit.NONE );
-        primary.getMonitor( "test" ).getGauge( "GAUGE" ).increment(Unit.NONE);
-        assertEquals( 10, secondary.getMonitor( "test" ).getCounter( "COUNTER" ).get() );
-        assertEquals( 6, secondary.getMonitor( "test" ).getGauge( "GAUGE" ).get() );
+        primary.getMonitor( "test" ).getCounter( COUNTER ).add( 10, Unit.UNARY );
+        primary.getMonitor( "test" ).getGauge( GAUGE ).increment( Unit.UNARY );
+        assertEquals( 10, secondary.getMonitor( "test" ).getCounter( COUNTER ).get() );
+        assertEquals( 6, secondary.getMonitor( "test" ).getGauge( GAUGE ).get() );
 
-        primary.getMonitor( "new" ).getCounter( "COUNTER" ).add( 10, Unit.NONE );
-        assertEquals( 10, secondary.getMonitor( "new" ).getCounter( "COUNTER" ).get() );
+        primary.getMonitor( "new" ).getCounter( COUNTER ).add( 10, Unit.UNARY );
+        assertEquals( 10, secondary.getMonitor( "new" ).getCounter( COUNTER ).get() );
 
         secondary.detach();
 
-        primary.getMonitor( "anotherone" ).getCounter( "COUNTER" ).add( 10, Unit.NONE );
-        primary.getMonitor( "test" ).getCounter( "COUNTER" ).add( 10, Unit.NONE );
-        primary.getMonitor( "test" ).getGauge( "GAUGE" ).increment(Unit.NONE);
+        primary.getMonitor( "anotherone" ).getCounter( COUNTER ).add( 10, Unit.UNARY );
+        primary.getMonitor( "test" ).getCounter( COUNTER ).add( 10, Unit.UNARY );
+        primary.getMonitor( "test" ).getGauge( GAUGE ).increment( Unit.UNARY );
         assertTrue( secondary.getMonitor( "anotherone" ) instanceof EmpyMonitor );
-        assertEquals( 30, primary.getMonitor( "test" ).getCounter( "COUNTER" ).get() );
-        assertEquals( 10, secondary.getMonitor( "test" ).getCounter( "COUNTER" ).get() );
-        assertEquals( 7, primary.getMonitor( "test" ).getGauge( "GAUGE" ).get() );
-        assertEquals( 6, secondary.getMonitor( "test" ).getGauge( "GAUGE" ).get() );
+        assertEquals( 30, primary.getMonitor( "test" ).getCounter( COUNTER ).get() );
+        assertEquals( 10, secondary.getMonitor( "test" ).getCounter( COUNTER ).get() );
+        assertEquals( 7, primary.getMonitor( "test" ).getGauge( GAUGE ).get() );
+        assertEquals( 6, secondary.getMonitor( "test" ).getGauge( GAUGE ).get() );
     }
 }

Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/ThresholdListenerTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/ThresholdListenerTest.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/ThresholdListenerTest.java (original)
+++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/ThresholdListenerTest.java Tue Apr 15 02:58:28 2008
@@ -21,6 +21,7 @@
 
 import org.apache.commons.monitoring.Counter;
 import org.apache.commons.monitoring.Monitor;
+import org.apache.commons.monitoring.MonitoringTest;
 import org.apache.commons.monitoring.StatValue;
 import org.apache.commons.monitoring.Unit;
 import org.apache.commons.monitoring.impl.monitors.CreateValuesOnDemandMonitor;
@@ -37,18 +38,18 @@
     {
         final Monitor monitor = new CreateValuesOnDemandMonitor(
             new Monitor.Key( "MonitoringTest.testMonitoring", "test", "utils" ) );
-        Counter counter = monitor.getCounter( Monitor.PERFORMANCES );
+        Counter counter = monitor.getCounter( MonitoringTest.COUNTER );
 
         TestListener listener = new TestListener( monitor );
         counter.addListener( listener );
 
-        counter.add( 1, Unit.NONE );
+        counter.add( 1, Unit.UNARY );
         assertEquals( "unexpected listener notification", 0, listener.count );
-        counter.add( 10, Unit.NONE );
+        counter.add( 10, Unit.UNARY );
         assertEquals( "listener didn't get notified", 1, listener.count );
 
         counter.removeListener( listener );
-        counter.add( 10, Unit.NONE );
+        counter.add( 10, Unit.UNARY );
         assertEquals( "removed listener was notified", 1, listener.count );
     }
 
@@ -68,7 +69,7 @@
         {
             count++;
             assertEquals( 10, l );
-            assertEquals( Monitor.PERFORMANCES, value.getRole() );
+            assertEquals( MonitoringTest.COUNTER, value.getRole() );
             assertEquals( monitor, value.getMonitor() );
         }
 

Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java?rev=648201&r1=648200&r2=648201&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java (original)
+++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java Tue Apr 15 02:58:28 2008
@@ -28,6 +28,7 @@
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.monitoring.Counter;
 import org.apache.commons.monitoring.Monitor;
+import org.apache.commons.monitoring.MonitoringTest;
 import org.apache.commons.monitoring.StatValue;
 import org.apache.commons.monitoring.Unit;
 import org.apache.commons.monitoring.impl.monitors.CreateValuesOnDemandMonitor;
@@ -51,7 +52,7 @@
 
         Monitor m2 = new CreateValuesOnDemandMonitor( new Monitor.Key( "TestCase", "test", "junit" ) );
         m2.getCounter( Monitor.PERFORMANCES );
-        m2.getGauge( Monitor.CONCURRENCY ).increment(Unit.NONE);
+        m2.getGauge( Monitor.CONCURRENCY ).increment(Unit.UNARY);
         monitors.add( m2 );
     }
 
@@ -97,9 +98,9 @@
         };
 
         AbstractRenderer renderer = new XmlRenderer();
-        Counter counter = new ThreadSafeCounter( "test" );
-        counter.add( 1, Unit.MILLIS );
-        counter.add( 1, Unit.MICROS );
+        Counter counter = new ThreadSafeCounter( MonitoringTest.COUNTER );
+        counter.add( 1, Unit.MEGA );
+        counter.add( 1, Unit.KILO );
         StringWriter writer = new StringWriter();
         Context ctx = new Context( new PrintWriter( writer ) );
         renderer.render( ctx, counter, "mean", counter.getMean(), options );