From 0056d35e9baf9c8863d8a3a8b4b7b6f2d956c24a Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Fri, 23 Jan 2026 10:08:04 -0600 Subject: [PATCH] ignore more startup errors --- lib/towerops/honeybadger_filter.ex | 31 ++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/lib/towerops/honeybadger_filter.ex b/lib/towerops/honeybadger_filter.ex index a17503db..b7eb559c 100644 --- a/lib/towerops/honeybadger_filter.ex +++ b/lib/towerops/honeybadger_filter.ex @@ -2,13 +2,13 @@ defmodule Towerops.HoneybadgerFilter do @moduledoc """ Custom Honeybadger filter to exclude noisy errors during deployments. - Filters out os_mon supervisor errors (memsup, cpu_sup) that occur - during normal node shutdown/restart. + Filters out OTP supervisor/gen_server errors that occur during normal + node shutdown/restart. """ use Honeybadger.Filter.Mixin - # Supervisors/processes that generate errors during normal shutdown + # Named supervisors/processes that generate errors during normal shutdown @ignored_registered_names [ "memsup", "cpu_sup", @@ -17,14 +17,25 @@ defmodule Towerops.HoneybadgerFilter do @impl Honeybadger.Filter def filter_context(context) do - # Check if this is an os_mon supervisor error - registered_name = get_in(context, [:registered_name]) + cond do + # Named process in our ignore list + get_in(context, [:registered_name]) in @ignored_registered_names -> + nil - if registered_name in @ignored_registered_names do - # Return nil to filter out this error - nil - else - super(context) + # Anonymous gen_server shutdown errors (OTP domain, gen_server error_info) + otp_gen_server_shutdown?(context) -> + nil + + true -> + super(context) end end + + # Detect anonymous gen_server termination during shutdown + defp otp_gen_server_shutdown?(context) do + domain = get_in(context, [:domain]) + mfa = get_in(context, [:mfa]) + + domain == ["otp"] and match?(["gen_server", "error_info", _], mfa) + end end