From 2543617f16aee06b351ccf3e4e739386754d1f8b Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Mon, 7 Jul 2025 09:52:02 -0500 Subject: [PATCH] add sentry --- config/prod.exs | 6 ++++++ lib/aprsme/application.ex | 4 ++++ lib/aprsme_web/components/layouts/root.html.heex | 5 +++++ lib/aprsme_web/endpoint.ex | 3 ++- mix.exs | 9 ++++++++- mix.lock | 1 + 6 files changed, 26 insertions(+), 2 deletions(-) diff --git a/config/prod.exs b/config/prod.exs index 54e7b0a..55419aa 100644 --- a/config/prod.exs +++ b/config/prod.exs @@ -28,5 +28,11 @@ config :esbuild, # of environment variables, is done on config/runtime.exs. config :logger, level: :info +config :sentry, + dsn: "https://40cd46881506a6c8e79ea353b62c2835@o4509627566063616.ingest.us.sentry.io/4509627568029696", + environment_name: Mix.env(), + enable_source_code_context: true, + root_source_code_paths: [File.cwd!()] + # Configures Swoosh API Client config :swoosh, :api_client, Swoosh.ApiClient.Req diff --git a/lib/aprsme/application.ex b/lib/aprsme/application.ex index b3c076a..994880f 100644 --- a/lib/aprsme/application.ex +++ b/lib/aprsme/application.ex @@ -12,6 +12,10 @@ defmodule Aprsme.Application do # Run migrations on startup migrate() + :logger.add_handler(:my_sentry_handler, Sentry.LoggerHandler, %{ + config: %{metadata: [:file, :line]} + }) + topologies = Application.get_env(:libcluster, :topologies) || [] children = [ diff --git a/lib/aprsme_web/components/layouts/root.html.heex b/lib/aprsme_web/components/layouts/root.html.heex index cff15f3..5b39906 100644 --- a/lib/aprsme_web/components/layouts/root.html.heex +++ b/lib/aprsme_web/components/layouts/root.html.heex @@ -56,6 +56,11 @@ + {@inner_content} diff --git a/lib/aprsme_web/endpoint.ex b/lib/aprsme_web/endpoint.ex index 3342d1a..13b522f 100644 --- a/lib/aprsme_web/endpoint.ex +++ b/lib/aprsme_web/endpoint.ex @@ -1,6 +1,6 @@ defmodule AprsmeWeb.Endpoint do @moduledoc false - + use Sentry.PlugCapture use Phoenix.Endpoint, otp_app: :aprsme # The session will be stored in the cookie and signed, @@ -51,5 +51,6 @@ defmodule AprsmeWeb.Endpoint do plug Plug.MethodOverride plug Plug.Head plug Plug.Session, @session_options + plug Sentry.PlugContext plug AprsmeWeb.Router end diff --git a/mix.exs b/mix.exs index b518fec..e1ccd54 100644 --- a/mix.exs +++ b/mix.exs @@ -75,6 +75,7 @@ defmodule Aprsme.MixProject do {:swoosh, "~> 1.16"}, {:telemetry_metrics, "~> 1.0"}, {:telemetry_poller, "~> 1.0"}, + {:sentry, "~> 11.0.1"}, aprs_dep(), {:esbuild, "~> 0.9", runtime: Mix.env() == :dev}, {:tailwind, "~> 0.3", runtime: Mix.env() == :dev}, @@ -120,11 +121,17 @@ defmodule Aprsme.MixProject do defp releases do [ aprsme: [ - cookie: "aprsme" + cookie: "aprsme", + steps: [:assemble, &sentry_package_source_code/1] ] ] end + defp sentry_package_source_code(release) do + Mix.Task.run("sentry.package_source_code", ["--release", release.path]) + release + end + defp aprs_dep do if Mix.env() in [:dev, :test] do {:aprs, path: "vendor/aprs"} diff --git a/mix.lock b/mix.lock index 70a48ef..b04ea95 100644 --- a/mix.lock +++ b/mix.lock @@ -59,6 +59,7 @@ "plug_crypto": {:hex, :plug_crypto, "2.1.1", "19bda8184399cb24afa10be734f84a16ea0a2bc65054e23a62bb10f06bc89491", [:mix], [], "hexpm", "6470bce6ffe41c8bd497612ffde1a7e4af67f36a15eea5f921af71cf3e11247c"}, "postgrex": {:hex, :postgrex, "0.20.0", "363ed03ab4757f6bc47942eff7720640795eb557e1935951c1626f0d303a3aed", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "d36ef8b36f323d29505314f704e21a1a038e2dc387c6409ee0cd24144e187c0f"}, "req": {:hex, :req, "0.5.14", "521b449fa0bf275e6d034c05f29bec21789a0d6cd6f7a1c326c7bee642bf6e07", [:mix], [{:brotli, "~> 0.3.1", [hex: :brotli, repo: "hexpm", optional: true]}, {:ezstd, "~> 1.0", [hex: :ezstd, repo: "hexpm", optional: true]}, {:finch, "~> 0.17", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mime, "~> 2.0.6 or ~> 2.1", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_csv, "~> 1.0", [hex: :nimble_csv, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "b7b15692071d556c73432c7797aa7e96b51d1a2db76f746b976edef95c930021"}, + "sentry": {:hex, :sentry, "11.0.1", "e4e0ae12a74c59639808442a79d7ddd224fd5987fb9a14b35a1d01d9606117a3", [: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, "~> 1.5", [hex: :opentelemetry, repo: "hexpm", optional: true]}, {:opentelemetry_api, "~> 1.4", [hex: :opentelemetry_api, repo: "hexpm", optional: true]}, {:opentelemetry_exporter, "~> 1.0", [hex: :opentelemetry_exporter, repo: "hexpm", optional: true]}, {:opentelemetry_semantic_conventions, "~> 1.27", [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", "ef12b6ee61c24bee3807eee92563567c89f5eec954d6bb913eb797e04625a613"}, "sobelow": {:hex, :sobelow, "0.14.0", "dd82aae8f72503f924fe9dd97ffe4ca694d2f17ec463dcfd365987c9752af6ee", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "7ecf91e298acfd9b24f5d761f19e8f6e6ac585b9387fb6301023f1f2cd5eed5f"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"}, "stream_data": {:hex, :stream_data, "1.2.0", "58dd3f9e88afe27dc38bef26fce0c84a9e7a96772b2925c7b32cd2435697a52b", [:mix], [], "hexpm", "eb5c546ee3466920314643edf68943a5b14b32d1da9fe01698dc92b73f89a9ed"},