Packages

A grab bag of utilities I tend to want, so I can build faster.

Current section

Files

Jump to
fast lib rate_limiter rate_limiter.ex
Raw

lib/rate_limiter/rate_limiter.ex

defmodule Fast.RateLimiter do
@moduledoc """
Wrapper around ExRated that allows env based config.
"""
@app_name :fast
@spec check_rate(String.t(), non_neg_integer(), non_neg_integer()) ::
{:ok, :disabled | non_neg_integer()} | {:error, non_neg_integer()}
def check_rate(bucket_id, window_ms, max_num_calls) do
case disabled?() do
true -> {:ok, :disabled}
_ -> ExRated.check_rate(bucket_id, window_ms, max_num_calls)
end
end
@spec reset(String.t()) :: :ok
def reset(bucket_id) do
ExRated.delete_bucket(bucket_id)
end
def disabled? do
Application.get_env(@app_name, :disable_rate_limiter, false)
end
end