/*
* Copyright (c) 2005-2012, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. 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.commons.throttle.core;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.cache.Cache;
import javax.cache.CacheManager;
import javax.cache.Caching;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
public class ThrottleUtil {
private static Log log = LogFactory.getLog(ThrottleUtil.class.getName());
public static final String THROTTLING_CACHE_MANAGER = "throttling.cache.manager";
private static final String CONF_LOCATION = "conf.location";
public static final String THROTTLING_CACHE = "throttling.cache";
/**
* This method used to set throttle properties loaded from throttle.properties file in configuration folder
* @return properties of throttle properties
*/
public static ThrottleProperties loadThrottlePropertiesFromConfigurations() {
ThrottleProperties throttleProperties = new ThrottleProperties();
Properties properties = new Properties();
String throttlePropertiesFileLocation = null;
if (System.getProperty(CONF_LOCATION) != null) {
throttlePropertiesFileLocation = System.getProperty(CONF_LOCATION) + File.separator +"throttle.properties";
try {
properties.load(new FileInputStream(throttlePropertiesFileLocation));
String throttleFrequency =
properties.getProperty(ThrottleConstants.THROTTLE_CONTEXT_CLEANUP_TASK_FREQUENCY);
if (!StringUtils.isEmpty(throttleFrequency)) {
throttleProperties.setThrottleFrequency(throttleFrequency);
} else {
throttleProperties.setThrottleFrequency("3600000");
}
String throttleContextDistributedCleanupTaskFrequency =
properties.getProperty(ThrottleConstants.THROTTLE_CONTEXT_DISTRIBUTED_CLEANUP_TASK_FREQUENCY);
if (throttleContextDistributedCleanupTaskFrequency != null &&
throttleContextDistributedCleanupTaskFrequency != "") {
throttleProperties.setThrottleContextDistributedCleanupTaskFrequency(
throttleContextDistributedCleanupTaskFrequency);
} else {
throttleProperties.setThrottleContextDistributedCleanupTaskFrequency("3600000");
}
String throttleContextDistributedExpiredInstanceTime =
properties.getProperty(ThrottleConstants.THROTTLE_CONTEXT_DISTRIBUTED_EXPIRED_INSTANCE_TIME);
if (throttleContextDistributedExpiredInstanceTime != null &&
throttleContextDistributedExpiredInstanceTime != "") {
throttleProperties.setThrottleContextDistributedExpiredInstanceTime(
throttleContextDistributedExpiredInstanceTime);
} else {
throttleProperties.setThrottleContextDistributedExpiredInstanceTime("3600000");
}
String throttleDistributedCleanupPoolSize =
properties.getProperty(ThrottleConstants.THROTTLE_DISTRIBUTED_CLEANUP_POOL_SIZE);
if (throttleDistributedCleanupPoolSize != null && throttleDistributedCleanupPoolSize != "") {
throttleProperties.setThrottleDistributedCleanupPoolSize(
throttleDistributedCleanupPoolSize);
} else {
throttleProperties.setThrottleDistributedCleanupPoolSize("1");
}
String throttleDistributedCleanupAmount =
properties.getProperty(ThrottleConstants.THROTTLE_DISTRIBUTED_CLEANUP_AMOUNT);
if (throttleDistributedCleanupAmount != null && throttleDistributedCleanupAmount != "") {
throttleProperties.setThrottleDistributedCleanupAmount(
throttleDistributedCleanupAmount);
} else {
throttleProperties.setThrottleDistributedCleanupAmount("25000");
}
String throttleDistributedCleanupTaskEnable =
properties.getProperty(ThrottleConstants.THROTTLE_DISTRIBUTED_CLEANUP_TASK_ENABLE);
if (throttleDistributedCleanupTaskEnable != null && throttleDistributedCleanupTaskEnable != "") {
throttleProperties.setThrottleDistributedCleanupTaskEnable(
throttleDistributedCleanupTaskEnable);
} else {
throttleProperties.setThrottleDistributedCleanupTaskEnable("true");
}
String maxNonAssociatedCounterCleanupAmount =
properties.getProperty(ThrottleConstants.MAX_NON_ASSOCIATED_COUNTER_CLEANUP_AMOUNT);
if (maxNonAssociatedCounterCleanupAmount != null && maxNonAssociatedCounterCleanupAmount != "") {
throttleProperties.setMaxNonAssociatedCounterCleanupAmount(
maxNonAssociatedCounterCleanupAmount);
} else {
throttleProperties.setMaxNonAssociatedCounterCleanupAmount("25000");
}
String throttlingPoolSize =
properties.getProperty(ThrottleConstants.THROTTLING_POOL_SIZE);
if (throttlingPoolSize != null && throttlingPoolSize != "") {
throttleProperties.setThrottlingPoolSize(
throttlingPoolSize);
} else {
throttleProperties.setThrottlingPoolSize("1");
}
String throttlingReplicationFrequency =
properties.getProperty(ThrottleConstants.THROTTLING_REPLICATION_FREQUENCY);
if (throttlingReplicationFrequency != null && throttlingReplicationFrequency != "" ) {
throttleProperties.setThrottlingReplicationFrequency(
throttlingReplicationFrequency);
} else {
throttleProperties.setThrottlingReplicationFrequency("50");
}
String throttlingKeysToReplicate =
properties.getProperty(ThrottleConstants.THROTTLING_KEYS_TO_REPLICATE);
if (throttlingKeysToReplicate != null && throttlingKeysToReplicate != "") {
throttleProperties.setThrottlingKeysToReplicates(
throttlingKeysToReplicate);
} else {
throttleProperties.setThrottlingKeysToReplicates("25000");
}
String windowReplicatorPoolSize =
properties.getProperty(ThrottleConstants.WINDOW_REPLICATOR_POOL_SIZE);
if (windowReplicatorPoolSize != null && windowReplicatorPoolSize != "") {
throttleProperties.setWindowReplicatorPoolSize(
windowReplicatorPoolSize);
} else {
throttleProperties.setWindowReplicatorPoolSize("1");
}
String windowReplicatorFrequency =
properties.getProperty(ThrottleConstants.WINDOW_REPLICATOR_FREQUENCY);
if (windowReplicatorFrequency != null && windowReplicatorFrequency != "") {
throttleProperties.setWindowReplicatorFrequency(
windowReplicatorFrequency);
} else {
throttleProperties.setWindowReplicatorFrequency("50");
}
} catch (IOException e) {
log.debug("Setting the Default Throttle Properties");
throttleProperties.setThrottleFrequency("3600000");
throttleProperties.setThrottleContextDistributedCleanupTaskFrequency("3600000");
throttleProperties.setThrottleContextDistributedExpiredInstanceTime("3600000");
throttleProperties.setThrottleDistributedCleanupPoolSize("1");
throttleProperties.setThrottleDistributedCleanupAmount("25000");
throttleProperties.setThrottleDistributedCleanupTaskEnable("true");
throttleProperties.setMaxNonAssociatedCounterCleanupAmount("25000");
throttleProperties.setThrottlingPoolSize("1");
throttleProperties.setThrottlingReplicationFrequency("50");
throttleProperties.setThrottlingKeysToReplicates("25000");
throttleProperties.setWindowReplicatorPoolSize("1");
throttleProperties.setWindowReplicatorFrequency("50");
}
}else{
log.debug("Setting the Default Throttle Properties");
throttleProperties.setThrottleFrequency("3600000");
throttleProperties.setThrottleContextDistributedCleanupTaskFrequency("3600000");
throttleProperties.setThrottleContextDistributedExpiredInstanceTime("3600000");
throttleProperties.setThrottleDistributedCleanupPoolSize("1");
throttleProperties.setThrottleDistributedCleanupAmount("25000");
throttleProperties.setThrottleDistributedCleanupTaskEnable("true");
throttleProperties.setMaxNonAssociatedCounterCleanupAmount("25000");
throttleProperties.setThrottlingPoolSize("1");
throttleProperties.setThrottlingReplicationFrequency("50");
throttleProperties.setThrottlingKeysToReplicates("25000");
throttleProperties.setWindowReplicatorPoolSize("1");
throttleProperties.setWindowReplicatorFrequency("50");
}
return throttleProperties;
}
public static Cache<String, CallerContext> getThrottleCache() {
// acquiring cache manager.
Cache<String, CallerContext> cache;
CacheManager cacheManager = Caching.getCacheManagerFactory().
getCacheManager(THROTTLING_CACHE_MANAGER);
if (cacheManager != null) {
cache = cacheManager.getCache(THROTTLING_CACHE);
} else {
cache = Caching.getCacheManager().getCache(THROTTLING_CACHE);
}
if (log.isDebugEnabled()) {
log.debug("created throttling cache : " + cache);
}
return cache;
}
}