From 7525bfd9a3412285e8581f20519f74875d27e433 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Tue, 10 Mar 2026 15:12:09 -0500 Subject: [PATCH] fix: show ARP error samples in log message text instead of metadata - Changed error logging to include sample errors directly in message string - Ensures error details are visible regardless of logger metadata config - Extracted format_error_samples/1 helper to reduce nesting (Credo) - Helps diagnose ARP upsert failures in staging/production --- lib/towerops/snmp.ex | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/towerops/snmp.ex b/lib/towerops/snmp.ex index 1f21c526..9833aba6 100644 --- a/lib/towerops/snmp.ex +++ b/lib/towerops/snmp.ex @@ -1878,6 +1878,18 @@ defmodule Towerops.Snmp do end end + # Helper to format error samples into log message text + defp format_error_samples([]), do: "" + + defp format_error_samples(samples) do + formatted_samples = + Enum.map_join(samples, "\n", fn sample -> + " - IP: #{sample.ip}, MAC: #{sample.mac}, errors: #{inspect(sample.errors)}" + end) + + "\nSample errors:\n" <> formatted_samples + end + @doc """ Bulk upserts ARP entries for a device. Returns `{success_count, error_count}` tuple. @@ -1906,17 +1918,7 @@ defmodule Towerops.Snmp do end) |> tap(fn {_s, errors, error_samples} -> if errors > 0 do - samples_text = - case Enum.reverse(error_samples) do - [] -> - "" - - samples -> - "\nSample errors:\n" <> - Enum.map_join(samples, "\n", fn sample -> - " - IP: #{sample.ip}, MAC: #{sample.mac}, errors: #{inspect(sample.errors)}" - end) - end + samples_text = error_samples |> Enum.reverse() |> format_error_samples() Logger.warning( "#{errors} ARP upsert failures for device #{device_id}#{samples_text}",