# ComputeRated
A leaky bucket rate limiter optimized for compute time limits.
ComputeRated allows you to:
- Check if adding compute time would exceed a bucket's capacity
- Add compute time to a bucket
- Wait until a bucket has sufficient capacity or is fully depleted
- Track compute time usage over specified time windows
## Installation
The package can be installed by adding `compute_rated` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:compute_rated, "~> 0.1.0"}
]
end
```
## Usage
```elixir
# Check if adding 100 units of compute time would exceed a bucket's capacity
{:ok, current, remaining} = ComputeRated.check_rate("my-bucket", 60_000, 1000, 100)
# Add 100 units of compute time to a bucket
{:ok, current, remaining} = ComputeRated.add_compute_time("my-bucket", 60_000, 1000, 100)
# Wait until there's enough capacity for an estimated 200 units
:ok = ComputeRated.wait_for_capacity("my-bucket", 60_000, 1000, 200)
# Wait until the bucket is completely empty
:ok = ComputeRated.wait_for_capacity("my-bucket", 60_000, 1000, nil, true)
# Delete a bucket
:ok = ComputeRated.delete_bucket("my-bucket")
```
## Configuration
ComputeRated can be configured in your `config.exs`:
```elixir
config :compute_rated,
timeout: 90_000_000, # bucket maximum lifetime (25 hours)
cleanup_rate: 60_000, # cleanup every minute
ets_table_name: :compute_rated_buckets, # the registered name of the ETS table
persistent: false # whether to persist the buckets to disk
```
## Third-Party Attributions
This project includes modified code from ExRated by Glenn Rempe (https://github.com/grempe/ex_rated).
For full attribution and license information, please see the ATTRIBUTION file.