README.md

# RedAlert

Monitor events that do **NOT** happen in designated schedule.

## How it works

If you ever use cron-like scheduling tool you would have experienced this: it's very trivial to identify if a task/job run, basically you just need to check the log. However, it's not so if your expected event **didn't occur.** More than likely you would need to scan through the log of the entire period to check if it's delayed or missed.

RedAlert, inspired by [Dead Man's Snitch](https://deadmanssnitch.com), attempts to provide a very simple mechanism to give you a notification (by default a log message), that an event is missed.

## Installation

  1. Add `red_alert` to your list of dependencies in `mix.exs`:

    ```elixir
    def deps do
      [{:red_alert, "~> 0.2.0"}]
    end
    ```

  2. Ensure `red_alert` is started before your application:

    ```elixir
    def application do
      [applications: [:red_alert]]
    end
    ```

## Configuration

  1. Define the `schedules` in your `config.exs`:

    ```elixir
    config :red_alert,
      schedules: %{AnyTag1 => :every_15mins, AnyTag2 => :every_1day},
      notify: [&Notifier.notify/1]
    ```
    Where:
      - `schedules`: The keys are the event `tags` you would call with [RedAlert.snooze/1](https://hexdocs.pm/red_alert/RedAlert.html#snooze/1), and the values are the corresponding intervals (available options found in `RedAlert.Interval`).
      - `notify`: Optional list of callback functions which would receive notifications. The default callback is [RedAlert.Monitor.notify/1](https://hexdocs.pm/red_alert/RedAlert.Monitor.html#notify/1).

  2. In your code that emits the event, add:

    ```elixir
    RedAlert.snooze AnyTag1
    ```