# ThrottleConstants.java

    /*
    * Copyright 2005,2006 WSO2, Inc. http://www.wso2.org
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
    * You may obtain a copy of the License at
    *
    *      http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing, software
    * distributed under the License is distributed on an "AS IS" BASIS,
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the License for the specific language governing permissions and
    * limitations under the License.
    *
    *
    */
    package org.apache.synapse.commons.throttle.core;

    import javax.xml.namespace.QName;

    public final class ThrottleConstants {

        public static final String HAZELCAST = "hazelcast";

        private ThrottleConstants() {

        }

        /* Throttle module name */

        public static final String THROTTLE_MODULE_NAME = "wso2throttle";

        /* Throttle namespace */

        public static final String THROTTLE_NS = "http://www.wso2.org/products/wso2commons/throttle";

        public static final String THROTTLE_NS_PREFIX = "throttle";

        /* Throttle type according to the caller type eg: ip | domain */

        public static final int IP_BASE = 0;

        public static final int DOMAIN_BASE = 1;

        public static final int ROLE_BASE = 2;

        /* Throttle type according to the scope ex : service level;,operation level and module level*/

        public static final int GLOBAL_THROTTLE = 0;

        public static final int SERVICE_BASED_THROTTLE = 1;

        public static final int OPERATION_BASED_THROTTLE = 2;

        /* The throttle policy parameters */
        /**
         * @deprecated
         */
        public static final QName THROTTLE_ASSERTION_QNAME =
                new QName(THROTTLE_NS, "ThrottleAssertion", THROTTLE_NS_PREFIX);

        public static final QName OPERATION_THROTTLE_ASSERTION_QNAME =
                new QName(THROTTLE_NS, "OperationThrottleAssertion", THROTTLE_NS_PREFIX);

        public static final QName SERVICE_THROTTLE_ASSERTION_QNAME =
                new QName(THROTTLE_NS, "ServiceThrottleAssertion", THROTTLE_NS_PREFIX);

        public static final QName MODULE_THROTTLE_ASSERTION_QNAME =
                new QName(THROTTLE_NS, "ModuleThrottleAssertion", THROTTLE_NS_PREFIX);

        public static final QName MEDIATOR_THROTTLE_ASSERTION_QNAME =
                new QName(THROTTLE_NS, "MediatorThrottleAssertion", THROTTLE_NS_PREFIX);

        public static final QName THROTTLE_TYPE_ATTRIBUTE_QNAME =
                new QName(THROTTLE_NS, "type", THROTTLE_NS_PREFIX);

        public static final String KEY_OF_DEFAULT_CONFIGURATION_FOR_OTHER = "other";

        /**
         * @deprecated
         */
        public static final String ISALLOW_PARAMETER_NAME = "IsAllow";

        public static final String ALLOW_PARAMETER_NAME = "Allow";

        public static final String CONTROL_PARAMETER_NAME = "Control";

        public static final String DENY_PARAMETER_NAME = "Deny";

        public static final String DEFAULT_THROTTLE_CONTEXT_ID = "ThrottleContextID";

        public static final String UNIT_TIME_PARAMETER_NAME = "UnitTime";

        public static final String MAXIMUM_COUNT_PARAMETER_NAME = "MaximumCount";

        public static final String PROHIBIT_TIME_PERIOD_PARAMETER_NAME = "ProhibitTimePeriod";

        public static final String ID_PARAMETER_NAME = "ID";

        public static final String MAXIMUM_CONCURRENT_ACCESS_PARAMETER_NAME = "MaximumConcurrentAccess";

        /**
         * This global throttle path can be used to point to an external global throttle policy using
         * the axis.xml
         */
        public static final String GLOBAL_THROTTLE_PATH_PARAM = "globalThrottlePolicyPath";

        /* Access states  - allow, deny or control */

        public static final int ACCESS_CONTROLLED = 0;

        public static final int ACCESS_DENIED = 1;

        public static final int ACCESS_ALLOWED = 2;

        /* The default clean up time indicates how often cleaning up process should execute  */

        public static final long DEFAULT_THROTTLE_CLEAN_PERIOD = 5 * 1000 * 60;

        /*prefix for throttle specific properties */

        public static final String THROTTLE_PROPERTY_PREFIX = "throttle_";

        /*The key for map that contains all available throttles */

        public static final String THROTTLES_MAP = "local_throttle_map";

        /* The key for looking up throttle context and configuration from the throttle
        ,according to the type (ip | domain) */

        public static final String IP_BASED_THROTTLE_KEY = "key_of_ip_based_throttle";

        public static final String DOMAIN_BASED_THROTTLE_KEY = "key_of_domain_based_throttle";

        public static final String ROLE_BASED_THROTTLE_KEY = "key_of_role_based_throttle";

        public static final String TOKEN_BASED_THROTTLE_KEY = "key_of_token_based_throttle";

        /* The key for level throttle */

        public static final String GLOBAL_THROTTLE_KEY = "key_of_global_throttle";

        /* suffix for key , when setting a concurrent access controller to context */

        public static final String CAC_SUFFIX = "_cac_key";

        /* the throttle id for module level throttle */

        public static final String GLOBAL_THROTTLE_ID = "id_of_global_throttle_";

        /**
         * Parameter names which are used to identify special services..
         */
        public static final String ADMIN_SERVICE_PARAM_NAME = "adminService";
        public static final String HIDDEN_SERVICE_PARAM_NAME = "hiddenService";
        public static final String DYNAMIC_SERVICE_PARAM_NAME = "dynamicService";

        public static final String DOMAIN_NAME_PROPERTY = "domainName";

        /**
         * Dummy token for token based throttling policy initialization
         */
        public static final String DUMMY_TOKEN = "dummy_token_for_token_based_throttle";

        public static final String THROTTLE_INFO_KEY = "throttle_info";

        public static final String THROTTLE_TIMESTAMP_KEY = "startedTime-";
        public static final String THROTTLE_SHARED_COUNTER_KEY = "sharedCounter-";
        public static final String THROTTLE_LOCK_KEY_PREFIX = "lock-";
        public static final String THROTTLE_CONTEXT_CLEANUP_TASK_FREQUENCY = "throttling.context.cleanup.frequency";
        public static final String THROTTLE_CONTEXT_DISTRIBUTED_CLEANUP_TASK_FREQUENCY =
                "throttling.context.distributed.cleanup.frequency";
        public static final String THROTTLE_CONTEXT_DISTRIBUTED_EXPIRED_INSTANCE_TIME =
                "throttling.context.distributed.expired.instance.time";
        public static final String THROTTLE_DISTRIBUTED_CLEANUP_POOL_SIZE =
                "throttling.context.distributed.cleanup.pool.size";
        public static final String THROTTLE_DISTRIBUTED_CLEANUP_AMOUNT = "throttling.context.distributed.cleanup.amount";
        public static final String MAX_NON_ASSOCIATED_COUNTER_CLEANUP_AMOUNT = "stale.counter.references";
        public static final String THROTTLE_DISTRIBUTED_CLEANUP_TASK_ENABLE =
                "throttling.context.distributed.cleanup.task.enabled";
        public static final String THROTTLING_POOL_SIZE = "throttling.pool.size";
        public static final String THROTTLING_REPLICATION_FREQUENCY = "throttling.replication.frequency";
        public static final String THROTTLING_KEYS_TO_REPLICATE = "throttling.keys.to.replicate";
        public static final String WINDOW_REPLICATOR_POOL_SIZE = "throttlingWindowReplicator.pool.size";
        public static final String WINDOW_REPLICATOR_FREQUENCY = "throttlingWindowReplicator.replication.frequency";
        public static final String DISTRIBUTED_COUNTER_TYPE = "throttling.distributed.counter.type";
        public static final String DISTRIBUTED_COUNTER_CONFIGURATIONS  = "throttling.distributed.counter.configurations.";
        public static final String THROTTLE_SYNC_ASYNC_HYBRID_MODE_ENABLED = "throttling.sync-async_hybrid_mode.enable";
        public static final String HYBRID_THROTTLE_PROCESSOR_WINDOW_TYPE = "throttling.hybrid_throttle_processor_window.type";
        public static final String LOCAL_QUOTA_BUFFER_PERCENTAGE = "throttling.local_quota_buffer_percentage";
    }