You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by in...@apache.org on 2009/03/19 11:52:48 UTC

svn commit: r755915 [1/2] - in /synapse/trunk/java/modules/core/src: main/java/org/apache/synapse/ main/java/org/apache/synapse/aspects/ main/java/org/apache/synapse/aspects/statistics/ main/java/org/apache/synapse/aspects/statistics/view/ main/java/or...

Author: indika
Date: Thu Mar 19 10:52:47 2009
New Revision: 755915

URL: http://svn.apache.org/viewvc?rev=755915&view=rev
Log:
Statistics initial fixes, test with simple MBean

Added:
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/AspectConfigurationDetectionStrategy.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsUpdateStrategy.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/InOutStatisticsView.java
Removed:
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/AspectHelper.java
Modified:
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/AspectConfigurable.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/AspectConfiguration.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsCollector.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsLog.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsRecord.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsRecordFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsReporter.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/PerUserDomainViewStrategy.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/PerUserIPViewStrategy.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/PerUserViewStrategy.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/StatisticsViewStrategy.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/SystemViewStrategy.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractMediatorFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractMediatorSerializer.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ProxyServiceFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DefaultEndpointFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyService.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseMessageReceiver.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/AbstractEndpoint.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/EndpointDefinition.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/AbstractMediator.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/MediatorFaultHandler.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/startup/tasks/MessageInjector.java
    synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/db/DBReportMediatorTest.java

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java Thu Mar 19 10:52:47 2009
@@ -179,11 +179,11 @@
 
         public static final String STATISTICS_STACK ="synapse.statistics.stack";     
         
-        public static final String SYNAPSE_AUDIT_STATE = "synapse.aspects.state";
+        public static final String SYNAPSE_STATISTICS_STATE = "synapse.statistics.state";
     
-        public static final String SYNAPSE_AUDIT_CONFIGURATION = "synapse.aspects.configuration";
-        
-        public static final String SYNAPSE_AUDIT ="synapse.aspects";
+        public static final String SYNAPSE_ASPECT_CONFIGURATION = "synapse.aspects.configuration";
+
+        public static final String SYNAPSE_ASPECTS ="synapse.aspects";
 
     //- handling of timed out events from the callbacks -
         /** The System property that states the duration at which the timeout handler runs */
@@ -240,6 +240,9 @@
     /** A name to use for anonymous endpoints */
     public static final String ANONYMOUS_ENDPOINT = "AnonymousEndpoint";
 
+    /**A name to use for anonymous proxyservice  */
+    public static final String ANONYMOUS_PROXYSERVICE = "AnonymousProxyService";
+
     /* Constants related to the SAL endpoints */
 
     public static final String PROP_SAL_ENDPOINT_FIRST_MESSAGE_IN_SESSION

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/AspectConfigurable.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/AspectConfigurable.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/AspectConfigurable.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/AspectConfigurable.java Thu Mar 19 10:52:47 2009
@@ -19,39 +19,21 @@
 package org.apache.synapse.aspects;
 
 /**
- * Capability for configurable auditing
+ * Capability for configurable aspects
  */
 public interface AspectConfigurable {
 
     /**
-     * Returns audit id , identifier for a particular audit
-     * Example , component name , endpoint name
+     * Configure aspects according to the given configuration
      *
-     * @return audit id
+     * @param aspectConfiguration AspectConfiguration instance
      */
-    public String getAuditId();
+    void configure(AspectConfiguration aspectConfiguration);
 
     /**
-     * Sets the identifier for a particular audit
+     * Get the aspects  configuration
      *
-     * @param id audit id
+     * @return AspectConfiguration instance
      */
-    public void setAuditId(String id);
-
-    /**
-     * Whether statistics has been enabled
-     *
-     * @return True if enable , o.w , false
-     */
-    public boolean isStatisticsEnable();
-
-    /**
-     * To disable statistics
-     */
-    public void disableStatistics();
-
-    /**
-     * To enable statistics
-     */
-    public void enableStatistics();
+    AspectConfiguration getAspectConfiguration();
 }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/AspectConfiguration.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/AspectConfiguration.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/AspectConfiguration.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/AspectConfiguration.java Thu Mar 19 10:52:47 2009
@@ -18,24 +18,22 @@
  */
 package org.apache.synapse.aspects;
 
+import org.apache.synapse.Identifiable;
+import org.apache.synapse.aspects.statistics.StatisticsConfigurable;
+
 /**
- * Audit configuration
+ * Aspect configuration
  * Currently contains only statistics configuration related things
  */
