Author: rmannibucau Date: Thu Aug 1 11:53:36 2013 New Revision: 1509181 URL: http://svn.apache.org/r1509181 Log: cleaning up repository/counter APIs
Removed: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/ResetHandler.java Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/configuration/Configuration.java commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counter/queuemanager/DefaultMetricQueueManager.java commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/repositories/DefaultRepository.java commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/repositories/Repository.java commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/ReportHandler.java commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/report/report.vm Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/configuration/Configuration.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/configuration/Configuration.java?rev=1509181&r1=1509180&r2=1509181&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/configuration/Configuration.java (original) +++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/configuration/Configuration.java Thu Aug 1 11:53:36 2013 @@ -19,12 +19,15 @@ package org.apache.commons.monitoring.co import org.apache.commons.monitoring.MonitoringException; import org.apache.commons.monitoring.util.ClassLoaders; -import java.io.Closeable; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; -import java.io.IOException; import java.io.InputStream; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; import java.util.Properties; @@ -34,20 +37,12 @@ import java.util.logging.Logger; public final class Configuration { private static final Logger LOGGER = Logger.getLogger(Configuration.class.getName()); - private static final Collection<Closeable> INSTANCES = new ArrayList<Closeable>(); + private static final Collection<ToDestroy> INSTANCES = new ArrayList<ToDestroy>(); public static final String COMMONS_MONITORING_PREFIX = "org.apache.commons.monitoring."; private static final String DEFAULT_CONFIGURATION_FILE = "commons-monitoring.properties"; - public static enum Keys { - JMX("org.apache.commons.monitoring.jmx"); - - public final String key; - - Keys(final String s) { - key = s; - } - } + private static Thread shutdownHook = null; private static final Properties PROPERTIES = new Properties(System.getProperties()); static { @@ -69,7 +64,7 @@ public final class Configuration { return ClassLoaders.current().getResourceAsStream(filename); } - public static <T> T newInstance(final Class<T> clazz) { + public static synchronized <T> T newInstance(final Class<T> clazz) { try { String config = PROPERTIES.getProperty(clazz.getName()); if (config == null) { @@ -84,19 +79,29 @@ public final class Configuration { } final Object instance = loadedClass.newInstance(); - if (Closeable.class.isInstance(instance)) { - INSTANCES.add(Closeable.class.cast(instance)); + for (final Method m : loadedClass.getMethods()) { + if (m.getAnnotation(Created.class) != null) { + m.invoke(instance); + } else if (m.getAnnotation(Destroying.class) != null) { + if (is("org.apache.commons.monitoring.shutdown.hook", false) && shutdownHook == null) { + shutdownHook = new Thread() { + @Override + public void run() { + shutdown(); + } + }; + Runtime.getRuntime().addShutdownHook(shutdownHook); + } + INSTANCES.add(new ToDestroy(m, instance)); + } } + return clazz.cast(instance); } catch (final Exception e) { throw new MonitoringException(e); } } - public static boolean isActivated(final Keys key) { - return Boolean.parseBoolean(getProperty(key.key, "false")); - } - public static boolean is(final String key, final boolean defaultValue) { return Boolean.parseBoolean(getProperty(key, Boolean.toString(defaultValue))); } @@ -106,12 +111,8 @@ public final class Configuration { } public static void shutdown() { - for (final Closeable c : INSTANCES) { - try { - c.close(); - } catch (IOException e) { - // no-op - } + for (final ToDestroy c : INSTANCES) { + c.destroy(); } INSTANCES.clear(); } @@ -119,4 +120,32 @@ public final class Configuration { private Configuration() { // no-op } + + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + public static @interface Created { + } + + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + public static @interface Destroying { + } + + private static class ToDestroy { + private final Method method; + private final Object target; + + public ToDestroy(final Method m, final Object instance) { + this.method = m; + this.target = instance; + } + + public void destroy() { + try { + method.invoke(target); + } catch (final Exception e) { + // no-op + } + } + } } Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counter/queuemanager/DefaultMetricQueueManager.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counter/queuemanager/DefaultMetricQueueManager.java?rev=1509181&r1=1509180&r2=1509181&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counter/queuemanager/DefaultMetricQueueManager.java (original) +++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counter/queuemanager/DefaultMetricQueueManager.java Thu Aug 1 11:53:36 2013 @@ -47,7 +47,6 @@ import com.lmax.disruptor.dsl.ProducerTy import org.apache.commons.monitoring.counter.DefaultCounter; import org.apache.commons.monitoring.util.DaemonThreadFactory; -import java.io.Closeable; import java.io.IOException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -55,7 +54,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; -public class DisruptorMetricQueueManager implements MetricQueueManager, Closeable { +public class DisruptorMetricQueueManager implements MetricQueueManager { private static final Logger LOGGER = Logger.getLogger(DefaultCounter.class.getName()); private static final int RINGBUFFER_DEFAULT_SIZE = 256 * 1024; @@ -92,8 +91,8 @@ public class DisruptorMetricQueueManager DISRUPTOR.publishEvent(new MetricEventTranslator(metric, delta)); } - @Override - public void close() throws IOException { + @Destroying + public void shutdown() { DISRUPTOR.shutdown(); flushRingBuffer(); Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/repositories/DefaultRepository.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/repositories/DefaultRepository.java?rev=1509181&r1=1509180&r2=1509181&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/repositories/DefaultRepository.java (original) +++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/repositories/DefaultRepository.java Thu Aug 1 11:53:36 2013 @@ -29,20 +29,11 @@ import java.util.concurrent.ConcurrentMa public class DefaultRepository implements Repository { private final ConcurrentMap<Counter.Key, Counter> counters = new ConcurrentHashMap<Counter.Key, Counter>(50); - protected Counter newCounterInstance(final Counter.Key key) { - return new DefaultCounter(key); - } - - protected Counter register(final Counter monitor) { - return counters.putIfAbsent(monitor.getKey(), monitor); - } - - @Override public Counter getCounter(final Counter.Key key) { Counter monitor = counters.get(key); if (monitor == null) { - monitor = newCounterInstance(key); - final Counter previous = register(monitor); + monitor = new DefaultCounter(key); + final Counter previous = counters.putIfAbsent(key, monitor); if (previous != null) { monitor = previous; } @@ -56,13 +47,6 @@ public class DefaultRepository implement } @Override - public void reset() { - for (final Counter monitor : counters.values()) { - monitor.reset(); - } - } - - @Override public StopWatch start(final Counter monitor) { return new CounterStopWatch(monitor); } Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/repositories/Repository.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/repositories/Repository.java?rev=1509181&r1=1509180&r2=1509181&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/repositories/Repository.java (original) +++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/repositories/Repository.java Thu Aug 1 11:53:36 2013 @@ -41,12 +41,6 @@ public interface Repository extends Iter void clear(); /** - * Convenience method to reset all monitors (don't remove them from repository) - */ - void reset(); - - - /** * Start a StopWatch to counter execution * * @param counter the counter associated with the process Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/ReportHandler.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/ReportHandler.java?rev=1509181&r1=1509180&r2=1509181&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/ReportHandler.java (original) +++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/report/ReportHandler.java Thu Aug 1 11:53:36 2013 @@ -29,7 +29,6 @@ public class ReportHandler implements Ha private final FormatReportHandler json; private final FormatReportHandler xml; private final ClearHandler clear; - private final ResetHandler reset; public ReportHandler() { html = new FormatReportHandler(Format.Defaults.HTML); @@ -37,7 +36,6 @@ public class ReportHandler implements Ha json = new FormatReportHandler(Format.Defaults.JSON); xml = new FormatReportHandler(Format.Defaults.XML); clear = new ClearHandler(); - reset = new ResetHandler(); } @Override @@ -54,9 +52,6 @@ public class ReportHandler implements Ha if (path.endsWith("/clear")) { return clear.handle(request, response, path); } - if (path.endsWith("/reset")) { - return reset.handle(request, response, path); - } return html.handle(request, response, path); } Modified: commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/report/report.vm URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/report/report.vm?rev=1509181&r1=1509180&r2=1509181&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/report/report.vm (original) +++ commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/report/report.vm Thu Aug 1 11:53:36 2013 @@ -23,7 +23,6 @@ </a> <ul class="dropdown-menu"> <li><a href="$mapping/report/clear">Clear</a></li> - <li><a href="$mapping/report/reset">Reset</a></li> </ul> </li> <li class="dropdown">