Author: indika
Date: Mon Mar 23 12:46:58 2009
New Revision: 757393

URL: http://svn.apache.org/viewvc?rev=757393&view=rev
Log:
add stats cleaner - can disable as needed , can set time interval as needed 
one method rename

Added:
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsCleaner.java
Modified:
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/ServerManager.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfigUtils.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/TimeoutHandler.java
    
synapse/trunk/java/modules/handler/src/main/java/org/apache/synapse/handler/SynapseModule.java

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/ServerManager.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/ServerManager.java?rev=757393&r1=757392&r2=757393&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/ServerManager.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/ServerManager.java
 Mon Mar 23 12:46:58 2009
@@ -106,7 +106,7 @@
      *
      * @return ServerConfigurationInformation insatnce
      */
-    public ServerConfigurationInformation getInformation() {
+    public ServerConfigurationInformation getConfigurationInformation() {
         assertInitialized();
         return configurationInformation;
     }

Added: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsCleaner.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsCleaner.java?rev=757393&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsCleaner.java
 (added)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsCleaner.java
 Mon Mar 23 12:46:58 2009
@@ -0,0 +1,91 @@
+/*
+ *  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.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.config.SynapsePropertiesLoader;
+
+/**
+ * Clean the statistics stored in the StatisticsCollector based on a policy
+ */
+public class StatisticsCleaner {
+
+    private static final Log log = LogFactory.getLog(StatisticsCleaner.class);
+
+    private final static long DEFAULT_CLEAN_INTERVAL = 1000 * 60 * 5;
+    private final static String CLEAN_INTERVAL = "statistics.clean.interval";
+    private final static String CLEAN_ENABLE = "statistics.clean.enable";
+
+    private StatisticsCollector collector;
+    private long cleanInterval;
+    private long nextTime;
+    private boolean isCleanEnable = true;
+
+    public StatisticsCleaner(StatisticsCollector collector) {
+        this.collector = collector;
+        this.cleanInterval = 
Long.parseLong(SynapsePropertiesLoader.getPropertyValue(
+                CLEAN_INTERVAL,
+                String.valueOf(DEFAULT_CLEAN_INTERVAL)));
+        this.isCleanEnable = Boolean.parseBoolean(
+                SynapsePropertiesLoader.getPropertyValue(
+                        CLEAN_ENABLE, String.valueOf(true)));
+        if (isCleanEnable) {
+            if (log.isDebugEnabled()) {
+                log.debug("Statistics cleaning is will be occured with 
interval : " +
+                        cleanInterval / 1000 + " s.");
+            }
+        }
+    }
+
+    /**
+     * Clean the expired statistics
+     */
+    public void clean() {
+
+        try {
+
+            if (!isCleanEnable) {
+                if (log.isDebugEnabled()) {
+                    log.debug("Statistics cleaning is disabled.");
+                }
+                return;
+            }
+
+            if (collector == null) {
+                if (log.isDebugEnabled()) {
+                    log.debug("There are no statistics to be cleaned.");
+                }
+                return;
+            }
+
+            long currentTime = System.currentTimeMillis();
+            if (nextTime <= currentTime) {
+                collector.clearStatistics();
+                nextTime = currentTime + cleanInterval;
+            } else {
+                if (log.isDebugEnabled()) {
+                    log.debug("There are no expired statistics to be 
cleaned.");
+                }
+            }
+
+        } catch (Throwable ignored) {
+        }
+    }
+}

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfigUtils.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfigUtils.java?rev=757393&r1=757392&r2=757393&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfigUtils.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfigUtils.java
 Mon Mar 23 12:46:58 2009
@@ -22,31 +22,30 @@
 import org.apache.axiom.om.*;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.axiom.om.impl.llom.util.AXIOMUtil;
+import org.apache.axis2.context.ConfigurationContext;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.synapse.SynapseException;
-import org.apache.synapse.ServerManager;
-import org.apache.synapse.SynapseConstants;
-import org.apache.synapse.ServerConfigurationInformation;
-import org.apache.synapse.security.definition.KeyStoreInformation;
+import org.apache.synapse.*;
+import org.apache.synapse.aspects.statistics.StatisticsCollector;
+import org.apache.synapse.core.SynapseEnvironment;
 import org.apache.synapse.security.definition.IdentityKeyStoreInformation;
+import org.apache.synapse.security.definition.KeyStoreInformation;
 import org.apache.synapse.security.definition.TrustKeyStoreInformation;
 import 
org.apache.synapse.security.definition.factory.KeyStoreInformationFactory;
 import org.apache.synapse.util.SynapseBinaryDataSource;
 import org.xml.sax.InputSource;
-
 import sun.net.www.protocol.https.HttpsURLConnectionImpl;
 
+import javax.activation.DataHandler;
 import javax.net.ssl.*;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.transform.stream.StreamSource;
-import javax.activation.DataHandler;
 import java.io.*;
 import java.net.*;
-import java.security.NoSuchAlgorithmException;
 import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
 import java.util.Properties;
 
 public class SynapseConfigUtils {
@@ -636,7 +635,7 @@
         ServerManager serverManager = ServerManager.getInstance();
         if (serverManager.isInitialized()) {
             ServerConfigurationInformation information =
-                    serverManager.getInformation();
+                    serverManager.getConfigurationInformation();
             if (information != null) {
                 return information.getSynapseHome();
             }
@@ -648,7 +647,7 @@
         ServerManager serverManager = ServerManager.getInstance();
         if (serverManager.isInitialized()) {
             ServerConfigurationInformation information =
-                    serverManager.getInformation();
+                    serverManager.getConfigurationInformation();
             if (information != null) {
                 return information.getServerName();
             }
@@ -660,7 +659,7 @@
         ServerManager serverManager = ServerManager.getInstance();
         if (serverManager.isInitialized()) {
             ServerConfigurationInformation information =
-                    serverManager.getInformation();
+                    serverManager.getConfigurationInformation();
             if (information != null) {
                 return information.getResolveRoot();
             }
@@ -668,6 +667,33 @@
         return "";
     }
 
+    /**
+     * Get the StatisticsCollector from synapse env.
+     *
+     * @return StatisticsCollector instance if there is any
+     */
+    public static StatisticsCollector getStatisticsCollector() {
+
+        ServerManager serverManager = ServerManager.getInstance();
+        if (serverManager.isInitialized()) {
+            ServerContextInformation information =
+                    serverManager.getContextInformation();
+            if (information != null) {
+                Object o = information.getServerContext();
+                if (o instanceof ConfigurationContext) {
+                    ConfigurationContext context = (ConfigurationContext) o;
+                    SynapseEnvironment environment =
+                            (SynapseEnvironment) 
context.getAxisConfiguration().getParameterValue(
+                                    SynapseConstants.SYNAPSE_ENV);
+                    if (environment != null) {
+                        return environment.getStatisticsCollector();
+                    }
+                }
+            }
+        }
+        return null;
+    }
+
     public static OMElement stringToOM(String xml) {
         try {
             return AXIOMUtil.stringToOM(xml);  // Just wrapp to add loging for 
any errors

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/TimeoutHandler.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/TimeoutHandler.java?rev=757393&r1=757392&r2=757393&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/TimeoutHandler.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/TimeoutHandler.java
 Mon Mar 23 12:46:58 2009
@@ -24,6 +24,8 @@
 import org.apache.synapse.FaultHandler;
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.SynapseConstants;
+import org.apache.synapse.aspects.statistics.StatisticsCleaner;
+import org.apache.synapse.aspects.statistics.StatisticsCollector;
 import org.apache.synapse.config.SynapseConfigUtils;
 import org.apache.synapse.endpoints.dispatch.SALSessions;
 
@@ -55,6 +57,7 @@
     /*This is the timeout for otherwise non-expiring callbacks to ensure 
system stability over time */
     private long globalTimeout = SynapseConstants.DEFAULT_GLOBAL_TIMEOUT;
     private static final String SEND_TIMEOUT_MESSAGE = "Send timeout";
+    private StatisticsCleaner statisticsCleaner;
 
     public TimeoutHandler(Map callbacks) {
         this.callbackStore = callbacks;
@@ -80,8 +83,19 @@
         }
     }
 
-    private void processCallbacks() {       
-        
+    private void processCallbacks() {
+
+        //clear the expired statistics
+        if (statisticsCleaner == null) {
+            StatisticsCollector collector = 
SynapseConfigUtils.getStatisticsCollector();
+            if (collector != null) {
+                statisticsCleaner = new StatisticsCleaner(collector);
+            }
+        }
+        if (statisticsCleaner != null) {
+            statisticsCleaner.clean();
+        }
+
         //clear all the expired sessions
         SALSessions.getInstance().clearSessions();
 

Modified: 
synapse/trunk/java/modules/handler/src/main/java/org/apache/synapse/handler/SynapseModule.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/handler/src/main/java/org/apache/synapse/handler/SynapseModule.java?rev=757393&r1=757392&r2=757393&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/handler/src/main/java/org/apache/synapse/handler/SynapseModule.java
 (original)
+++ 
synapse/trunk/java/modules/handler/src/main/java/org/apache/synapse/handler/SynapseModule.java
 Mon Mar 23 12:46:58 2009
@@ -19,22 +19,22 @@
 
 package org.apache.synapse.handler;
 
-import org.apache.axis2.modules.Module;
+import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.description.AxisModule;
 import org.apache.axis2.description.AxisDescription;
+import org.apache.axis2.description.AxisModule;
 import org.apache.axis2.description.Parameter;
-import org.apache.axis2.AxisFault;
+import org.apache.axis2.modules.Module;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.neethi.Assertion;
 import org.apache.neethi.Policy;
+import org.apache.synapse.ServerManager;
 import org.apache.synapse.SynapseConstants;
 import org.apache.synapse.SynapseException;
-import org.apache.synapse.ServerManager;
 import org.apache.synapse.config.SynapseConfiguration;
-import org.apache.synapse.core.axis2.SynapseInitializationModule;
 import org.apache.synapse.core.SynapseEnvironment;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.core.axis2.SynapseInitializationModule;
 
 import java.io.File;
 
@@ -74,14 +74,14 @@
             Parameter synapseXml = 
configurationContext.getAxisConfiguration().getParameter(
                     SynapseConstants.Axis2Param.SYNAPSE_CONFIG_LOCATION);
             if (synapseHome != null && synapseHome.getValue() != null) {
-                
ServerManager.getInstance().getInformation().setSynapseHome(synapseHome.getValue().toString());
+                
ServerManager.getInstance().getConfigurationInformation().setSynapseHome(synapseHome.getValue().toString());
             }
             if (synapseXml != null && synapseXml.getValue() != null) {
-                
ServerManager.getInstance().getInformation().setSynapseXMLLocation(synapseXml.getValue().toString());
+                
ServerManager.getInstance().getConfigurationInformation().setSynapseXMLLocation(synapseXml.getValue().toString());
             }
         }
 
-        if (new 
File(ServerManager.getInstance().getInformation().getSynapseXMLLocation()).exists())
 {
+        if (new 
File(ServerManager.getInstance().getConfigurationInformation().getSynapseXMLLocation()).exists())
 {
             initializationModule = new 
org.apache.synapse.core.axis2.SynapseInitializationModule();
             initializationModule.init(configurationContext, axisModule);
 
@@ -107,7 +107,7 @@
         } else {
             handleException("Unable to initialize the Synapse 
initializationModule. Couldn't " +
                     "find the configuration file in the location "
-                    + 
ServerManager.getInstance().getInformation().getSynapseXMLLocation());
+                    + 
ServerManager.getInstance().getConfigurationInformation().getSynapseXMLLocation());
         }
     }
 


Reply via email to