AbsintheThrottle

Build Status

An Absinthe middleware to throttle the number of top-level queries that are resolved simultaneously.

defmodule MyApp.Throttler do
use AbsintheThrottle,
adapter: AbsintheThrottle.Adapter.Semaphore,
arguments: [name: :resolve,
size: 1,
error: {:error, :custom_error}]
end
defmodule MyApp.Schema do
use Absinthe.Schema
def middleware(middlewares, field, object), do: MyApp.Throttler.middleware(middlewares, field, object)
# ...
end

Custom throttlers

You can implement a custom throttler using any throttling mechanism by implementing the transaction/2 callback, see: AbsintheThrottle.Adapter.Semaphore.

Installation

If available in Hex, the package can be installed by adding absinthe_throttle to your list of dependencies in mix.exs:

def deps do
[
{:absinthe_throttle, "~> 0.1.0"}
]
end

Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/absinthe_throttle.