Hammer.Mnesia
Note
This README is for the unreleased master branch, please reference the official documentation on hexdocs for the latest stable release.
A Mnesia backend for the Hammer rate-limiter.
This package is available in beta. If you have any problems, please open an issue.
Tip
Consider using Hammer.ETS with counter increments broadcasted via Phoenix PubSub instead.
Installation
The package can be installed by adding hammer_backend_mnesia to your list of dependencies in mix.exs:
def deps do
[
{:hammer_backend_mnesia, "~> 0.7.0"},
]
end
Usage
Define the rate limiter using
Hammer.Mnesiabackend:defmodule MyApp.RateLimit douse Hammer, backend: Hammer.MnesiaendAdd the rate limiter to your supervision tree:
children = [# ...{MyApp.RateLimit, clean_period: :timer.minutes(1)}# ...]And that's it, calls to the rate limiter will use Mnesia to store the counters.
case MyApp.RateLimit.hit(key, _scale = :timer.minutes(1), _limit = 100) do{:allow, _count} -> :ok{:deny, retry_after} -> {:error, :rate_limit, "retry after #{retry_after}ms"}end
Documentation
On hexdocs: https://hexdocs.pm/hammer_backend_mnesia/
Getting Help
If you're having trouble, either open an issue on this repo, or reach out to the maintainers (@shanekilkelly) on Twitter.