package de.mxro.metrics; import delight.async.properties.PropertiesCommon; import delight.async.properties.PropertyNode; import delight.async.properties.PropertyOperation; import delight.factories.Configuration; import delight.factories.Dependencies; import delight.factories.Factory; import de.mxro.metrics.internal.MetricsFactory; import de.mxro.metrics.internal.operations.CounterEvent; import de.mxro.metrics.internal.operations.HistrogramEvent; import de.mxro.metrics.internal.operations.MarkEvent; /** * <p> * List of operations which are compatible with Java JRE and GWT environments. * * @author <a href="http://www.mxro.de">Max Rohde</a> * */ public class MetricsCommon extends PropertiesCommon { /** * <p> * Creates a metric node, which is not thread safe. Only use in * single-threaded applications or environments (such as GWT/JavaScript). * * @return */ public static PropertyNode createUnsafe() { return PropertiesCommon.createUnsafe( PropertiesCommon.compositeFactory(new MetricsFactory(), PropertiesCommon.defaultFactory())); } public static Factory<?, ?, ?> createUnsafeFactory() { return new Factory<PropertyNode, Configuration, Dependencies>() { @Override public boolean canInstantiate(final Configuration conf) { return conf instanceof MetricsConfiguration; } @Override public PropertyNode create(final Configuration conf, final Dependencies dependencies) { return MetricsCommon.createUnsafe(); } }; } public static PropertyOperation<Long> happened(final String id) { return new MarkEvent().setId(id); } public static PropertyOperation<Long> increment(final String id) { return new CounterEvent(1).setId(id); } public static PropertyOperation<Long> increment(final String id, final long by) { return new CounterEvent(by).setId(id); } public static PropertyOperation<Long> decrement(final String id) { return new CounterEvent(-1).setId(id); } /** * Record a value and alter retrieve various statistics for the value, such * as the mean etc. * * @param id * @param value * @return */ public static PropertyOperation<Long> value(final String id, final long value) { return new HistrogramEvent(value).setId(id); } private static PropertyNode instance; public static PropertyNode get() { return instance; } public static void inject(final PropertyNode propertyNode) { instance = propertyNode; } }