lib/grizzly/indicator.ex

defmodule Grizzly.Indicator do
  @moduledoc """
  Indicator handling for Grizzly when an indicator event is triggered

  See `Grizzly.Supervisor` for configuring the dispatcher that Grizzly should
  use during runtime.
  """

  require Logger

  @type event() :: :on | :off

  @type dispatcher() :: (event() -> :ok)

  @doc """
  Handles an event from `BEAMNotify`
  """
  @spec handle_event([String.t()], %{String.t() => String.t()}, dispatcher()) :: :ok
  def handle_event(event, _env, nil) do
    Logger.debug("Received indicator event: #{inspect(event)}")
  end

  def handle_event(event, _env, dispatcher) do
    case Integer.parse(hd(event)) do
      {0, _} -> dispatcher.(:off)
      {v, _} when v > 1 -> dispatcher.(:on)
      :error -> Logger.debug("Received unexpected indicator event: #{inspect(event)}")
    end
  end
end