Added:
/stajistics-core/src/main/java/org/stajistics/StatsKeyUtil.java
/stajistics-core/src/main/java/org/stajistics/StatsNamespaceNotFoundException.java
/stajistics-core/src/main/java/org/stajistics/StatsUtil.java
/stajistics-core/src/main/java/org/stajistics/io/StatsFilterInputStream.java
/stajistics-core/src/main/java/org/stajistics/io/StatsFilterOutputStream.java
/stajistics-core/src/main/java/org/stajistics/io/StatsFilterReader.java
/stajistics-core/src/main/java/org/stajistics/io/StatsFilterWriter.java
Deleted:
/stajistics-core/src/main/java/org/stajistics/StatsKeyUtils.java
/stajistics-core/src/main/java/org/stajistics/io/StatsInputStream.java
/stajistics-core/src/main/java/org/stajistics/io/StatsOutputStream.java
/stajistics-core/src/main/java/org/stajistics/io/StatsReader.java
/stajistics-core/src/main/java/org/stajistics/io/StatsWriter.java
Modified:
/stajistics-core/src/main/java/org/stajistics/AbstractStatsKey.java
/stajistics-core/src/main/java/org/stajistics/DefaultStatsKeyBuilder.java
/stajistics-core/src/main/java/org/stajistics/DefaultStatsManager.java
/stajistics-core/src/main/java/org/stajistics/Stats.java
/stajistics-core/src/main/java/org/stajistics/StatsConstants.java
/stajistics-core/src/main/java/org/stajistics/StatsKey.java
/stajistics-core/src/main/java/org/stajistics/StatsKeyMatcher.java
/stajistics-core/src/main/java/org/stajistics/StatsManager.java
/stajistics-core/src/main/java/org/stajistics/StatsManagerRegistry.java
/stajistics-core/src/main/java/org/stajistics/StatsProperties.java
/stajistics-core/src/main/java/org/stajistics/aop/LifeCycleMonitor.java
/stajistics-core/src/main/java/org/stajistics/aop/ProxyFactory.java
/stajistics-core/src/main/java/org/stajistics/aop/StatsDecorators.java
/stajistics-core/src/main/java/org/stajistics/aop/StatsProxy.java
/stajistics-core/src/main/java/org/stajistics/aop/StatsSelectiveProxy.java
/stajistics-core/src/main/java/org/stajistics/bootstrap/DefaultStatsManagerFactory.java
/stajistics-core/src/main/java/org/stajistics/configuration/DefaultStatsConfigManager.java
/stajistics-core/src/main/java/org/stajistics/configuration/StatsConfig.java
/stajistics-core/src/main/java/org/stajistics/configuration/StatsConfigBuilder.java
/stajistics-core/src/main/java/org/stajistics/configuration/StatsConfigManager.java
/stajistics-core/src/main/java/org/stajistics/configuration/xml/binding/XMLConfigDocument.java
/stajistics-core/src/main/java/org/stajistics/configuration/xml/binding/XMLProperties.java
/stajistics-core/src/main/java/org/stajistics/configuration/xml/binding/XMLPropertiesAdapter.java
/stajistics-core/src/main/java/org/stajistics/configuration/xml/binding/XMLProperty.java
/stajistics-core/src/main/java/org/stajistics/configuration/xml/binding/package-info.java
/stajistics-core/src/main/java/org/stajistics/event/AsynchronousEventManager.java
/stajistics-core/src/main/java/org/stajistics/event/EventHandler.java
/stajistics-core/src/main/java/org/stajistics/event/EventManager.java
/stajistics-core/src/main/java/org/stajistics/event/SynchronousEventManager.java
/stajistics-core/src/main/java/org/stajistics/management/DefaultStatsMXBeanRegistrar.java
/stajistics-core/src/main/java/org/stajistics/management/StatsKeyOpenTypeConverter.java
/stajistics-core/src/main/java/org/stajistics/management/StatsMXBeanRegistrar.java
/stajistics-core/src/main/java/org/stajistics/management/StatsMXBeanUtil.java
/stajistics-core/src/main/java/org/stajistics/management/StatsManagementEventHandler.java
/stajistics-core/src/main/java/org/stajistics/management/StatsManagementFactory.java
/stajistics-core/src/main/java/org/stajistics/management/beans/DefaultStatsConfigMXBean.java
/stajistics-core/src/main/java/org/stajistics/management/beans/DefaultStatsConfigManagerMXBean.java
/stajistics-core/src/main/java/org/stajistics/management/beans/DefaultStatsSessionManagerMXBean.java
/stajistics-core/src/main/java/org/stajistics/management/beans/StatsConfigManagerMXBean.java
/stajistics-core/src/main/java/org/stajistics/management/beans/StatsSessionManagerMXBean.java
/stajistics-core/src/main/java/org/stajistics/session/AbstractStatsSession.java
/stajistics-core/src/main/java/org/stajistics/session/AsynchronousSession.java
/stajistics-core/src/main/java/org/stajistics/session/ConcurrentSession.java
/stajistics-core/src/main/java/org/stajistics/session/DefaultSessionManager.java
/stajistics-core/src/main/java/org/stajistics/session/StatsSession.java
/stajistics-core/src/main/java/org/stajistics/session/StatsSessionFactory.java
/stajistics-core/src/main/java/org/stajistics/session/StatsSessionManager.java
/stajistics-core/src/main/java/org/stajistics/session/recorder/DataRecorder.java
/stajistics-core/src/main/java/org/stajistics/session/recorder/DataRecorders.java
/stajistics-core/src/main/java/org/stajistics/session/recorder/DistributionDataRecorder.java
/stajistics-core/src/main/java/org/stajistics/session/recorder/RangeDataRecorder.java
/stajistics-core/src/main/java/org/stajistics/task/DebugTaskService.java
/stajistics-core/src/main/java/org/stajistics/task/TaskService.java
/stajistics-core/src/main/java/org/stajistics/task/TaskServiceThreadFactory.java
/stajistics-core/src/main/java/org/stajistics/task/ThreadPoolTaskService.java
/stajistics-core/src/main/java/org/stajistics/tracker/AbstractCompositeTracker.java
/stajistics-core/src/main/java/org/stajistics/tracker/AbstractTracker.java
/stajistics-core/src/main/java/org/stajistics/tracker/CompositeTrackerFactory.java
/stajistics-core/src/main/java/org/stajistics/tracker/SingletonTrackerFactoryDecorator.java
/stajistics-core/src/main/java/org/stajistics/tracker/ThreadLocalTrackerFactoryDecorator.java
/stajistics-core/src/main/java/org/stajistics/tracker/Tracker.java
/stajistics-core/src/main/java/org/stajistics/tracker/TrackerFactory.java
/stajistics-core/src/main/java/org/stajistics/tracker/TrackerLocator.java
/stajistics-core/src/main/java/org/stajistics/tracker/incident/CompositeIncidentTracker.java
/stajistics-core/src/main/java/org/stajistics/tracker/incident/DefaultIncidentTracker.java
/stajistics-core/src/main/java/org/stajistics/tracker/manual/DefaultManualTracker.java
/stajistics-core/src/main/java/org/stajistics/tracker/span/AbstractSpanTracker.java
/stajistics-core/src/main/java/org/stajistics/tracker/span/AbstractThreadInfoSpanTracker.java
/stajistics-core/src/main/java/org/stajistics/tracker/span/CompositeSpanTracker.java
/stajistics-core/src/main/java/org/stajistics/tracker/span/GarbageCollectionTimeTracker.java
/stajistics-core/src/main/java/org/stajistics/tracker/span/PerfTimeDurationTracker.java
/stajistics-core/src/main/java/org/stajistics/tracker/span/ThreadBlockTimeTracker.java
/stajistics-core/src/main/java/org/stajistics/tracker/span/ThreadWaitTimeTracker.java
/stajistics-core/src/main/java/org/stajistics/util/FastPutsArrayMap.java
/stajistics-core/src/main/java/org/stajistics/util/FastPutsLinkedMap.java
/stajistics-core/src/main/java/org/stajistics/util/Misc.java
/stajistics-core/src/main/java/org/stajistics/util/xml/AbstractXMLBindingManager.java
/stajistics-core/src/main/java/org/stajistics/util/xml/XMLBindingManager.java
/stajistics-core/src/test/java/org/stajistics/AbstractStatsKeyTestCase.java
/stajistics-core/src/test/java/org/stajistics/DefaultStatsKeyBuilderTest.java
/stajistics-core/src/test/java/org/stajistics/DefaultStatsKeyFactoryTest.java
/stajistics-core/src/test/java/org/stajistics/DefaultStatsManagerTest.java
/stajistics-core/src/test/java/org/stajistics/Issue32Test.java
/stajistics-core/src/test/java/org/stajistics/NullStatsKeyBuilderTest.java
/stajistics-core/src/test/java/org/stajistics/NullStatsKeyTest.java
/stajistics-core/src/test/java/org/stajistics/SimpleStatsKeyTest.java
/stajistics-core/src/test/java/org/stajistics/SingleAttributeStatsKeyTest.java
/stajistics-core/src/test/java/org/stajistics/StajisticsAssert.java
/stajistics-core/src/test/java/org/stajistics/StajisticsTest.java
/stajistics-core/src/test/java/org/stajistics/StatsKeyMatcherMatchTest.java
/stajistics-core/src/test/java/org/stajistics/StatsKeyMatcherTest.java
/stajistics-core/src/test/java/org/stajistics/StatsPropertiesTest.java
/stajistics-core/src/test/java/org/stajistics/StatsTest.java
/stajistics-core/src/test/java/org/stajistics/TestUtil.java
/stajistics-core/src/test/java/org/stajistics/aop/StatsDecoratorsTest.java
/stajistics-core/src/test/java/org/stajistics/aop/StatsProxyTest.java
/stajistics-core/src/test/java/org/stajistics/aop/StatsSelectiveProxyTest.java
/stajistics-core/src/test/java/org/stajistics/bootstrap/AbstractStatsManagerFactoryTestCase.java
/stajistics-core/src/test/java/org/stajistics/configuration/DefaultStatsConfigBuilderTest.java
/stajistics-core/src/test/java/org/stajistics/configuration/DefaultStatsConfigFactoryTest.java
/stajistics-core/src/test/java/org/stajistics/configuration/DefaultStatsConfigManagerTest.java
/stajistics-core/src/test/java/org/stajistics/configuration/DefaultStatsConfigTest.java
/stajistics-core/src/test/java/org/stajistics/configuration/xml/binding/ObjectFactoryTest.java
/stajistics-core/src/test/java/org/stajistics/configuration/xml/binding/XMLConfigBindingManagerTest.java
/stajistics-core/src/test/java/org/stajistics/data/AbstractDataContainerTestCase.java
/stajistics-core/src/test/java/org/stajistics/data/NullDataSetTest.java
/stajistics-core/src/test/java/org/stajistics/event/EventTypeTest.java
/stajistics-core/src/test/java/org/stajistics/management/AbstractJMXTestCase.java
/stajistics-core/src/test/java/org/stajistics/management/DefaultStatsMXBeanRegistrarTest.java
/stajistics-core/src/test/java/org/stajistics/management/StatsKeyOpenTypeConverterTest.java
/stajistics-core/src/test/java/org/stajistics/management/StatsMXBeanUtilTest.java
/stajistics-core/src/test/java/org/stajistics/management/StatsManagementExceptionTest.java
/stajistics-core/src/test/java/org/stajistics/management/StatsManagementFactoryTest.java
/stajistics-core/src/test/java/org/stajistics/management/beans/DefaultStatsConfigMXBeanTest.java
/stajistics-core/src/test/java/org/stajistics/management/beans/DefaultStatsConfigManagerMXBeanTest.java
/stajistics-core/src/test/java/org/stajistics/management/beans/DefaultStatsManagerMXBeanTest.java
/stajistics-core/src/test/java/org/stajistics/management/beans/DefaultStatsSessionMXBeanTest.java
/stajistics-core/src/test/java/org/stajistics/management/beans/DefaultStatsSessionManagerMXBeanTest.java
/stajistics-core/src/test/java/org/stajistics/session/AbstractStatsSessionManagerTestCase.java
/stajistics-core/src/test/java/org/stajistics/session/AsynchronousSessionTest.java
/stajistics-core/src/test/java/org/stajistics/session/ConcurrentSessionTest.java
/stajistics-core/src/test/java/org/stajistics/session/DefaultSessionManagerTest.java
/stajistics-core/src/test/java/org/stajistics/session/recorder/AbstractDataRecorderTestCase.java
/stajistics-core/src/test/java/org/stajistics/tracker/AbstractCompositeTrackerTestCase.java
/stajistics-core/src/test/java/org/stajistics/tracker/AbstractTrackerTestCase.java
/stajistics-core/src/test/java/org/stajistics/tracker/CompositeTrackerFactoryTest.java
/stajistics-core/src/test/java/org/stajistics/tracker/DefaultTrackerLocatorTest.java
/stajistics-core/src/test/java/org/stajistics/tracker/NullTrackerLocatorTest.java
/stajistics-core/src/test/java/org/stajistics/tracker/NullTrackerTest.java
/stajistics-core/src/test/java/org/stajistics/tracker/SingletonTrackerFactoryDecoratorTest.java
/stajistics-core/src/test/java/org/stajistics/tracker/ThreadLocalTrackerFactoryDecoratorTest.java
/stajistics-core/src/test/java/org/stajistics/tracker/incident/CompositeIncidentTrackerTest.java
/stajistics-core/src/test/java/org/stajistics/tracker/incident/DefaultIncidentTrackerTest.java
/stajistics-core/src/test/java/org/stajistics/tracker/manual/DefaultManualTrackerTest.java
/stajistics-core/src/test/java/org/stajistics/tracker/span/AbstractSpanTrackerTestCase.java
/stajistics-core/src/test/java/org/stajistics/tracker/span/CompositeSpanTrackerTest.java
/stajistics-core/src/test/java/org/stajistics/util/AbstractFastPutsMapTestCase.java
/stajistics-core/src/test/java/org/stajistics/util/AtomicDoubleTest.java
/stajistics-core/src/test/java/org/stajistics/util/RangeListTest.java
/stajistics-core/src/test/java/org/stajistics/util/RangeTest.java
/stajistics-core/src/test/java/org/stajistics/util/ServiceLifeCycleSupportTest.java
/stajistics-core/src/test/java/org/stajistics/util/xml/AbstractXMLBindingManagerTest.java
=======================================
--- /dev/null
+++ /stajistics-core/src/main/java/org/stajistics/StatsKeyUtil.java Mon Jun
20 15:36:53 2011
@@ -0,0 +1,48 @@
+/* Copyright 2009 - 2010 The Stajistics Project
+ *
+ * Licensed 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.stajistics;
+
+/**
+ *
+ *
+ *
+ * @author The Stajistics Project
+ */
+public final class StatsKeyUtil {
+
+ private StatsKeyUtil() {}
+
+ public static String parentKeyName(final String keyName) {
+ String parentKeyName = null;
+
+ int i =
keyName.lastIndexOf(StatsConstants.KEY_HIERARCHY_DELIMITER);
+ if (i > -1) {
+ parentKeyName = keyName.substring(0, i);
+ }
+
+ return parentKeyName;
+ }
+
+ public static StatsKey keyForFailure(final StatsKey key,
+ final Throwable failure) {
+ StatsKey failureKey = key.buildCopy()
+ .withNameSuffix("exception")
+ .withAttribute("threw",
+ failure.getClass()
+ .getName())
+ .newKey();
+ return failureKey;
+ }
+}
=======================================
--- /dev/null
+++
/stajistics-core/src/main/java/org/stajistics/StatsNamespaceNotFoundException.java
Mon Jun 20 15:36:53 2011
@@ -0,0 +1,31 @@
+package org.stajistics;
+
+/**
+ *
+ *
+ * @author The Stajistics Project
+ */
+public class StatsNamespaceNotFoundException extends RuntimeException {
+
+ public StatsNamespaceNotFoundException() {
+ super();
+ }
+
+ public StatsNamespaceNotFoundException(String message, Throwable
cause) {
+ super(message, cause);
+
+ }
+
+ public StatsNamespaceNotFoundException(String message) {
+ super(message);
+
+ }
+
+ public StatsNamespaceNotFoundException(Throwable cause) {
+ super(cause);
+
+ }
+
+
+
+}
=======================================
--- /dev/null
+++ /stajistics-core/src/main/java/org/stajistics/StatsUtil.java Mon Jun 20
15:36:53 2011
@@ -0,0 +1,449 @@
+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();
+ }
+
+}
=======================================
--- /dev/null
+++
/stajistics-core/src/main/java/org/stajistics/io/StatsFilterInputStream.java
Mon Jun 20 15:36:53 2011
@@ -0,0 +1,100 @@
+package org.stajistics.io;
+
+import java.io.FilterInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.stajistics.Stats;
+import org.stajistics.StatsKey;
+import org.stajistics.StatsManager;
+import org.stajistics.tracker.manual.ManualTracker;
+
+/**
+ * @author The Stajistics Project
+ */
+public class StatsFilterInputStream extends FilterInputStream {
+
+ private ManualTracker tracker;
+
+ public StatsFilterInputStream(final StatsKey key,
+ final InputStream in) {
+ this(null, key, in);
+ }
+
+ public StatsFilterInputStream(StatsManager statsManager,
+ final StatsKey key,
+ final InputStream in) {
+ super(in);
+
+ if (statsManager == null) {
+ statsManager = Stats.getManager();
+ }
+
+ if (key == null) {
+ throw new NullPointerException("key");
+ }
+
+ tracker = statsManager.getTrackerLocator().getManualTracker(key);
+ }
+
+ @Override
+ public int read() throws IOException {
+ final int i = in.read();
+ if (i > -1) {
+ tracker.addValue(1);
+ }
+ return i;
+ }
+
+ @Override
+ public int read(final byte[] b) throws IOException {
+ final int i = in.read(b);
+ if (i > -1) {
+ tracker.addValue(i);
+ }
+ return i;
+ }
+
+ @Override
+ public int read(final byte[] b, final int off, final int len) throws
IOException {
+ final int i = in.read(b, off, len);
+ if (i > -1) {
+ tracker.addValue(i);
+ }
+ return i;
+ }
+
+ @Override
+ public long skip(final long n) throws IOException {
+ return in.skip(n);
+ }
+
+ @Override
+ public int available() throws IOException {
+ return in.available();
+ }
+
+ @Override
+ public void close() throws IOException {
+ if (tracker != null) {
+ tracker.commit();
+ tracker = null;
+ }
+ in.close();
+ }
+
+ @Override
+ public void mark(final int readlimit) {
+ in.mark(readlimit);
+ }
+
+ @Override
+ public void reset() throws IOException {
+ in.reset();
+ }
+
+ @Override
+ public boolean markSupported() {
+ return in.markSupported();
+ }
+}
=======================================
--- /dev/null
+++
/stajistics-core/src/main/java/org/stajistics/io/StatsFilterOutputStream.java
Mon Jun 20 15:36:53 2011
@@ -0,0 +1,71 @@
+package org.stajistics.io;
+
+import java.io.FilterOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.stajistics.Stats;
+import org.stajistics.StatsKey;
+import org.stajistics.StatsManager;
+import org.stajistics.tracker.manual.ManualTracker;
+
+/**
+ * @author The Stajistics Project
+ */
+public class StatsFilterOutputStream extends FilterOutputStream {
+
+ private ManualTracker tracker;
+
+ public StatsFilterOutputStream(final StatsKey key,
+ final OutputStream out) {
+ this(null, key, out);
+ }
+
+ public StatsFilterOutputStream(StatsManager statsManager,
+ final StatsKey key,
+ final OutputStream out) {
+ super(out);
+
+ if (statsManager == null) {
+ statsManager = Stats.getManager();
+ }
+
+ if (key == null) {
+ throw new NullPointerException("key");
+ }
+
+ tracker = statsManager.getTrackerLocator().getManualTracker(key);
+ }
+
+ @Override
+ public void write(final int b) throws IOException {
+ tracker.addValue(1);
+ out.write(b);
+ }
+
+ @Override
+ public void write(final byte[] b) throws IOException {
+ tracker.addValue(b.length);
+ out.write(b);
+ }
+
+ @Override
+ public void write(byte[] b, int off, int len) throws IOException {
+ tracker.addValue(len);
+ out.write(b, off, len);
+ }
+
+ @Override
+ public void flush() throws IOException {
+ out.flush();
+ }
+
+ @Override
+ public void close() throws IOException {
+ if (tracker != null) {
+ tracker.commit();
+ tracker = null;
+ }
+ out.close();
+ }
+}
=======================================
--- /dev/null
+++ /stajistics-core/src/main/java/org/stajistics/io/StatsFilterReader.java
Mon Jun 20 15:36:53 2011
@@ -0,0 +1,110 @@
+package org.stajistics.io;
+
+import java.io.FilterReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.nio.CharBuffer;
+
+import org.stajistics.Stats;
+import org.stajistics.StatsKey;
+import org.stajistics.StatsManager;
+import org.stajistics.tracker.manual.ManualTracker;
+
+/**
+ * @author The Stajistics Project
+ */
+public class StatsFilterReader extends FilterReader {
+
+ private ManualTracker tracker;
+
+ public StatsFilterReader(final StatsKey key,
+ final Reader in) {
+ this(null, key, in);
+ }
+
+ public StatsFilterReader(StatsManager statsManager,
+ final StatsKey key,
+ final Reader in) {
+ super(in);
+
+ if (statsManager == null) {
+ statsManager = Stats.getManager();
+ }
+
+ if (key == null) {
+ throw new NullPointerException("key");
+ }
+
+ tracker = statsManager.getTrackerLocator().getManualTracker(key);
+ }
+
+ @Override
+ public int read() throws IOException {
+ final int i = in.read();
+ if (i > -1) {
+ tracker.addValue(1);
+ }
+ return i;
+ }
+
+ @Override
+ public int read(final char[] cbuf, final int off, final int len)
throws IOException {
+ final int i = in.read(cbuf, off, len);
+ if (i > -1) {
+ tracker.addValue(i);
+ }
+ return i;
+ }
+
+ @Override
+ public long skip(final long n) throws IOException {
+ return in.skip(n);
+ }
+
+ @Override
+ public boolean ready() throws IOException {
+ return in.ready();
+ }
+
+ @Override
+ public boolean markSupported() {
+ return in.markSupported();
+ }
+
+ @Override
+ public void mark(int readAheadLimit) throws IOException {
+ in.mark(readAheadLimit);
+ }
+
+ @Override
+ public void reset() throws IOException {
+ in.reset();
+ }
+
+ @Override
+ public void close() throws IOException {
+ if (tracker != null) {
+ tracker.commit();
+ tracker = null;
+ }
+ in.close();
+ }
+
+ @Override
+ public int read(final CharBuffer target) throws IOException {
+ final int i = in.read(target);
+ if (i > -1) {
+ tracker.addValue(i);
+ }
+ return i;
+ }
+
+ @Override
+ public int read(final char[] cbuf) throws IOException {
+ final int i = in.read(cbuf);
+ if (i > -1) {
+ tracker.addValue(i);
+ }
+ return i;
+ }
+}
=======================================
--- /dev/null
+++ /stajistics-core/src/main/java/org/stajistics/io/StatsFilterWriter.java
Mon Jun 20 15:36:53 2011
@@ -0,0 +1,104 @@
+package org.stajistics.io;
+
+import java.io.FilterWriter;
+import java.io.IOException;
+import java.io.Writer;
+
+import org.stajistics.Stats;
+import org.stajistics.StatsKey;
+import org.stajistics.StatsManager;
+import org.stajistics.tracker.manual.ManualTracker;
+
+/**
+ * @author The Stajistics Project
+ */
+public class StatsFilterWriter extends FilterWriter {
+
+ private ManualTracker tracker;
+
+ public StatsFilterWriter(final StatsKey key,
+ final Writer out) {
+ this(null, key, out);
+ }
+
+ public StatsFilterWriter(StatsManager statsManager,
+ final StatsKey key,
+ final Writer out) {
+ super(out);
+
+ if (statsManager == null) {
+ statsManager = Stats.getManager();
+ }
+
+ if (key == null) {
+ throw new NullPointerException("key");
+ }
+
+ tracker = statsManager.getTrackerLocator().getManualTracker(key);
+ }
+
+ @Override
+ public void write(final int c) throws IOException {
+ out.write(c);
+ tracker.addValue(1);
+ }
+
+ @Override
+ public void write(final char[] cbuf, final int off, final int len)
throws IOException {
+ out.write(cbuf, off, len);
+ tracker.addValue(len);
+ }
+
+ @Override
+ public void write(final String str, final int off, final int len)
throws IOException {
+ out.write(str, off, len);
+ tracker.addValue(len);
+ }
+
+ @Override
+ public void flush() throws IOException {
+ out.flush();
+ }
+
+ @Override
+ public void close() throws IOException {
+ if (tracker != null) {
+ tracker.commit();
+ tracker = null;
+ }
+ out.close();
+ }
+
+ @Override
+ public void write(final char[] cbuf) throws IOException {
+ out.write(cbuf);
+ tracker.addValue(cbuf.length);
+ }
+
+ @Override
+ public void write(final String str) throws IOException {
+ out.write(str);
+ tracker.addValue(str.length());
+ }
+
+ @Override
+ public Writer append(final CharSequence csq) throws IOException {
+ out.append(csq);
+ tracker.addValue(csq.length());
+ return this;
+ }
+
+ @Override
+ public Writer append(final CharSequence csq, final int start, final
int end) throws IOException {
+ out.append(csq, start, end);
+ tracker.addValue(end - start);
+ return this;
+ }
+
+ @Override
+ public Writer append(final char c) throws IOException {
+ out.append(c);
+ tracker.addValue(1);
+ return this;
+ }
+}
=======================================
--- /stajistics-core/src/main/java/org/stajistics/StatsKeyUtils.java Fri
May 28 05:37:37 2010
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright 2009 - 2010 The Stajistics Project
- *
- * Licensed 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.stajistics;
-
-/**
- *
- *
- *
- * @author The Stajistics Project
- */
-public final class StatsKeyUtils {
-
- private StatsKeyUtils() {}
-
- public static String parentKeyName(final String keyName) {
- String parentKeyName = null;
-
- int i =
keyName.lastIndexOf(StatsConstants.KEY_HIERARCHY_DELIMITER);
- if (i > -1) {
- parentKeyName = keyName.substring(0, i);
- }
-
- return parentKeyName;
- }
-
- public static StatsKey keyForFailure(final StatsKey key,
- final Throwable failure) {
- StatsKey failureKey = key.buildCopy()
- .withNameSuffix("exception")
- .withAttribute("threw",
- failure.getClass()
- .getName())
- .newKey();
- return failureKey;
- }
-}
=======================================
--- /stajistics-core/src/main/java/org/stajistics/io/StatsInputStream.java
Sun Jun 19 21:52:08 2011
+++ /dev/null
@@ -1,98 +0,0 @@
-package org.stajistics.io;
-
-import org.stajistics.Stats;
-import org.stajistics.StatsKey;
-import org.stajistics.StatsManager;
-import org.stajistics.tracker.manual.ManualTracker;
-
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * @author The Stajistics Project
- */
-public class StatsInputStream extends FilterInputStream {
-
- private final StatsManager statsManager;
- private final StatsKey key;
-
- private final ManualTracker tracker;
-
- protected StatsInputStream(final StatsManager statsManager,
- final StatsKey key,
- final InputStream in) {
- super(in);
-
- if (statsManager == null) {
- this.statsManager = Stats.getManager();
- } else {
- this.statsManager = statsManager;
- }
-
- if (key == null) {
- throw new NullPointerException("key");
- }
-
- this.key = key;
-
- tracker = statsManager.getTrackerLocator().getManualTracker(key);
- }
-
- @Override
- public int read() throws IOException {
- final int i = in.read();
- if (i > -1) {
- tracker.addValue(1).commit();
- }
- return i;
- }
-
- @Override
- public int read(final byte[] b) throws IOException {
- final int i = in.read(b);
- if (i > -1) {
- tracker.addValue(i).commit();
- }
- return i;
- }
-
- @Override
- public int read(final byte[] b, final int off, final int len) throws
IOException {
- final int i = in.read(b, off, len);
- if (i > -1) {
- tracker.addValue(i).commit();
- }
- return i;
- }
-
- @Override
- public long skip(final long n) throws IOException {
- return in.skip(n);
- }
-
- @Override
- public int available() throws IOException {
- return in.available();
- }
-
- @Override
- public void close() throws IOException {
- in.close();
- }
-
- @Override
- public void mark(final int readlimit) {
- in.mark(readlimit);
- }
-
- @Override
- public void reset() throws IOException {
- in.reset();
- }
-
- @Override
- public boolean markSupported() {
- return in.markSupported();
- }
-}
=======================================
--- /stajistics-core/src/main/java/org/stajistics/io/StatsOutputStream.java
Sun Jun 19 21:52:08 2011
+++ /dev/null
@@ -1,74 +0,0 @@
-package org.stajistics.io;
-
-import org.stajistics.Stats;
-import org.stajistics.StatsKey;
-import org.stajistics.StatsManager;
-import org.stajistics.tracker.manual.ManualTracker;
-
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * @author The Stajistics Project
- */
-public class StatsOutputStream extends FilterOutputStream {
-
- private final StatsManager statsManager;
- private final StatsKey key;
-
- private final ManualTracker tracker;
-
- public StatsOutputStream(final StatsKey key,
- final OutputStream out) {
- this(null, key, out);
- }
-
- public StatsOutputStream(final StatsManager statsManager,
- final StatsKey key,
- final OutputStream out) {
- super(out);
-
- if (statsManager == null) {
- this.statsManager = Stats.getManager();
- } else {
- this.statsManager = statsManager;
- }
-
- if (key == null) {
- throw new NullPointerException("key");
- }
-
- this.key = key;
-
- tracker = statsManager.getTrackerLocator().getManualTracker(key);
- }
-
- @Override
- public void write(final int b) throws IOException {
- tracker.addValue(1).commit();
- out.write(b);
- }
-
- @Override
- public void write(final byte[] b) throws IOException {
- tracker.addValue(b.length).commit();
- out.write(b);
- }
-
- @Override
- public void write(byte[] b, int off, int len) throws IOException {
- tracker.addValue(len).commit();
- out.write(b, off, len);
- }
-
- @Override
- public void flush() throws IOException {
- out.flush();
- }
-
- @Override
- public void close() throws IOException {
- out.close();
- }
-}
=======================================
--- /stajistics-core/src/main/java/org/stajistics/io/StatsReader.java Sun
Jun 19 21:52:08 2011
+++ /dev/null
@@ -1,109 +0,0 @@
-package org.stajistics.io;
-
-import org.stajistics.Stats;
-import org.stajistics.StatsKey;
-import org.stajistics.StatsManager;
-import org.stajistics.tracker.manual.ManualTracker;
-
-import java.io.FilterReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.nio.CharBuffer;
-
-/**
- * @author The Stajistics Project
- */
-public class StatsReader extends FilterReader {
-
- private final StatsManager statsManager;
- private final StatsKey key;
-
- private final ManualTracker tracker;
-
- public StatsReader(final StatsManager statsManager,
- final StatsKey key,
- final Reader in) {
- super(in);
-
-
- if (statsManager == null) {
- this.statsManager = Stats.getManager();
- } else {
- this.statsManager = statsManager;
- }
-
- if (key == null) {
- throw new NullPointerException("key");
- }
-
- this.key = key;
-
- tracker = statsManager.getTrackerLocator().getManualTracker(key);
- }
-
- @Override
- public int read() throws IOException {
- final int i = in.read();
- if (i > -1) {
- tracker.addValue(1).commit();
- }
- return i;
- }
-
- @Override
- public int read(final char[] cbuf, final int off, final int len)
throws IOException {
- final int i = in.read(cbuf, off, len);
- if (i > -1) {
- tracker.addValue(i).commit();
- }
- return i;
- }
-
- @Override
- public long skip(final long n) throws IOException {
- return in.skip(n);
- }
-
- @Override
- public boolean ready() throws IOException {
- return in.ready();
- }
-
- @Override
- public boolean markSupported() {
- return in.markSupported();
- }
-
- @Override
- public void mark(int readAheadLimit) throws IOException {
- in.mark(readAheadLimit);
- }
-
- @Override
- public void reset() throws IOException {
- in.reset();
- }
-
- @Override
- public void close() throws IOException {
- in.close();
- }
-
- @Override
- public int read(final CharBuffer target) throws IOException {
- final int i = in.read(target);
- if (i > -1) {
- tracker.addValue(i).commit();
- }
- return i;
- }
-
- @Override
- public int read(final char[] cbuf) throws IOException {
- final int i = in.read(cbuf);
- if (i > -1) {
- tracker.addValue(i).commit();
- }
- return i;
- }
-}
=======================================
--- /stajistics-core/src/main/java/org/stajistics/io/StatsWriter.java Sun
Jun 19 21:52:08 2011
+++ /dev/null
@@ -1,102 +0,0 @@
-package org.stajistics.io;
-
-import org.stajistics.Stats;
-import org.stajistics.StatsKey;
-import org.stajistics.StatsManager;
-import org.stajistics.tracker.manual.ManualTracker;
-
-import java.io.FilterWriter;
-import java.io.IOException;
-import java.io.Writer;
-
-/**
- * @author The Stajistics Project
- */
-public class StatsWriter extends FilterWriter {
-
- private final StatsManager statsManager;
- private final StatsKey key;
-
- private final ManualTracker tracker;
-
- protected StatsWriter(final StatsManager statsManager,
- final StatsKey key,
- final Writer out) {
- super(out);
-
- if (statsManager == null) {
- this.statsManager = Stats.getManager();
- } else {
- this.statsManager = statsManager;
- }
-
- if (key == null) {
- throw new NullPointerException("key");
- }
-
- this.key = key;
-
- tracker = statsManager.getTrackerLocator().getManualTracker(key);
- }
-
- @Override
- public void write(final int c) throws IOException {
- out.write(c);
- tracker.addValue(1).commit();
- }
-
- @Override
- public void write(final char[] cbuf, final int off, final int len)
throws IOException {
- out.write(cbuf, off, len);
- tracker.addValue(len).commit();
- }
-
- @Override
- public void write(final String str, final int off, final int len)
throws IOException {
- out.write(str, off, len);
- tracker.addValue(len).commit();
- }
-
- @Override
- public void flush() throws IOException {
- out.flush();
- }
-
- @Override
- public void close() throws IOException {
- out.close();
- }
-
- @Override
- public void write(final char[] cbuf) throws IOException {
- out.write(cbuf);
- tracker.addValue(cbuf.length).commit();
- }
-
- @Override
- public void write(final String str) throws IOException {
- out.write(str);
- tracker.addValue(str.length()).commit();
- }
-
- @Override
- public Writer append(final CharSequence csq) throws IOException {
- out.append(csq);
- tracker.addValue(csq.length()).commit();
- return this;
- }
-
- @Override
- public Writer append(final CharSequence csq, final int start, final
int end) throws IOException {
- out.append(csq, start, end);
- tracker.addValue(end - start).commit();
- return this;
- }
-
- @Override
- public Writer append(final char c) throws IOException {
- out.append(c);
- tracker.addValue(1).commit();
- return this;
- }
-}
=======================================
--- /stajistics-core/src/main/java/org/stajistics/AbstractStatsKey.java Wed
Jun 2 21:28:40 2010
+++ /stajistics-core/src/main/java/org/stajistics/AbstractStatsKey.java Mon
Jun 20 15:36:53 2011
@@ -14,7 +14,14 @@
*/
package org.stajistics;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
@@ -24,6 +31,10 @@
*/
public abstract class AbstractStatsKey implements StatsKey {
+ private static final Logger logger =
LoggerFactory.getLogger(AbstractStatsKey.class);
+
+ private static final String NULL = "<null>";
+
private final StatsKeyFactory keyFactory;
private final String name;
@@ -40,17 +51,31 @@
public AbstractStatsKey(final String name,
final StatsKeyFactory keyFactory) {
if (name == null) {
- throw new NullPointerException("name");
+ this.name = NULL;
+ } else {
+ this.name = name;
}
- this.name = name;
this.keyFactory = keyFactory;
}
@Override
public final StatsKeyBuilder buildCopy() {
if (keyFactory == null) {
- throw new
UnsupportedOperationException(StatsKeyFactory.class.getSimpleName() + "
unavailable");
+ if (logger.isErrorEnabled()) {
+ StringBuilder buf = new StringBuilder(128);
+ buf.append("Supplied null ");
+ buf.append(StatsKeyFactory.class.getSimpleName());
+ buf.append(" to ");
+ buf.append(AbstractStatsKey.class.getSimpleName());
+ buf.append(". buildCopy() returning ");
+ buf.append(NullStatsKeyBuilder.class.getSimpleName());
+ buf.append('.');
+
+ logger.error(buf.toString());
+ }
+
+ return NullStatsKeyBuilder.getInstance();
}
return keyFactory.createKeyBuilder(this);
@@ -69,7 +94,7 @@
for (int i = 0; i < nameLength; i++) {
if (nameChars[i] == StatsConstants.KEY_HIERARCHY_DELIMITER) {
- depth++;
+ depth++;
}
}
@@ -83,7 +108,7 @@
@Override
public StatsKey getParent() {
- String parentName = StatsKeyUtils.parentKeyName(name);
+ String parentName = StatsKeyUtil.parentKeyName(name);
if (parentName == null) {
return null;
}
=======================================
---
/stajistics-core/src/main/java/org/stajistics/DefaultStatsKeyBuilder.java
Sun Jun 19 21:26:01 2011
+++
/stajistics-core/src/main/java/org/stajistics/DefaultStatsKeyBuilder.java
Mon Jun 20 15:36:53 2011
@@ -14,10 +14,10 @@
*/
package org.stajistics;
-import org.stajistics.util.FastPutsArrayMap;
-
import java.util.Map;
+import org.stajistics.util.FastPutsLinkedMap;
+
/**
* The default implementation of {@link StatsKeyBuilder}. Do not
* instantiate this class directly. Instead use the {@link
StatsKeyFactory} provided by
@@ -27,6 +27,8 @@
*/
public class DefaultStatsKeyBuilder implements StatsKeyBuilder {
+ private static final String NULL = "<null>";
+
protected StatsKeyFactory keyFactory;
protected String name;
@@ -41,18 +43,10 @@
* @param name The initial key name. Must not be <tt>null</tt>.
* @param keyFactory The factory that supports the creation of
StatsKey instances.
* Must not be <tt>null</tt>.
- * @throws NullPointerException If <tt>name</tt> or
<tt>keyFactory</tt> is <tt>null</tt>.
*/
public DefaultStatsKeyBuilder(final String name,
final StatsKeyFactory keyFactory) {
- if (name == null) {
- throw new NullPointerException("name");
- }
- if (keyFactory == null) {
- throw new NullPointerException("keyFactory");
- }
-
- this.name = name;
+ this.name = name == null ? NULL : name;
this.keyFactory = keyFactory;
}
@@ -66,28 +60,21 @@
*/
public DefaultStatsKeyBuilder(final StatsKey template,
final StatsKeyFactory keyFactory) {
- if (template == null) {
- throw new NullPointerException("template");
- }
- if (keyFactory == null) {
- throw new NullPointerException("keyFactory");
- }
-
- this.name = template.getName();
+ this.name = (template == null ? NULL : (template.getName() ==
null ? NULL : template.getName()));
this.keyFactory = keyFactory;
- if (template.getAttributeCount() > 0) {
+ if (template != null && template.getAttributeCount() > 0) {
Map<String,Object> attrs = template.getAttributes();
if (attrs != null && !attrs.isEmpty()) {
- attributes = new FastPutsArrayMap<String,Object>(attrs);
+ attributes = new FastPutsLinkedMap<String,Object>(attrs);
}
}
}
@Override
- public StatsKeyBuilder withNameSuffix(final String nameSuffix) {
+ public StatsKeyBuilder withNameSuffix(String nameSuffix) {
if (nameSuffix == null) {
- throw new NullPointerException("nameSuffix");
+ nameSuffix = NULL;
}
if (nameSuffix.length() > 0) {
@@ -138,14 +125,9 @@
return this;
}
- protected void putAttribute(final String name, final Object value) {
-
+ protected void putAttribute(String name, Object value) {
if (name == null) {
- throw new NullPointerException("name");
- }
-
- if (value == null) {
- throw new NullPointerException("value for name: " + name);
+ name = NULL;
}
if (attributes == null) {
@@ -153,7 +135,7 @@
firstAttrName = name;
firstAttrValue = value;
} else {
- attributes = new FastPutsArrayMap<String,Object>();
+ attributes = new FastPutsLinkedMap<String,Object>();
attributes.put(firstAttrName, firstAttrValue);
firstAttrName = null;
firstAttrValue = null;
@@ -167,9 +149,8 @@
@Override
public StatsKey newKey() {
-
if (name == null) {
- throw new IllegalStateException("Must specify a name");
+ name = NULL;
}
if (attributes == null) {
=======================================
--- /stajistics-core/src/main/java/org/stajistics/DefaultStatsManager.java
Sun Jun 19 21:26:01 2011
+++ /stajistics-core/src/main/java/org/stajistics/DefaultStatsManager.java
Mon Jun 20 15:36:53 2011
@@ -14,6 +14,8 @@
*/
package org.stajistics;
+import java.util.concurrent.Callable;
+
import org.stajistics.configuration.DefaultStatsConfigBuilderFactory;
import org.stajistics.configuration.DefaultStatsConfigManager;
import org.stajistics.configuration.StatsConfigBuilderFactory;
@@ -30,8 +32,6 @@
import org.stajistics.tracker.TrackerLocator;
import org.stajistics.util.ServiceLifeCycle;
-import java.util.concurrent.Callable;
-
/**
* The default implementation of {@link StatsManager}. Clients typically
do not
* instantiate this class directly. Instead use {@link Stats#getManager()}.
@@ -41,8 +41,9 @@
public class DefaultStatsManager implements StatsManager {
private volatile boolean enabled = true;
-
- protected final String namespace;
+ private volatile UncaughtExceptionHandler uncaughtExceptionHandler =
NullUncaughtExceptionHandler.getInstance();
+
+ protected String namespace;
protected final StatsConfigManager configManager;
protected final StatsSessionManager sessionManager;
protected final EventManager eventManager;
@@ -115,6 +116,13 @@
lifeCycleSupport.initialize(new Callable<Void>() {
@Override
public Void call() throws Exception {
+ if (namespace == null) {
+ if (StatsManagerRegistry.getStatsManagerCount() == 0) {
+ namespace = StatsConstants.DEFAULT_NAMESPACE;
+ } else {
+ namespace =
Integer.toHexString(System.identityHashCode(this));
+ }
+ }
StatsManagerRegistry.registerStatsManager(DefaultStatsManager.this);
@@ -158,10 +166,6 @@
@Override
public String getNamespace() {
- if (namespace == null) {
- return Integer.toHexString(System.identityHashCode(this));
- }
-
return namespace;
}
@@ -213,6 +217,20 @@
public void setEnabled(final boolean enabled) {
this.enabled = enabled;
}
+
+ @Override
+ public UncaughtExceptionHandler getUncaughtExceptionHandler() {
+ return uncaughtExceptionHandler;
+ }
+
+ @Override
+ public void setUncaughtExceptionHandler(final UncaughtExceptionHandler
uncaughtExceptionHandler) {
+ if (uncaughtExceptionHandler == null) {
+ this.uncaughtExceptionHandler =
NullUncaughtExceptionHandler.getInstance();
+ } else {
+ this.uncaughtExceptionHandler = uncaughtExceptionHandler;
+ }
+ }
/* NESTED CLASSES */
@@ -227,6 +245,7 @@
protected StatsConfigBuilderFactory configBuilderFactory = null;
protected TaskService taskService = null;
protected boolean enabled = true;
+ protected UncaughtExceptionHandler uncaughtExceptionHandler = null;
public Builder withNamespace(final String namespace) {
this.namespace = namespace;
@@ -300,6 +319,11 @@
this.enabled = enabled;
return this;
}
+
+ public Builder withUncaughtExceptionHandler(final
UncaughtExceptionHandler uncaughtExceptionHandler) {
+ this.uncaughtExceptionHandler = uncaughtExceptionHandler;
+ return this;
+ }
public DefaultStatsManager newManager() {
@@ -349,6 +373,9 @@
taskService);
manager.setEnabled(enabled);
+ if (uncaughtExceptionHandler != null) {
+
manager.setUncaughtExceptionHandler(uncaughtExceptionHandler);
+ }
return manager;
}
=======================================
--- /stajistics-core/src/main/java/org/stajistics/Stats.java Sun Jun 12
20:45:46 2011
+++ /stajistics-core/src/main/java/org/stajistics/Stats.java Mon Jun 20
15:36:53 2011
@@ -48,8 +48,7 @@
private static final Logger logger =
LoggerFactory.getLogger(Stats.class);
private static volatile StatsManager manager;
-
- private static volatile UncaughtExceptionHandler
uncaughtExceptionHandler = NullUncaughtExceptionHandler.getInstance();
+ private static volatile StatsUtil util;
/**
* Specify the sole default {@link StatsManager} instance, replacing
any existing instance.
@@ -70,6 +69,7 @@
logger.debug("Loaded: {}: {}", StatsManager.class.getSimpleName(),
manager);
Stats.manager = manager;
+ Stats.util = new StatsUtil(manager);
}
/**
@@ -92,6 +92,13 @@
return manager;
}
+
+ private static StatsUtil getUtil() {
+ if (util == null) {
+ getManager(); // Assigns util
+ }
+ return util;
+ }
protected static StatsManager loadDefaultStatsManager() {
@@ -141,6 +148,7 @@
String managerFactoryClassName =
System.getProperty(StatsManagerFactory.class.getName());
if (managerFactoryClassName != null) {
+ @SuppressWarnings("unchecked")
Class<StatsManagerFactory> managerFactoryClass =
(Class<StatsManagerFactory>)Class.forName(managerFactoryClassName);
@@ -149,10 +157,6 @@
return managerFactory;
}
-
- private static TrackerLocator getTrackerLocator() {
- return getManager().getTrackerLocator();
- }
/**
* Get the {@link org.stajistics.configuration.StatsConfigManager}.
@@ -208,12 +212,7 @@
* or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
*/
public static SpanTracker getSpanTracker(final String keyName) {
- try {
- return getTrackerLocator().getSpanTracker(newKey(keyName));
- } catch (Exception e) {
- logger.error("Failed to obtain a " +
SpanTracker.class.getSimpleName(), e);
- return NullTracker.getInstance();
- }
+ return getUtil().getSpanTracker(keyName);
}
/**
@@ -225,12 +224,7 @@
* or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
*/
public static SpanTracker getSpanTracker(final StatsKey key) {
- try {
- return getTrackerLocator().getSpanTracker(key);
- } catch (Exception e) {
- logger.error("Failed to obtain a " +
SpanTracker.class.getSimpleName(), e);
- return NullTracker.getInstance();
- }
+ return getUtil().getSpanTracker(key);
}
/**
@@ -242,12 +236,7 @@
* or a {@link NullTracker} if an Exception occurred, never
<tt>null</tt>.
*/
public static SpanTracker getSpanTracker(final StatsKey... keys) {
- try {
- return getTrackerLocator().getSpanTracker(keys);
- } catch (Exception e) {
- logger.error("Failed to obtain a " +
SpanTracker.class.getSimpleName(), e);
- return NullTracker.getInstance();
- }
+ return getUtil().getSpanTracker(keys);
}
/**
@@ -262,13 +251,7 @@
* @see SpanTracker#track()
*/
public static SpanTracker track(final String keyName) {
- try {
- return getTrackerLocator().getSpanTracker(newKey(keyName))
- .track();
- } catch (Exception e) {
- logger.error("Failed to obtain and invoke track on " +
SpanTracker.class.getSimpleName(), e);
- return NullTracker.getInstance();
- }
+ return getUtil().track(keyName);
}
/**
@@ -283,13 +266,7 @@
* @see SpanTracker#track()
*/
public static SpanTracker track(final StatsKey key) {
- try {
- return getTrackerLocator().getSpanTracker(key)
- .track();
- } catch (Exception e) {
- logger.error("Failed to obtain and invoke track on " +
SpanTracker.class.getSimpleName(), e);
- return NullTracker.getInstance();
- }
+ return getUtil().track(key);
}
/**
@@ -304,13 +281,7 @@
* @see SpanTracker#track()
*/
public static SpanTracker track(final StatsKey... keys) {
- try {
- return getTrackerLocator().getSpanTracker(keys)
- .track();
- } catch (Exception e) {
- logger.error("Failed to obtain and invoke track on " +
SpanTracker.class.getSimpleName(), e);
- return NullTracker.getInstance();
- }
+ return getUtil().track(keys);
}
/**
@@ -324,12 +295,7 @@
* @see TrackerLocator#getIncidentTracker(StatsKey)
*/
public static IncidentTracker getIncidentTracker(final String keyName)
{
- try {
- return getTrackerLocator().getIncidentTracker(newKey(keyName));
- } catch (Exception e) {
- logger.error("Failed to obtain an " +
IncidentTracker.class.getSimpleName(), e);
- return NullTracker.getInstance();
- }
+ return getUtil().getIncidentTracker(keyName);
}
/**
@@ -343,12 +309,7 @@
* @see TrackerLocator#getIncidentTracker(StatsKey)
*/
public static IncidentTracker getIncidentTracker(final StatsKey key) {
- try {
- return getTrackerLocator().getIncidentTracker(key);
- } catch (Exception e) {
- logger.error("Failed to obtain an " +
IncidentTracker.class.getSimpleName(), e);
- return NullTracker.getInstance();
- }
+ return getUtil().getIncidentTracker(key);
}
/**
@@ -361,12 +322,7 @@
* @see IncidentTracker#incident()
*/
public static void incident(final String keyName) {
- try {
- getTrackerLocator().getIncidentTracker(newKey(keyName))
- .incident();
- } catch (Exception e) {
- logger.error("Failed to obtain and invoke an " +
IncidentTracker.class.getSimpleName(), e);
- }
+ getUtil().incident(keyName);
}
/**
@@ -379,12 +335,7 @@
* @see IncidentTracker#incident()
*/
public static void incident(final StatsKey key) {
- try {
- getTrackerLocator().getIncidentTracker(key)
- .incident();
- } catch (Exception e) {
- logger.error("Failed to obtain and invoke an " +
IncidentTracker.class.getSimpleName(), e);
- }
+ getUtil().incident(key);
}
/**
@@ -397,12 +348,7 @@
* @see IncidentTracker#incident()
*/
public static void incident(final StatsKey... keys) {
- try {
- getTrackerLocator().getIncidentTracker(keys)
- .incident();
- } catch (Exception e) {
- logger.error("Failed to obtain and invoke an " +
IncidentTracker.class.getSimpleName(), e);
- }
+ getUtil().incident(keys);
}
/**
@@ -413,13 +359,7 @@
*/
public static void failure(final Throwable failure,
final String keyName) {
- try {
-
getTrackerLocator().getIncidentTracker(StatsKeyUtils.keyForFailure(newKey(keyName),
-
failure))
- .incident();
- } catch (Exception e) {
- logger.error("Failed to report a failure", e);
- }
+ getUtil().failure(failure, keyName);
}
/**
@@ -430,12 +370,7 @@
*/
public static void failure(final Throwable failure,
final StatsKey key) {
- try {
-
getTrackerLocator().getIncidentTracker(StatsKeyUtils.keyForFailure(key,
failure))
- .incident();
- } catch (Exception e) {
- logger.error("Failed to report a failure", e);
- }
+ getUtil().failure(failure, key);
}
/**
@@ -446,20 +381,7 @@
*/
public static void failure(final Throwable failure,
final StatsKey... keys) {
- try {
- if (keys.length == 0) {
- throw new IllegalArgumentException("must supply at least
one key");
- }
-
- TrackerLocator trackerLocator = getTrackerLocator();
-
- for (StatsKey key : keys) {
-
trackerLocator.getIncidentTracker(StatsKeyUtils.keyForFailure(key, failure))
- .incident();
- }
- } catch (Exception e) {
- logger.error("Failed to report a failure", e);
- }
+ getUtil().failure(failure, keys);
}
/**
@@ -473,12 +395,7 @@
* @see TrackerLocator#getManualTracker(StatsKey)
*/
public static ManualTracker getManualTracker(final String keyName) {
- try {
- return getTrackerLocator().getManualTracker(newKey(keyName));
- } catch (Exception e) {
- logger.error("Failed to obtain a " +
ManualTracker.class.getSimpleName(), e);
- return NullTracker.getInstance();
- }
+ return getUtil().getManualTracker(keyName);
}
/**
@@ -492,12 +409,7 @@
* @see TrackerLocator#getManualTracker(StatsKey)
*/
public static ManualTracker getManualTracker(final StatsKey key) {
- try {
- return getTrackerLocator().getManualTracker(key);
- } catch (Exception e) {
- logger.error("Failed to obtain a " +
ManualTracker.class.getSimpleName(), e);
- return NullTracker.getInstance();
- }
+ return getUtil().getManualTracker(key);
}
/**
@@ -510,13 +422,7 @@
* @see StatsKeyFactory#createKey(String)
*/
public static StatsKey newKey(final String name) {
- try {
- return getManager().getKeyFactory()
- .createKey(name);
- } catch (Exception e) {
- logger.error("Failed to create a " +
StatsKey.class.getSimpleName(), e);
- return NullStatsKey.getInstance();
- }
+ return getUtil().newKey(name);
}
/**
@@ -530,13 +436,7 @@
* @see StatsKeyFactory#createKeyBuilder(StatsKey)
*/
public static StatsKeyBuilder buildKey(final String name) {
- try {
- return getManager().getKeyFactory()
- .createKeyBuilder(name);
- } catch (Exception e) {
- logger.error("Failed to create a " +
StatsKeyBuilder.class.getSimpleName(), e);
- return NullStatsKeyBuilder.getInstance();
- }
+ return getUtil().buildKey(name);
}
/**
@@ -547,21 +447,7 @@
* @see
org.stajistics.configuration.StatsConfigBuilderFactory#createConfigBuilder()
*/
public static StatsConfigBuilder buildConfig() {
- return getManager().getConfigBuilderFactory()
- .createConfigBuilder();
+ return getUtil().buildConfig();
}
-
- public static UncaughtExceptionHandler getUncaughtExceptionHandler() {
- return uncaughtExceptionHandler;
- }
-
-
- public static void setUncaughtExceptionHandler(final
UncaughtExceptionHandler uncaughtExceptionHandler) {
- if (uncaughtExceptionHandler == null) {
- Stats.uncaughtExceptionHandler =
NullUncaughtExceptionHandler.getInstance();
- } else {
- Stats.uncaughtExceptionHandler = uncaughtExceptionHandler;
- }
- }
-}
+}
=======================================
--- /stajistics-core/src/main/java/org/stajistics/StatsConstants.java Mon
May 31 20:44:40 2010
+++ /stajistics-core/src/main/java/org/stajistics/StatsConstants.java Mon
Jun 20 15:36:53 2011
@@ -22,6 +22,8 @@
*/
public interface StatsConstants {
+ String DEFAULT_NAMESPACE = "default";
+
/**
* The character that delimits hierarchy levels in {@link StatsKey}
names.
*/
=======================================
--- /stajistics-core/src/main/java/org/stajistics/StatsKey.java Sun Jun 19
13:23:35 2011
+++ /stajistics-core/src/main/java/org/stajistics/StatsKey.java Mon Jun 20
15:36:53 2011
@@ -14,11 +14,11 @@
*/
package org.stajistics;
-import org.stajistics.session.StatsSession;
-
import java.io.Serializable;
import java.util.Map;
+import org.stajistics.session.StatsSession;
+
/**
* A StatsKey acts as a handle for a single target for which statistics
can be collected.
*
=======================================
--- /stajistics-core/src/main/java/org/stajistics/StatsKeyMatcher.java Sun
Jun 19 13:23:35 2011
+++ /stajistics-core/src/main/java/org/stajistics/StatsKeyMatcher.java Mon
Jun 20 15:36:53 2011
@@ -15,7 +15,15 @@
package org.stajistics;
import java.io.Serializable;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import java.util.regex.Pattern;
/**
=======================================
--- /stajistics-core/src/main/java/org/stajistics/StatsManager.java Sun Jun
19 21:26:01 2011
+++ /stajistics-core/src/main/java/org/stajistics/StatsManager.java Mon Jun
20 15:36:53 2011
@@ -14,6 +14,8 @@
*/
package org.stajistics;
+import java.io.Serializable;
+
import org.stajistics.configuration.StatsConfigBuilderFactory;
import org.stajistics.configuration.StatsConfigManager;
import org.stajistics.event.EventManager;
@@ -22,8 +24,6 @@
import org.stajistics.tracker.TrackerLocator;
import org.stajistics.util.ServiceLifeCycle;
-import java.io.Serializable;
-
/**
* Acts as an aggregator of other managers and factories. Maintains a
master enabled switch for
* statistics collection.
@@ -119,4 +119,7 @@
@Override
void shutdown();
-}
+ UncaughtExceptionHandler getUncaughtExceptionHandler();
+
+ void setUncaughtExceptionHandler(UncaughtExceptionHandler
uncaughtExceptionHandler);
+}
=======================================
--- /stajistics-core/src/main/java/org/stajistics/StatsManagerRegistry.java
Sun Jun 19 21:26:01 2011
+++ /stajistics-core/src/main/java/org/stajistics/StatsManagerRegistry.java
Mon Jun 20 15:36:53 2011
@@ -38,6 +38,10 @@
}
public static StatsManager getStatsManager(final String namespace) {
- return registry.get(namespace);
+ StatsManager statsManager = registry.get(namespace);
+ if (statsManager == null) {
+ throw new StatsNamespaceNotFoundException(namespace);
+ }
+ return statsManager;
}
}
=======================================
--- /stajistics-core/src/main/java/org/stajistics/StatsProperties.java Wed
Jun 2 21:28:40 2010
+++ /stajistics-core/src/main/java/org/stajistics/StatsProperties.java Mon
Jun 20 15:36:53 2011
@@ -14,12 +14,12 @@
*/
package org.stajistics;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import java.util.Arrays;
import java.util.Map;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
* Provides access to configuration properties that are used by Stajistics
internals.
*
=======================================
--- /stajistics-core/src/main/java/org/stajistics/aop/LifeCycleMonitor.java
Wed Jun 2 21:28:40 2010
+++ /stajistics-core/src/main/java/org/stajistics/aop/LifeCycleMonitor.java
Mon Jun 20 15:36:53 2011
@@ -14,10 +14,6 @@
*/
package org.stajistics.aop;
-import org.stajistics.Stats;
-import org.stajistics.StatsKey;
-import org.stajistics.tracker.span.SpanTracker;
-
import java.lang.ref.PhantomReference;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
@@ -25,6 +21,10 @@
import java.util.IdentityHashMap;
import java.util.Map;
+import org.stajistics.Stats;
+import org.stajistics.StatsKey;
+import org.stajistics.tracker.span.SpanTracker;
+
/**
*
*
=======================================
--- /stajistics-core/src/main/java/org/stajistics/aop/ProxyFactory.java Thu
Feb 25 15:34:31 2010
+++ /stajistics-core/src/main/java/org/stajistics/aop/ProxyFactory.java Mon
Jun 20 15:36:53 2011
@@ -26,7 +26,7 @@
public static final class NoOp<T> implements ProxyFactory<T> {
- @SuppressWarnings("unchecked")
+ @SuppressWarnings("rawtypes")
private static final NoOp instance = new NoOp();
private NoOp() {}
=======================================
--- /stajistics-core/src/main/java/org/stajistics/aop/StatsDecorators.java
Wed Jun 2 21:28:40 2010
+++ /stajistics-core/src/main/java/org/stajistics/aop/StatsDecorators.java
Mon Jun 20 15:36:53 2011
@@ -14,16 +14,16 @@
*/
package org.stajistics.aop;
-import org.stajistics.Stats;
-import org.stajistics.StatsKey;
-import org.stajistics.tracker.span.SpanTracker;
-
import java.util.Observable;
import java.util.Observer;
import java.util.concurrent.Callable;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadFactory;
+import org.stajistics.Stats;
+import org.stajistics.StatsKey;
+import org.stajistics.tracker.span.SpanTracker;
+
/**
*
*
=======================================
--- /stajistics-core/src/main/java/org/stajistics/aop/StatsProxy.java Wed
Jun 2 21:28:40 2010
+++ /stajistics-core/src/main/java/org/stajistics/aop/StatsProxy.java Mon
Jun 20 15:36:53 2011
@@ -14,21 +14,17 @@
*/
package org.stajistics.aop;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.stajistics.Stats;
-import org.stajistics.StatsKey;
-import org.stajistics.StatsKeyUtils;
-import org.stajistics.StatsManager;
-import org.stajistics.tracker.NullTracker;
-import org.stajistics.tracker.incident.IncidentTracker;
-import org.stajistics.tracker.span.SpanTracker;
-
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
+import org.stajistics.Stats;
+import org.stajistics.StatsKey;
+import org.stajistics.StatsManager;
+import org.stajistics.StatsUtil;
+import org.stajistics.tracker.span.SpanTracker;
+
/**
*
*
@@ -37,8 +33,6 @@
*/
public class StatsProxy implements InvocationHandler {
- private static final Logger logger =
LoggerFactory.getLogger(StatsProxy.class);
-
protected static final Method EQUALS_METHOD;
static {
try {
@@ -52,6 +46,7 @@
protected static final String ATTR_METHOD = "method";
protected final StatsManager statsManager;
+ protected final StatsUtil util;
protected final StatsKey key;
protected final Object target;
@@ -64,6 +59,7 @@
} else {
this.statsManager = statsManager;
}
+ this.util = new StatsUtil(this.statsManager);
if (key == null) {
throw new NullPointerException("key");
@@ -166,19 +162,8 @@
.newKey();
try {
- SpanTracker tracker;
-
+ final SpanTracker tracker = util.track(methodKey);
try {
- tracker = statsManager.getTrackerLocator()
- .getSpanTracker(methodKey);
- } catch (Exception e) {
- logger.error("Failed to obtain a " +
SpanTracker.class.getSimpleName(), e);
- tracker = NullTracker.getInstance();
- }
-
- try {
- tracker.track();
-
if (method.equals(EQUALS_METHOD)) {
return target.equals(unwrap(args[0]));
}
@@ -197,13 +182,7 @@
cause = t;
}
- try {
- statsManager.getTrackerLocator()
- .getIncidentTracker(StatsKeyUtils.keyForFailure(methodKey,
cause))
- .incident();
- } catch (Exception e) {
- logger.error("Failed to obtain and invoke an " +
IncidentTracker.class.getSimpleName(), e);
- }
+ util.failure(cause, methodKey);
throw cause;
}
=======================================
---
/stajistics-core/src/main/java/org/stajistics/aop/StatsSelectiveProxy.java
Wed Jun 2 21:28:40 2010
+++
/stajistics-core/src/main/java/org/stajistics/aop/StatsSelectiveProxy.java
Mon Jun 20 15:36:53 2011
@@ -14,9 +14,6 @@
*/
package org.stajistics.aop;
-import org.stajistics.StatsKey;
-import org.stajistics.StatsManager;
-
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
@@ -24,6 +21,9 @@
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
+import org.stajistics.StatsKey;
+import org.stajistics.StatsManager;
+
/**
*
* @author The Stajistics Project
=======================================
---
/stajistics-core/src/main/java/org/stajistics/bootstrap/DefaultStatsManagerFactory.java
Wed Jun 15 16:30:39 2011
+++
/stajistics-core/src/main/java/org/stajistics/bootstrap/DefaultStatsManagerFactory.java
Mon Jun 20 15:36:53 2011
@@ -17,7 +17,6 @@
import org.stajistics.DefaultStatsManager;
import org.stajistics.StatsManager;
import org.stajistics.StatsProperties;
-import org.stajistics.management.DefaultStatsMXBeanRegistrar;
import org.stajistics.management.StatsMXBeanRegistrar;
import org.stajistics.management.StatsManagementEventHandler;
@@ -37,10 +36,8 @@
.newManager();
if (StatsProperties.getBooleanProperty(PROP_MANAGEMENT_ENABLED,
true)) {
- StatsMXBeanRegistrar management = new
DefaultStatsMXBeanRegistrar(manager.getNamespace());
- StatsManagementEventHandler eventHandler = new
StatsManagementEventHandler(management);
manager.getEventManager()
- .addGlobalEventHandler(eventHandler);
+ .addGlobalEventHandler(new
StatsManagementEventHandler());
}
manager.initialize();
=======================================
---
/stajistics-core/src/main/java/org/stajistics/configuration/DefaultStatsConfigManager.java
Sun Jun 19 21:26:01 2011
+++
/stajistics-core/src/main/java/org/stajistics/configuration/DefaultStatsConfigManager.java
Mon Jun 20 15:36:53 2011
@@ -1,15 +1,15 @@
package org.stajistics.configuration;
-import org.stajistics.*;
-import org.stajistics.event.EventManager;
-import org.stajistics.event.EventType;
-import org.stajistics.session.DefaultSessionFactory;
-import org.stajistics.session.recorder.DefaultDataRecorderFactory;
-import org.stajistics.tracker.span.TimeDurationTracker;
-import org.stajistics.util.ServiceLifeCycle;
-
import java.io.Serializable;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.TreeMap;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@@ -17,6 +17,21 @@
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
+import org.stajistics.NullStatsKey;
+import org.stajistics.StatsConstants;
+import org.stajistics.StatsKey;
+import org.stajistics.StatsKeyAssociation;
+import org.stajistics.StatsKeyFactory;
+import org.stajistics.StatsKeyMatcher;
+import org.stajistics.StatsKeyUtil;
+import org.stajistics.StatsProperties;
+import org.stajistics.event.EventManager;
+import org.stajistics.event.EventType;
+import org.stajistics.session.DefaultSessionFactory;
+import org.stajistics.session.recorder.DefaultDataRecorderFactory;
+import org.stajistics.tracker.span.TimeDurationTracker;
+import org.stajistics.util.ServiceLifeCycle;
+
/**
* The default implementation of {@link
org.stajistics.configuration.StatsConfigManager}. Clients typically do not
instantiate
* this class directly. Instead use {@link
org.stajistics.Stats#getConfigManager()}.
@@ -285,7 +300,7 @@
if (goingUp) {
entry = keyMap.get(keyName);
if (entry == null) {
- String parentKeyName =
StatsKeyUtils.parentKeyName(keyName);
+ String parentKeyName =
StatsKeyUtil.parentKeyName(keyName);
stack.addLast(keyName);
keyName = parentKeyName;
if (keyName == null) {
=======================================
---
/stajistics-core/src/main/java/org/stajistics/configuration/StatsConfig.java
Wed Jun 2 21:28:40 2010
+++
/stajistics-core/src/main/java/org/stajistics/configuration/StatsConfig.java
Mon Jun 20 15:36:53 2011
@@ -14,14 +14,14 @@
*/
package org.stajistics.configuration;
+import java.io.Serializable;
+
import org.stajistics.session.StatsSession;
import org.stajistics.session.StatsSessionFactory;
import org.stajistics.session.recorder.DataRecorderFactory;
import org.stajistics.tracker.Tracker;
import org.stajistics.tracker.TrackerFactory;
-import java.io.Serializable;
-
/**
* Represents the configuration that can be applied to a single target for
which statistics
* can be collected. Implementations of this interface are immutable.
=======================================
---
/stajistics-core/src/main/java/org/stajistics/configuration/StatsConfigBuilder.java
Wed Jun 2 21:28:40 2010
+++
/stajistics-core/src/main/java/org/stajistics/configuration/StatsConfigBuilder.java
Mon Jun 20 15:36:53 2011
@@ -14,13 +14,13 @@
*/
package org.stajistics.configuration;
+import java.io.Serializable;
+
import org.stajistics.StatsKey;
import org.stajistics.session.StatsSessionFactory;
import org.stajistics.session.recorder.DataRecorderFactory;
import org.stajistics.tracker.TrackerFactory;
-import java.io.Serializable;
-
/**
* A builder for immutable {@link StatsConfig} instances.
*
=======================================
---
/stajistics-core/src/main/java/org/stajistics/configuration/StatsConfigManager.java
Sun Jun 19 21:26:01 2011
+++
/stajistics-core/src/main/java/org/stajistics/configuration/StatsConfigManager.java
Mon Jun 20 15:36:53 2011
@@ -14,14 +14,14 @@
*/
package org.stajistics.configuration;
-import org.stajistics.StatsKey;
-import org.stajistics.StatsKeyMatcher;
-import org.stajistics.util.ServiceLifeCycle;
-
import java.io.Serializable;
import java.util.Map;
import java.util.Set;
+import org.stajistics.StatsKey;
+import org.stajistics.StatsKeyMatcher;
+import org.stajistics.util.ServiceLifeCycle;
+
/**
* <p>Manages associations of {@link org.stajistics.StatsKey}s to {@link
StatsConfig}s. {@link StatsConfig}s are
* organized into a hierarchy according to their associated {@link
org.stajistics.StatsKey}.</p>
=======================================
---
/stajistics-core/src/main/java/org/stajistics/configuration/xml/binding/XMLConfigDocument.java
Fri Jun 4 05:35:23 2010
+++
/stajistics-core/src/main/java/org/stajistics/configuration/xml/binding/XMLConfigDocument.java
Mon Jun 20 15:36:53 2011
@@ -14,12 +14,17 @@
*/
package org.stajistics.configuration.xml.binding;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import java.util.*;
/**
* @author The Stajistics Project
=======================================
---
/stajistics-core/src/main/java/org/stajistics/configuration/xml/binding/XMLProperties.java
Fri Jun 4 05:35:23 2010
+++
/stajistics-core/src/main/java/org/stajistics/configuration/xml/binding/XMLProperties.java
Mon Jun 20 15:36:53 2011
@@ -1,8 +1,9 @@
package org.stajistics.configuration.xml.binding;
-import javax.xml.bind.annotation.XmlElement;
import java.util.List;
+import javax.xml.bind.annotation.XmlElement;
+
/**
* @author The Stajistics Project
*/
=======================================
---
/stajistics-core/src/main/java/org/stajistics/configuration/xml/binding/XMLPropertiesAdapter.java
Fri Jun 4 05:35:23 2010
+++
/stajistics-core/src/main/java/org/stajistics/configuration/xml/binding/XMLPropertiesAdapter.java
Mon Jun 20 15:36:53 2011
@@ -1,11 +1,12 @@
package org.stajistics.configuration.xml.binding;
-import javax.xml.bind.annotation.adapters.XmlAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import javax.xml.bind.annotation.adapters.XmlAdapter;
+
class XMLPropertiesAdapter extends
XmlAdapter<XMLProperties,HashMap<String,String>> {
@Override
=======================================
---
/stajistics-core/src/main/java/org/stajistics/configuration/xml/binding/XMLProperty.java
Fri Jun 4 05:35:23 2010
+++
/stajistics-core/src/main/java/org/stajistics/configuration/xml/binding/XMLProperty.java
Mon Jun 20 15:36:53 2011
@@ -14,8 +14,6 @@
*/
package org.stajistics.configuration.xml.binding;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlValue;
=======================================
---
/stajistics-core/src/main/java/org/stajistics/configuration/xml/binding/package-info.java
Wed Jun 2 21:28:40 2010
+++
/stajistics-core/src/main/java/org/stajistics/configuration/xml/binding/package-info.java
Mon Jun 20 15:36:53 2011
@@ -16,3 +16,4 @@
package org.stajistics.configuration.xml.binding;
import javax.xml.bind.annotation.XmlSchema;
+
=======================================
---
/stajistics-core/src/main/java/org/stajistics/event/AsynchronousEventManager.java
Wed Jun 2 21:28:40 2010
+++
/stajistics-core/src/main/java/org/stajistics/event/AsynchronousEventManager.java
Mon Jun 20 15:36:53 2011
@@ -14,11 +14,11 @@
*/
package org.stajistics.event;
+import java.util.concurrent.Callable;
+
import org.stajistics.StatsKey;
import org.stajistics.task.TaskService;
-import java.util.concurrent.Callable;
-
/**
*
* @author The Stajistics Project
=======================================
--- /stajistics-core/src/main/java/org/stajistics/event/EventHandler.java
Wed Jun 2 21:28:40 2010
+++ /stajistics-core/src/main/java/org/stajistics/event/EventHandler.java
Mon Jun 20 15:36:53 2011
@@ -14,10 +14,10 @@
*/
package org.stajistics.event;
-import org.stajistics.StatsKey;
-
import java.io.Serializable;
+import org.stajistics.StatsKey;
+
/**
*
*
=======================================
--- /stajistics-core/src/main/java/org/stajistics/event/EventManager.java
Sun Jun 19 21:26:01 2011
+++ /stajistics-core/src/main/java/org/stajistics/event/EventManager.java
Mon Jun 20 15:36:53 2011
@@ -14,14 +14,14 @@
*/
package org.stajistics.event;
-import org.stajistics.StatsKey;
-import org.stajistics.StatsKeyMatcher;
-import org.stajistics.util.ServiceLifeCycle;
-
import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
+import org.stajistics.StatsKey;
+import org.stajistics.StatsKeyMatcher;
+import org.stajistics.util.ServiceLifeCycle;
+
/**
*
*
=======================================
---
/stajistics-core/src/main/java/org/stajistics/event/SynchronousEventManager.java
Sun Jun 19 21:26:01 2011
+++
/stajistics-core/src/main/java/org/stajistics/event/SynchronousEventManager.java
Mon Jun 20 15:36:53 2011
@@ -14,16 +14,21 @@
*/
package org.stajistics.event;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.stajistics.StatsKey;
import org.stajistics.StatsKeyMatcher;
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.CopyOnWriteArrayList;
-
/**
*
*
=======================================
---
/stajistics-core/src/main/java/org/stajistics/management/DefaultStatsMXBeanRegistrar.java
Sun Jun 19 13:23:35 2011
+++
/stajistics-core/src/main/java/org/stajistics/management/DefaultStatsMXBeanRegistrar.java
Mon Jun 20 15:36:53 2011
@@ -14,25 +14,39 @@
*/
package org.stajistics.management;
+import static
org.stajistics.management.StatsMXBeanUtil.getConfigManagerObjectName;
+import static
org.stajistics.management.StatsMXBeanUtil.getConfigManagerObjectNameString;
+import static
org.stajistics.management.StatsMXBeanUtil.getConfigObjectName;
+import static
org.stajistics.management.StatsMXBeanUtil.getConfigObjectNameString;
+import static
org.stajistics.management.StatsMXBeanUtil.getSessionManagerObjectName;
+import static
org.stajistics.management.StatsMXBeanUtil.getSessionManagerObjectNameString;
+import static
org.stajistics.management.StatsMXBeanUtil.getSessionObjectName;
+import static
org.stajistics.management.StatsMXBeanUtil.getSessionObjectNameString;
+import static
org.stajistics.management.StatsMXBeanUtil.getStatsManagerObjectName;
+import static
org.stajistics.management.StatsMXBeanUtil.getStatsManagerObjectNameString;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.Serializable;
+import java.lang.management.ManagementFactory;
+
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.stajistics.StatsKey;
import org.stajistics.StatsManager;
import org.stajistics.configuration.StatsConfig;
import org.stajistics.configuration.StatsConfigManager;
-import org.stajistics.management.beans.*;
+import org.stajistics.management.beans.StatsConfigMXBean;
+import org.stajistics.management.beans.StatsConfigManagerMXBean;
+import org.stajistics.management.beans.StatsManagerMXBean;
+import org.stajistics.management.beans.StatsSessionMXBean;
+import org.stajistics.management.beans.StatsSessionManagerMXBean;
import org.stajistics.session.StatsSession;
import org.stajistics.session.StatsSessionManager;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.Serializable;
-import java.lang.management.ManagementFactory;
-
-import static org.stajistics.management.StatsMXBeanUtil.*;
-
/**
*
*
=======================================
---
/stajistics-core/src/main/java/org/stajistics/management/StatsKeyOpenTypeConverter.java
Sun Jun 19 21:26:01 2011
+++
/stajistics-core/src/main/java/org/stajistics/management/StatsKeyOpenTypeConverter.java
Mon Jun 20 15:36:53 2011
@@ -1,10 +1,5 @@
package org.stajistics.management;
-import org.stajistics.DefaultStatsKeyFactory;
-import org.stajistics.StatsKey;
-import org.stajistics.StatsKeyBuilder;
-import org.stajistics.StatsKeyFactory;
-
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
@@ -12,6 +7,11 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.stajistics.DefaultStatsKeyFactory;
+import org.stajistics.StatsKey;
+import org.stajistics.StatsKeyBuilder;
+import org.stajistics.StatsKeyFactory;
+
/**
*
*
=======================================
---
/stajistics-core/src/main/java/org/stajistics/management/StatsMXBeanRegistrar.java
Sun Jun 19 13:23:35 2011
+++
/stajistics-core/src/main/java/org/stajistics/management/StatsMXBeanRegistrar.java
Mon Jun 20 15:36:53 2011
@@ -14,6 +14,8 @@
*/
package org.stajistics.management;
+import javax.management.MBeanServer;
+
import org.stajistics.StatsKey;
import org.stajistics.StatsManager;
import org.stajistics.configuration.StatsConfig;
@@ -21,8 +23,6 @@
import org.stajistics.session.StatsSession;
import org.stajistics.session.StatsSessionManager;
-import javax.management.MBeanServer;
-
/**
*
*
=======================================
---
/stajistics-core/src/main/java/org/stajistics/management/StatsMXBeanUtil.java
Sun Jun 19 13:23:35 2011
+++
/stajistics-core/src/main/java/org/stajistics/management/StatsMXBeanUtil.java
Mon Jun 20 15:36:53 2011
@@ -1,10 +1,11 @@
package org.stajistics.management;
-import org.stajistics.StatsKey;
+import java.util.Map;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
-import java.util.Map;
+
+import org.stajistics.StatsKey;
/**
*
=======================================
---
/stajistics-core/src/main/java/org/stajistics/management/StatsManagementEventHandler.java
Sun Jun 19 13:23:35 2011
+++
/stajistics-core/src/main/java/org/stajistics/management/StatsManagementEventHandler.java
Mon Jun 20 15:36:53 2011
@@ -31,14 +31,13 @@
*/
public class StatsManagementEventHandler implements EventHandler {
- private final StatsMXBeanRegistrar mxBeanRegistrar;
-
- public StatsManagementEventHandler(final StatsMXBeanRegistrar
mxBeanRegistrar) {
- if (mxBeanRegistrar == null) {
- throw new NullPointerException("mxBeanRegistrar");
- }
-
- this.mxBeanRegistrar = mxBeanRegistrar;
+ private StatsMXBeanRegistrar mxBeanRegistrar;
+
+ private volatile StatsConfigManager configManager;
+ private volatile StatsSessionManager sessionManager;
+
+ protected StatsMXBeanRegistrar createStatsMXBeanRegistrar(final
StatsManager statsManager) {
+ return new
DefaultStatsMXBeanRegistrar(statsManager.getNamespace());
}
@Override
@@ -47,23 +46,45 @@
final Object target) {
switch (eventType) {
case STATS_MANAGER_INITIALIZED:
-
mxBeanRegistrar.registerStatsManagerMXBean((StatsManager)target);
- break;
-
+ StatsManager statsManager = (StatsManager)target;
+ mxBeanRegistrar = createStatsMXBeanRegistrar(statsManager);
+
+ // Initialize deferred components
+
+ if (configManager != null) {
+
mxBeanRegistrar.registerConfigManagerMXBean(configManager);
+ configManager = null;
+ }
+ if (sessionManager != null) {
+
mxBeanRegistrar.registerSessionManagerMXBean(sessionManager);
+ sessionManager = null;
+ }
+
+ mxBeanRegistrar.registerStatsManagerMXBean(statsManager);
+
+ break;
+
case STATS_MANAGER_SHUTTING_DOWN:
mxBeanRegistrar.unregisterStatsManagerMXBean((StatsManager)target);
+ mxBeanRegistrar = null;
break;
-
+ }
+
+ if (mxBeanRegistrar == null) {
+ return;
+ }
+
+ switch (eventType) {
case CONFIG_MANAGER_INITIALIZED:
-
mxBeanRegistrar.registerConfigManagerMXBean((StatsConfigManager)target);
+ this.configManager = (StatsConfigManager)target; // Defer
initialization
break;
case CONFIG_MANAGER_SHUTTING_DOWN:
mxBeanRegistrar.unregisterConfigManagerMXBean();
break;
-
+
case SESSION_MANAGER_INITIALIZED:
-
mxBeanRegistrar.registerSessionManagerMXBean((StatsSessionManager)target);
+ this.sessionManager = (StatsSessionManager)target; //
Defer initialization
break;
case SESSION_MANAGER_SHUTTING_DOWN:
=======================================
---
/stajistics-core/src/main/java/org/stajistics/management/StatsManagementFactory.java
Sun Jun 19 13:23:35 2011
+++
/stajistics-core/src/main/java/org/stajistics/management/StatsManagementFactory.java
Mon Jun 20 15:36:53 2011
@@ -1,9 +1,17 @@
package org.stajistics.management;
-import org.stajistics.StatsKey;
-import org.stajistics.management.beans.StatsConfigManagerMXBean;
-import org.stajistics.management.beans.StatsManagerMXBean;
-import org.stajistics.management.beans.StatsSessionManagerMXBean;
+import static
org.stajistics.management.StatsMXBeanUtil.OBJECT_NAME_ATTR_NAMESPACE;
+import static
org.stajistics.management.StatsMXBeanUtil.getConfigManagerObjectName;
+import static
org.stajistics.management.StatsMXBeanUtil.getConfigManagerObjectNameString;
+import static
org.stajistics.management.StatsMXBeanUtil.getSessionManagerObjectName;
+import static
org.stajistics.management.StatsMXBeanUtil.getSessionManagerObjectNameString;
+import static
org.stajistics.management.StatsMXBeanUtil.getStatsManagerObjectName;
+import static
org.stajistics.management.StatsMXBeanUtil.getStatsManagerObjectNameString;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
import javax.management.JMX;
import javax.management.MBeanServerConnection;
@@ -12,12 +20,11 @@
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-import static org.stajistics.management.StatsMXBeanUtil.*;
+
+import org.stajistics.StatsKey;
+import org.stajistics.management.beans.StatsConfigManagerMXBean;
+import org.stajistics.management.beans.StatsManagerMXBean;
+import org.stajistics.management.beans.StatsSessionManagerMXBean;
/**
*
=======================================
---
/stajistics-core/src/main/java/org/stajistics/management/beans/DefaultStatsConfigMXBean.java
Wed Jun 15 16:30:39 2011
+++
/stajistics-core/src/main/java/org/stajistics/management/beans/DefaultStatsConfigMXBean.java
Mon Jun 20 15:36:53 2011
@@ -14,6 +14,8 @@
*/
package org.stajistics.management.beans;
+import java.util.Map;
+
import org.stajistics.StatsKey;
import org.stajistics.StatsKeyMatcher;
import org.stajistics.StatsManager;
@@ -21,8 +23,6 @@
import org.stajistics.configuration.StatsConfig;
import org.stajistics.configuration.StatsConfigBuilderFactory;
-import java.util.Map;
-
/**
*
*
=======================================
---
/stajistics-core/src/main/java/org/stajistics/management/beans/DefaultStatsConfigManagerMXBean.java
Sun Jun 19 13:23:35 2011
+++
/stajistics-core/src/main/java/org/stajistics/management/beans/DefaultStatsConfigManagerMXBean.java
Mon Jun 20 15:36:53 2011
@@ -14,10 +14,10 @@
*/
package org.stajistics.management.beans;
-import org.stajistics.configuration.StatsConfigManager;
-
import java.util.Set;
+import org.stajistics.configuration.StatsConfigManager;
+
/**
*
*
=======================================
---
/stajistics-core/src/main/java/org/stajistics/management/beans/DefaultStatsSessionManagerMXBean.java
Sun Jun 19 13:23:35 2011
+++
/stajistics-core/src/main/java/org/stajistics/management/beans/DefaultStatsSessionManagerMXBean.java
Mon Jun 20 15:36:53 2011
@@ -14,6 +14,8 @@
*/
package org.stajistics.management.beans;
+import java.util.Set;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.stajistics.StatsKeyMatcher;
@@ -21,8 +23,6 @@
import org.stajistics.session.StatsSession;
import org.stajistics.session.StatsSessionManager;
-import java.util.Set;
-
/**
*
*
=======================================
***Additional files exist in this changeset.***