Skip to main content

lib/hourglass/activity/retry_classifier/default.ex

defmodule Hourglass.Activity.RetryClassifier.Default do
  @moduledoc """
  Permissive default classifier: every failure is `:retryable`. Hosts that need
  non-retryable verdicts for specific error shapes configure their own module
  via `config :hourglass, :retry_classifier`.
  """
  @behaviour Hourglass.Activity.RetryClassifier

  @impl Hourglass.Activity.RetryClassifier
  def classify(error, _context) when is_exception(error) do
    {:retryable,
     %{
       type:
         error.__struct__
         |> Module.split()
         |> List.last(),
       message: Exception.message(error),
       details: nil
     }}
  end

  def classify(reason, _context) do
    {:retryable, %{type: "Error", message: inspect(reason), details: nil}}
  end
end