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());
}
}