analytics/lib/telemetry.ex
Parker Selbert a64cc84db2
Expand oban error tracking for plugins/notifiers (#1864)
* Plugin exceptions may be silently covering up database problems such
  as failed cron job inserts.
* The previously tracked `:circuit` event is no longer emitted.
2022-04-27 21:37:02 +03:00

50 lines
1.4 KiB
Elixir

defmodule ErrorReporter do
def handle_event([:oban, :job, :exception], measure, %{job: job} = meta, _) do
extra =
job
|> Map.take([:id, :args, :meta, :queue, :worker])
|> Map.merge(measure)
on_job_exception(job)
Sentry.capture_exception(meta.reason, stacktrace: meta.stacktrace, extra: extra)
end
def handle_event([:oban, :notifier, :exception], _timing, meta, _) do
extra = Map.take(meta, ~w(channel payload)a)
Sentry.capture_exception(meta.reason, stacktrace: meta.stacktrace, extra: extra)
end
def handle_event([:oban, :plugin, :exception], _timing, meta, _) do
extra = Map.take(meta, ~w(plugin)a)
Sentry.capture_exception(meta.reason, stacktrace: meta.stacktrace, extra: extra)
end
defp on_job_exception(%Oban.Job{
queue: "google_analytics_imports",
args: %{"site_id" => site_id},
state: "executing",
attempt: attempt,
max_attempts: max_attempts
})
when attempt >= max_attempts do
site = Plausible.Repo.get(Plausible.Site, site_id)
if site do
Plausible.Workers.ImportGoogleAnalytics.import_failed(site)
end
end
defp on_job_exception(%Oban.Job{
queue: "google_analytics_imports",
args: %{"site_id" => site_id},
state: "executing"
}) do
Plausible.ClickhouseRepo.clear_imported_stats_for(site_id)
end
defp on_job_exception(_job), do: :ignore
end