lib/oban_sentry_reporter.ex

defmodule ObanSentryReporter do
  @moduledoc """
  Reports Oban job failures to Sentry.
  """

  require Logger

  def handle_event([:oban, :job, :exception], measure, meta, _) do
    extra =
      meta.job
      |> Map.take([:id, :args, :meta, :queue, :worker])
      |> Map.merge(measure)

    Logger.error(inspect([meta.reason, meta.stacktrace, extra]))

    Sentry.capture_exception(meta.reason, stacktrace: meta.stacktrace, extra: extra)
  end
end