hammer v1.0.0 Hammer.Backend.ETS View Source

An ETS backend for Hammer

The public API of this module is used by Hammer to store information about rate-limit ‘buckets’. A bucket is identified by a key, which is a tuple {bucket_number, id}. The essential schema of a bucket is: {key, count, created_at, updated_at}, although backends are free to store and retrieve this data in whichever way they wish.

Use start or start_link to start the server:

{:ok, pid} = Hammer.Backend.ETS.start_link(args)

args is a keyword list:

  • ets_table_name: (atom) table name to use, defaults to :hammer_ets_buckets
  • expiry_ms: (integer) time in ms before a bucket is auto-deleted, should be larger than the expected largest size/duration of a bucket
  • cleanup_interval_ms: (integer) time between cleanup runs,

Example:

Hammer.Backend.ETS.start_link(
  expiry_ms: 1000 * 60 * 60,
  cleanup_interval_ms: 1000 * 60 * 10
)

Link to this section Summary

Functions

Record a hit in the bucket identified by key

Delete all buckets associated with id

Retrieve information about the bucket identified by key

Link to this section Functions

Link to this function count_hit(key, now) View Source
count_hit(key :: {bucket :: integer, id :: String.t}, now :: integer) ::
  {:ok, count :: integer} |
  {:error, reason :: any}

Record a hit in the bucket identified by key

Link to this function delete_buckets(id) View Source
delete_buckets(id :: String.t) ::
  {:ok, count_deleted :: integer} |
  {:error, reason :: any}

Delete all buckets associated with id.

Link to this function get_bucket(key) View Source
get_bucket(key :: {bucket :: integer, id :: String.t}) ::
  {:ok, {key :: {bucket :: integer, id :: String.t}, count :: integer, created :: integer, updated :: integer}} |
  {:ok, nil} |
  {:error, reason :: any}

Retrieve information about the bucket identified by key