# Class TimeBucketCounterBase

java.lang.Object
org.apache.catalina.util.TimeBucketCounterBase

Direct Known Subclasses:
  `TimeBucketCounter`

public abstract class TimeBucketCounterBase extends Object
This class maintains a thread safe hash map that has timestamp-based buckets followed by a string for a key, and a counter for an integer value. Each time the increment() method is called it adds the key if it does not exist, increments its value and returns it.

## Constructor Summary

Constructors
Constructor
Description
`TimeBucketCounterBase(int bucketDuration, ScheduledExecutorService executorService)`
Creates a new TimeBucketCounter with the specified lifetime.

## Method Summary

Modifier and Type
Method
Description
`void`
`destroy()`
Stops threads created by this object and cleans up resources.
`protected final String`
`genKey(String identifier)`
Generates the key of timeBucket counter maps with the specific identifier, and the timestamp is implicitly equivalent to "now".
`protected final String`
`genKey(String identifier, long timestamp)`
Generates the key of timeBucket counter maps with the specific identifier and timestamp.
`int`
`getBucketDuration()`
Returns the duration of each time bucket.
`protected abstract long`
`getBucketIndex(long timestamp)`
Calculate the bucket index for the specific timestamp.
`int`
`getCurrentBucketPrefix()`
Returns current bucket prefix
`abstract long`
`getMillisUntilNextBucket()`
When we want to test a full bucket duration we need to sleep until the next bucket starts.
`abstract double`
`getRatio()`
Returns the ratio between the configured duration param and the actual duration.
`final int`
`increment(String identifier)`
Increments the counter for the passed identifier in the current time bucket and returns the new value.
`void`
`periodicEvict()`
Periodic evict, perform removal of obsolete bucket items.

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### TimeBucketCounterBase

public TimeBucketCounterBase(int bucketDuration, ScheduledExecutorService executorService)
Creates a new TimeBucketCounter with the specified lifetime.

Parameters:
  `bucketDuration` - duration in seconds, e.g. for 1 minute pass 60
  `executorService` - the executor service that will be used to run the maintenance task
Throws:
  `NullPointerException` - if executorService is `null`.
  `IllegalArgumentException` - if bucketDuration is not strictly positive

## Method Details

### getBucketDuration

public int getBucketDuration()
Returns the duration of each time bucket.

Returns:
  the bucket duration in seconds

### getRatio

public abstract double getRatio()
Returns the ratio between the configured duration param and the actual duration.

Returns:
  the ratio between the configured duration param and the actual duration.

### increment

public final int increment(String identifier)
Increments the counter for the passed identifier in the current time bucket and returns the new value.

Parameters:
  `identifier` - an identifier for which we want to maintain count, e.g. IP Address
Returns:
  the count within the current time bucket

### genKey

protected final String genKey(String identifier)
Generates the key of timeBucket counter maps with the specific identifier, and the timestamp is implicitly equivalent to "now".

Parameters:
  `identifier` - an identifier for which we want to maintain count
Returns:
  key of timeBucket counter maps

### genKey

protected final String genKey(String identifier, long timestamp)
Generates the key of timeBucket counter maps with the specific identifier and timestamp.

Parameters:
  `identifier` - of target request
  `timestamp` - when target request received
Returns:
  key of timeBucket counter maps

### getBucketIndex

protected abstract long getBucketIndex(long timestamp)
Calculate the bucket index for the specific timestamp.

Parameters:
  `timestamp` - the specific timestamp in milliseconds
Returns:
  prefix the bucket key prefix for the specific timestamp

### getCurrentBucketPrefix

public int getCurrentBucketPrefix()
Returns current bucket prefix

Returns:
  bucket index

### getMillisUntilNextBucket

public abstract long getMillisUntilNextBucket()
When we want to test a full bucket duration we need to sleep until the next bucket starts.

WARNING: This method is used for test purpose.

Returns:
  the number of milliseconds until the next bucket

### destroy

public void destroy()
Stops threads created by this object and cleans up resources.

### periodicEvict

public void periodicEvict()
Periodic evict, perform removal of obsolete bucket items. Absence of this operation may result in OOM after a long run.