From 9d600361021b0fcba02c179c23b39666a092ce33 Mon Sep 17 00:00:00 2001 From: Gonzalo <456459+grzuy@users.noreply.github.com> Date: Mon, 2 Sep 2024 16:01:41 -0300 Subject: [PATCH] feat: auto attach --- lib/tower.ex | 15 --------------- lib/tower/application.ex | 25 ++++++++++++++++++------- lib/tower/ephemeral_reporter.ex | 4 ---- test/tower/tower_oban_test.exs | 6 +----- test/tower/tower_plug_test.exs | 5 +---- test/tower_test.exs | 5 +---- 6 files changed, 21 insertions(+), 39 deletions(-) diff --git a/lib/tower.ex b/lib/tower.ex index 8971543..635a15b 100644 --- a/lib/tower.ex +++ b/lib/tower.ex @@ -134,14 +134,6 @@ defmodule Tower do - [`TowerSlack`](https://hexdocs.pm/tower_slack) ([`tower_slack`](https://hex.pm/packages/tower_slack)) - and properly set the `config :tower, :reporters, [...]` configuration key - ## Enabling automated exception handling - - Tower.attach() - - ## Disabling automated exception handling - - Tower.detach() - ## Manual handling If either, for whatever reason when using automated exception handling, an exception condition is @@ -199,13 +191,6 @@ defmodule Tower do # in some config/*.exs config :tower, reporters: [MyApp.ErrorReporter] - - # config/application.ex - Tower.attach() - - `Tower.attach/0` will be responsible for registering the necessary handlers in your application - so that any uncaught exception, uncaught throw or abnormal process exit is handled by Tower and - passed along to the reporter. """ defmodule ReportEventError do diff --git a/lib/tower/application.ex b/lib/tower/application.ex index d9358e3..432e388 100644 --- a/lib/tower/application.ex +++ b/lib/tower/application.ex @@ -7,12 +7,23 @@ defmodule Tower.Application do @impl true def start(_type, _args) do - Supervisor.start_link( - [ - {Task.Supervisor, name: Tower.TaskSupervisor} - ], - strategy: :one_for_one, - name: Tower.Supervisor - ) + with {:ok, pid} <- + Supervisor.start_link( + [ + {Task.Supervisor, name: Tower.TaskSupervisor} + ], + strategy: :one_for_one, + name: Tower.Supervisor + ), + :ok = Tower.attach() do + {:ok, pid} + end + end + + @impl true + def stop(_arg) do + Tower.detach() + + :ok end end diff --git a/lib/tower/ephemeral_reporter.ex b/lib/tower/ephemeral_reporter.ex index 1da3094..b4b5404 100644 --- a/lib/tower/ephemeral_reporter.ex +++ b/lib/tower/ephemeral_reporter.ex @@ -10,8 +10,6 @@ defmodule Tower.EphemeralReporter do iex> Tower.EphemeralReporter.events() [] iex> Application.put_env(:tower, :reporters, [Tower.EphemeralReporter]) - iex> Tower.attach() - :ok iex> spawn(fn -> 1 / 0 end) iex> Process.sleep(200) :ok @@ -20,8 +18,6 @@ defmodule Tower.EphemeralReporter do :error iex> event.reason %ArithmeticError{message: "bad argument in arithmetic expression"} - iex> Tower.detach() - :ok iex> Tower.EphemeralReporter.stop(pid) :ok """ diff --git a/test/tower/tower_oban_test.exs b/test/tower/tower_oban_test.exs index 512b3b8..368ad07 100644 --- a/test/tower/tower_oban_test.exs +++ b/test/tower/tower_oban_test.exs @@ -18,11 +18,7 @@ defmodule TowerObanTest do Ecto.Migrator.up(TestApp.Repo, 0, TestApp.Repo.Migrations.AddOban) - Tower.attach() - - on_exit(fn -> - Tower.detach() - end) + :ok end @tag capture_log: true diff --git a/test/tower/tower_plug_test.exs b/test/tower/tower_plug_test.exs index bc2af19..9de48c1 100644 --- a/test/tower/tower_plug_test.exs +++ b/test/tower/tower_plug_test.exs @@ -7,11 +7,8 @@ defmodule TowerPlugTest do setup do start_link_supervised!(Tower.EphemeralReporter) - Tower.attach() - on_exit(fn -> - Tower.detach() - end) + :ok end test "reports arithmetic error during plug dispatch with Plug.Cowboy" do diff --git a/test/tower_test.exs b/test/tower_test.exs index a27ecb2..3177198 100644 --- a/test/tower_test.exs +++ b/test/tower_test.exs @@ -8,11 +8,8 @@ defmodule TowerTest do setup do start_reporter() - Tower.attach() - on_exit(fn -> - Tower.detach() - end) + :ok end test "starts with 0 exceptions" do