Added:
/stajistics-core/src/main/java/org/stajistics/StatsFactory.java
/stajistics-core/src/test/java/org/stajistics/StatsFactoryTest.java
Deleted:
/stajistics-core/src/main/java/org/stajistics/StatsUtil.java
Modified:
/stajistics-core/src/main/java/org/stajistics/Stats.java
/stajistics-core/src/main/java/org/stajistics/StatsManagerRegistry.java
/stajistics-core/src/main/java/org/stajistics/aop/StatsProxy.java
/stajistics-core/src/main/java/org/stajistics/management/StatsKeyOpenTypeConverter.java
/stajistics-core/src/test/java/org/stajistics/StatsTest.java
/stajistics-core/src/test/java/org/stajistics/management/StatsKeyOpenTypeConverterTest.java
=======================================
--- /dev/null
+++ /stajistics-core/src/main/java/org/stajistics/StatsFactory.java Fri Jun
24 05:48:14 2011
@@ -0,0 +1,485 @@
+package org.stajistics;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.stajistics.configuration.StatsConfigBuilder;
+import org.stajistics.tracker.NullTracker;
+import org.stajistics.tracker.Tracker;
+import org.stajistics.tracker.TrackerLocator;
+import org.stajistics.tracker.incident.IncidentTracker;
+import org.stajistics.tracker.manual.ManualTracker;
+import org.stajistics.tracker.span.SpanTracker;
+
+/**
+ *
+ *
+ * @author The Stajistics Project
+ */
+public class StatsFactory {
+
+ private static final Logger logger =
LoggerFactory.getLogger(StatsFactory.class);
+
+ private final StatsManager statsManager;
+
+ public StatsFactory(final StatsManager statsManager) {
+ if (statsManager == null) {
+ throw new NullPointerException("statsManager");
+ }
+ this.statsManager = statsManager;
+ }
+
+ public static StatsFactory forClass(final Class<?> aClass) {
+ if (aClass == null) {
+ throw new NullPointerException("aClass");
+ }
+
+ Class<?> cls = aClass;
+ while (cls != Object.class) {
+ String namespace = cls.getPackage().getName();
+ if (StatsManagerRegistry.isStatsManagerDefined(namespace)) {
+ StatsManager statsManager =
StatsManagerRegistry.getStatsManager(namespace);
+ if (statsManager != null) {
+ return new StatsFactory(statsManager);
+ }
+ }
+
+ cls = cls.getSuperclass();
+ }
+
+ throw new StatsNamespaceNotFoundException("No namespaces found for
class: " + aClass.getName());
+ }
+
+ public static StatsFactory forNamespace(final String namespace) {
+ if (namespace == null) {
+ throw new NullPointerException("namespace");
+ }
+
+ if (StatsManagerRegistry.isStatsManagerDefined(namespace)) {
+ StatsManager statsManager =
StatsManagerRegistry.getStatsManager(namespace);
+ if (statsManager != null) {
+ return new StatsFactory(statsManager);
+ }
+ }
+
+ throw new StatsNamespaceNotFoundException(namespace);
+ }
+
+ public StatsManager getManager() {
+ return statsManager;
+ }
+
+ /**
+ * Determine if statistics collection is enabled.
+ *
+ * @return <tt>true</tt> if statistics collection is enabled,
<tt>false</tt> otherwise.
+ *
+ * @see StatsManager#isEnabled()
+ */
+ public boolean isEnabled() {
+ return statsManager.isEnabled();
+ }
+
+ /**
+ * Obtain a {@link SpanTracker} for the given <tt>keyName</tt> that
can be used
+ * to collect statistics related to some span. Equivalent to calling
+ * <tt>Stats.getSpanTracker(Stats.newKey(name))</tt>.
+ *
+ * @param keyName The key name for which to return a tracker.
+ * @return A {@link SpanTracker} instance,
+ * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
+ */
+ public SpanTracker getSpanTracker(final String keyName) {
+ try {
+ return statsManager.getTrackerLocator()
+ .getSpanTracker(newKey(keyName));
+ } catch (Exception e) {
+ logger.error("Failed to obtain a " +
SpanTracker.class.getSimpleName(), e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(null, e);
+ return NullTracker.getInstance();
+ }
+ }
+
+ /**
+ * Obtain a {@link SpanTracker} for the given <tt>key</tt> that can be
used
+ * to collect statistics related to some span.
+ *
+ * @param key The {@link StatsKey} for which to return a tracker.
+ * @return A {@link SpanTracker} instance,
+ * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
+ */
+ public SpanTracker getSpanTracker(final StatsKey key) {
+ try {
+ return statsManager.getTrackerLocator()
+ .getSpanTracker(key);
+ } catch (Exception e) {
+ logger.error("Failed to obtain a " +
SpanTracker.class.getSimpleName(), e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(key, e);
+ return NullTracker.getInstance();
+ }
+ }
+
+ /**
+ * Obtain a {@link SpanTracker} for the given <tt>keys</tt> that can
be used
+ * to collect statistics related to some span.
+ *
+ * @param keys The {@link StatsKey}s for which to return a tracker.
+ * @return A {@link SpanTracker} instance,
+ * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
+ */
+ public SpanTracker getSpanTracker(final StatsKey... keys) {
+ try {
+ return statsManager.getTrackerLocator()
+ .getSpanTracker(keys);
+ } catch (Exception e) {
+ logger.error("Failed to obtain a " +
SpanTracker.class.getSimpleName(), e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(null, e);
+ return NullTracker.getInstance();
+ }
+ }
+
+ /**
+ * A convenience method equivalent to calling:
+ * <tt>Stats.getSpanTracker(Stats.newKey(keyName)).track()</tt>.
+ *
+ * @param keyName The key name for which to return a tracker.
+ * @return A {@link SpanTracker} instance,
+ * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
+ *
+ * @see TrackerLocator#getSpanTracker(StatsKey)
+ * @see SpanTracker#track()
+ */
+ public SpanTracker track(final String keyName) {
+ try {
+ return statsManager.getTrackerLocator()
+ .getSpanTracker(newKey(keyName))
+ .track();
+ } catch (Exception e) {
+ logger.error("Failed to obtain and invoke track on " +
SpanTracker.class.getSimpleName(), e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(null, e);
+ return NullTracker.getInstance();
+ }
+ }
+
+ /**
+ * A convenience method equivalent to calling:
+ * <tt>Stats.getSpanTracker(key).track()</tt>
+ *
+ * @param key The {@link StatsKey} for which to return a tracker.
+ * @return A {@link SpanTracker} instance,
+ * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
+ *
+ * @see TrackerLocator#getSpanTracker(StatsKey)
+ * @see SpanTracker#track()
+ */
+ public SpanTracker track(final StatsKey key) {
+ try {
+ return statsManager.getTrackerLocator()
+ .getSpanTracker(key)
+ .track();
+ } catch (Exception e) {
+ logger.error("Failed to obtain and invoke track on " +
SpanTracker.class.getSimpleName(), e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(key, e);
+ return NullTracker.getInstance();
+ }
+ }
+
+ /**
+ * A convenience method equivalent to calling:
+ * <tt>Stats.getSpanTracker(keys).track()</tt>.
+ *
+ * @param keys The {@link StatsKey}s for which to return a tracker.
+ * @return A {@link SpanTracker} instance,
+ * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
+ *
+ * @see TrackerLocator#getSpanTracker(StatsKey...)
+ * @see SpanTracker#track()
+ */
+ public SpanTracker track(final StatsKey... keys) {
+ try {
+ return statsManager.getTrackerLocator()
+ .getSpanTracker(keys)
+ .track();
+ } catch (Exception e) {
+ logger.error("Failed to obtain and invoke track on " +
SpanTracker.class.getSimpleName(), e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(null, e);
+ return NullTracker.getInstance();
+ }
+ }
+
+ /**
+ * Obtain an {@link IncidentTracker} for the given <tt>keyName</tt>
that can be
+ * used to report incidents of events.
+ *
+ * @param keyName The key name for which to return an incident tracker.
+ * @return An {@link IncidentTracker} instance,
+ * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
+ *
+ * @see TrackerLocator#getIncidentTracker(StatsKey)
+ */
+ public IncidentTracker getIncidentTracker(final String keyName) {
+ try {
+ return statsManager.getTrackerLocator()
+ .getIncidentTracker(newKey(keyName));
+ } catch (Exception e) {
+ logger.error("Failed to obtain an " +
IncidentTracker.class.getSimpleName(), e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(null, e);
+ return NullTracker.getInstance();
+ }
+ }
+
+ /**
+ * Obtain an {@link IncidentTracker} for the given <tt>key</tt> that
can be
+ * used to report incidents of events.
+ *
+ * @param key The {@link StatsKey} for which to return an incident
tracker.
+ * @return An {@link IncidentTracker} instance,
+ * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
+ *
+ * @see TrackerLocator#getIncidentTracker(StatsKey)
+ */
+ public IncidentTracker getIncidentTracker(final StatsKey key) {
+ try {
+ return statsManager.getTrackerLocator()
+ .getIncidentTracker(key);
+ } catch (Exception e) {
+ logger.error("Failed to obtain an " +
IncidentTracker.class.getSimpleName(), e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(key, e);
+ return NullTracker.getInstance();
+ }
+ }
+
+ /**
+ * Report an incident. Equivalent to calling:
+ * <tt>Stats.getIncidentTracker(Stats.newKey(keyName)).incident()</tt>.
+ *
+ * @param keyName The key name for which to report an incident.
+ *
+ * @see TrackerLocator#getIncidentTracker(StatsKey...)
+ * @see IncidentTracker#incident()
+ */
+ public void incident(final String keyName) {
+ try {
+ statsManager.getTrackerLocator()
+ .getIncidentTracker(newKey(keyName))
+ .incident();
+ } catch (Exception e) {
+ logger.error("Failed to obtain and invoke an " +
IncidentTracker.class.getSimpleName(), e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(null, e);
+ }
+ }
+
+ /**
+ * Report an incident. Equivalent to calling:
+ * <tt>Stats.getIncidentTracker(key).incident()</tt>.
+ *
+ * @param key The {@link StatsKey} for which to report an incident.
+ *
+ * @see TrackerLocator#getIncidentTracker(StatsKey...)
+ * @see IncidentTracker#incident()
+ */
+ public void incident(final StatsKey key) {
+ try {
+ statsManager.getTrackerLocator()
+ .getIncidentTracker(key)
+ .incident();
+ } catch (Exception e) {
+ logger.error("Failed to obtain and invoke an " +
IncidentTracker.class.getSimpleName(), e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(key, e);
+ }
+ }
+
+ /**
+ * Report an incident. Equivalent to calling:
+ * <tt>Stats.getIncidentTracker(keys).incident()</tt>.
+ *
+ * @param keys The {@link StatsKey}s for which to report an incident.
+ *
+ * @see TrackerLocator#getIncidentTracker(StatsKey...)
+ * @see IncidentTracker#incident()
+ */
+ public void incident(final StatsKey... keys) {
+ try {
+ statsManager.getTrackerLocator()
+ .getIncidentTracker(keys)
+ .incident();
+ } catch (Exception e) {
+ logger.error("Failed to obtain and invoke an " +
IncidentTracker.class.getSimpleName(), e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(null, e);
+ }
+ }
+
+ /**
+ * Report a failure that is represented by a Throwable.
+ *
+ * @param failure The Throwable that represents the failure.
+ * @param keyName The key name for which to report an incident.
+ */
+ public void failure(final Throwable failure,
+ final String keyName) {
+ try {
+ statsManager.getTrackerLocator()
+ .getIncidentTracker(StatsKeyUtil.keyForFailure(newKey(keyName),
failure))
+ .incident();
+ } catch (Exception e) {
+ logger.error("Failed to report a failure", e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(null, e);
+ }
+ }
+
+ /**
+ * Report a failure that is represented by a Throwable.
+ *
+ * @param failure The Throwable that represents the failure.
+ * @param key The {@link StatsKey} for which to report a failure.
+ */
+ public void failure(final Throwable failure,
+ final StatsKey key) {
+ try {
+ statsManager.getTrackerLocator()
+ .getIncidentTracker(StatsKeyUtil.keyForFailure(key,
failure))
+ .incident();
+ } catch (Exception e) {
+ logger.error("Failed to report a failure", e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(key, e);
+ }
+ }
+
+ /**
+ * Report a failure that is represented by a Throwable.
+ *
+ * @param keys The {@link StatsKey}s for which to report a failure.
+ * @param failure The Throwable that represents the failure.
+ */
+ public void failure(final Throwable failure,
+ final StatsKey... keys) {
+ try {
+ if (keys.length == 0) {
+ throw new IllegalArgumentException("must supply at least
one key");
+ }
+
+ final TrackerLocator trackerLocator =
statsManager.getTrackerLocator();
+
+ for (StatsKey key : keys) {
+
trackerLocator.getIncidentTracker(StatsKeyUtil.keyForFailure(key, failure))
+ .incident();
+ }
+ } catch (Exception e) {
+ logger.error("Failed to report a failure", e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(null, e);
+ }
+ }
+
+ /**
+ * Obtain a {@link ManualTracker} for the given key <tt>keyName</tt>
that can be
+ * used to report manually collected statistics.
+ *
+ * @param keyName The key name for which to return a manual tracker.
+ * @return A {@link Tracker} instance,
+ * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
+ *
+ * @see TrackerLocator#getManualTracker(StatsKey)
+ */
+ public ManualTracker getManualTracker(final String keyName) {
+ try {
+ return statsManager.getTrackerLocator()
+ .getManualTracker(newKey(keyName));
+ } catch (Exception e) {
+ logger.error("Failed to obtain a " +
ManualTracker.class.getSimpleName(), e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(null, e);
+ return NullTracker.getInstance();
+ }
+ }
+
+ /**
+ * Obtain a {@link ManualTracker} for the given <tt>key</tt> that can
be
+ * used to report manually collected statistics.
+ *
+ * @param key The {@link StatsKey} for which to return a manual
tracker.
+ * @return A {@link Tracker} instance,
+ * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
+ *
+ * @see TrackerLocator#getManualTracker(StatsKey)
+ */
+ public ManualTracker getManualTracker(final StatsKey key) {
+ try {
+ return statsManager.getTrackerLocator()
+ .getManualTracker(key);
+ } catch (Exception e) {
+ logger.error("Failed to obtain a " +
ManualTracker.class.getSimpleName(), e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(key, e);
+ return NullTracker.getInstance();
+ }
+ }
+
+ /**
+ * Create a new {@link StatsKey} from the given <tt>name</tt>.
+ *
+ * @param name The name of the key to create.
+ * @return A new {@link StatsKey} instance or a {@link NullStatsKey}
+ * if an Exception occurred, never <tt>null</tt>.
+ *
+ * @see StatsKeyFactory#createKey(String)
+ */
+ public StatsKey newKey(final String name) {
+ try {
+ return statsManager.getKeyFactory()
+ .createKey(name);
+ } catch (Exception e) {
+ logger.error("Failed to create a " +
StatsKey.class.getSimpleName(), e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(null, e);
+ return NullStatsKey.getInstance();
+ }
+ }
+
+ /**
+ * Create a new {@link StatsKeyBuilder} which can create a new {@link
StatsKey}
+ * for the given <tt>name</tt>.
+ *
+ * @param name The name of the key that the builder will create.
+ * @return A {@link StatsKeyBuilder} which can be used to define key
attributes,
+ * or a {@link NullStatsKeyBuilder} if an Exception occurred,
never <tt>null</tt>.
+ *
+ * @see StatsKeyFactory#createKeyBuilder(StatsKey)
+ */
+ public StatsKeyBuilder buildKey(final String name) {
+ try {
+ return statsManager.getKeyFactory()
+ .createKeyBuilder(name);
+ } catch (Exception e) {
+ logger.error("Failed to create a " +
StatsKeyBuilder.class.getSimpleName(), e);
+ statsManager.getUncaughtExceptionHandler()
+ .uncaughtException(null, e);
+ return NullStatsKeyBuilder.getInstance();
+ }
+ }
+
+ /**
+ * Create a new {@link StatsConfigBuilder} which can assemble various
configurations.
+ *
+ * @return A {@link StatsKeyBuilder} which can be used to specify
configuration, never <tt>null</tt>.
+ *
+ * @see
org.stajistics.configuration.StatsConfigBuilderFactory#createConfigBuilder()
+ */
+ public StatsConfigBuilder buildConfig() {
+ return statsManager.getConfigBuilderFactory()
+ .createConfigBuilder();
+ }
+
+}
=======================================
--- /dev/null
+++ /stajistics-core/src/test/java/org/stajistics/StatsFactoryTest.java Fri
Jun 24 05:48:14 2011
@@ -0,0 +1,249 @@
+package org.stajistics;
+
+import org.jmock.Expectations;
+import org.junit.Before;
+import org.junit.Test;
+import org.stajistics.configuration.StatsConfigBuilder;
+import org.stajistics.configuration.StatsConfigBuilderFactory;
+import org.stajistics.tracker.TrackerLocator;
+import org.stajistics.tracker.incident.IncidentTracker;
+import org.stajistics.tracker.manual.ManualTracker;
+import org.stajistics.tracker.span.SpanTracker;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+
+/**
+ * @author The Stajistics Project
+ */
+public class StatsFactoryTest extends AbstractStajisticsTestCase {
+
+ private StatsFactory factory;
+
+ private StatsManager mockManager;
+ private TrackerLocator mockTrackerLocator;
+ private StatsKey mockKey;
+
+ @Before
+ public void setUp() {
+ mockManager = mockery.mock(StatsManager.class);
+ mockTrackerLocator = mockery.mock(TrackerLocator.class);
+ mockKey = mockery.mock(StatsKey.class);
+
+ mockery.checking(new Expectations() {{
+ allowing(mockManager).getTrackerLocator();
+ will(returnValue(mockTrackerLocator));
+ }});
+
+ factory = new StatsFactory(mockManager);
+ }
+
+ @Test
+ public void testStartWithKeyName() {
+ final String keyName = "test.name";
+ final SpanTracker mockTracker = mockery.mock(SpanTracker.class);
+
+ final StatsKeyFactory mockKeyFactory =
mockery.mock(StatsKeyFactory.class);
+
+ mockery.checking(new Expectations() {{
+ one(mockManager).getKeyFactory();
will(returnValue(mockKeyFactory));
+ one(mockKeyFactory).createKey(keyName);
will(returnValue(mockKey));
+
one(mockTrackerLocator).getSpanTracker(with(any(StatsKey.class)));
will(returnValue(mockTracker));
+ one(mockTracker).track(); will(returnValue(mockTracker));
+ }});
+
+ assertEquals(mockTracker, factory.track(keyName));
+ }
+
+ @Test
+ public void testStartWithStatsKey() {
+ final SpanTracker mockTracker = mockery.mock(SpanTracker.class);
+
+ mockery.checking(new Expectations() {{
+ one(mockTrackerLocator).getSpanTracker(with(mockKey));
will(returnValue(mockTracker));
+ one(mockTracker).track(); will(returnValue(mockTracker));
+ }});
+
+ assertEquals(mockTracker, factory.track(mockKey));
+ }
+
+ @Test
+ public void testSpanTrackWithStatsKeys() {
+ final SpanTracker mockTracker = mockery.mock(SpanTracker.class);
+ final StatsKey mockKey2 = mockery.mock(StatsKey.class, "mockKey2");
+
+ mockery.checking(new Expectations() {{
+ one(mockTrackerLocator).getSpanTracker(with(new StatsKey[] {
mockKey, mockKey2 }));
+ will(returnValue(mockTracker));
+ one(mockTracker).track(); will(returnValue(mockTracker));
+ }});
+
+ assertEquals(mockTracker, factory.track(mockKey, mockKey2));
+ }
+
+ @Test
+ public void testIncidentWithKeyName() {
+ final String keyName = "test.name";
+ final IncidentTracker mockTracker =
mockery.mock(IncidentTracker.class);
+
+ final StatsKeyFactory mockKeyFactory =
mockery.mock(StatsKeyFactory.class);
+
+ mockery.checking(new Expectations() {{
+ one(mockManager).getKeyFactory();
will(returnValue(mockKeyFactory));
+ one(mockKeyFactory).createKey(keyName);
will(returnValue(mockKey));
+ one(mockTrackerLocator).getIncidentTracker(with(mockKey));
will(returnValue(mockTracker));
+ one(mockTracker).incident();
+ }});
+
+ factory.incident(keyName);
+ }
+
+ @Test
+ public void testIncidentWithStatsKey() {
+ final IncidentTracker mockTracker =
mockery.mock(IncidentTracker.class);
+
+ mockery.checking(new Expectations() {{
+ one(mockTrackerLocator).getIncidentTracker(with(mockKey));
will(returnValue(mockTracker));
+ one(mockTracker).incident(); will(returnValue(mockTracker));
+ }});
+
+ factory.incident(mockKey);
+ }
+
+ @Test
+ public void testIncidentWithStatsKeys() {
+ final IncidentTracker mockTracker =
mockery.mock(IncidentTracker.class);
+
+ final StatsKey mockKey2 = mockery.mock(StatsKey.class, "mockKey2");
+
+ mockery.checking(new Expectations() {{
+ one(mockTrackerLocator).getIncidentTracker(with(new StatsKey[]
{ mockKey, mockKey2 }));
+ will(returnValue(mockTracker));
+ one(mockTracker).incident(); will(returnValue(mockTracker));
+ }});
+
+ factory.incident(mockKey, mockKey2);
+ }
+
+ @Test
+ public void testFailureWithKeyName() {
+
+ TestUtil.buildStatsKeyExpectations(mockery, mockKey, "test");
+
+ final String keyName = "test.name";
+ final IncidentTracker mockTracker =
mockery.mock(IncidentTracker.class);
+
+ final StatsKeyFactory mockKeyFactory =
mockery.mock(StatsKeyFactory.class);
+
+ final StatsKey mockKey2 = mockery.mock(StatsKey.class, "mockKey2");
+ final StatsKeyBuilder mockKeyBuilder =
mockery.mock(StatsKeyBuilder.class);
+
+ final Exception e = new Exception();
+
+ mockery.checking(new Expectations() {{
+ one(mockManager).getKeyFactory();
will(returnValue(mockKeyFactory));
+ one(mockKeyFactory).createKey(keyName);
will(returnValue(mockKey));
+ one(mockKey).buildCopy(); will(returnValue(mockKeyBuilder));
+ one(mockKeyBuilder).withNameSuffix("exception");
will(returnValue(mockKeyBuilder));
+ one(mockKeyBuilder).withAttribute("threw",
e.getClass().getName()); will(returnValue(mockKeyBuilder));
+ one(mockKeyBuilder).newKey(); will(returnValue(mockKey2));
+ one(mockTrackerLocator).getIncidentTracker(mockKey2);
will(returnValue(mockTracker));
+ one(mockTracker).incident();
+ }});
+
+ factory.failure(e, keyName);
+ }
+
+ @Test
+ public void testFailureWithStatsKey() {
+
+ TestUtil.buildStatsKeyExpectations(mockery, mockKey, "test");
+
+ final IncidentTracker mockTracker =
mockery.mock(IncidentTracker.class);
+
+ final StatsKey mockKey2 = mockery.mock(StatsKey.class, "mockKey2");
+ final StatsKeyBuilder mockKeyBuilder =
mockery.mock(StatsKeyBuilder.class);
+
+ final Exception e = new Exception();
+
+ mockery.checking(new Expectations() {{
+ one(mockKey).buildCopy(); will(returnValue(mockKeyBuilder));
+ one(mockKeyBuilder).withNameSuffix("exception");
will(returnValue(mockKeyBuilder));
+ one(mockKeyBuilder).withAttribute("threw",
e.getClass().getName()); will(returnValue(mockKeyBuilder));
+ one(mockKeyBuilder).newKey(); will(returnValue(mockKey2));
+ one(mockTrackerLocator).getIncidentTracker(mockKey2);
will(returnValue(mockTracker));
+ one(mockTracker).incident();
+ }});
+
+ factory.failure(e, mockKey);
+ }
+
+ @Test
+ public void testManualWithKeyName() {
+ final String keyName = "test.name";
+ final ManualTracker mockManualTracker =
mockery.mock(ManualTracker.class);
+
+ final StatsKeyFactory mockKeyFactory =
mockery.mock(StatsKeyFactory.class);
+
+ mockery.checking(new Expectations() {{
+ one(mockManager).getKeyFactory();
will(returnValue(mockKeyFactory));
+ one(mockKeyFactory).createKey(keyName);
will(returnValue(mockKey));
+
one(mockTrackerLocator).getManualTracker(with(any(StatsKey.class)));
will(returnValue(mockManualTracker));
+ }});
+
+ assertEquals(mockManualTracker, factory.getManualTracker(keyName));
+ }
+
+ @Test
+ public void testManualWithStatsKey() {
+
+ final ManualTracker mockManualTracker =
mockery.mock(ManualTracker.class);
+
+ mockery.checking(new Expectations() {{
+ one(mockTrackerLocator).getManualTracker(with(mockKey));
will(returnValue(mockManualTracker));
+ }});
+
+ assertSame(mockManualTracker, factory.getManualTracker(mockKey));
+ }
+
+ @Test
+ public void testNewKey() {
+ final String keyName = "test";
+ final StatsKeyFactory mockKeyFactory =
mockery.mock(StatsKeyFactory.class);
+
+ mockery.checking(new Expectations() {{
+ one(mockManager).getKeyFactory();
will(returnValue(mockKeyFactory));
+ one(mockKeyFactory).createKey(with(keyName));
will(returnValue(mockKey));
+ }});
+
+ assertSame(mockKey, factory.newKey(keyName));
+ }
+
+ @Test
+ public void testBuildKey() {
+ final String keyName = "test";
+ final StatsKeyFactory mockKeyFactory =
mockery.mock(StatsKeyFactory.class);
+ final StatsKeyBuilder mockKeyBuilder =
mockery.mock(StatsKeyBuilder.class);
+
+ mockery.checking(new Expectations() {{
+ one(mockManager).getKeyFactory();
will(returnValue(mockKeyFactory));
+ one(mockKeyFactory).createKeyBuilder(with(keyName));
will(returnValue(mockKeyBuilder));
+ }});
+
+ assertSame(mockKeyBuilder, factory.buildKey(keyName));
+ }
+
+ @Test
+ public void testBuildConfig() {
+ final StatsConfigBuilderFactory mockConfigBuilderFactory =
mockery.mock(StatsConfigBuilderFactory.class);
+ final StatsConfigBuilder mockConfigBuilder =
mockery.mock(StatsConfigBuilder.class);
+
+ mockery.checking(new Expectations() {{
+ one(mockManager).getConfigBuilderFactory();
will(returnValue(mockConfigBuilderFactory));
+ one(mockConfigBuilderFactory).createConfigBuilder();
will(returnValue(mockConfigBuilder));
+ }});
+
+ assertSame(mockConfigBuilder, factory.buildConfig());
+ }
+
+}
=======================================
--- /stajistics-core/src/main/java/org/stajistics/StatsUtil.java Mon Jun 20
15:36:53 2011
+++ /dev/null
@@ -1,449 +0,0 @@
-package org.stajistics;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.stajistics.configuration.StatsConfigBuilder;
-import org.stajistics.tracker.NullTracker;
-import org.stajistics.tracker.Tracker;
-import org.stajistics.tracker.TrackerLocator;
-import org.stajistics.tracker.incident.IncidentTracker;
-import org.stajistics.tracker.manual.ManualTracker;
-import org.stajistics.tracker.span.SpanTracker;
-
-/**
- *
- *
- * @author The Stajistics Project
- */
-public class StatsUtil {
-
- private static final Logger logger =
LoggerFactory.getLogger(StatsUtil.class);
-
- private final StatsManager statsManager;
-
- public StatsUtil(final StatsManager statsManager) {
- if (statsManager == null) {
- throw new NullPointerException("statsManager");
- }
- this.statsManager = statsManager;
- }
-
- public StatsManager getManager() {
- return statsManager;
- }
-
- /**
- * Determine if statistics collection is enabled.
- *
- * @return <tt>true</tt> if statistics collection is enabled,
<tt>false</tt> otherwise.
- *
- * @see StatsManager#isEnabled()
- */
- public boolean isEnabled() {
- return statsManager.isEnabled();
- }
-
- /**
- * Obtain a {@link SpanTracker} for the given <tt>keyName</tt> that
can be used
- * to collect statistics related to some span. Equivalent to calling
- * <tt>Stats.getSpanTracker(Stats.newKey(name))</tt>.
- *
- * @param keyName The key name for which to return a tracker.
- * @return A {@link SpanTracker} instance,
- * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
- */
- public SpanTracker getSpanTracker(final String keyName) {
- try {
- return statsManager.getTrackerLocator()
- .getSpanTracker(newKey(keyName));
- } catch (Exception e) {
- logger.error("Failed to obtain a " +
SpanTracker.class.getSimpleName(), e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(null, e);
- return NullTracker.getInstance();
- }
- }
-
- /**
- * Obtain a {@link SpanTracker} for the given <tt>key</tt> that can be
used
- * to collect statistics related to some span.
- *
- * @param key The {@link StatsKey} for which to return a tracker.
- * @return A {@link SpanTracker} instance,
- * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
- */
- public SpanTracker getSpanTracker(final StatsKey key) {
- try {
- return statsManager.getTrackerLocator()
- .getSpanTracker(key);
- } catch (Exception e) {
- logger.error("Failed to obtain a " +
SpanTracker.class.getSimpleName(), e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(key, e);
- return NullTracker.getInstance();
- }
- }
-
- /**
- * Obtain a {@link SpanTracker} for the given <tt>keys</tt> that can
be used
- * to collect statistics related to some span.
- *
- * @param keys The {@link StatsKey}s for which to return a tracker.
- * @return A {@link SpanTracker} instance,
- * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
- */
- public SpanTracker getSpanTracker(final StatsKey... keys) {
- try {
- return statsManager.getTrackerLocator()
- .getSpanTracker(keys);
- } catch (Exception e) {
- logger.error("Failed to obtain a " +
SpanTracker.class.getSimpleName(), e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(null, e);
- return NullTracker.getInstance();
- }
- }
-
- /**
- * A convenience method equivalent to calling:
- * <tt>Stats.getSpanTracker(Stats.newKey(keyName)).track()</tt>.
- *
- * @param keyName The key name for which to return a tracker.
- * @return A {@link SpanTracker} instance,
- * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
- *
- * @see TrackerLocator#getSpanTracker(StatsKey)
- * @see SpanTracker#track()
- */
- public SpanTracker track(final String keyName) {
- try {
- return statsManager.getTrackerLocator()
- .getSpanTracker(newKey(keyName))
- .track();
- } catch (Exception e) {
- logger.error("Failed to obtain and invoke track on " +
SpanTracker.class.getSimpleName(), e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(null, e);
- return NullTracker.getInstance();
- }
- }
-
- /**
- * A convenience method equivalent to calling:
- * <tt>Stats.getSpanTracker(key).track()</tt>
- *
- * @param key The {@link StatsKey} for which to return a tracker.
- * @return A {@link SpanTracker} instance,
- * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
- *
- * @see TrackerLocator#getSpanTracker(StatsKey)
- * @see SpanTracker#track()
- */
- public SpanTracker track(final StatsKey key) {
- try {
- return statsManager.getTrackerLocator()
- .getSpanTracker(key)
- .track();
- } catch (Exception e) {
- logger.error("Failed to obtain and invoke track on " +
SpanTracker.class.getSimpleName(), e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(key, e);
- return NullTracker.getInstance();
- }
- }
-
- /**
- * A convenience method equivalent to calling:
- * <tt>Stats.getSpanTracker(keys).track()</tt>.
- *
- * @param keys The {@link StatsKey}s for which to return a tracker.
- * @return A {@link SpanTracker} instance,
- * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
- *
- * @see TrackerLocator#getSpanTracker(StatsKey...)
- * @see SpanTracker#track()
- */
- public SpanTracker track(final StatsKey... keys) {
- try {
- return statsManager.getTrackerLocator()
- .getSpanTracker(keys)
- .track();
- } catch (Exception e) {
- logger.error("Failed to obtain and invoke track on " +
SpanTracker.class.getSimpleName(), e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(null, e);
- return NullTracker.getInstance();
- }
- }
-
- /**
- * Obtain an {@link IncidentTracker} for the given <tt>keyName</tt>
that can be
- * used to report incidents of events.
- *
- * @param keyName The key name for which to return an incident tracker.
- * @return An {@link IncidentTracker} instance,
- * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
- *
- * @see TrackerLocator#getIncidentTracker(StatsKey)
- */
- public IncidentTracker getIncidentTracker(final String keyName) {
- try {
- return statsManager.getTrackerLocator()
- .getIncidentTracker(newKey(keyName));
- } catch (Exception e) {
- logger.error("Failed to obtain an " +
IncidentTracker.class.getSimpleName(), e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(null, e);
- return NullTracker.getInstance();
- }
- }
-
- /**
- * Obtain an {@link IncidentTracker} for the given <tt>key</tt> that
can be
- * used to report incidents of events.
- *
- * @param key The {@link StatsKey} for which to return an incident
tracker.
- * @return An {@link IncidentTracker} instance,
- * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
- *
- * @see TrackerLocator#getIncidentTracker(StatsKey)
- */
- public IncidentTracker getIncidentTracker(final StatsKey key) {
- try {
- return statsManager.getTrackerLocator()
- .getIncidentTracker(key);
- } catch (Exception e) {
- logger.error("Failed to obtain an " +
IncidentTracker.class.getSimpleName(), e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(key, e);
- return NullTracker.getInstance();
- }
- }
-
- /**
- * Report an incident. Equivalent to calling:
- * <tt>Stats.getIncidentTracker(Stats.newKey(keyName)).incident()</tt>.
- *
- * @param keyName The key name for which to report an incident.
- *
- * @see TrackerLocator#getIncidentTracker(StatsKey...)
- * @see IncidentTracker#incident()
- */
- public void incident(final String keyName) {
- try {
- statsManager.getTrackerLocator()
- .getIncidentTracker(newKey(keyName))
- .incident();
- } catch (Exception e) {
- logger.error("Failed to obtain and invoke an " +
IncidentTracker.class.getSimpleName(), e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(null, e);
- }
- }
-
- /**
- * Report an incident. Equivalent to calling:
- * <tt>Stats.getIncidentTracker(key).incident()</tt>.
- *
- * @param key The {@link StatsKey} for which to report an incident.
- *
- * @see TrackerLocator#getIncidentTracker(StatsKey...)
- * @see IncidentTracker#incident()
- */
- public void incident(final StatsKey key) {
- try {
- statsManager.getTrackerLocator()
- .getIncidentTracker(key)
- .incident();
- } catch (Exception e) {
- logger.error("Failed to obtain and invoke an " +
IncidentTracker.class.getSimpleName(), e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(key, e);
- }
- }
-
- /**
- * Report an incident. Equivalent to calling:
- * <tt>Stats.getIncidentTracker(keys).incident()</tt>.
- *
- * @param keys The {@link StatsKey}s for which to report an incident.
- *
- * @see TrackerLocator#getIncidentTracker(StatsKey...)
- * @see IncidentTracker#incident()
- */
- public void incident(final StatsKey... keys) {
- try {
- statsManager.getTrackerLocator()
- .getIncidentTracker(keys)
- .incident();
- } catch (Exception e) {
- logger.error("Failed to obtain and invoke an " +
IncidentTracker.class.getSimpleName(), e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(null, e);
- }
- }
-
- /**
- * Report a failure that is represented by a Throwable.
- *
- * @param failure The Throwable that represents the failure.
- * @param keyName The key name for which to report an incident.
- */
- public void failure(final Throwable failure,
- final String keyName) {
- try {
- statsManager.getTrackerLocator()
- .getIncidentTracker(StatsKeyUtil.keyForFailure(newKey(keyName),
failure))
- .incident();
- } catch (Exception e) {
- logger.error("Failed to report a failure", e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(null, e);
- }
- }
-
- /**
- * Report a failure that is represented by a Throwable.
- *
- * @param failure The Throwable that represents the failure.
- * @param key The {@link StatsKey} for which to report a failure.
- */
- public void failure(final Throwable failure,
- final StatsKey key) {
- try {
- statsManager.getTrackerLocator()
- .getIncidentTracker(StatsKeyUtil.keyForFailure(key,
failure))
- .incident();
- } catch (Exception e) {
- logger.error("Failed to report a failure", e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(key, e);
- }
- }
-
- /**
- * Report a failure that is represented by a Throwable.
- *
- * @param keys The {@link StatsKey}s for which to report a failure.
- * @param failure The Throwable that represents the failure.
- */
- public void failure(final Throwable failure,
- final StatsKey... keys) {
- try {
- if (keys.length == 0) {
- throw new IllegalArgumentException("must supply at least
one key");
- }
-
- final TrackerLocator trackerLocator =
statsManager.getTrackerLocator();
-
- for (StatsKey key : keys) {
-
trackerLocator.getIncidentTracker(StatsKeyUtil.keyForFailure(key, failure))
- .incident();
- }
- } catch (Exception e) {
- logger.error("Failed to report a failure", e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(null, e);
- }
- }
-
- /**
- * Obtain a {@link ManualTracker} for the given key <tt>keyName</tt>
that can be
- * used to report manually collected statistics.
- *
- * @param keyName The key name for which to return a manual tracker.
- * @return A {@link Tracker} instance,
- * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
- *
- * @see TrackerLocator#getManualTracker(StatsKey)
- */
- public ManualTracker getManualTracker(final String keyName) {
- try {
- return statsManager.getTrackerLocator()
- .getManualTracker(newKey(keyName));
- } catch (Exception e) {
- logger.error("Failed to obtain a " +
ManualTracker.class.getSimpleName(), e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(null, e);
- return NullTracker.getInstance();
- }
- }
-
- /**
- * Obtain a {@link ManualTracker} for the given <tt>key</tt> that can
be
- * used to report manually collected statistics.
- *
- * @param key The {@link StatsKey} for which to return a manual
tracker.
- * @return A {@link Tracker} instance,
- * or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
- *
- * @see TrackerLocator#getManualTracker(StatsKey)
- */
- public ManualTracker getManualTracker(final StatsKey key) {
- try {
- return statsManager.getTrackerLocator()
- .getManualTracker(key);
- } catch (Exception e) {
- logger.error("Failed to obtain a " +
ManualTracker.class.getSimpleName(), e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(key, e);
- return NullTracker.getInstance();
- }
- }
-
- /**
- * Create a new {@link StatsKey} from the given <tt>name</tt>.
- *
- * @param name The name of the key to create.
- * @return A new {@link StatsKey} instance or a {@link NullStatsKey}
- * if an Exception occurred, never <tt>null</tt>.
- *
- * @see StatsKeyFactory#createKey(String)
- */
- public StatsKey newKey(final String name) {
- try {
- return statsManager.getKeyFactory()
- .createKey(name);
- } catch (Exception e) {
- logger.error("Failed to create a " +
StatsKey.class.getSimpleName(), e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(null, e);
- return NullStatsKey.getInstance();
- }
- }
-
- /**
- * Create a new {@link StatsKeyBuilder} which can create a new {@link
StatsKey}
- * for the given <tt>name</tt>.
- *
- * @param name The name of the key that the builder will create.
- * @return A {@link StatsKeyBuilder} which can be used to define key
attributes,
- * or a {@link NullStatsKeyBuilder} if an Exception occurred,
never <tt>null</tt>.
- *
- * @see StatsKeyFactory#createKeyBuilder(StatsKey)
- */
- public StatsKeyBuilder buildKey(final String name) {
- try {
- return statsManager.getKeyFactory()
- .createKeyBuilder(name);
- } catch (Exception e) {
- logger.error("Failed to create a " +
StatsKeyBuilder.class.getSimpleName(), e);
- statsManager.getUncaughtExceptionHandler()
- .uncaughtException(null, e);
- return NullStatsKeyBuilder.getInstance();
- }
- }
-
- /**
- * Create a new {@link StatsConfigBuilder} which can assemble various
configurations.
- *
- * @return A {@link StatsKeyBuilder} which can be used to specify
configuration, never <tt>null</tt>.
- *
- * @see
org.stajistics.configuration.StatsConfigBuilderFactory#createConfigBuilder()
- */
- public StatsConfigBuilder buildConfig() {
- return statsManager.getConfigBuilderFactory()
- .createConfigBuilder();
- }
-
-}
=======================================
--- /stajistics-core/src/main/java/org/stajistics/Stats.java Mon Jun 20
15:36:53 2011
+++ /stajistics-core/src/main/java/org/stajistics/Stats.java Fri Jun 24
05:48:14 2011
@@ -48,7 +48,7 @@
private static final Logger logger =
LoggerFactory.getLogger(Stats.class);
private static volatile StatsManager manager;
- private static volatile StatsUtil util;
+ private static volatile StatsFactory factory;
/**
* Specify the sole default {@link StatsManager} instance, replacing
any existing instance.
@@ -69,7 +69,7 @@
logger.debug("Loaded: {}: {}", StatsManager.class.getSimpleName(),
manager);
Stats.manager = manager;
- Stats.util = new StatsUtil(manager);
+ Stats.factory = new StatsFactory(manager);
}
/**
@@ -93,11 +93,11 @@
return manager;
}
- private static StatsUtil getUtil() {
- if (util == null) {
+ private static StatsFactory getFactory() {
+ if (factory == null) {
getManager(); // Assigns util
}
- return util;
+ return factory;
}
protected static StatsManager loadDefaultStatsManager() {
@@ -212,7 +212,7 @@
* or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
*/
public static SpanTracker getSpanTracker(final String keyName) {
- return getUtil().getSpanTracker(keyName);
+ return getFactory().getSpanTracker(keyName);
}
/**
@@ -224,7 +224,7 @@
* or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
*/
public static SpanTracker getSpanTracker(final StatsKey key) {
- return getUtil().getSpanTracker(key);
+ return getFactory().getSpanTracker(key);
}
/**
@@ -236,7 +236,7 @@
* or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
*/
public static SpanTracker getSpanTracker(final StatsKey... keys) {
- return getUtil().getSpanTracker(keys);
+ return getFactory().getSpanTracker(keys);
}
/**
@@ -251,7 +251,7 @@
* @see SpanTracker#track()
*/
public static SpanTracker track(final String keyName) {
- return getUtil().track(keyName);
+ return getFactory().track(keyName);
}
/**
@@ -266,7 +266,7 @@
* @see SpanTracker#track()
*/
public static SpanTracker track(final StatsKey key) {
- return getUtil().track(key);
+ return getFactory().track(key);
}
/**
@@ -281,7 +281,7 @@
* @see SpanTracker#track()
*/
public static SpanTracker track(final StatsKey... keys) {
- return getUtil().track(keys);
+ return getFactory().track(keys);
}
/**
@@ -295,7 +295,7 @@
* @see TrackerLocator#getIncidentTracker(StatsKey)
*/
public static IncidentTracker getIncidentTracker(final String keyName)
{
- return getUtil().getIncidentTracker(keyName);
+ return getFactory().getIncidentTracker(keyName);
}
/**
@@ -309,7 +309,7 @@
* @see TrackerLocator#getIncidentTracker(StatsKey)
*/
public static IncidentTracker getIncidentTracker(final StatsKey key) {
- return getUtil().getIncidentTracker(key);
+ return getFactory().getIncidentTracker(key);
}
/**
@@ -322,7 +322,7 @@
* @see IncidentTracker#incident()
*/
public static void incident(final String keyName) {
- getUtil().incident(keyName);
+ getFactory().incident(keyName);
}
/**
@@ -335,7 +335,7 @@
* @see IncidentTracker#incident()
*/
public static void incident(final StatsKey key) {
- getUtil().incident(key);
+ getFactory().incident(key);
}
/**
@@ -348,7 +348,7 @@
* @see IncidentTracker#incident()
*/
public static void incident(final StatsKey... keys) {
- getUtil().incident(keys);
+ getFactory().incident(keys);
}
/**
@@ -359,7 +359,7 @@
*/
public static void failure(final Throwable failure,
final String keyName) {
- getUtil().failure(failure, keyName);
+ getFactory().failure(failure, keyName);
}
/**
@@ -370,7 +370,7 @@
*/
public static void failure(final Throwable failure,
final StatsKey key) {
- getUtil().failure(failure, key);
+ getFactory().failure(failure, key);
}
/**
@@ -381,7 +381,7 @@
*/
public static void failure(final Throwable failure,
final StatsKey... keys) {
- getUtil().failure(failure, keys);
+ getFactory().failure(failure, keys);
}
/**
@@ -395,7 +395,7 @@
* @see TrackerLocator#getManualTracker(StatsKey)
*/
public static ManualTracker getManualTracker(final String keyName) {
- return getUtil().getManualTracker(keyName);
+ return getFactory().getManualTracker(keyName);
}
/**
@@ -409,7 +409,7 @@
* @see TrackerLocator#getManualTracker(StatsKey)
*/
public static ManualTracker getManualTracker(final StatsKey key) {
- return getUtil().getManualTracker(key);
+ return getFactory().getManualTracker(key);
}
/**
@@ -422,7 +422,7 @@
* @see StatsKeyFactory#createKey(String)
*/
public static StatsKey newKey(final String name) {
- return getUtil().newKey(name);
+ return getFactory().newKey(name);
}
/**
@@ -436,7 +436,7 @@
* @see StatsKeyFactory#createKeyBuilder(StatsKey)
*/
public static StatsKeyBuilder buildKey(final String name) {
- return getUtil().buildKey(name);
+ return getFactory().buildKey(name);
}
/**
@@ -447,7 +447,7 @@
* @see
org.stajistics.configuration.StatsConfigBuilderFactory#createConfigBuilder()
*/
public static StatsConfigBuilder buildConfig() {
- return getUtil().buildConfig();
+ return getFactory().buildConfig();
}
}
=======================================
--- /stajistics-core/src/main/java/org/stajistics/StatsManagerRegistry.java
Mon Jun 20 15:36:53 2011
+++ /stajistics-core/src/main/java/org/stajistics/StatsManagerRegistry.java
Fri Jun 24 05:48:14 2011
@@ -36,6 +36,10 @@
}
registry.remove(namespace);
}
+
+ public static boolean isStatsManagerDefined(final String namespace) {
+ return registry.containsKey(namespace);
+ }
public static StatsManager getStatsManager(final String namespace) {
StatsManager statsManager = registry.get(namespace);
=======================================
--- /stajistics-core/src/main/java/org/stajistics/aop/StatsProxy.java Mon
Jun 20 15:36:53 2011
+++ /stajistics-core/src/main/java/org/stajistics/aop/StatsProxy.java Fri
Jun 24 05:48:14 2011
@@ -22,7 +22,7 @@
import org.stajistics.Stats;
import org.stajistics.StatsKey;
import org.stajistics.StatsManager;
-import org.stajistics.StatsUtil;
+import org.stajistics.StatsFactory;
import org.stajistics.tracker.span.SpanTracker;
/**
@@ -46,7 +46,7 @@
protected static final String ATTR_METHOD = "method";
protected final StatsManager statsManager;
- protected final StatsUtil util;
+ protected final StatsFactory factory;
protected final StatsKey key;
protected final Object target;
@@ -59,7 +59,7 @@
} else {
this.statsManager = statsManager;
}
- this.util = new StatsUtil(this.statsManager);
+ this.factory = new StatsFactory(this.statsManager);
if (key == null) {
throw new NullPointerException("key");
@@ -162,7 +162,7 @@
.newKey();
try {
- final SpanTracker tracker = util.track(methodKey);
+ final SpanTracker tracker = factory.track(methodKey);
try {
if (method.equals(EQUALS_METHOD)) {
return target.equals(unwrap(args[0]));
@@ -182,7 +182,7 @@
cause = t;
}
- util.failure(cause, methodKey);
+ factory.failure(cause, methodKey);
throw cause;
}
=======================================
---
/stajistics-core/src/main/java/org/stajistics/management/StatsKeyOpenTypeConverter.java
Wed Jun 22 05:57:39 2011
+++
/stajistics-core/src/main/java/org/stajistics/management/StatsKeyOpenTypeConverter.java
Fri Jun 24 05:48:14 2011
@@ -18,7 +18,7 @@
*/
public class StatsKeyOpenTypeConverter {
- private static final char KEY_ATTRS_DELIMITER = ':';
+ private static final char KEY_ATTRS_DELIMITER = '?';
private static final char ATTR_NAME_VALUE_PAIR_DELIMITER = '&';
private static final char ATTR_NAME_VALUE_DELIMITER = '=';
=======================================
--- /stajistics-core/src/test/java/org/stajistics/StatsTest.java Mon Jun 20
15:36:53 2011
+++ /stajistics-core/src/test/java/org/stajistics/StatsTest.java Fri Jun 24
05:48:14 2011
@@ -36,14 +36,14 @@
/**
*
*
- *
+ *mockTrackerLocator = mockery.mock(TrackerLocator.class);
+
* @author The Stajistics Project
*/
public class StatsTest extends AbstractStajisticsTestCase {
private StatsManager mockManager;
private TrackerLocator mockTrackerLocator;
- private StatsKey mockKey;
@Before
public void setUp() {
@@ -54,7 +54,6 @@
allowing(mockManager).getTrackerLocator();
will(returnValue(mockTrackerLocator));
}});
- mockKey = mockery.mock(StatsKey.class);
Stats.loadManager(mockManager);
}
@@ -174,214 +173,6 @@
Stats.isEnabled();
}
- @Test
- public void testStartWithKeyName() {
- final String keyName = "test.name";
- final SpanTracker mockTracker = mockery.mock(SpanTracker.class);
-
- final StatsKeyFactory mockKeyFactory =
mockery.mock(StatsKeyFactory.class);
-
- mockery.checking(new Expectations() {{
- one(mockManager).getKeyFactory();
will(returnValue(mockKeyFactory));
- one(mockKeyFactory).createKey(keyName);
will(returnValue(mockKey));
-
one(mockTrackerLocator).getSpanTracker(with(any(StatsKey.class)));
will(returnValue(mockTracker));
- one(mockTracker).track(); will(returnValue(mockTracker));
- }});
-
- assertEquals(mockTracker, Stats.track(keyName));
- }
-
- @Test
- public void testStartWithStatsKey() {
- final SpanTracker mockTracker = mockery.mock(SpanTracker.class);
-
- mockery.checking(new Expectations() {{
- one(mockTrackerLocator).getSpanTracker(with(mockKey));
will(returnValue(mockTracker));
- one(mockTracker).track(); will(returnValue(mockTracker));
- }});
-
- assertEquals(mockTracker, Stats.track(mockKey));
- }
-/*
- @Test
- public void testSpanTrackWithStatsKeys() {
- final Tracker mockTracker = mockery.mock(Tracker.class);
-
- final StatsKey mockKey2 = mockery.mock(StatsKey.class, "mockKey2");
-
- mockery.checking(new Expectations() {{
- one(mockTrackerLocator).getTracker(with(new StatsKey[] {
mockKey, mockKey2 }));
- will(returnValue(mockTracker));
- one(mockTracker).track(); will(returnValue(mockTracker));
- }});
-
- assertEquals(mockTracker, Stats.start(mockKey, mockKey2));
- }
-*/
- @Test
- public void testIncidentWithKeyName() {
- final String keyName = "test.name";
- final IncidentTracker mockTracker =
mockery.mock(IncidentTracker.class);
-
- final StatsKeyFactory mockKeyFactory =
mockery.mock(StatsKeyFactory.class);
-
- mockery.checking(new Expectations() {{
- one(mockManager).getKeyFactory();
will(returnValue(mockKeyFactory));
- one(mockKeyFactory).createKey(keyName);
will(returnValue(mockKey));
- one(mockTrackerLocator).getIncidentTracker(with(mockKey));
will(returnValue(mockTracker));
- one(mockTracker).incident();
- }});
-
- Stats.incident(keyName);
- }
-
- @Test
- public void testIncidentWithStatsKey() {
- final IncidentTracker mockTracker =
mockery.mock(IncidentTracker.class);
-
- mockery.checking(new Expectations() {{
- one(mockTrackerLocator).getIncidentTracker(with(mockKey));
will(returnValue(mockTracker));
- one(mockTracker).incident(); will(returnValue(mockTracker));
- }});
-
- Stats.incident(mockKey);
- }
-
- @Test
- public void testIncidentWithStatsKeys() {
- final IncidentTracker mockTracker =
mockery.mock(IncidentTracker.class);
-
- final StatsKey mockKey2 = mockery.mock(StatsKey.class, "mockKey2");
-
- mockery.checking(new Expectations() {{
- one(mockTrackerLocator).getIncidentTracker(with(new StatsKey[]
{ mockKey, mockKey2 }));
- will(returnValue(mockTracker));
- one(mockTracker).incident(); will(returnValue(mockTracker));
- }});
-
- Stats.incident(mockKey, mockKey2);
- }
-
- @Test
- public void testFailureWithKeyName() {
-
- TestUtil.buildStatsKeyExpectations(mockery, mockKey, "test");
-
- final String keyName = "test.name";
- final IncidentTracker mockTracker =
mockery.mock(IncidentTracker.class);
-
- final StatsKeyFactory mockKeyFactory =
mockery.mock(StatsKeyFactory.class);
-
- final StatsKey mockKey2 = mockery.mock(StatsKey.class, "mockKey2");
- final StatsKeyBuilder mockKeyBuilder =
mockery.mock(StatsKeyBuilder.class);
-
- final Exception e = new Exception();
-
- mockery.checking(new Expectations() {{
- one(mockManager).getKeyFactory();
will(returnValue(mockKeyFactory));
- one(mockKeyFactory).createKey(keyName);
will(returnValue(mockKey));
- one(mockKey).buildCopy(); will(returnValue(mockKeyBuilder));
- one(mockKeyBuilder).withNameSuffix("exception");
will(returnValue(mockKeyBuilder));
- one(mockKeyBuilder).withAttribute("threw",
e.getClass().getName()); will(returnValue(mockKeyBuilder));
- one(mockKeyBuilder).newKey(); will(returnValue(mockKey2));
- one(mockTrackerLocator).getIncidentTracker(mockKey2);
will(returnValue(mockTracker));
- one(mockTracker).incident();
- }});
-
- Stats.failure(e, keyName);
- }
-
- @Test
- public void testFailureWithStatsKey() {
-
- TestUtil.buildStatsKeyExpectations(mockery, mockKey, "test");
-
- final IncidentTracker mockTracker =
mockery.mock(IncidentTracker.class);
-
- final StatsKey mockKey2 = mockery.mock(StatsKey.class, "mockKey2");
- final StatsKeyBuilder mockKeyBuilder =
mockery.mock(StatsKeyBuilder.class);
-
- final Exception e = new Exception();
-
- mockery.checking(new Expectations() {{
- one(mockKey).buildCopy(); will(returnValue(mockKeyBuilder));
- one(mockKeyBuilder).withNameSuffix("exception");
will(returnValue(mockKeyBuilder));
- one(mockKeyBuilder).withAttribute("threw",
e.getClass().getName()); will(returnValue(mockKeyBuilder));
- one(mockKeyBuilder).newKey(); will(returnValue(mockKey2));
- one(mockTrackerLocator).getIncidentTracker(mockKey2);
will(returnValue(mockTracker));
- one(mockTracker).incident();
- }});
-
- Stats.failure(e, mockKey);
- }
-
- @Test
- public void testManualWithKeyName() {
- final String keyName = "test.name";
- final ManualTracker mockManualTracker =
mockery.mock(ManualTracker.class);
-
- final StatsKeyFactory mockKeyFactory =
mockery.mock(StatsKeyFactory.class);
-
- mockery.checking(new Expectations() {{
- one(mockManager).getKeyFactory();
will(returnValue(mockKeyFactory));
- one(mockKeyFactory).createKey(keyName);
will(returnValue(mockKey));
-
one(mockTrackerLocator).getManualTracker(with(any(StatsKey.class)));
will(returnValue(mockManualTracker));
- }});
-
- assertEquals(mockManualTracker, Stats.getManualTracker(keyName));
- }
-
- @Test
- public void testManualWithStatsKey() {
-
- final ManualTracker mockManualTracker =
mockery.mock(ManualTracker.class);
-
- mockery.checking(new Expectations() {{
- one(mockTrackerLocator).getManualTracker(with(mockKey));
will(returnValue(mockManualTracker));
- }});
-
- assertSame(mockManualTracker, Stats.getManualTracker(mockKey));
- }
-
- @Test
- public void testNewKey() {
- final String keyName = "test";
- final StatsKeyFactory mockKeyFactory =
mockery.mock(StatsKeyFactory.class);
-
- mockery.checking(new Expectations() {{
- one(mockManager).getKeyFactory();
will(returnValue(mockKeyFactory));
- one(mockKeyFactory).createKey(with(keyName));
will(returnValue(mockKey));
- }});
-
- assertSame(mockKey, Stats.newKey(keyName));
- }
-
- @Test
- public void testBuildKey() {
- final String keyName = "test";
- final StatsKeyFactory mockKeyFactory =
mockery.mock(StatsKeyFactory.class);
- final StatsKeyBuilder mockKeyBuilder =
mockery.mock(StatsKeyBuilder.class);
-
- mockery.checking(new Expectations() {{
- one(mockManager).getKeyFactory();
will(returnValue(mockKeyFactory));
- one(mockKeyFactory).createKeyBuilder(with(keyName));
will(returnValue(mockKeyBuilder));
- }});
-
- assertSame(mockKeyBuilder, Stats.buildKey(keyName));
- }
-
- @Test
- public void testBuildConfig() {
- final StatsConfigBuilderFactory mockConfigBuilderFactory =
mockery.mock(StatsConfigBuilderFactory.class);
- final StatsConfigBuilder mockConfigBuilder =
mockery.mock(StatsConfigBuilder.class);
-
- mockery.checking(new Expectations() {{
- one(mockManager).getConfigBuilderFactory();
will(returnValue(mockConfigBuilderFactory));
- one(mockConfigBuilderFactory).createConfigBuilder();
will(returnValue(mockConfigBuilder));
- }});
-
- assertSame(mockConfigBuilder, Stats.buildConfig());
- }
/* NESTED CLASSES */
=======================================
---
/stajistics-core/src/test/java/org/stajistics/management/StatsKeyOpenTypeConverterTest.java
Wed Jun 22 05:57:39 2011
+++
/stajistics-core/src/test/java/org/stajistics/management/StatsKeyOpenTypeConverterTest.java
Fri Jun 24 05:48:14 2011
@@ -38,9 +38,9 @@
@Test
public void testConvertKeyWithKeyAttrDelimiterKeyNameSuffix() {
- StatsKey key = new SimpleStatsKey("test:", null);
+ StatsKey key = new SimpleStatsKey("test?", null);
String openKey = converter.toOpenType(key);
- assertEquals("test\\:", openKey);
+ assertEquals("test\\?", openKey);
assertConvertUnconvertSame(key);
}
@@ -49,7 +49,7 @@
public void testConvertKeyWithStringAttribute() {
StatsKey key = new DefaultStatsKey("test", null,
Collections.<String,Object>singletonMap("attr", "value"));
String openKey = converter.toOpenType(key);
- assertEquals("test:attr=value", openKey);
+ assertEquals("test?attr=value", openKey);
assertConvertUnconvertSame(key);
}
@@ -62,7 +62,7 @@
StatsKey key = new DefaultStatsKey("test", null, attributes);
String openKey = converter.toOpenType(key);
- assertEquals("test:attr1=one&attr2=two", openKey);
+ assertEquals("test?attr1=one&attr2=two", openKey);
assertConvertUnconvertSame(key);
}
@@ -71,7 +71,7 @@
public void testConvertKeyWithBooleanAttribute() {
StatsKey key = new DefaultStatsKey("test", null,
Collections.<String,Object>singletonMap("cool", true));
String openKey = converter.toOpenType(key);
- assertEquals("test:cool=b_t", openKey);
+ assertEquals("test?cool=b_t", openKey);
assertConvertUnconvertSame(key);
}
@@ -80,7 +80,7 @@
public void testConvertKeyWithIntegerAttribute() {
StatsKey key = new DefaultStatsKey("test", null,
Collections.<String,Object>singletonMap("cats", 3));
String openKey = converter.toOpenType(key);
- assertEquals("test:cats=i_3", openKey);
+ assertEquals("test?cats=i_3", openKey);
assertConvertUnconvertSame(key);
}
@@ -89,7 +89,7 @@
public void testConvertKeyWithLongAttribute() {
StatsKey key = new DefaultStatsKey("test", null,
Collections.<String,Object>singletonMap("id", 42L));
String openKey = converter.toOpenType(key);
- assertEquals("test:id=l_42", openKey);
+ assertEquals("test?id=l_42", openKey);
assertConvertUnconvertSame(key);
}
@@ -104,34 +104,44 @@
StatsKey key = new DefaultStatsKey("test", null, attributes);
String openKey = converter.toOpenType(key);
- assertEquals("test:attr1=one&attr2=b_t&attr3=i_44&attr4=l_66",
openKey);
+ assertEquals("test?attr1=one&attr2=b_t&attr3=i_44&attr4=l_66",
openKey);
assertConvertUnconvertSame(key);
}
@Test
public void testConvertKeyWithKeyNameEscapes() {
- StatsKey key = new SimpleStatsKey("the:crazy&character=test",
null);
+ StatsKey key = new SimpleStatsKey("the?crazy&character=test",
null);
String openKey = converter.toOpenType(key);
- assertEquals("the\\:crazy\\&character\\=test", openKey);
+ assertEquals("the\\?crazy\\&character\\=test", openKey);
assertConvertUnconvertSame(key);
}
@Test
public void testConvertKeyWithAttrNameEscapes() {
- StatsKey key = new DefaultStatsKey("test", null,
Collections.<String,Object>singletonMap("the:crazy&funky=name", "value"));
+ StatsKey key = new DefaultStatsKey("test", null,
Collections.<String,Object>singletonMap("the?crazy&funky=name", "value"));
String openKey = converter.toOpenType(key);
- assertEquals("test:the\\:crazy\\&funky\\=name=value", openKey);
+ assertEquals("test?the\\?crazy\\&funky\\=name=value", openKey);
assertConvertUnconvertSame(key);
}
@Test
public void testConvertKeyWithAttrValueEscapes() {
- StatsKey key = new DefaultStatsKey("test", null,
Collections.<String,Object>singletonMap("name", "the:crazy&funky=value"));
+ StatsKey key = new DefaultStatsKey("test", null,
Collections.<String,Object>singletonMap("name", "the?crazy&funky=value"));
String openKey = converter.toOpenType(key);
- assertEquals("test:name=the\\:crazy\\&funky\\=value", openKey);
+ assertEquals("test?name=the\\?crazy\\&funky\\=value", openKey);
+
+ assertConvertUnconvertSame(key);
+ }
+
+ @Test
+ public void testConvertKeyWithEscapes() {
+ StatsKey key = new DefaultStatsKey("the?crazy&character=test",
+ null,
Collections.<String,Object>singletonMap("the?crazy&funky=name", "the?crazy&funky=value"));
+ String openKey = converter.toOpenType(key);
+
assertEquals("the\\?crazy\\&character\\=test?the\\?crazy\\&funky\\=name=the\\?crazy\\&funky\\=value",
openKey);
assertConvertUnconvertSame(key);
}
@@ -140,7 +150,7 @@
public void
testConvertKeyWithStringAttrValueHavingBooleanAttrTypeEscape() {
StatsKey key = new DefaultStatsKey("test", null,
Collections.<String,Object>singletonMap("name", "b_not_really_a_boolean"));
String openKey = converter.toOpenType(key);
- assertEquals("test:name=\\b_not_really_a_boolean", openKey);
+ assertEquals("test?name=\\b_not_really_a_boolean", openKey);
assertConvertUnconvertSame(key);
}
@@ -149,7 +159,7 @@
public void
testConvertKeyWithStringAttrValueHavingIntegerAttrTypeEscape() {
StatsKey key = new DefaultStatsKey("test", null,
Collections.<String,Object>singletonMap("name", "i_not_really_an_integer"));
String openKey = converter.toOpenType(key);
- assertEquals("test:name=\\i_not_really_an_integer", openKey);
+ assertEquals("test?name=\\i_not_really_an_integer", openKey);
assertConvertUnconvertSame(key);
}
@@ -158,7 +168,7 @@
public void
testConvertKeyWithStringAttrValueHavingLongAttrTypeEscape() {
StatsKey key = new DefaultStatsKey("test", null,
Collections.<String,Object>singletonMap("name", "l_not_really_a_long"));
String openKey = converter.toOpenType(key);
- assertEquals("test:name=\\l_not_really_a_long", openKey);
+ assertEquals("test?name=\\l_not_really_a_long", openKey);
assertConvertUnconvertSame(key);
}