README.md

# EctoConnectionResetter

An OTP process that allows a user to add one line to create a cron job to call disconnect all every X minutes.

## Usage

In your `application.ex`, add:

```elixir
def start(_type, _args) do
  ...

  children = [
    ...
    {EctoConnectionResetter, %{cycle_mins: 1, close_interval: 1, repo: YourRepo}}
  ]

  ...
end
```

where:

- `cycle_mins`: number of minutes between each cycle;
- `close_interval`: seconds to close once a disconnect_all is called;
- `repo`: your Repo;
- `verbose`: (optional) log additional text when spawning the lib's OTP process and when scheduling the next resetting. Default is false;
- `reset_callback`: (optional) function to be called every time connections are reset in the pool (e.g. useful for APM metrics).
- `name`: (optional) name to pass to `GenServer.start_link` when initializing the application. Useful when you want to run multiple instances in parallel.

## Support for multiple Ecto Repo instances

In your `application.ex`, add instead:

```elixir
def start(_type, _args) do
  ...

  children = [
    ...
    Supervisor.child_spec(
      {EctoConnectionResetter, %{cycle_mins: 1, close_interval: 1, repo: RepoOne, name: RepoOneECR}},
      id: :repo_one_ecr
    ),
    Supervisor.child_spec(
      {EctoConnectionResetter, %{cycle_mins: 1, close_interval: 1, repo: RepoTwo, name: RepoTwoECR}},
      id: :repo_two_ecr
    )
  ]

  ...
end
```

## Installation

If [available in Hex](https://hex.pm/docs/publish), the package can be installed
by adding `ecto_connection_resetter` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:ecto_connection_resetter, "~> 0.3"}
  ]
end
```

Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
be found at <https://hexdocs.pm/ecto_connection_resetter>.