[](https://travis-ci.org/ggpasqualino/plug_checkup)
[](https://coveralls.io/github/ggpasqualino/plug_checkup?branch=master)
||
[](https://hex.pm/packages/plug_checkup)
[](https://hex.pm/packages/plug_checkup)
# PlugCheckup
PlugCheckup provides a Plug for adding simple health checks to your app. The [JSON output](#response) is similar to the one provided by the [MiniCheck](https://github.com/workshare/mini-check) Ruby library. It was started at [solarisBank](https://www.solarisbank.de/en/) as an easy way of providing monitoring to our Plug based applications.
## Usage
- Add the package to "mix.exs"
```elixir
defp deps do
  [
    {:plug_checkup, "~> 0.2.0"}
  ]
end
```
- Create your [checks](#the-checks)
```elixir
defmodule MyHealthChecks do
  def check_db do
    :ok
  end
  def check_redis do
    :ok
  end
end
```
- Forward your health path to PlugCheckup in your Plug Router
```elixir
checks = [
  %PlugCheckup.Check{name: "DB", module: MyHealthChecks, function: :check_db},
  %PlugCheckup.Check{name: "Redis", module: MyHealthChecks, function: :check_redis}
]
forward(
  "/health",
  to: PlugCheckup,
  init_opts: PlugCheckup.Options.new(checks: checks)
)
```
If you're working with Phoenix, you need to change the syntax slightly to
accomodate `Phoenix.Router.forward/4`:
```elixir
checks = [
  %PlugCheckup.Check{name: "DB", module: MyHealthChecks, function: :check_db},
  %PlugCheckup.Check{name: "Redis", module: MyHealthChecks, function: :check_redis}
]
forward("/health", PlugCheckup, PlugCheckup.Options.new(checks: checks))
```
## The Checks
A check is a function with arity zero, which should return either :ok or {:error, term}. In case the check raises an exception or times out, that will be mapped to an {:error, reason} result.
## Response
PlugCheckup should return either 200 or 500 statuses, Content-Type header "application/json", and the body should respect [this](priv/schemas/health_check_response.json) JSON schema