ZEST-190 Refine Metrics API

Simplify metrics naming.
Use “structure path” for UoW metrics and TimingCapture.
@TimingCapture annotation provide a way to override the default name.


Project: http://git-wip-us.apache.org/repos/asf/zest-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/zest-java/commit/aff42823
Tree: http://git-wip-us.apache.org/repos/asf/zest-java/tree/aff42823
Diff: http://git-wip-us.apache.org/repos/asf/zest-java/diff/aff42823

Branch: refs/heads/develop
Commit: aff42823e555277d397a38976d1d56d1363a5690
Parents: cd3053e
Author: Paul Merlin <[email protected]>
Authored: Mon Nov 7 11:53:59 2016 +0100
Committer: Paul Merlin <[email protected]>
Committed: Mon Nov 7 12:02:32 2016 +0100

----------------------------------------------------------------------
 .../apache/zest/api/metrics/MetricNames.java    | 95 ++++++++++++++++++++
 .../zest/api/metrics/MetricsCounterFactory.java |  3 +-
 .../zest/api/metrics/MetricsGaugeFactory.java   |  3 +-
 .../api/metrics/MetricsHealthCheckFactory.java  |  3 +-
 .../api/metrics/MetricsHistogramFactory.java    |  3 +-
 .../zest/api/metrics/MetricsMeterFactory.java   |  3 +-
 .../zest/api/metrics/MetricsTimerFactory.java   |  3 +-
 .../zest/api/metrics/DocumentationSupport.java  | 11 ++-
 .../runtime/unitofwork/UnitOfWorkInstance.java  | 51 +++++------
 .../zest/spi/metrics/NullMetricsFactory.java    | 12 +--
 .../zest/spi/metrics/DefaultMetricsTest.java    | 12 +--
 .../zest/metrics/yammer/YammerHealthCheck.java  |  2 +-
 .../zest/metrics/yammer/YammerMetricsMixin.java | 25 +++---
 .../zest/library/metrics/TimingCapture.java     |  1 +
 .../metrics/TimingCaptureAllConcern.java        | 34 ++++---
 .../library/metrics/TimingCaptureConcern.java   |  7 +-
 .../zest/library/metrics/MetricsTest.java       | 19 ++--
 17 files changed, 191 insertions(+), 96 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zest-java/blob/aff42823/core/api/src/main/java/org/apache/zest/api/metrics/MetricNames.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/apache/zest/api/metrics/MetricNames.java 