-public class AspectConfiguration implements AspectConfigurable {
+public class AspectConfiguration implements StatisticsConfigurable, Identifiable {
 
     /* Whether statistics enable */
     private boolean statisticsEnable = false;
     /* Identifier for a particular aspects configuration */
-    private String auditId;
-
-    public AspectConfiguration(String auditId, boolean statisticsEnable) {
-        this.statisticsEnable = statisticsEnable;
-        this.auditId = auditId;
-    }
+    private String id;
 
-    public AspectConfiguration(String auditId) {
-        this.auditId = auditId;
+    public AspectConfiguration(String id) {
+        this.id = id;
     }
 
     public boolean isStatisticsEnable() {
@@ -54,11 +52,7 @@
         }
     }
 
-    public String getAuditId() {
-        return auditId;
-    }
-
-    public void setAuditId(String auditId) {
-        this.auditId = auditId;
+    public String getId() {
+        return id;
     }
 }

Added: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/AspectConfigurationDetectionStrategy.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/AspectConfigurationDetectionStrategy.java?rev=755915&view=auto
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/AspectConfigurationDetectionStrategy.java (added)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/AspectConfigurationDetectionStrategy.java Thu Mar 19 10:52:47 2009
@@ -0,0 +1,78 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.synapse.aspects;
+
+import org.apache.synapse.MessageContext;
+import org.apache.synapse.SynapseConstants;
+import org.apache.synapse.aspects.statistics.StatisticsConfigurable;
+import org.apache.synapse.config.xml.XMLConfigConstants;
+import org.apache.synapse.core.axis2.ProxyService;
+import org.apache.synapse.endpoints.AbstractEndpoint;
+import org.apache.synapse.endpoints.Endpoint;
+import org.apache.synapse.endpoints.EndpointDefinition;
+
+/**
+ * Take an  AspectConfiguration based on some startegy - Currently only consider statistics
+ */
+public class AspectConfigurationDetectionStrategy {
+
+    public static AspectConfiguration getAspectConfiguration(MessageContext synCtx) {
+
+        boolean statisticsEnable = false;
+        if (XMLConfigConstants.STATISTICS_ENABLE.equals(
+                synCtx.getConfiguration().getProperty(
+                        SynapseConstants.SYNAPSE_STATISTICS_STATE))) {
+            statisticsEnable = true;
+        }
+
+        if (synCtx.isResponse()) {
+
+            if (!statisticsEnable) {
+                // if this is not a response to a proxy service
+                String proxyName = (String) synCtx.getProperty(SynapseConstants.PROXY_SERVICE);
+
+                if (proxyName != null && !"".equals(proxyName)) {
+                    ProxyService proxy = synCtx.getConfiguration().getProxyService(proxyName);
+                    if (proxy != null) {
+                        StatisticsConfigurable configurable = proxy.getAspectConfiguration();
+                        statisticsEnable =
+                                configurable != null && configurable.isStatisticsEnable();
+                    }
+                }
+            }
+
+            if (!statisticsEnable) {
+                Endpoint endpoint = (Endpoint) synCtx.getProperty(
+                        SynapseConstants.LAST_ENDPOINT);
+                if (endpoint instanceof AbstractEndpoint) {
+                    EndpointDefinition definition = ((AbstractEndpoint) endpoint).getDefinition();
+                    statisticsEnable = definition != null && definition.isStatisticsEnable();
+                }
+            }
+        }
+
+        if (statisticsEnable) {
+            AspectConfiguration configuration = new AspectConfiguration(
+                    SynapseConstants.SYNAPSE_ASPECTS);
+            configuration.enableStatistics();
+            return configuration;
+        }
+        return null;
+    }
+}

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsCollector.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsCollector.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsCollector.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsCollector.java Thu Mar 19 10:52:47 2009
@@ -18,8 +18,11 @@
  */
 package org.apache.synapse.aspects.statistics;
 
-import org.apache.synapse.aspects.statistics.view.Statistics;
+import org.apache.synapse.aspects.ComponentType;
+import org.apache.synapse.aspects.statistics.mbean.StatisticsView;
+import org.apache.synapse.aspects.statistics.view.InOutStatisticsView;
 import org.apache.synapse.aspects.statistics.view.StatisticsViewStrategy;
+import org.apache.synapse.commons.util.MBeanRegistrar;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -33,6 +36,11 @@
 
     private final List<StatisticsRecord> statisticsCollection = new ArrayList<StatisticsRecord>();
 
+    public StatisticsCollector() {
+        MBeanRegistrar.getInstance().registerMBean(new StatisticsView(this),
+                "StatisticsView", "StatisticsView");
+    }
+
     /**
      * Registering a statistics record
      *
@@ -53,6 +61,13 @@
     }
 
     /**
+     * Clear all the existing statistics
+     */
+    public void clearStatistics() {
+        this.statisticsCollection.clear();
+    }
+
+    /**
      * Returns a particular statistics view according to a given strategy for a given
      * resource with particular type
      *
@@ -61,10 +76,10 @@
      * @param strategy Statistics viewing strategy
      * @return Statistics view
      */
-    public Map<String, Statistics> getStatistics(String id,
-                                                 int type,
-                                                 StatisticsViewStrategy strategy) {
-        return strategy.determineView(id, statisticsCollection, type);
+    public Map<String, InOutStatisticsView> getStatistics(String id,
+                                                          ComponentType type,
+                                                          StatisticsViewStrategy strategy) {
+        return strategy.determineView(id, getCopy(), type);
     }
 
     /**
@@ -74,9 +89,15 @@
      * @param strategy strategy Statistics viewing strategy
      * @return Statistics view
      */
-    public Map<String, Map<String, Statistics>> getStatistics(int type,
-                                                              StatisticsViewStrategy strategy) {
-        return strategy.determineView(statisticsCollection, type);
+    public Map<String, Map<String, InOutStatisticsView>> getStatistics(
+            ComponentType type,
+            StatisticsViewStrategy strategy) {
+        return strategy.determineView(getCopy(), type);
     }
 
+    private List<StatisticsRecord> getCopy() {
+        List<StatisticsRecord> records = new ArrayList<StatisticsRecord>();
+        records.addAll(statisticsCollection);
+        return records;
+    }
 }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsLog.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsLog.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsLog.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsLog.java Thu Mar 19 10:52:47 2009
@@ -18,55 +18,46 @@
  */
 package org.apache.synapse.aspects.statistics;
 
+import org.apache.synapse.aspects.ComponentType;
+
 /**
  *
  */
 public class StatisticsLog {
 
-    public static final int ENDPOINT_STATISTICS = 0;
+    private String id;
 
-    public static final int PROXY_SERVICE_STATISTICS = 1;
+    private ComponentType componentType;
 
-    public static final int MEDIATOR_STATISTICS = 2;
+    private long time;
 
-    private String id;
-    private long startTime = -1;
-    private long endTime = -1;
+    private boolean isResponse;
 
-    public StatisticsLog(String id) {
-        this(id, System.currentTimeMillis());
+    public StatisticsLog(String id, ComponentType componentType, boolean isResponse) {
+        this(id, System.currentTimeMillis(), componentType, isResponse);
     }
 
-    public StatisticsLog(String id, long startTime) {
+    public StatisticsLog(String id, long startTime, ComponentType componentType,
+                         boolean isResponse) {
         this.id = id;
-        this.startTime = startTime;
+        this.isResponse = isResponse;
+        this.time = startTime;
+        this.componentType = componentType;
     }
 
     public String getId() {
         return id;
     }
 
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public long getStartTime() {
-        return startTime;
-    }
-
-    public void setStartTime(long startTime) {
-        this.startTime = startTime;
-    }
-
-    public long getEndTime() {
-        return endTime;
+    public ComponentType getComponentType() {
+        return componentType;
     }
 
-    public void setEndTime(long endTime) {
-        this.endTime = endTime;
+    public long getTime() {
+        return time;
     }
 
-    public long getProcessingTime() {
-        return this.endTime - this.startTime;
+    public boolean isResponse() {
+        return isResponse;
     }
 }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsRecord.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsRecord.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsRecord.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsRecord.java Thu Mar 19 10:52:47 2009
@@ -20,13 +20,12 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.synapse.Mediator;
-import org.apache.synapse.aspects.AspectConfigurable;
-import org.apache.synapse.core.axis2.ProxyService;
-import org.apache.synapse.endpoints.Endpoint;
+import org.apache.synapse.Identifiable;
+import org.apache.synapse.aspects.ComponentType;
 
-import java.util.HashMap;
-import java.util.Map;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
 
 /**
  * Holds a record for statistics for current message
@@ -35,17 +34,11 @@
 
     private static final Log log = LogFactory.getLog(StatisticsRecord.class);
     private String id;
-
-    private final Map<String, StatisticsLog> endPointsStatisticsRecordMap =
-            new HashMap<String, StatisticsLog>();
-    private final Map<String, StatisticsLog> mediatorsStatisticsRecordMap =
-            new HashMap<String, StatisticsLog>();
-    private final Map<String, StatisticsLog> proxyServicesStatisticsRecordMap =
-            new HashMap<String, StatisticsLog>();
-
+    private final List<StatisticsLog> statisticsLogs = new ArrayList<StatisticsLog>();
     private boolean isFaultResponse;
     private String clientIP;
     private String clientHost;
+    private ComponentType owner;
 
     public StatisticsRecord(String id, String clientIP, String clientHost) {
         this.id = id;
@@ -76,107 +69,88 @@
     /**
      * Collecting statistics for a particular component
      *
-     * @param aspectConfigurable audit configurable component
+     * @param identifiable  audit configurable component
+     * @param componentType The component that belong statistics
+     * @param isResponse    Is this Response or not
      */
-    public void collect(AspectConfigurable aspectConfigurable) {
+    public void collect(Identifiable identifiable, ComponentType componentType, boolean isResponse) {
 
-        if (isValid(aspectConfigurable)) {
+        if (isValid(identifiable)) {
 
-            String auditID = aspectConfigurable.getAuditId();
+            String auditID = identifiable.getId();
             if (log.isDebugEnabled()) {
-                log.debug("Start to collect statistics for : " + auditID);
-            }
-            if (aspectConfigurable instanceof Endpoint) {
-                endPointsStatisticsRecordMap.put(auditID, new StatisticsLog(auditID));
-            } else if (aspectConfigurable instanceof ProxyService) {
-                proxyServicesStatisticsRecordMap.put(auditID, new StatisticsLog(auditID));
-            } else if (aspectConfigurable instanceof Mediator) {
-                mediatorsStatisticsRecordMap.put(auditID, new StatisticsLog(auditID));
+                log.debug("Start to reportForComponent statistics for : " + auditID);
             }
+            statisticsLogs.add(new StatisticsLog(auditID, componentType, isResponse));
         }
     }
 
     /**
-     * Reporting statistics for a particular component
+     * Gets all the StatisticsLogs
      *
-     * @param aspectConfigurable audit configurable component
+     * @return A Iterator for all StatisticsLogs
      */
-    public void commit(AspectConfigurable aspectConfigurable) {
-
-        if (isValid(aspectConfigurable)) {
-
-            String auditID = aspectConfigurable.getAuditId();
-            if (log.isDebugEnabled()) {
-                log.debug("Reporting statistics for : " + auditID);
-            }
-            if (aspectConfigurable instanceof Endpoint) {
-                commit(auditID, endPointsStatisticsRecordMap);
-            } else if (aspectConfigurable instanceof ProxyService) {
-                commit(auditID, proxyServicesStatisticsRecordMap);
-            } else if (aspectConfigurable instanceof Mediator) {
-                commit(auditID, mediatorsStatisticsRecordMap);
-            }
-        }
+    public Iterator<StatisticsLog> getAllStatisticsLogs() {
+        final List<StatisticsLog> logs = new ArrayList<StatisticsLog>();
+        logs.addAll(statisticsLogs);
+        return logs.iterator();
     }
 
-    private boolean isValid(AspectConfigurable aspectConfigurable) {
-
-        if (aspectConfigurable == null) {
-            if (log.isDebugEnabled()) {
-                log.debug("Invalid aspects configuration , It is null.");
-            }
-            return false;
-        }
-
-        if (aspectConfigurable.isStatisticsEnable()) {
-            String auditID = aspectConfigurable.getAuditId();
-            if (auditID == null || "".equals(auditID)) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Invalid aspects configuration , Audit name is null.");
+    /**
+     * Get all log ids related with a given component
+     *
+     * @param componentType The component that belong statistics
+     * @return A List of Log ids
+     */
+    public Iterator<String> getAllLogIds(ComponentType componentType) {
+        final List<String> logIds = new ArrayList<String>();
+        for (StatisticsLog startLog : statisticsLogs) {
+            if (startLog != null && startLog.getComponentType() == componentType) {
+                String id = startLog.getId();
+                if (id != null && !"".equals(id) && !logIds.contains(id)) {
+                    logIds.add(id);
                 }
-                return false;
             }
-            return true;
         }
-        return false;
+        return logIds.iterator();
     }
 
-    private void commit(String auditID, Map<String, StatisticsLog> map) {
-        StatisticsLog log = map.get(auditID);
-        if (log != null) {
-            log.setEndTime(System.currentTimeMillis());
-        }
-    }
-
-    public StatisticsLog getEndpointStatisticsRecord(String name) {
-        return endPointsStatisticsRecordMap.get(name);
+    public String toString() {
+        return new StringBuffer()
+                .append("[Message id : ").append(id).append(" ]")
+                .append("[Remote  IP : ").append(clientIP).append(" ]")
+                .append("[Remote host : ").append(clientHost).append(" ]")
+                .toString();
     }
 
-    public StatisticsLog getMediatorStatisticsRecord(String name) {
-        return mediatorsStatisticsRecordMap.get(name);
+    public void clearLogs() {
+        statisticsLogs.clear();
     }
 
-    public StatisticsLog getProxyServiceStatisticsRecord(String name) {
-        return proxyServicesStatisticsRecordMap.get(name);
+    public ComponentType getOwner() {
+        return owner;
     }
 
-    public Map<String, StatisticsLog> getAllEndpointStatisticsRecords() {
-        return endPointsStatisticsRecordMap;
+    public void setOwner(ComponentType owner) {
+        this.owner = owner;
     }
 
-    public Map<String, StatisticsLog> getAllMediatorStatisticsRecords() {
-        return mediatorsStatisticsRecordMap;
-    }
+    private boolean isValid(Identifiable identifiable) {
 
-    public Map<String, StatisticsLog> getAllProxyServiceStatisticsRecords() {
-        return proxyServicesStatisticsRecordMap;
-    }
+        if (identifiable == null) {
+            if (log.isDebugEnabled()) {
+                log.debug("Invalid aspects configuration , It is null.");
+            }
+            return false;
+        }
 
-    public String toString() {
-        return new StringBuffer()
-                .append("[Message id : ").append(id).append(" ]")
-                .append("[Remote  IP : ").append(clientIP).append(" ]")
-                .append("[Remote host : ").append(clientHost).append(" ]")
-                .toString();
+        String auditID = identifiable.getId();
+        if (auditID == null || "".equals(auditID)) {
+            if (log.isDebugEnabled()) {
+                log.debug("Invalid aspects configuration , Audit name is null.");
+            }
+            return false;
+        }
+        return true;
     }
 }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsRecordFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsRecordFactory.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsRecordFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsRecordFactory.java Thu Mar 19 10:52:47 2009
@@ -40,7 +40,8 @@
     public static StatisticsRecord getStatisticsRecord(MessageContext synCtx) {
 
         String messageId = synCtx.getMessageID();
-        org.apache.axis2.context.MessageContext axisMC = ((Axis2MessageContext) synCtx).getAxis2MessageContext();
+        org.apache.axis2.context.MessageContext axisMC = ((Axis2MessageContext) synCtx)
+                .getAxis2MessageContext();
         String remoteIP = (String) axisMC.getPropertyNonReplicable(
                 org.apache.axis2.context.MessageContext.REMOTE_ADDR);
         String domainName = (String) axisMC.getPropertyNonReplicable(NhttpConstants.REMOTE_HOST);

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsReporter.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsReporter.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsReporter.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsReporter.java Thu Mar 19 10:52:47 2009
@@ -20,12 +20,15 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.Identifiable;
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.SynapseConstants;
-import org.apache.synapse.aspects.AspectConfigurable;
+import org.apache.synapse.aspects.AspectConfiguration;
+import org.apache.synapse.aspects.AspectConfigurationDetectionStrategy;
+import org.apache.synapse.aspects.ComponentType;
 
 /**
- * A utility to process statistics
+ * A utility to report statistics
  */
 
 public class StatisticsReporter {
@@ -33,49 +36,46 @@
     private static final Log log = LogFactory.getLog(StatisticsReporter.class);
 
     /**
-     * Initialize the audit details collection by setting a AuditConfiguration
+     * Collects statistics for the given componenet
      *
-     * @param synCtx            Current Message through synapse
-     * @param aspectConfigurable Instance that can be configured it's audit
+     * @param synCtx        Current Message through synapse
+     * @param configurable  Instance that can be configured it's audit
+     * @param componentType Type of the componet need aspect
      */
-    public static void collect(MessageContext synCtx, AspectConfigurable aspectConfigurable) {
-
-        StatisticsRecord statisticsRecord = StatisticsReporter.getStatisticsRecord(synCtx);
-        if (statisticsRecord == null) {
-
-            if (log.isDebugEnabled()) {
-                log.debug("Setting statistics stack on the message context.");
+    public static void reportForComponent(MessageContext synCtx,
+                                          StatisticsConfigurable configurable,
+                                          ComponentType componentType) {
+
+        if (configurable != null && configurable.isStatisticsEnable()
+                && configurable instanceof Identifiable) {
+
+            StatisticsRecord statisticsRecord = StatisticsReporter.getStatisticsRecord(synCtx);
+            statisticsRecord.setOwner(componentType);
+            statisticsRecord.collect((Identifiable) configurable,
+                    componentType, synCtx.isResponse());
+
+            StatisticsCollector collector = getStatisticsCollector(synCtx);
+            if (!collector.contains(statisticsRecord)) {
+                collector.collect(statisticsRecord);
             }
-            statisticsRecord = StatisticsRecordFactory.getStatisticsRecord(synCtx);
-            synCtx.setProperty(SynapseConstants.STATISTICS_STACK, statisticsRecord);
-        }
-        statisticsRecord.collect(aspectConfigurable);
-
-        StatisticsCollector collector = synCtx.getEnvironment().getStatisticsCollector();
-        if (collector == null) {
-
-            if (log.isDebugEnabled()) {
-                log.debug("Setting statistics collector in the synapse environment.");
-            }
-            collector = new StatisticsCollector();
-            synCtx.getEnvironment().setStatisticsCollector(collector);
-        }
-        if (!collector.contains(statisticsRecord)) {
-            collector.collect(statisticsRecord);
         }
     }
 
     /**
-     * Reporting audit for a particular resource
+     * Collects statistics for any component
      *
-     * @param synCtx            Current Message through synapse
-     * @param aspectConfigurable Instance that can be configured it's audit
+     * @param synCtx Current Message through synapse
      */
-    public static void report(MessageContext synCtx, AspectConfigurable aspectConfigurable) {
-
-        StatisticsRecord statisticsRecord = StatisticsReporter.getStatisticsRecord(synCtx);
-        if (statisticsRecord != null) {
-            statisticsRecord.commit(aspectConfigurable);
+    public static void reportForAll(MessageContext synCtx) {
+        AspectConfiguration configuration =
+                AspectConfigurationDetectionStrategy.getAspectConfiguration(synCtx);
+        if (configuration != null && configuration.isStatisticsEnable()) {
+            StatisticsRecord statisticsRecord = StatisticsReporter.getStatisticsRecord(synCtx);
+            statisticsRecord.collect(configuration, ComponentType.ANY, synCtx.isResponse());
+            StatisticsCollector collector = getStatisticsCollector(synCtx);
+            if (!collector.contains(statisticsRecord)) {
+                collector.collect(statisticsRecord);
+            }
         }
     }
 
@@ -84,7 +84,7 @@
      *
      * @param synCtx synCtx  Current Message through synapse
      */
-    public static void reportFault(MessageContext synCtx) {
+    public static void reportFaultForAll(MessageContext synCtx) {
 
         StatisticsRecord statisticsRecord = StatisticsReporter.getStatisticsRecord(synCtx);
         if (statisticsRecord != null) {
@@ -96,6 +96,29 @@
     }
 
     private static StatisticsRecord getStatisticsRecord(MessageContext synCtx) {
-        return (StatisticsRecord) synCtx.getProperty(SynapseConstants.STATISTICS_STACK);
+        StatisticsRecord statisticsRecord =
+                (StatisticsRecord) synCtx.getProperty(SynapseConstants.STATISTICS_STACK);
+        if (statisticsRecord == null) {
+
+            if (log.isDebugEnabled()) {
+                log.debug("Setting statistics stack on the message context.");
+            }
+            statisticsRecord = StatisticsRecordFactory.getStatisticsRecord(synCtx);
+            synCtx.setProperty(SynapseConstants.STATISTICS_STACK, statisticsRecord);
+        }
+        return statisticsRecord;
+    }
+
+    private static StatisticsCollector getStatisticsCollector(MessageContext synCtx) {
+        StatisticsCollector collector = synCtx.getEnvironment().getStatisticsCollector();
+        if (collector == null) {
+
+            if (log.isDebugEnabled()) {
+                log.debug("Setting statistics collector in the synapse environment.");
+            }
+            collector = new StatisticsCollector();
+            synCtx.getEnvironment().setStatisticsCollector(collector);
+        }
+        return collector;
     }
 }

Added: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsUpdateStrategy.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsUpdateStrategy.java?rev=755915&view=auto
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsUpdateStrategy.java (added)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsUpdateStrategy.java Thu Mar 19 10:52:47 2009
@@ -0,0 +1,108 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.synapse.aspects.statistics;
+
+import org.apache.synapse.aspects.ComponentType;
+import org.apache.synapse.aspects.statistics.view.Statistics;
+
+import java.util.Iterator;
+
+/**
+ *
+ */
+public class StatisticsUpdateStrategy {
+
+    private StatisticsRecord statisticsRecord;
+
+    public StatisticsUpdateStrategy(StatisticsRecord statisticsRecord) {
+        this.statisticsRecord = statisticsRecord;
+    }
+
+    public void updateInFlowStatistics(String id, ComponentType componentType,
+                                       Statistics statistics) {
+        updateStatistics(id, componentType, statistics, false);
+    }
+
+    public void updateOutFlowStatistics(String id, ComponentType componentType,
+                                        Statistics statistics) {
+        updateStatistics(id, componentType, statistics, true);
+    }
+
+    private void updateStatistics(String id, ComponentType componentType,
+                                  Statistics statistics, boolean isResponse) {
+
+        StatisticsLog startLog = null;
+        StatisticsLog endLog = null;
+        final Iterator<StatisticsLog> statisticsLogs = statisticsRecord.getAllStatisticsLogs();
+        while (statisticsLogs.hasNext()) {
+            StatisticsLog log = statisticsLogs.next();
+            if (log == null) {
+                continue;
+            }
+            switch (componentType) {
+                case SEQUENCE: {
+                    if (componentType == log.getComponentType()) {
+                        if (isResponse != log.isResponse()) {
+                            continue;
+                        }
+                        if (!id.equals(log.getId())) {
+                            continue;
+                        }
+                        if (startLog == null) {
+                            startLog = log;
+                        } else if (startLog.isResponse() == log.isResponse()) {
+                            endLog = log;
+                        }
+                    }
+                    break;
+                }
+                default: {
+                    if (!isResponse) {
+                        if (componentType == log.getComponentType()) {
+                            if (!id.equals(log.getId())) {
+                                continue;
+                            }
+                            if (startLog == null) {
+                                startLog = log;
+                            }
+                        }
+                        if (startLog == null) {
+                            continue;
+                        }
+                        if (log.getComponentType() == ComponentType.ANY && endLog == null) {
+                            endLog = log;
+                        }
+                    } else {
+                        if (log.getComponentType() == ComponentType.ANY) {
+                            if (startLog == null) {
+                                startLog = log;
+                            } else if (endLog == null) {
+                                endLog = log;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        if (endLog != null && startLog != null) {
+            statistics.update(endLog.getTime() - startLog.getTime(),
+                    statisticsRecord.isFaultResponse());
+        }
+    }
+}

Added: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/InOutStatisticsView.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/InOutStatisticsView.java?rev=755915&view=auto
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/InOutStatisticsView.java (added)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/InOutStatisticsView.java Thu Mar 19 10:52:47 2009
@@ -0,0 +1,71 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.synapse.aspects.statistics.view;
+
+/**
+ * View of statistics as in and out
+ */
+public class InOutStatisticsView {
+
+    private final Statistics inStatistics;
+    private final Statistics outStatistics;
+    private String resourceId;
+    private String owner;
+
+    public InOutStatisticsView(String id, String owner) {
+        this.resourceId = id;
+        this.owner = owner;
+        this.inStatistics = new Statistics(id);
+        this.outStatistics = new Statistics(id);
+    }
+
+    public Statistics getInStatistics() {
+        return inStatistics;
+    }
+
+    public Statistics getOutStatistics() {
+        return outStatistics;
+    }
+
+    public String getResourceId() {
+        return resourceId;
+    }
+
+    public String getOwner() {
+        return owner;
+    }
+
+    public String toString() {
+
+        StringBuffer sb = new StringBuffer();
+        sb.append("[ Owner Id :").append(owner).append(" ][ Resource ID : ")
+                .append(resourceId).append(" ]");
+
+        if (inStatistics.getCount() != 0) {
+            sb.append(" [ InFlow :  ")
+                    .append(inStatistics.toString()).append(" ]");
+        }
+
+        if (outStatistics.getCount() != 0) {
+            sb.append("[ OutFlow :  ").append(outStatistics.toString()).append(" ]");
+        }
+        return sb.toString();
+    }
+
+}

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/PerUserDomainViewStrategy.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/PerUserDomainViewStrategy.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/PerUserDomainViewStrategy.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/PerUserDomainViewStrategy.java Thu Mar 19 10:52:47 2009
@@ -18,6 +18,7 @@
  */
 package org.apache.synapse.aspects.statistics.view;
 
+import org.apache.synapse.aspects.ComponentType;
 import org.apache.synapse.aspects.statistics.StatisticsRecord;
 
 import java.util.List;
@@ -28,15 +29,15 @@
  */
 public class PerUserDomainViewStrategy extends PerUserViewStrategy {
 
-    public Map<String, Map<String, Statistics>> determineView(
+    public Map<String, Map<String, InOutStatisticsView>> determineView(
             List<StatisticsRecord> statisticsRecords,
-            int type) {
+            ComponentType type) {
         return determineView(statisticsRecords, type, DOMAIN);
     }
 
-    public Map<String, Statistics> determineView(
+    public Map<String, InOutStatisticsView> determineView(
             String id, List<StatisticsRecord> statisticsRecords,
-            int type) {
+            ComponentType type) {
         return determineView(id, statisticsRecords, type, DOMAIN);
     }
 }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/PerUserIPViewStrategy.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/PerUserIPViewStrategy.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/PerUserIPViewStrategy.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/PerUserIPViewStrategy.java Thu Mar 19 10:52:47 2009
@@ -18,6 +18,7 @@
  */
 package org.apache.synapse.aspects.statistics.view;
 
+import org.apache.synapse.aspects.ComponentType;
 import org.apache.synapse.aspects.statistics.StatisticsRecord;
 
 import java.util.List;
@@ -28,14 +29,14 @@
  */
 public class PerUserIPViewStrategy extends PerUserViewStrategy {
 
-    public Map<String, Map<String, Statistics>> determineView(
+    public Map<String, Map<String, InOutStatisticsView>> determineView(
             List<StatisticsRecord> statisticsRecords,
-            int type) {
+            ComponentType type) {
         return determineView(statisticsRecords, type, IP);
     }
 
-    public Map<String, Statistics> determineView(
-            String id, List<StatisticsRecord> statisticsRecords, int type) {
+    public Map<String, InOutStatisticsView> determineView(
+            String id, List<StatisticsRecord> statisticsRecords, ComponentType type) {
         return determineView(id, statisticsRecords,
                 type, IP);
     }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/PerUserViewStrategy.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/PerUserViewStrategy.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/PerUserViewStrategy.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/PerUserViewStrategy.java Thu Mar 19 10:52:47 2009
@@ -21,10 +21,12 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.SynapseException;
-import org.apache.synapse.aspects.statistics.StatisticsLog;
+import org.apache.synapse.aspects.ComponentType;
 import org.apache.synapse.aspects.statistics.StatisticsRecord;
+import org.apache.synapse.aspects.statistics.StatisticsUpdateStrategy;
 
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -41,13 +43,12 @@
         log = LogFactory.getLog(getClass());
     }
 
-    public Map<String, Map<String, Statistics>> determineView(
+    public Map<String, Map<String, InOutStatisticsView>> determineView(
             List<StatisticsRecord> statisticsRecords,
-            int type,
-            int userIDType) {
+            ComponentType type, int userIDType) {
 
-        final Map<String, Map<String, Statistics>> statisticsMap =
-                new HashMap<String, Map<String, Statistics>>();
+        final Map<String, Map<String, InOutStatisticsView>> statisticsMap =
+                new HashMap<String, Map<String, InOutStatisticsView>>();
 
         if (statisticsRecords == null) {
             if (log.isDebugEnabled()) {
@@ -56,114 +57,70 @@
             return statisticsMap;
         }
 
-        for (StatisticsRecord record : statisticsRecords) {
-
-            if (record == null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Statistics record cannot be found.");
-                }
-                continue;
-            }
-
-            Map<String, StatisticsLog> statisticsLogMap = null;
-            switch (type) {
-                case StatisticsLog.ENDPOINT_STATISTICS: {
-                    statisticsLogMap = record.getAllEndpointStatisticsRecords();
-                    break;
-                }
-                case StatisticsLog.PROXY_SERVICE_STATISTICS: {
-                    statisticsLogMap = record.getAllProxyServiceStatisticsRecords();
-                    break;
-                }
-                case StatisticsLog.MEDIATOR_STATISTICS: {
-                    statisticsLogMap = record.getAllMediatorStatisticsRecords();
-                    break;
-                }
-            }
-
-            if (statisticsLogMap == null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Statistics Logs cannot be found for statistics record :" + record);
-                }
-                continue;
-            }
-
-            String userID;
-            if (IP == userIDType) {
-                userID = record.getClientIP();
-            } else {
-                userID = record.getClientHost();
-            }
+        Map<String, InOutStatisticsView> perUserMap = new HashMap<String, InOutStatisticsView>();
 
-            if (userID == null || "".equals(userID)) {
-                if (log.isDebugEnabled()) {
-                    log.debug("user ID cannot be found.");
-                }
-                continue;
-            }
-
-            Map<String, Statistics> perResourceMap;
-            if (statisticsMap.containsKey(userID)) {
-                perResourceMap = statisticsMap.get(userID);
-            } else {
-                perResourceMap = new HashMap<String, Statistics>();
-                statisticsMap.put(userID, perResourceMap);
-            }
+        for (StatisticsRecord record : statisticsRecords) {
+            if (record != null) {
 
-            if (perResourceMap == null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("There are not statistics for user ID : " + userID);
+                String userID;
+                if (IP == userIDType) {
+                    userID = record.getClientIP();
+                } else {
+                    userID = record.getClientHost();
                 }
-                continue;
-            }
-
-            for (String rName : statisticsLogMap.keySet()) {
 
-                if (rName == null) {
+                if (userID == null || "".equals(userID)) {
                     if (log.isDebugEnabled()) {
-                        log.debug("Resource name cannot be found.");
+                        log.debug("user ID cannot be found.");
                     }
                     continue;
                 }
 
-                StatisticsLog statisticsLog = statisticsLogMap.get(rName);
-                if (statisticsLog == null) {
+                Map<String, InOutStatisticsView> perResourceMap;
+                if (statisticsMap.containsKey(userID)) {
+                    perResourceMap = statisticsMap.get(userID);
+                } else {
+                    perResourceMap = new HashMap<String, InOutStatisticsView>();
+                    statisticsMap.put(userID, perResourceMap);
+                }
+
+                if (perResourceMap == null) {
                     if (log.isDebugEnabled()) {
-                        log.debug("Statistics Logs cannot be found for resource with given name " +
-                                rName);
+                        log.debug("There are not statistics for user ID : " + userID);
                     }
                     continue;
                 }
 
-                Statistics statistics;
-                if (!perResourceMap.containsKey(rName)) {
-                    statistics = new Statistics(rName);
-                    perResourceMap.put(rName, statistics);
-                } else {
-                    statistics = perResourceMap.get(rName);
+                final StatisticsUpdateStrategy strategy = new StatisticsUpdateStrategy(record);
+                final Iterator<String> logIds = record.getAllLogIds(type);
+                while (logIds.hasNext()) {
+                    String id = logIds.next();
+
+                    InOutStatisticsView view;
+                    if (!perUserMap.containsKey(id)) {
+                        view = new InOutStatisticsView(id, userID);
+                        perUserMap.put(id, view);
+                    } else {
+                        view = perUserMap.get(id);
+                    }
+                    updateStatistics(id, type, view, strategy);
                 }
 
-                if (statistics != null) {
-                    statistics.update(statisticsLog.getProcessingTime(), record.isFaultResponse());
-                }
             }
         }
-
         return statisticsMap;
-
     }
 
-    public Map<String, Statistics> determineView(String id,
-                                                 List<StatisticsRecord> statisticsRecords,
-                                                 int type,
-                                                 int userIDType) {
+
+    public Map<String, InOutStatisticsView> determineView(String id,
+                                                          List<StatisticsRecord> statisticsRecords,
+                                                          ComponentType type, int userIDType) {
 
         if (id == null || "".equals(id)) {
             handleException("Resource Id cannot be null");
         }
 
-        Map<String, Statistics> statisticsMap = new HashMap<String, Statistics>();
-
+        Map<String, InOutStatisticsView> statisticsMap = new HashMap<String, InOutStatisticsView>();
         if (statisticsRecords == null) {
             if (log.isDebugEnabled()) {
                 log.debug("Statistics records cannot be found.");
@@ -172,64 +129,44 @@
         }
 
         for (StatisticsRecord record : statisticsRecords) {
+            if (record != null) {
 
-            if (record == null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Statistics record cannot be found.");
-                }
-                continue;
-            }
-
-            StatisticsLog statisticsLog = null;
-            switch (type) {
-                case StatisticsLog.ENDPOINT_STATISTICS: {
-                    statisticsLog = record.getEndpointStatisticsRecord(id);
-                    break;
-                }
-                case StatisticsLog.PROXY_SERVICE_STATISTICS: {
-                    statisticsLog = record.getProxyServiceStatisticsRecord(id);
-                    break;
-                }
-                case StatisticsLog.MEDIATOR_STATISTICS: {
-                    statisticsLog = record.getMediatorStatisticsRecord(id);
-                    break;
+                String userID;
+                if (IP == userIDType) {
+                    userID = record.getClientIP();
+                } else {
+                    userID = record.getClientHost();
                 }
-            }
 
-            if (statisticsLog == null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Statistics Logs cannot be found for statistics record  " + record);
+                if (userID == null || "".equals(userID)) {
+                    if (log.isDebugEnabled()) {
+                        log.debug("user ID cannot be found.");
+                    }
+                    continue;
                 }
-                continue;
-            }
 
-            String userID;
-            if (IP == userIDType) {
-                userID = record.getClientIP();
-            } else {
-                userID = record.getClientHost();
-            }
-
-            if (userID == null || "".equals(userID)) {
-                if (log.isDebugEnabled()) {
-                    log.debug("user ID cannot be found.");
+                InOutStatisticsView view;
+                if (statisticsMap.containsKey(userID)) {
+                    view = statisticsMap.get(id);
+                } else {
+                    view = new InOutStatisticsView(id, userID);
+                    statisticsMap.put(userID, view);
                 }
-                continue;
+                updateStatistics(id, type, view, new StatisticsUpdateStrategy(record));
             }
+        }
 
-            Statistics statistics;
-            if (statisticsMap.containsKey(userID)) {
-                statistics = statisticsMap.get(userID);
-            } else {
-                statistics = new Statistics(userID);
-                statisticsMap.put(userID, statistics);
-            }
+        return statisticsMap;
+    }
 
-            if (statistics != null) {
-                statistics.update(statisticsLog.getProcessingTime(), record.isFaultResponse());
-            }
+    private void updateStatistics(String id, ComponentType type, InOutStatisticsView view,
+                                  StatisticsUpdateStrategy strategy) {
+        if (view != null) {
+            strategy.updateInFlowStatistics(id, type,
+                    view.getInStatistics());
+            strategy.updateOutFlowStatistics(id, type,
+                    view.getOutStatistics());
         }
-        return statisticsMap;
     }
 
     private void handleException(String msg) {

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/StatisticsViewStrategy.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/StatisticsViewStrategy.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/StatisticsViewStrategy.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/StatisticsViewStrategy.java Thu Mar 19 10:52:47 2009
@@ -18,6 +18,7 @@
  */
 package org.apache.synapse.aspects.statistics.view;
 
+import org.apache.synapse.aspects.ComponentType;
 import org.apache.synapse.aspects.statistics.StatisticsRecord;
 
 import java.util.List;
@@ -35,9 +36,9 @@
      * @param type              Type of resource
      * @return A particular statistics view
      */
-    public Map<String, Map<String, Statistics>> determineView(
+    public Map<String, Map<String, InOutStatisticsView>> determineView(
             List<StatisticsRecord> statisticsRecords,
-            int type);
+            ComponentType type);
 
     /**
      * Return a statistics view for a resource with given type and given name
@@ -47,7 +48,7 @@
      * @param type              Type of resource
      * @return A particular statistics view
      */
-    public Map<String, Statistics> determineView(String id,
-                                                 List<StatisticsRecord> statisticsRecords,
-                                                 int type);
+    public Map<String, InOutStatisticsView> determineView(String id,
+                                                          List<StatisticsRecord> statisticsRecords,
+                                                          ComponentType type);
 }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/SystemViewStrategy.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/SystemViewStrategy.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/SystemViewStrategy.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/view/SystemViewStrategy.java Thu Mar 19 10:52:47 2009
@@ -21,10 +21,12 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.SynapseException;
-import org.apache.synapse.aspects.statistics.StatisticsLog;
+import org.apache.synapse.aspects.ComponentType;
 import org.apache.synapse.aspects.statistics.StatisticsRecord;
+import org.apache.synapse.aspects.statistics.StatisticsUpdateStrategy;
 
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -35,12 +37,12 @@
 
     private static final Log log = LogFactory.getLog(SystemViewStrategy.class);
 
-    public Map<String, Map<String, Statistics>> determineView(
+    public Map<String, Map<String, InOutStatisticsView>> determineView(
             List<StatisticsRecord> statisticsRecords,
-            int type) {
+            ComponentType type) {
 
-        final Map<String, Map<String, Statistics>> statisticsMap =
-                new HashMap<String, Map<String, Statistics>>();
+        final Map<String, Map<String, InOutStatisticsView>> statisticsMap =
+                new HashMap<String, Map<String, InOutStatisticsView>>();
 
         if (statisticsRecords == null) {
             if (log.isDebugEnabled()) {
@@ -49,88 +51,41 @@
             return statisticsMap;
         }
 
-        Map<String, Statistics> perResourceMap = new HashMap<String, Statistics>();
+        final Map<String, InOutStatisticsView> perResourceMap =
+                new HashMap<String, InOutStatisticsView>();
 
         for (StatisticsRecord record : statisticsRecords) {
-
             if (record != null) {
 
-                Map<String, StatisticsLog> statisticsLogMap = null;
-
-                switch (type) {
-                    case StatisticsLog.ENDPOINT_STATISTICS: {
-                        statisticsLogMap = record.getAllEndpointStatisticsRecords();
-                        break;
-                    }
-                    case StatisticsLog.PROXY_SERVICE_STATISTICS: {
-                        statisticsLogMap = record.getAllProxyServiceStatisticsRecords();
-                        break;
-                    }
-                    case StatisticsLog.MEDIATOR_STATISTICS: {
-                        statisticsLogMap = record.getAllMediatorStatisticsRecords();
-                        break;
-                    }
-                }
-
-                if (statisticsLogMap == null) {
-                    if (log.isDebugEnabled()) {
-                        log.debug("Cannot find the statistics logs for : " + record);
-                    }
-                    continue;
-                }
-
-                for (String rName : statisticsLogMap.keySet()) {
-
-                    if (rName == null) {
-                        if (log.isDebugEnabled()) {
-                            log.debug("Cannot find the resource name ");
-                        }
-                        continue;
-                    }
-
-                    StatisticsLog statisticsLog = statisticsLogMap.get(rName);
-                    if (statisticsLog == null) {
-                        if (log.isDebugEnabled()) {
-                            log.debug("Cannot find the statistics log for resource with name : " +
-                                    rName);
-                        }
-                        continue;
-                    }
-
-                    Statistics statistics;
-
-                    if (!perResourceMap.containsKey(rName)) {
-
-                        statistics = new Statistics(rName);
-                        perResourceMap.put(rName, statistics);
-
+                final StatisticsUpdateStrategy strategy = new StatisticsUpdateStrategy(record);
+                final Iterator<String> logIds = record.getAllLogIds(type);
+                while (logIds.hasNext()) {
+                    String id = logIds.next();
+
+                    InOutStatisticsView view;
+                    if (!perResourceMap.containsKey(id)) {
+                        view = new InOutStatisticsView(id, Statistics.ALL);
+                        perResourceMap.put(id, view);
                     } else {
-                        statistics = perResourceMap.get(rName);
-                    }
-
-                    if (statistics != null) {
-                        statistics.update(statisticsLog.getProcessingTime(),
-                                record.isFaultResponse());
+                        view = perResourceMap.get(id);
                     }
+                    updateStatistics(id, type, view, strategy);
                 }
             }
-
         }
-
         statisticsMap.put(Statistics.ALL, perResourceMap);
         return statisticsMap;
-
     }
 
-    public Map<String, Statistics> determineView(String id,
-                                                 List<StatisticsRecord> statisticsRecords,
-                                                 int type) {
 
+    public Map<String, InOutStatisticsView> determineView(String id,
+                                                          List<StatisticsRecord> statisticsRecords,
+                                                          ComponentType type) {
         if (id == null || "".equals(id)) {
             handleException("Resource Id cannot be null");
         }
 
-        Map<String, Statistics> statisticsMap = new HashMap<String, Statistics>();
+        Map<String, InOutStatisticsView> statisticsMap = new HashMap<String, InOutStatisticsView>();
         if (statisticsRecords == null) {
             if (log.isDebugEnabled()) {
                 log.debug("Statistics records cannot be found.");
@@ -138,37 +93,26 @@
             return statisticsMap;
         }
 
-        Statistics statistics = new Statistics(Statistics.ALL);
+        InOutStatisticsView view = new InOutStatisticsView(id, Statistics.ALL);
         for (StatisticsRecord record : statisticsRecords) {
-
             if (record != null) {
-                StatisticsLog log = null;
-
-                switch (type) {
-                    case StatisticsLog.ENDPOINT_STATISTICS: {
-                        log = record.getEndpointStatisticsRecord(id);
-                        break;
-                    }
-                    case StatisticsLog.PROXY_SERVICE_STATISTICS: {
-                        log = record.getProxyServiceStatisticsRecord(id);
-                        break;
-                    }
-                    case StatisticsLog.MEDIATOR_STATISTICS: {
-                        log = record.getMediatorStatisticsRecord(id);
-                        break;
-                    }
-                }
-
-                if (log != null) {
-                    statistics.update(log.getProcessingTime(), record.isFaultResponse());
-                }
+                updateStatistics(id, type, view, new StatisticsUpdateStrategy(record));
             }
         }
-
-        statisticsMap.put(Statistics.ALL, statistics);
+        statisticsMap.put(Statistics.ALL, view);
         return statisticsMap;
     }
 
+    private void updateStatistics(String id, ComponentType type, InOutStatisticsView view,
+                                  StatisticsUpdateStrategy strategy) {
+        if (view != null) {
+            strategy.updateInFlowStatistics(id, type,
+                    view.getInStatistics());
+            strategy.updateOutFlowStatistics(id, type,
+                    view.getOutStatistics());
+        }
+    }
+
     private static void handleException(String msg) {
         log.error(msg);
         throw new SynapseException(msg);

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractMediatorFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractMediatorFactory.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractMediatorFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractMediatorFactory.java Thu Mar 19 10:52:47 2009
@@ -24,8 +24,11 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.Mediator;
+import org.apache.synapse.Namable;
+import org.apache.synapse.SynapseConstants;
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.aspects.AspectConfigurable;
+import org.apache.synapse.aspects.AspectConfiguration;
 
 import javax.xml.namespace.QName;
 import java.util.Iterator;
@@ -107,9 +110,18 @@
         if (statistics != null) {
             String statisticsValue = statistics.getAttributeValue();
             if (statisticsValue != null) {
+                String name = null;
+                if (mediator instanceof Namable) {
+                    name = ((Namable) mediator).getName();
+                }
+                if (name == null || "".equals(name)) {
+                    name = SynapseConstants.ANONYMOUS_SEQUENCE;
+                }
                 if (mediator instanceof AspectConfigurable) {
                     if (XMLConfigConstants.STATISTICS_ENABLE.equals(statisticsValue)) {
-                        ((AspectConfigurable) mediator).enableStatistics();
+                        AspectConfiguration configuration = new AspectConfiguration(name);
+                        configuration.enableStatistics();
+                        ((AspectConfigurable) mediator).configure(configuration);
                     }
                 }
             }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractMediatorSerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractMediatorSerializer.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractMediatorSerializer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractMediatorSerializer.java Thu Mar 19 10:52:47 2009
@@ -29,6 +29,7 @@
 import org.apache.synapse.Mediator;
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.aspects.AspectConfigurable;
+import org.apache.synapse.aspects.statistics.StatisticsConfigurable;
 import org.apache.synapse.mediators.MediatorProperty;
 
 import javax.xml.namespace.QName;
@@ -76,9 +77,14 @@
             mediatorOmElement.addAttribute(fac.createOMAttribute(
                 XMLConfigConstants.TRACE_ATTRIB_NAME, nullNS, traceValue));
         }
-        
+
         if (mediator instanceof AspectConfigurable) {
-            if (((AspectConfigurable) mediator).isStatisticsEnable()) {
+            StatisticsConfigurable statisticsConfigurable =
+                    ((AspectConfigurable) mediator).getAspectConfiguration();
+
+            if (statisticsConfigurable != null &&
+                    statisticsConfigurable.isStatisticsEnable()) {
+
                 mediatorOmElement.addAttribute(fac.createOMAttribute(
                         XMLConfigConstants.STATISTICS_ATTRIB_NAME, nullNS,
                         XMLConfigConstants.STATISTICS_ENABLE));

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ProxyServiceFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ProxyServiceFactory.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ProxyServiceFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ProxyServiceFactory.java Thu Mar 19 10:52:47 2009
@@ -25,7 +25,9 @@
 import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.SynapseConstants;
 import org.apache.synapse.SynapseException;
+import org.apache.synapse.aspects.AspectConfiguration;
 import org.apache.synapse.config.xml.endpoints.EndpointFactory;
 import org.apache.synapse.core.axis2.ProxyService;
 import org.apache.synapse.util.PolicyInfo;
@@ -300,6 +302,23 @@
             }
         }
 
+        OMAttribute statistics = elem.getAttribute(new QName(XMLConfigConstants.NULL_NAMESPACE,
+                XMLConfigConstants.STATISTICS_ATTRIB_NAME));
+        if (statistics != null) {
+            String statisticsValue = statistics.getAttributeValue();
+            if (statisticsValue != null) {
+                if (XMLConfigConstants.STATISTICS_ENABLE.equals(statisticsValue)) {
+                    String nameString = proxy.getName();
+                    if (nameString == null || "".equals(nameString)) {
+                        nameString = SynapseConstants.ANONYMOUS_PROXYSERVICE;
+                    }
+                    AspectConfiguration aspectConfiguration = new AspectConfiguration(nameString);
+                    aspectConfiguration.enableStatistics();
+                    proxy.configure(aspectConfiguration);
+                }
+            }
+        }
+
         Iterator props = elem.getChildrenWithName(
                 new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "parameter"));
         while (props.hasNext()) {

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java Thu Mar 19 10:52:47 2009
@@ -82,10 +82,11 @@
         OMElement addressElement = epConfig.getFirstChildWithName(
                 new QName(SynapseConstants.SYNAPSE_NAMESPACE, "address"));
         if (addressElement != null) {
-            EndpointDefinition endpoint = createEndpointDefinition(addressElement);
-            addressEndpoint.setDefinition(endpoint);
+            EndpointDefinition definition = createEndpointDefinition(addressElement);
+            addressEndpoint.setDefinition(definition);
+            processAuditStatus(definition, addressEndpoint.getName(), epConfig);
         }
-        processAuditStatus(addressEndpoint, epConfig);
+
         return addressEndpoint;
     }
 

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DefaultEndpointFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DefaultEndpointFactory.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DefaultEndpointFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DefaultEndpointFactory.java Thu Mar 19 10:52:47 2009
@@ -22,7 +22,7 @@
 import org.apache.axiom.om.OMAttribute;
 import org.apache.axiom.om.OMElement;
 import org.apache.synapse.SynapseConstants;
-import org.apache.synapse.aspects.AspectConfigurable;
+import org.apache.synapse.aspects.AspectConfiguration;
 import org.apache.synapse.config.xml.XMLConfigConstants;
 import org.apache.synapse.endpoints.DefaultEndpoint;
 import org.apache.synapse.endpoints.Endpoint;
@@ -83,7 +83,7 @@
         if (defaultElement != null) {
             EndpointDefinition endpoint = createEndpointDefinition(defaultElement);
             defaultEndpoint.setDefinition(endpoint);
-            processAuditStatus(defaultEndpoint, defaultElement);
+            processAuditStatus(endpoint, defaultEndpoint.getName(),defaultElement);
         }
         return defaultEndpoint;
     }
@@ -134,17 +134,20 @@
         return endpointDefinition;
     }
     
-    protected void processAuditStatus(Endpoint endpoint ,OMElement epOmElement){
-        
+    protected void processAuditStatus(EndpointDefinition definition ,String name , OMElement epOmElement){
+
+        if (name == null || "".equals(name)) {
+            name = SynapseConstants.ANONYMOUS_ENDPOINT;
+        }
         OMAttribute statistics = epOmElement.getAttribute(
                 new QName(XMLConfigConstants.STATISTICS_ATTRIB_NAME));
         if (statistics != null) {
             String statisticsValue = statistics.getAttributeValue();
             if (statisticsValue != null) {
-                if (endpoint instanceof AspectConfigurable) {
-                    if (XMLConfigConstants.STATISTICS_ENABLE.equals(statisticsValue)) {
-                        ((AspectConfigurable) endpoint).enableStatistics();
-                    }
+                if (XMLConfigConstants.STATISTICS_ENABLE.equals(statisticsValue)) {
+                    AspectConfiguration aspectConfiguration = new AspectConfiguration(name);
+                    aspectConfiguration.enableStatistics();
+                    definition.configure(aspectConfiguration);
                 }
             }
         }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java Thu Mar 19 10:52:47 2009
@@ -30,8 +30,8 @@
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.SynapseConstants;
 import org.apache.synapse.SynapseException;
-import org.apache.synapse.aspects.AspectHelper;
 import org.apache.synapse.aspects.statistics.StatisticsCollector;
+import org.apache.synapse.aspects.statistics.StatisticsReporter;
 import org.apache.synapse.commons.util.TemporaryData;
 import org.apache.synapse.config.SynapseConfiguration;
 import org.apache.synapse.core.SynapseEnvironment;
@@ -169,7 +169,7 @@
     public void send(EndpointDefinition endpoint, MessageContext synCtx) {
         if (synCtx.isResponse()) {
 
-            AspectHelper.reportGlobalAudit(synCtx);
+           StatisticsReporter.reportForAll(synCtx);
             
             if (endpoint != null) {
                

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyService.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyService.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyService.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyService.java Thu Mar 19 10:52:47 2009
@@ -33,6 +33,8 @@
 import org.apache.neethi.PolicyEngine;
 import org.apache.synapse.SynapseConstants;
 import org.apache.synapse.SynapseException;
+import org.apache.synapse.aspects.AspectConfigurable;
+import org.apache.synapse.aspects.AspectConfiguration;
 import org.apache.synapse.config.SynapseConfigUtils;
 import org.apache.synapse.config.SynapseConfiguration;
 import org.apache.synapse.core.SynapseEnvironment;
@@ -76,7 +78,7 @@
  *    </parameter>?
  * </proxy-service>
  */
-public class ProxyService {
+public class ProxyService implements AspectConfigurable {
 
     private static final Log log = LogFactory.getLog(ProxyService.class);
     private static final Log trace = LogFactory.getLog(SynapseConstants.TRACE_LOGGER);
@@ -193,8 +195,9 @@
     /**
      * The variable that indicate tracing on or off for the current mediator
      */
-    protected int traceState = SynapseConstants.TRACING_UNSET;
+    private int traceState = SynapseConstants.TRACING_UNSET;
 
+    private AspectConfiguration aspectConfiguration;
 
     /**
      * Constructor
@@ -936,6 +939,14 @@
         this.policies.add(pi);
     }
 
+    public void configure(AspectConfiguration aspectConfiguration) {
+        this.aspectConfiguration = aspectConfiguration;
+    }
+
+    public AspectConfiguration getAspectConfiguration() {
+        return aspectConfiguration;
+    }
+
     @Override
     public String toString() {
         StringBuffer sb = new StringBuffer();

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java Thu Mar 19 10:52:47 2009
@@ -23,7 +23,8 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.*;
-import org.apache.synapse.aspects.AspectHelper;
+import org.apache.synapse.aspects.ComponentType;
+import org.apache.synapse.aspects.statistics.StatisticsReporter;
 import org.apache.synapse.endpoints.Endpoint;
 import org.apache.synapse.mediators.MediatorFaultHandler;
 
@@ -71,7 +72,9 @@
 
         MessageContext synCtx = MessageContextCreatorForAxis2.getSynapseMessageContext(mc);
 
-        AspectHelper.setGlobalAudit(synCtx);
+        StatisticsReporter.reportForComponent(synCtx,
+                proxy.getAspectConfiguration(),
+                ComponentType.PROXYSERVICE);
         
         // get service log for this message and attach to the message context also set proxy name
         Log serviceLog = LogFactory.getLog(SynapseConstants.SERVICE_LOGGER_PREFIX + name);

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java Thu Mar 19 10:52:47 2009
@@ -36,7 +36,6 @@
 import org.apache.synapse.FaultHandler;
 import org.apache.synapse.SynapseConstants;
 import org.apache.synapse.SynapseException;
-import org.apache.synapse.aspects.AspectConfigurable;
 import org.apache.synapse.aspects.statistics.StatisticsReporter;
 import org.apache.synapse.config.SynapseConfigUtils;
 import org.apache.synapse.config.SynapseConfiguration;
@@ -157,16 +156,10 @@
     private void handleMessage(String messageID ,MessageContext response,
         org.apache.synapse.MessageContext synapseOutMsgCtx) throws AxisFault {
 
-        Endpoint endpoint = (Endpoint) synapseOutMsgCtx.getProperty(
-                SynapseConstants.LAST_ENDPOINT);
-        if (endpoint instanceof AspectConfigurable) {
-            StatisticsReporter.report(synapseOutMsgCtx, (AspectConfigurable) endpoint);
-        }
-        
         Object o = response.getProperty(SynapseConstants.SENDING_FAULT);
         if (o != null && Boolean.TRUE.equals(o)) {
 
-            StatisticsReporter.reportFault(synapseOutMsgCtx);
+            StatisticsReporter.reportFaultForAll(synapseOutMsgCtx);
             // there is a sending fault. propagate the fault to fault handlers.
 
             Stack faultStack = synapseOutMsgCtx.getFaultStack();
@@ -335,6 +328,9 @@
             if (dispatcher != null && dispatcher.isServerInitiatedSession()) {
                 dispatcher.updateSession(synapseInMessageContext);
             }
+
+            StatisticsReporter.reportForAll(synapseInMessageContext);
+            
             // send the response message through the synapse mediation flow
             try {
                 synapseOutMsgCtx.getEnvironment().injectMessage(synapseInMessageContext);

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseMessageReceiver.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseMessageReceiver.java?rev=755915&r1=755914&r2=755915&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseMessageReceiver.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseMessageReceiver.java Thu Mar 19 10:52:47 2009
@@ -27,7 +27,9 @@
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.SynapseConstants;
 import org.apache.synapse.SynapseException;
-import org.apache.synapse.aspects.AspectHelper;
+import org.apache.synapse.aspects.AspectConfigurationDetectionStrategy;
+import org.apache.synapse.aspects.ComponentType;
+import org.apache.synapse.aspects.statistics.StatisticsReporter;
 import org.apache.synapse.mediators.MediatorFaultHandler;
 
 /**
@@ -44,7 +46,9 @@
 
         MessageContext synCtx = MessageContextCreatorForAxis2.getSynapseMessageContext(mc);
 
-        AspectHelper.setGlobalAudit(synCtx);
+        StatisticsReporter.reportForComponent(synCtx,
+                AspectConfigurationDetectionStrategy.getAspectConfiguration(synCtx),
+                ComponentType.SEQUENCE);
         
         boolean traceOn = synCtx.getMainSequence().getTraceState() == SynapseConstants.TRACING_ON;
         boolean traceOrDebugOn = traceOn || log.isDebugEnabled();