Skip to content

Commit 414e6c3

Browse files
chore: Bump sentry from 8.1.0 to 11.0.4 (#907)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jon Zimbel <jzimbel@mbta.com>
1 parent 08ed9fb commit 414e6c3

File tree

7 files changed

+74
-13
lines changed

7 files changed

+74
-13
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ ADD apps apps
1818
ADD config config
1919
ADD mix.* /root/
2020

21-
RUN mix do deps.get --only prod, phx.swagger.generate, compile, phx.digest
21+
RUN mix do deps.get --only prod, phx.swagger.generate, compile, phx.digest, sentry.package_source_code
2222
RUN mix eval "Application.ensure_all_started(:tzdata); Tzdata.DataBuilder.load_and_save_table()"
2323

2424
ADD rel/ rel/

apps/api_web/config/test.exs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ config :api_web, RateLimiter.Memcache,
1818

1919
config :api_web, ApiWeb.Plugs.ModifiedSinceHandler, check_caller: true
2020

21+
config :sentry,
22+
test_mode: true,
23+
before_send: {ApiWeb.SentryEventFilter, :filter_event}
24+
2125
# Credentials that always show widget and pass backend validation:
2226
config :recaptcha,
2327
enabled: true,

apps/api_web/lib/api_web/sentry_event_filter.ex

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,23 @@ defmodule ApiWeb.SentryEventFilter do
22
@moduledoc """
33
Provides a filter for exceptions coming from 404 errors
44
"""
5-
@behaviour Sentry.EventFilter
65

7-
def exclude_exception?(%Phoenix.Router.NoRouteError{}, :plug), do: true
6+
# Sentry allows this callback to both modify events before they get sent,
7+
# and filter events to prevent them from being sent at all.
8+
# We only do the latter. Returning false prevents sending.
9+
@spec filter_event(Sentry.Event.t()) :: Sentry.Event.t() | false
10+
def filter_event(%Sentry.Event{
11+
source: :plug,
12+
original_exception: %Phoenix.Router.NoRouteError{}
13+
}) do
14+
false
15+
end
816

9-
def exclude_exception?(%Sentry.CrashError{} = error, :logger),
10-
do: String.contains?(error.message, "{{{%Phoenix.Router.NoRouteError")
17+
def filter_event(%Sentry.Event{message: %Sentry.Interfaces.Message{}} = event) do
18+
if String.contains?(event.message.formatted, "{{{%Phoenix.Router.NoRouteError"),
19+
do: false,
20+
else: event
21+
end
1122

12-
def exclude_exception?(_exception, _source), do: false
23+
def filter_event(event), do: event
1324
end

apps/api_web/mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ defmodule ApiWeb.Mixfile do
8383
{:stream_data, "~> 1.2", only: :test},
8484
{:sobelow, "~> 0.11", only: :dev, runtime: false},
8585
{:recaptcha, git: "https://github.com/samueljseay/recaptcha.git", ref: "71cd746be987f6834c1a933f5d2f934350e55060"},
86-
{:sentry, "~> 8.0"},
86+
{:sentry, "~> 11.0"},
8787
{:qr_code, "~> 3.0"},
8888
{:nimble_totp, "~> 1.0"}
8989
]
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
defmodule ApiWeb.SentryEventFilterTest do
2+
use ApiWeb.ConnCase, async: true
3+
4+
describe "filter_event/1" do
5+
setup do
6+
Sentry.Test.start_collecting_sentry_reports()
7+
end
8+
9+
test "filters out `NoRouteError`s rescued by plugs", %{conn: conn} do
10+
conn = get(conn, "/a_nonexistent_route")
11+
assert response(conn, 404)
12+
13+
assert [] = Sentry.Test.pop_sentry_reports()
14+
end
15+
16+
test "filters out `NoRouteError`s surfaced as messages via crashes" do
17+
Sentry.capture_message("Something something {{{%Phoenix.Router.NoRouteError}}}")
18+
assert [] = Sentry.Test.pop_sentry_reports()
19+
20+
Sentry.capture_message("Something something {{{%SomeOtherError}}}")
21+
assert [%Sentry.Event{} = err] = Sentry.Test.pop_sentry_reports()
22+
assert err.message.formatted =~ "SomeOtherError"
23+
end
24+
25+
test "does not filter out other exceptions" do
26+
err = RuntimeError.exception("An error other than NoRouteError")
27+
28+
Sentry.capture_exception(err)
29+
30+
assert [%Sentry.Event{} = event] = Sentry.Test.pop_sentry_reports()
31+
assert ^err = event.original_exception
32+
end
33+
end
34+
end

config/runtime.exs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,27 @@ if is_prod? and is_release? do
1010

1111
if not is_nil(sentry_env) do
1212
config :sentry,
13-
filter: ApiWeb.SentryEventFilter,
13+
before_send: {ApiWeb.SentryEventFilter, :filter_event},
1414
dsn: System.fetch_env!("SENTRY_DSN"),
1515
environment_name: sentry_env,
1616
enable_source_code_context: true,
17-
root_source_code_path: File.cwd!(),
17+
root_source_code_paths:
18+
[
19+
"api_web",
20+
"health",
21+
"parse",
22+
"alb_monitor",
23+
"state",
24+
"fetch",
25+
"model",
26+
"events",
27+
"api_accounts",
28+
"state_mediator"
29+
]
30+
|> Enum.map(&Path.join([File.cwd!(), "apps", &1])),
1831
tags: %{
1932
env: sentry_env
20-
},
21-
included_environments: [sentry_env]
33+
}
2234

