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
This commit is contained in:
Graham McIntire 2026-03-10 15:12:09 -05:00
parent e026930f25
commit 7525bfd9a3
No known key found for this signature in database

View file

@ -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}",