File size: 1,980 Bytes
c27e67a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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