2335
config :logger, Sentry.LoggerBackend, level: :error
2436
end
@@ -31,7 +43,6 @@ if is_prod? and is_release? do
3143
],
3244
json_codec: Jason
3345

34-
3546
config :alb_monitor,
3647
ecs_metadata_uri: System.fetch_env!("ECS_CONTAINER_METADATA_URI"),
3748
target_group_arn: System.fetch_env!("ALB_TARGET_GROUP_ARN")

mix.lock

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
"mox": {:hex, :mox, "1.0.2", "dc2057289ac478b35760ba74165b4b3f402f68803dd5aecd3bfd19c183815d64", [:mix], [], "hexpm", "f9864921b3aaf763c8741b5b8e6f908f44566f1e427b2630e89e9a73b981fef2"},
6262
"nimble_csv": {:hex, :nimble_csv, "1.3.0", "b7f998dc62b222bce9596e46f028c7a5af04cb5dde6df2ea197c583227c54971", [:mix], [], "hexpm", "41ccdc18f7c8f8bb06e84164fc51635321e80d5a3b450761c4997d620925d619"},
6363
"nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"},
64+
"nimble_ownership": {:hex, :nimble_ownership, "1.0.1", "f69fae0cdd451b1614364013544e66e4f5d25f36a2056a9698b793305c5aa3a6", [:mix], [], "hexpm", "3825e461025464f519f3f3e4a1f9b68c47dc151369611629ad08b636b73bb22d"},
6465
"nimble_parsec": {:hex, :nimble_parsec, "1.4.2", "8efba0122db06df95bfaa78f791344a89352ba04baedd3849593bfce4d0dc1c6", [:mix], [], "hexpm", "4b21398942dda052b403bbe1da991ccd03a053668d147d53fb8c4e0efe09c973"},
6566
"nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"},
6667
"nimble_totp": {:hex, :nimble_totp, "1.0.0", "79753bae6ce59fd7cacdb21501a1dbac249e53a51c4cd22b34fa8438ee067283", [:mix], [], "hexpm", "6ce5e4c068feecdb782e85b18237f86f66541523e6bad123e02ee1adbe48eda9"},
@@ -83,7 +84,7 @@
8384
"recaptcha": {:git, "https://github.com/samueljseay/recaptcha.git", "71cd746be987f6834c1a933f5d2f934350e55060", [ref: "71cd746be987f6834c1a933f5d2f934350e55060"]},
8485
"result": {:hex, :result, "1.7.2", "a57c569f7cf5c158d2299d3b5624a48b69bd1520d0771dc711bcf9f3916e8ab6", [:mix], [], "hexpm", "89f98e98cfbf64237ecf4913aa36b76b80463e087775d19953dc4b435a35f087"},
8586
"rstar": {:git, "https://github.com/armon/erl-rstar.git", "a406b2cce609029bf65b9ccfbe93a0416c0ee0cd", []},
86-
"sentry": {:hex, :sentry, "8.1.0", "8d235b62fce5f8e067ea1644e30939405b71a5e1599d9529ff82899d11d03f2b", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.6", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, "~> 2.3", [hex: :plug_cowboy, repo: "hexpm", optional: true]}], "hexpm", "f9fc7641ef61e885510f5e5963c2948b9de1de597c63f781e9d3d6c9c8681ab4"},
87+
"sentry": {:hex, :sentry, "11.0.4", "60371c96cefd247e0fc98840bba2648f64f19aa0b8db8e938f5a98421f55b619", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: true]}, {:igniter, "~> 0.5", [hex: :igniter, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_ownership, "~> 0.3.0 or ~> 1.0", [hex: :nimble_ownership, repo: "hexpm", optional: false]}, {:opentelemetry, ">= 0.0.0", [hex: :opentelemetry, repo: "hexpm", optional: true]}, {:opentelemetry_api, ">= 0.0.0", [hex: :opentelemetry_api, repo: "hexpm", optional: true]}, {:opentelemetry_exporter, ">= 0.0.0", [hex: :opentelemetry_exporter, repo: "hexpm", optional: true]}, {:opentelemetry_semantic_conventions, ">= 0.0.0", [hex: :opentelemetry_semantic_conventions, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, "~> 0.20 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.6", [hex: :plug, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "feaafc284dc204c82aadaddc884227aeaa3480decb274d30e184b9d41a700c66"},
8788
"sobelow": {:hex, :sobelow, "0.14.1", "2f81e8632f15574cba2402bcddff5497b413c01e6f094bc0ab94e83c2f74db81", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "8fac9a2bd90fdc4b15d6fca6e1608efb7f7c600fa75800813b794ee9364c87f2"},
8889
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"},
8990
"stream_data": {:hex, :stream_data, "1.2.0", "58dd3f9e88afe27dc38bef26fce0c84a9e7a96772b2925c7b32cd2435697a52b", [:mix], [], "hexpm", "eb5c546ee3466920314643edf68943a5b14b32d1da9fe01698dc92b73f89a9ed"},

0 commit comments

Comments
 (0)