Packages
TaskBunny job failure backend that reports the error to Rollbar
Current section
Files
Jump to
Current section
Files
lib/task_bunny_rollbar.ex
defmodule TaskBunnyRollbar do
@moduledoc """
A TaskBunny failure backend that reports to Rollbar.
"""
use TaskBunny.FailureBackend
alias TaskBunny.JobError
def report_job_error(error = %JobError{error_type: :exception}) do
report :error, error.exception, error
end
def report_job_error(error = %JobError{error_type: :exit}) do
report :exit, error.reason, error
end
def report_job_error(error = %JobError{error_type: :return_value}) do
report :exit, :task_bunny_job_return_value_error, error
end
def report_job_error(error = %JobError{error_type: :timeout}) do
report :exit, :task_bunny_job_timeout_error, error
end
def report_job_error(error = %JobError{}) do
report :exit, :task_bunny_job_unknown_type_error, error
end
defp report(kind, rollbar_error, error) do
Rollbax.report(
kind,
rollbar_error,
error.stacktrace || [],
custom(error),
occurrence(error)
)
end
defp occurrence(error) do
%{
"context" => error.job,
"request" => %{
"params" => error.payload
}
}
end
defp custom(error) do
error
|> Map.drop([:job, :payload, :__struct__, :exception, :stacktrace, :reason])
|> Map.merge(%{
meta: inspect(error.meta),
return_value: inspect(error.return_value),
pid: inspect(error.pid)
})
end
end