b/core/api/src/main/java/org/apache/zest/api/metrics/MetricNames.java
new file mode 100644
index 0000000..a924d4b
--- /dev/null
+++ b/core/api/src/main/java/org/apache/zest/api/metrics/MetricNames.java
@@ -0,0 +1,95 @@
+/*
+ *  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.zest.api.metrics;
+
+import org.apache.zest.api.structure.Module;
+
+import java.lang.reflect.Method;
+import java.util.StringJoiner;
+
+/**
+ * Metric names utilities.
+ */
+public class MetricNames
+{
+    /**
+     * Build a Metric name for the given fragments.
+     *
+     * @param fragments Name fragments
+     * @return Metric name
+     */
+    public static String nameFor( String... fragments )
+    {
+        StringJoiner joiner = new StringJoiner( "." );
+        for( String fragment : fragments )
+        {
+            joiner.add( fragment );
+        }
+        return joiner.toString();
+    }
+
+    /**
+     * Build a Metric name for the given Module, Type and optional fragments.
+     *
+     * @param module Module
+     * @param type Type
+     * @param fragments Name fragments
+     * @return Metric name
+     */
+    public static String nameFor( Module module, Class<?> type, String... 
fragments )
+    {
+        StringJoiner joiner = new StringJoiner( "." )
+                .add( module.layer().name() )
+                .add( module.name() )
+                .add( className( type ) );
+        for( String fragment : fragments )
+        {
+            joiner.add( fragment );
+        }
+        return joiner.toString();
+    }
+
+    /**
+     * Build a Metric name for the given Module, Method and optional fragments.
+     *
+     * @param module Module
+     * @param method Method
+     * @param fragments Name fragments
+     * @return Metric name
+     */
+    public static String nameFor( Module module, Method method, String... 
fragments )
+    {
+        StringJoiner joiner = new StringJoiner( "." )
+                .add( module.layer().name() )
+                .add( module.name() )
+                .add( className( method.getDeclaringClass() ) )
+                .add( method.getName() );
+        for( String fragment : fragments )
+        {
+            joiner.add( fragment );
+        }
+        return joiner.toString();
+    }
+
+    private static String className( Class<?> clazz )
+    {
+        return clazz.getName().substring( clazz.getName().lastIndexOf( '.' ) + 
1 ).replace( '$', '.' );
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/aff42823/core/api/src/main/java/org/apache/zest/api/metrics/MetricsCounterFactory.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/apache/zest/api/metrics/MetricsCounterFactory.java 
b/core/api/src/main/java/org/apache/zest/api/metrics/MetricsCounterFactory.java
index f373b02..5941c39 100644
--- 
a/core/api/src/main/java/org/apache/zest/api/metrics/MetricsCounterFactory.java
+++ 
b/core/api/src/main/java/org/apache/zest/api/metrics/MetricsCounterFactory.java
@@ -29,10 +29,9 @@ public interface MetricsCounterFactory extends MetricsFactory
      * Create a MetricsCounter instance.
      * If the same arguments are given twice, the same instance must be 
returned.
      *
-     * @param origin The class that instantiate the metric
      * @param name   A human readable, short name of the metric.
      *
      * @return A Metric instance to be used, OR 
org.apache.zest.spi.metrics.DefaultMetric.NULL if not supported.
      */
-    MetricsCounter createCounter( Class<?> origin, String name );
+    MetricsCounter createCounter( String name );
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/aff42823/core/api/src/main/java/org/apache/zest/api/metrics/MetricsGaugeFactory.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/apache/zest/api/metrics/MetricsGaugeFactory.java 
b/core/api/src/main/java/org/apache/zest/api/metrics/MetricsGaugeFactory.java
index b4948a1..a5213f6 100644
--- 
a/core/api/src/main/java/org/apache/zest/api/metrics/MetricsGaugeFactory.java
+++ 
b/core/api/src/main/java/org/apache/zest/api/metrics/MetricsGaugeFactory.java
@@ -28,12 +28,11 @@ public interface MetricsGaugeFactory extends MetricsFactory
     /**
      * Register a MetricsGauge with the underlying Metrics system.
      *
-     * @param origin The class where the MetricsGauge is created.
      * @param name   A human readable, short name of the metric.
      * @param gauge  The implementation of the MetricsGauge.
      * @param <T>    Any type holding the MetricsGauge's current value.
      *
      * @return The same MetricsGauge or the DefaultMetric.NULL MetricsGauge 
instance.
      */
-    <T> MetricsGauge<T> registerGauge( Class<?> origin, String name, 
MetricsGauge<T> gauge );
+    <T> MetricsGauge<T> registerGauge( String name, MetricsGauge<T> gauge );
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/aff42823/core/api/src/main/java/org/apache/zest/api/metrics/MetricsHealthCheckFactory.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/apache/zest/api/metrics/MetricsHealthCheckFactory.java
 
b/core/api/src/main/java/org/apache/zest/api/metrics/MetricsHealthCheckFactory.java
index 1a7bb1e..ccc3bf8 100644
--- 
a/core/api/src/main/java/org/apache/zest/api/metrics/MetricsHealthCheckFactory.java
+++ 
b/core/api/src/main/java/org/apache/zest/api/metrics/MetricsHealthCheckFactory.java
@@ -29,12 +29,11 @@ public interface MetricsHealthCheckFactory extends 
MetricsFactory
      * Create a MetricsHealthCheck instance.
      * If the same arguments are given twice, the same instance must be 
returned.
      *
-     * @param origin The class that instantiate the metric
      * @param name   A human readable, short name of the metric.
      * @param check  The health check to be performed regularly.
      *
      * @return A MetricsHealthCheck instance to be used, OR 
org.apache.zest.spi.metrics.DefaultMetric.NULL if not supported.
      *
      */
-    MetricsHealthCheck registerHealthCheck( Class<?> origin, String name, 
MetricsHealthCheck check );
+    MetricsHealthCheck registerHealthCheck( String name, MetricsHealthCheck 
check );
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/aff42823/core/api/src/main/java/org/apache/zest/api/metrics/MetricsHistogramFactory.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/apache/zest/api/metrics/MetricsHistogramFactory.java
 
b/core/api/src/main/java/org/apache/zest/api/metrics/MetricsHistogramFactory.java
index a322883..44e2c8c 100644
--- 
a/core/api/src/main/java/org/apache/zest/api/metrics/MetricsHistogramFactory.java
+++ 
b/core/api/src/main/java/org/apache/zest/api/metrics/MetricsHistogramFactory.java
@@ -29,11 +29,10 @@ public interface MetricsHistogramFactory extends 
MetricsFactory
      * Create a MetricsHistogram instance.
      * If the same arguments are given twice, the same instance must be 
returned.
      *
-     * @param origin The class that instantiate the metric
      * @param name   A human readable, short name of the metric.
      *
      * @return A Metric instance to be used, OR 
org.apache.zest.spi.metrics.DefaultMetric.NULL if not supported.
      *
      */
-    MetricsHistogram createHistogram( Class<?> origin, String name );
+    MetricsHistogram createHistogram( String name );
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/aff42823/core/api/src/main/java/org/apache/zest/api/metrics/MetricsMeterFactory.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/apache/zest/api/metrics/MetricsMeterFactory.java 
b/core/api/src/main/java/org/apache/zest/api/metrics/MetricsMeterFactory.java
index ddafbe0..cad8f57 100644
--- 
a/core/api/src/main/java/org/apache/zest/api/metrics/MetricsMeterFactory.java
+++ 
b/core/api/src/main/java/org/apache/zest/api/metrics/MetricsMeterFactory.java
@@ -29,10 +29,9 @@ public interface MetricsMeterFactory extends MetricsFactory
      * Create a MetricsMeter instance.
      * If the same arguments are given twice, the same instance must be 
returned.
      *
-     * @param origin    The class that instantiate the metric
      * @param name      A human readable, short name of the metric.
      *
      * @return A Metric instance to be used, OR 
org.apache.zest.spi.metrics.DefaultMetric.NULL if not supported.
      */
-    MetricsMeter createMeter( Class<?> origin, String name );
+    MetricsMeter createMeter( String name );
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/aff42823/core/api/src/main/java/org/apache/zest/api/metrics/MetricsTimerFactory.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/apache/zest/api/metrics/MetricsTimerFactory.java 
b/core/api/src/main/java/org/apache/zest/api/metrics/MetricsTimerFactory.java
index 3c015b2..3139a19 100644
--- 
a/core/api/src/main/java/org/apache/zest/api/metrics/MetricsTimerFactory.java
+++ 
b/core/api/src/main/java/org/apache/zest/api/metrics/MetricsTimerFactory.java
@@ -29,11 +29,10 @@ public interface MetricsTimerFactory extends MetricsFactory
      * Create a MetricsTimer instance.
      * If the same arguments are given twice, the same instance must be 
returned.
      *
-     * @param origin   The class that instantiate the metric
      * @param name     A human readable, short name of the metric.
      *
      * @return A Metric instance to be used, OR 
org.apache.zest.spi.metrics.DefaultMetric.NULL if not supported.
      *
      */
-    MetricsTimer createTimer( Class<?> origin, String name );
+    MetricsTimer createTimer( String name );
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/aff42823/core/api/src/test/java/org/apache/zest/api/metrics/DocumentationSupport.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/test/java/org/apache/zest/api/metrics/DocumentationSupport.java 
b/core/api/src/test/java/org/apache/zest/api/metrics/DocumentationSupport.java
index ad71b76..0a224d7 100644
--- 
a/core/api/src/test/java/org/apache/zest/api/metrics/DocumentationSupport.java
+++ 
b/core/api/src/test/java/org/apache/zest/api/metrics/DocumentationSupport.java
@@ -39,7 +39,7 @@ public class DocumentationSupport
         // END SNIPPET: gauge
         // START SNIPPET: gauge
         MetricsGaugeFactory gaugeFactory = provider.createFactory( 
MetricsGaugeFactory.class );
-        MetricsGauge<Integer> gauge = gaugeFactory.registerGauge( getClass(), 
"Sample Gauge", new MetricsGauge<Integer>()
+        MetricsGauge<Integer> gauge = gaugeFactory.registerGauge( "Sample 
Gauge", new MetricsGauge<Integer>()
         {
             @Override
             public Integer value()
@@ -51,28 +51,27 @@ public class DocumentationSupport
 
         // START SNIPPET: counter
         MetricsCounterFactory counterFactory = provider.createFactory( 
MetricsCounterFactory.class );
-        MetricsCounter counter = counterFactory.createCounter( getClass(), 
"Sample Counter" );
+        MetricsCounter counter = counterFactory.createCounter( "Sample 
Counter" );
         // END SNIPPET: counter
 
         // START SNIPPET: histogram
         MetricsHistogramFactory histoFactory = provider.createFactory( 
MetricsHistogramFactory.class );
-        MetricsHistogram histogram = histoFactory.createHistogram( getClass(), 
"Sample Histogram" );
+        MetricsHistogram histogram = histoFactory.createHistogram( "Sample 
Histogram" );
         // END SNIPPET: histogram
 
         // START SNIPPET: meter
         MetricsMeterFactory meterFactory = provider.createFactory( 
MetricsMeterFactory.class );
-        MetricsMeter meter = meterFactory.createMeter( getClass(), "Sample 
Meter" );
+        MetricsMeter meter = meterFactory.createMeter( "Sample Meter" );
         // END SNIPPET: meter
 
         // START SNIPPET: timer
         MetricsTimerFactory timerFactory = provider.createFactory( 
MetricsTimerFactory.class );
-        MetricsTimer timer = timerFactory.createTimer( getClass(), "Sample 
Timer" );
+        MetricsTimer timer = timerFactory.createTimer( "Sample Timer" );
         // END SNIPPET: timer
 
         // START SNIPPET: healthcheck
         MetricsHealthCheckFactory healthFactory = provider.createFactory( 
MetricsHealthCheckFactory.class );
         MetricsHealthCheck healthCheck = healthFactory.registerHealthCheck(
-            getClass(),
             "Sample Healthcheck",
             new MetricsHealthCheck()
             {

http://git-wip-us.apache.org/repos/asf/zest-java/blob/aff42823/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/UnitOfWorkInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/UnitOfWorkInstance.java
 
b/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/UnitOfWorkInstance.java
index 4dca0fd..cf329b2 100644
--- 
a/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/UnitOfWorkInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/UnitOfWorkInstance.java
@@ -31,6 +31,7 @@ import org.apache.zest.api.common.MetaInfo;
 import org.apache.zest.api.entity.EntityComposite;
 import org.apache.zest.api.entity.EntityDescriptor;
 import org.apache.zest.api.entity.EntityReference;
+import org.apache.zest.api.metrics.MetricNames;
 import org.apache.zest.api.metrics.MetricsCounter;
 import org.apache.zest.api.metrics.MetricsCounterFactory;
 import org.apache.zest.api.metrics.MetricsProvider;
@@ -56,7 +57,6 @@ import 
org.apache.zest.spi.entitystore.EntityNotFoundException;
 import org.apache.zest.spi.entitystore.EntityStore;
 import org.apache.zest.spi.entitystore.EntityStoreUnitOfWork;
 import org.apache.zest.spi.entitystore.StateCommitter;
-import org.apache.zest.spi.metrics.DefaultMetric;
 import org.apache.zest.spi.module.ModuleSpi;
 
 import static 
org.apache.zest.api.unitofwork.UnitOfWorkCallback.UnitOfWorkStatus.COMPLETED;
@@ -88,7 +88,9 @@ public final class UnitOfWorkInstance
     private boolean open;
     private boolean paused;
 
-    private MetricsTimer.Context metricsTimer;
+    private MetricsCounter metricsCounter;
+    private MetricsTimer metricsTimer;
+    private MetricsTimer.Context metricsTimerContext;
     private MetaInfo metaInfo;
     private List<UnitOfWorkCallback> callbacks;
 
@@ -473,45 +475,36 @@ public final class UnitOfWorkInstance
         instanceCache.remove( entityReference );
     }
 
-    private void incrementCount()
+    private void startCapture()
     {
-        MetricsCounter counter = getCounter();
-        counter.increment();
+        getMetricsCounter().increment();
+        metricsTimerContext = getMetricsTimer().start();
     }
 
-    private void decrementCount()
+    private void endCapture()
     {
-        MetricsCounter counter = getCounter();
-        counter.decrement();
+        getMetricsCounter().decrement();
+        metricsTimerContext.stop();
+        metricsTimerContext = null;
     }
 
-    private MetricsCounter getCounter()
+    private MetricsCounter getMetricsCounter()
     {
-        if( metrics != null )
+        if( metricsCounter == null )
         {
             MetricsCounterFactory metricsFactory = metrics.createFactory( 
MetricsCounterFactory.class );
-            return metricsFactory.createCounter( getClass(), "UnitOfWork 
Counter" );
+            metricsCounter = metricsFactory.createCounter( 
MetricNames.nameFor( module, UnitOfWork.class, "counter" ) );
         }
-        return new DefaultMetric();
-    }
-
-    private void endCapture()
-    {
-        decrementCount();
-        metricsTimer.stop();
+        return metricsCounter;
     }
 
-    private void startCapture()
-    {
-        incrementCount();
-        startTimer( metrics );
-    }
-
-    private void startTimer( MetricsProvider metrics )
+    private MetricsTimer getMetricsTimer()
     {
-        MetricsTimerFactory metricsFactory = metrics.createFactory( 
MetricsTimerFactory.class );
-        String name = "UnitOfWork Timer";
-        MetricsTimer timer = metricsFactory.createTimer( getClass(), name );
-        metricsTimer = timer.start();
+        if( metricsTimer == null )
+        {
+            MetricsTimerFactory metricsFactory = metrics.createFactory( 
MetricsTimerFactory.class );
+            metricsTimer = metricsFactory.createTimer( MetricNames.nameFor( 
module, UnitOfWork.class, "timer" ) );
+        }
+        return metricsTimer;
     }
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/aff42823/core/spi/src/main/java/org/apache/zest/spi/metrics/NullMetricsFactory.java
----------------------------------------------------------------------
diff --git 
a/core/spi/src/main/java/org/apache/zest/spi/metrics/NullMetricsFactory.java 
b/core/spi/src/main/java/org/apache/zest/spi/metrics/NullMetricsFactory.java
index 20a0c8d..bb74775 100644
--- a/core/spi/src/main/java/org/apache/zest/spi/metrics/NullMetricsFactory.java
+++ b/core/spi/src/main/java/org/apache/zest/spi/metrics/NullMetricsFactory.java
@@ -43,7 +43,7 @@ public final class NullMetricsFactory
     public static class NullCounterFactory implements MetricsCounterFactory
     {
         @Override
-        public MetricsCounter createCounter( Class<?> origin, String name )
+        public MetricsCounter createCounter( String name )
         {
             return DefaultMetric.NULL;
         }
@@ -59,7 +59,7 @@ public final class NullMetricsFactory
     {
         @Override
         @SuppressWarnings( "unchecked" )
-        public <T> MetricsGauge<T> registerGauge( Class<?> origin, String 
name, MetricsGauge<T> gauge )
+        public <T> MetricsGauge<T> registerGauge( String name, MetricsGauge<T> 
gauge )
         {
             return DefaultMetric.NULL;
         }
@@ -74,7 +74,7 @@ public final class NullMetricsFactory
     public static class NullHealthCheckFactory implements 
MetricsHealthCheckFactory
     {
         @Override
-        public MetricsHealthCheck registerHealthCheck( Class<?> origin, String 
name, MetricsHealthCheck check )
+        public MetricsHealthCheck registerHealthCheck( String name, 
MetricsHealthCheck check )
         {
             return DefaultMetric.NULL;
         }
@@ -89,7 +89,7 @@ public final class NullMetricsFactory
     public static class NullHistogramFactory implements MetricsHistogramFactory
     {
         @Override
-        public MetricsHistogram createHistogram( Class<?> origin, String name )
+        public MetricsHistogram createHistogram( String name )
         {
             return DefaultMetric.NULL;
         }
@@ -104,7 +104,7 @@ public final class NullMetricsFactory
     public static class NullMeterFactory implements MetricsMeterFactory
     {
         @Override
-        public MetricsMeter createMeter( Class<?> origin, String name )
+        public MetricsMeter createMeter( String name )
         {
 
             return DefaultMetric.NULL;
@@ -120,7 +120,7 @@ public final class NullMetricsFactory
     public static class NullTimerFactory implements MetricsTimerFactory
     {
         @Override
-        public MetricsTimer createTimer( Class<?> origin, String name )
+        public MetricsTimer createTimer( String name )
         {
             return DefaultMetric.NULL;
         }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/aff42823/core/spi/src/test/java/org/apache/zest/spi/metrics/DefaultMetricsTest.java
----------------------------------------------------------------------
diff --git 
a/core/spi/src/test/java/org/apache/zest/spi/metrics/DefaultMetricsTest.java 
b/core/spi/src/test/java/org/apache/zest/spi/metrics/DefaultMetricsTest.java
index 284c23a..66afa37 100644
--- a/core/spi/src/test/java/org/apache/zest/spi/metrics/DefaultMetricsTest.java
+++ b/core/spi/src/test/java/org/apache/zest/spi/metrics/DefaultMetricsTest.java
@@ -47,7 +47,7 @@ public class DefaultMetricsTest
     {
         MetricsProvider underTest = new MetricsProviderAdapter();
         MetricsCounterFactory factory = underTest.createFactory( 
MetricsCounterFactory.class );
-        MetricsCounter test = factory.createCounter( getClass(), "test" );
+        MetricsCounter test = factory.createCounter( "test" );
         test.increment();
         test.decrement();
     }
@@ -57,7 +57,7 @@ public class DefaultMetricsTest
     {
         MetricsProvider underTest = new MetricsProviderAdapter();
         MetricsGaugeFactory factory = underTest.createFactory( 
MetricsGaugeFactory.class );
-        MetricsGauge<Instant> test = factory.registerGauge( getClass(), 
"test", new MetricsGauge<Instant>()
+        MetricsGauge<Instant> test = factory.registerGauge( "test", new 
MetricsGauge<Instant>()
         {
             @Override
             public Instant value()
@@ -74,7 +74,7 @@ public class DefaultMetricsTest
     {
         MetricsProvider underTest = new MetricsProviderAdapter();
         MetricsHealthCheckFactory factory = underTest.createFactory( 
MetricsHealthCheckFactory.class );
-        MetricsHealthCheck test = factory.registerHealthCheck( getClass(), 
"test", new MetricsHealthCheck()
+        MetricsHealthCheck test = factory.registerHealthCheck( "test", new 
MetricsHealthCheck()
         {
             @Override
             public Result check()
@@ -91,7 +91,7 @@ public class DefaultMetricsTest
     {
         MetricsProvider underTest = new MetricsProviderAdapter();
         MetricsHistogramFactory factory = underTest.createFactory( 
MetricsHistogramFactory.class );
-        MetricsHistogram test = factory.createHistogram( getClass(), "test" );
+        MetricsHistogram test = factory.createHistogram( "test" );
         test.update( 5L );
         test.update( 5L );
         test.update( 5L );
@@ -102,7 +102,7 @@ public class DefaultMetricsTest
     {
         MetricsProvider underTest = new MetricsProviderAdapter();
         MetricsMeterFactory factory = underTest.createFactory( 
MetricsMeterFactory.class );
-        MetricsMeter test = factory.createMeter( getClass(), "test" );
+        MetricsMeter test = factory.createMeter( "test" );
         test.mark();
         test.mark();
         test.mark();
@@ -113,7 +113,7 @@ public class DefaultMetricsTest
     {
         MetricsProvider underTest = new MetricsProviderAdapter();
         MetricsTimerFactory factory = underTest.createFactory( 
MetricsTimerFactory.class );
-        MetricsTimer test = factory.createTimer( getClass(), "test" );
+        MetricsTimer test = factory.createTimer( "test" );
         test.start().stop();
     }
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/aff42823/extensions/metrics-yammer/src/main/java/org/apache/zest/metrics/yammer/YammerHealthCheck.java
----------------------------------------------------------------------
diff --git 
a/extensions/metrics-yammer/src/main/java/org/apache/zest/metrics/yammer/YammerHealthCheck.java
 
b/extensions/metrics-yammer/src/main/java/org/apache/zest/metrics/yammer/YammerHealthCheck.java
index 76439d1..7c272af 100644
--- 
a/extensions/metrics-yammer/src/main/java/org/apache/zest/metrics/yammer/YammerHealthCheck.java
+++ 
b/extensions/metrics-yammer/src/main/java/org/apache/zest/metrics/yammer/YammerHealthCheck.java
@@ -29,7 +29,7 @@ public class YammerHealthCheck
 {
     private MetricsHealthCheck check;
 
-    public YammerHealthCheck( Class<?> origin, String name, final 
MetricsHealthCheck check )
+    public YammerHealthCheck( String name, final MetricsHealthCheck check )
     {
         this.check = check;
         HealthChecks.register( new HealthCheck( name )

http://git-wip-us.apache.org/repos/asf/zest-java/blob/aff42823/extensions/metrics-yammer/src/main/java/org/apache/zest/metrics/yammer/YammerMetricsMixin.java
----------------------------------------------------------------------
diff --git 
a/extensions/metrics-yammer/src/main/java/org/apache/zest/metrics/yammer/YammerMetricsMixin.java
 
b/extensions/metrics-yammer/src/main/java/org/apache/zest/metrics/yammer/YammerMetricsMixin.java
index be92066..302a443 100644
--- 
a/extensions/metrics-yammer/src/main/java/org/apache/zest/metrics/yammer/YammerMetricsMixin.java
+++ 
b/extensions/metrics-yammer/src/main/java/org/apache/zest/metrics/yammer/YammerMetricsMixin.java
@@ -23,6 +23,7 @@ package org.apache.zest.metrics.yammer;
 import com.yammer.metrics.Metrics;
 import com.yammer.metrics.core.Counter;
 import com.yammer.metrics.core.Gauge;
+import com.yammer.metrics.core.MetricName;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Stream;
 import org.apache.zest.api.injection.scope.Structure;
@@ -54,9 +55,9 @@ public class YammerMetricsMixin extends MetricsProviderAdapter
         return new MetricsTimerFactory()
         {
             @Override
-            public MetricsTimer createTimer( Class<?> origin, String name )
+            public MetricsTimer createTimer( String name )
             {
-                return new YammerTimer( Metrics.newTimer( origin, name, 
app.name(), TimeUnit.MILLISECONDS, TimeUnit.SECONDS ) );
+                return new YammerTimer( Metrics.newTimer( new MetricName( "", 
"", name ), TimeUnit.MILLISECONDS, TimeUnit.SECONDS ) );
             }
 
             @Override
@@ -73,9 +74,9 @@ public class YammerMetricsMixin extends MetricsProviderAdapter
         return new MetricsMeterFactory()
         {
             @Override
-            public MetricsMeter createMeter( Class<?> origin, String name )
+            public MetricsMeter createMeter( String name )
             {
-                return new YammerMeter( Metrics.newMeter( origin, name, 
app.name(), TimeUnit.MILLISECONDS ) );
+                return new YammerMeter( Metrics.newMeter( new MetricName( "" , 
"", name ), "", TimeUnit.MILLISECONDS ) );
             }
 
             @Override
@@ -92,9 +93,9 @@ public class YammerMetricsMixin extends MetricsProviderAdapter
         return new MetricsHistogramFactory()
         {
             @Override
-            public MetricsHistogram createHistogram( Class<?> origin, String 
name )
+            public MetricsHistogram createHistogram( String name )
             {
-                return new YammerHistogram( Metrics.newHistogram( origin, 
name, app.name() ) );
+                return new YammerHistogram( Metrics.newHistogram( new 
MetricName( "", "", name ) ) );
             }
 
             @Override
@@ -111,9 +112,9 @@ public class YammerMetricsMixin extends 
MetricsProviderAdapter
         return new MetricsHealthCheckFactory()
         {
             @Override
-            public MetricsHealthCheck registerHealthCheck( Class<?> origin, 
String name, MetricsHealthCheck check )
+            public MetricsHealthCheck registerHealthCheck( String name, 
MetricsHealthCheck check )
             {
-                return new YammerHealthCheck( origin, name, check );
+                return new YammerHealthCheck( name, check );
             }
 
             @Override
@@ -130,9 +131,9 @@ public class YammerMetricsMixin extends 
MetricsProviderAdapter
         return new MetricsGaugeFactory()
         {
             @Override
-            public <T> MetricsGauge<T> registerGauge( Class<?> origin, String 
name, final MetricsGauge<T> gauge )
+            public <T> MetricsGauge<T> registerGauge( String name, final 
MetricsGauge<T> gauge )
             {
-                Gauge<T> yammer = Metrics.newGauge( origin, name, app.name(), 
new Gauge<T>()
+                Gauge<T> yammer = Metrics.newGauge( new MetricName( "", "", 
name ), new Gauge<T>()
                 {
 
                     @Override
@@ -158,9 +159,9 @@ public class YammerMetricsMixin extends 
MetricsProviderAdapter
         return new MetricsCounterFactory()
         {
             @Override
-            public MetricsCounter createCounter( Class<?> origin, String name )
+            public MetricsCounter createCounter( String name )
             {
-                Counter counter = Metrics.newCounter( origin, name, app.name() 
);
+                Counter counter = Metrics.newCounter( new MetricName( "", "", 
name ) );
                 return new YammerCounter( counter );
             }
 

http://git-wip-us.apache.org/repos/asf/zest-java/blob/aff42823/libraries/metrics/src/main/java/org/apache/zest/library/metrics/TimingCapture.java
----------------------------------------------------------------------
diff --git 
a/libraries/metrics/src/main/java/org/apache/zest/library/metrics/TimingCapture.java
 
b/libraries/metrics/src/main/java/org/apache/zest/library/metrics/TimingCapture.java
index f1dbaa0..8e34f43 100644
--- 
a/libraries/metrics/src/main/java/org/apache/zest/library/metrics/TimingCapture.java
+++ 
b/libraries/metrics/src/main/java/org/apache/zest/library/metrics/TimingCapture.java
@@ -33,4 +33,5 @@ import org.apache.zest.api.injection.InjectionScope;
 @InjectionScope
 public @interface TimingCapture
 {
+    String value() default "";
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/aff42823/libraries/metrics/src/main/java/org/apache/zest/library/metrics/TimingCaptureAllConcern.java
----------------------------------------------------------------------
diff --git 
a/libraries/metrics/src/main/java/org/apache/zest/library/metrics/TimingCaptureAllConcern.java
 
b/libraries/metrics/src/main/java/org/apache/zest/library/metrics/TimingCaptureAllConcern.java
index 015f1d8..dcb4cdb 100644
--- 
a/libraries/metrics/src/main/java/org/apache/zest/library/metrics/TimingCaptureAllConcern.java
+++ 
b/libraries/metrics/src/main/java/org/apache/zest/library/metrics/TimingCaptureAllConcern.java
@@ -26,34 +26,44 @@ import org.apache.zest.api.common.Optional;
 import org.apache.zest.api.concern.ConcernOf;
 import org.apache.zest.api.injection.scope.Invocation;
 import org.apache.zest.api.injection.scope.Service;
+import org.apache.zest.api.injection.scope.Structure;
+import org.apache.zest.api.metrics.MetricNames;
 import org.apache.zest.api.metrics.MetricsProvider;
 import org.apache.zest.api.metrics.MetricsTimer;
 import org.apache.zest.api.metrics.MetricsTimerFactory;
+import org.apache.zest.api.structure.Module;
 
 public class TimingCaptureAllConcern extends ConcernOf<InvocationHandler>
     implements InvocationHandler
 {
-    private MetricsTimer timer;
+    private final MetricsTimer timer;
 
-    public TimingCaptureAllConcern( @Service @Optional MetricsProvider metrics,
+    public TimingCaptureAllConcern( @Structure Module module,
+                                    @Service @Optional MetricsProvider metrics,
                                     @Invocation Method method
     )
     {
-        if( metrics != null )
+        if( metrics == null )
+        {
+            timer = null;
+        }
+        else
         {
             MetricsTimerFactory factory = metrics.createFactory( 
MetricsTimerFactory.class );
-            boolean annotated = method.getAnnotation( TimingCapture.class ) != 
null;
-            String captureNme = getMethodName( method ) + "() ["  +( annotated 
? "@" : "" ) + "TimingCapture" + "]";
-            Class<?> declaringClass = method.getDeclaringClass();
-            timer = factory.createTimer( declaringClass, captureNme );
+            TimingCapture capture = method.getAnnotation( TimingCapture.class 
);
+            String timerName;
+            if( capture == null || "".equals( capture.value() ) )
+            {
+                timerName = MetricNames.nameFor( module, method );
+            }
+            else
+            {
+                timerName = capture.value();
+            }
+            timer = factory.createTimer( timerName );
         }
     }
 
-    private String getMethodName( Method method )
-    {
-        return method.getName();
-    }
-
     @Override
     public Object invoke( Object proxy, Method method, Object[] args )
         throws Throwable

http://git-wip-us.apache.org/repos/asf/zest-java/blob/aff42823/libraries/metrics/src/main/java/org/apache/zest/library/metrics/TimingCaptureConcern.java
----------------------------------------------------------------------
diff --git 
a/libraries/metrics/src/main/java/org/apache/zest/library/metrics/TimingCaptureConcern.java
 
b/libraries/metrics/src/main/java/org/apache/zest/library/metrics/TimingCaptureConcern.java
index 546b057..423cbe5 100644
--- 
a/libraries/metrics/src/main/java/org/apache/zest/library/metrics/TimingCaptureConcern.java
+++ 
b/libraries/metrics/src/main/java/org/apache/zest/library/metrics/TimingCaptureConcern.java
@@ -25,17 +25,20 @@ import org.apache.zest.api.common.AppliesTo;
 import org.apache.zest.api.common.Optional;
 import org.apache.zest.api.injection.scope.Invocation;
 import org.apache.zest.api.injection.scope.Service;
+import org.apache.zest.api.injection.scope.Structure;
 import org.apache.zest.api.metrics.MetricsProvider;
+import org.apache.zest.api.structure.Module;
 
 @AppliesTo( TimingCapture.class )
 public class TimingCaptureConcern extends TimingCaptureAllConcern
 {
 
-    public TimingCaptureConcern( @Service @Optional MetricsProvider metrics,
+    public TimingCaptureConcern( @Structure Module module,
+                                 @Service @Optional MetricsProvider metrics,
                                  @Invocation Method method
     )
     {
-        super( metrics, method );
+        super( module, metrics, method );
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/zest-java/blob/aff42823/libraries/metrics/src/test/java/org/apache/zest/library/metrics/MetricsTest.java
----------------------------------------------------------------------
diff --git 
a/libraries/metrics/src/test/java/org/apache/zest/library/metrics/MetricsTest.java
 
b/libraries/metrics/src/test/java/org/apache/zest/library/metrics/MetricsTest.java
index 5f36d06..1aa22bd 100644
--- 
a/libraries/metrics/src/test/java/org/apache/zest/library/metrics/MetricsTest.java
+++ 
b/libraries/metrics/src/test/java/org/apache/zest/library/metrics/MetricsTest.java
@@ -87,6 +87,7 @@ public class MetricsTest extends AbstractZestTest
         Country underTest = transientBuilderFactory.newTransient( 
Country1.class );
         String result = runTest( underTest );
         result = result.replace( "\r", "" );
+        System.out.println( result );
         assertTrue( lastLine( result, 1 ).contains( "=====================" ) 
);
         System.out.println( "---END TEST---" );
     }
@@ -97,9 +98,9 @@ public class MetricsTest extends AbstractZestTest
         Country underTest = transientBuilderFactory.newTransient( 
Country2.class );
         String result = runTest( underTest );
         result = result.replace( "\r", "" );
-        assertThat( lastLine( result, 34 ), equalTo( 
"org.apache.zest.library.metrics.Country.SomeApplication:" ) );
-        assertThat( lastLine( result, 33 ).trim(), equalTo( "name() 
[TimingCapture]:" ) );
-        assertThat( lastLine( result, 16 ).trim(), equalTo( "updateName() 
[TimingCapture]:" ) );
+        System.out.println( result );
+        assertThat( lastLine( result, 33 ).trim(), equalTo( "Layer 1.Module 
1.MetricsTest.Country.name:" ) );
+        assertThat( lastLine( result, 16 ).trim(), equalTo( "Layer 1.Module 
1.MetricsTest.Country.updateName:" ) );
         assertTrue( lastLine( result, 5 ).contains( "75% <=" ) );
         assertTrue( lastLine( result, 4 ).contains( "95% <=" ) );
         assertTrue( lastLine( result, 3 ).contains( "98% <=" ) );
@@ -114,8 +115,8 @@ public class MetricsTest extends AbstractZestTest
         Country underTest = transientBuilderFactory.newTransient( 
Country3.class );
         String result = runTest( underTest );
         result = result.replace( "\r", "" );
-        assertThat( lastLine( result, 17 ), equalTo( 
"org.apache.zest.library.metrics.Country.SomeApplication:" ) );
-        assertThat( lastLine( result, 16 ).trim(), equalTo( "updateName() 
[TimingCapture]:" ) );
+        System.out.println( result );
+        assertThat( lastLine( result, 16 ).trim(), equalTo( 
"Country3.updateName:" ) );
         assertTrue( lastLine( result, 5 ).contains( "75% <=" ) );
         assertTrue( lastLine( result, 4 ).contains( "95% <=" ) );
         assertTrue( lastLine( result, 3 ).contains( "98% <=" ) );
@@ -132,7 +133,6 @@ public class MetricsTest extends AbstractZestTest
 
     private String runTest( Country underTest )
     {
-
         for( int i = 0; i < 1000000; i++ )
         {
             underTest.updateName( "Name" + i );
@@ -153,13 +153,11 @@ public class MetricsTest extends AbstractZestTest
     @Mixins( Country1Mixin.class )
     public interface Country1 extends Country
     {
-
     }
 
     public static abstract class Country1Mixin
         implements Country1
     {
-
         @Override
         public void updateName( String newName )
         {
@@ -175,7 +173,6 @@ public class MetricsTest extends AbstractZestTest
     public static abstract class Country2Mixin
         implements Country2
     {
-
         @Override
         public void updateName( String newName )
         {
@@ -187,13 +184,15 @@ public class MetricsTest extends AbstractZestTest
     @Concerns( TimingCaptureConcern.class )
     public interface Country3 extends Country
     {
+        @TimingCapture( "Country3.updateName" )
+        @Override
+        void updateName(String newName);
     }
 
     public static abstract class Country3Mixin
         implements Country3
     {
         @Override
-        @TimingCapture
         public void updateName( String newName )
         {
             name().set( newName );

Reply via email to