| defmodule Plausible.SentryFilter do |
| @moduledoc """ |
| Sentry callbacks for filtering and grouping events |
| """ |
|
|
| @spec before_send(Sentry.Event.t()) :: Sentry.Event.t() |
| def before_send(event) |
|
|
| def before_send(%{original_exception: %Bamboo.PostmarkAdapter.Error{} = e} = event) do |
| if Bamboo.PostmarkAdapter.Error.is_hard_bounce(e), do: false, else: event |
| end |
|
|
| def before_send(%{original_exception: %Phoenix.NotAcceptableError{}}), do: false |
| def before_send(%{original_exception: %Plug.CSRFProtection.InvalidCSRFTokenError{}}), do: false |
| def before_send(%{original_exception: %Plug.Static.InvalidPathError{}}), do: false |
|
|
| def before_send( |
| %{ |
| exception: [%{type: "DBConnection.ConnectionError"}], |
| original_exception: %{reason: reason} |
| } = event |
| ) do |
| %{event | fingerprint: ["db_connection", reason]} |
| end |
|
|
| def before_send( |
| %{ |
| exception: [%{type: "Mint.TransportError"}], |
| original_exception: %{reason: reason} |
| } = event |
| ) do |
| %{event | fingerprint: ["mint_transport", reason]} |
| end |
|
|
| def before_send( |
| %{ |
| exception: [%{type: "Finch.TransportError"}], |
| original_exception: %{reason: reason} |
| } = event |
| ) do |
| %{event | fingerprint: ["mint_transport", reason]} |
| end |
|
|
| def before_send( |
| %{source: :logger, message: %{formatted: "Ch.Connection (#PID<" <> rest}} = event |
| ) do |
| if String.ends_with?(rest, ")) disconnected: ** (Mint.HTTPError) the connection is closed") do |
| false |
| else |
| event |
| end |
| end |
|
|
| def before_send(%{extra: %{request: %Plausible.Ingestion.Request{}}} = event) do |
| %{event | fingerprint: ["ingestion_request"]} |
| end |
|
|
| def before_send(%{source: :logger, message: %{formatted: "Ranch listener" <> rest}} = event) do |
| if String.contains?(rest, "had its request process") do |
| false |
| else |
| event |
| end |
| end |
|
|
| def before_send(event) do |
| event |
| end |
| end |
|
|