better logs for discovery and polling

This commit is contained in:
Graham McIntire 2026-01-26 13:43:17 -06:00
parent 492dc74c9a
commit 0b72b47ae6
No known key found for this signature in database

View file

@ -32,8 +32,6 @@ defmodule Towerops.Workers.DiscoveryWorker do
@impl Oban.Worker
def perform(%Oban.Job{args: %{"device_id" => device_id}}) do
Logger.info("Starting SNMP discovery for device #{device_id}")
case Devices.get_device_with_details(device_id) do
nil ->
Logger.error("Device #{device_id} not found")
@ -42,10 +40,15 @@ defmodule Towerops.Workers.DiscoveryWorker do
device ->
case get_assigned_agent(device) do
{agent_token_id, source} when not is_nil(agent_token_id) ->
agent = Agents.get_agent_token!(agent_token_id)
poller_type = if agent.cloud_poller, do: "cloud poller", else: "user's poller"
Logger.info(
"Device has assigned agent, delegating discovery",
"Starting SNMP discovery for device #{device_id} using #{poller_type} '#{agent.name}' (#{source} assignment)",
device_id: device_id,
agent_token_id: agent_token_id,
agent_name: agent.name,
cloud_poller: agent.cloud_poller,
source: source
)
@ -53,7 +56,7 @@ defmodule Towerops.Workers.DiscoveryWorker do
{nil, :none} ->
Logger.info(
"No agent assigned, attempting cloud poller fallback",
"Starting SNMP discovery for device #{device_id} with no assigned agent, will try cloud pollers then cluster fallback",
device_id: device_id
)
@ -124,17 +127,20 @@ defmodule Towerops.Workers.DiscoveryWorker do
case get_next_cloud_poller(tried_agents) do
nil ->
Logger.info(
"No more cloud pollers available, falling back to direct SNMP from cluster",
"No more cloud pollers available, falling back to direct SNMP from Phoenix cluster",
device_id: device.id
)
perform_direct_discovery(device)
next_agent_id ->
agent = Agents.get_agent_token!(next_agent_id)
Logger.info(
"Trying next cloud poller",
"Trying cloud poller '#{agent.name}' for device #{device.id}",
device_id: device.id,
cloud_poller_id: next_agent_id
cloud_poller_id: next_agent_id,
agent_name: agent.name
)
attempt_agent_discovery(device, next_agent_id, [next_agent_id | tried_agents])
@ -228,13 +234,27 @@ defmodule Towerops.Workers.DiscoveryWorker do
end
defp perform_direct_discovery(device) do
Logger.info(
"Performing SNMP discovery from Phoenix cluster for device #{device.id}",
device_id: device.id
)
case Snmp.discover_device(device) do
{:ok, _snmp_device} ->
Logger.info("SNMP discovery completed successfully for device #{device.id}")
Logger.info(
"SNMP discovery completed successfully from Phoenix cluster for device #{device.id}",
device_id: device.id
)
:ok
{:error, reason} ->
Logger.error("SNMP discovery failed for device #{device.id}: #{inspect(reason)}")
Logger.error(
"SNMP discovery failed from Phoenix cluster for device #{device.id}: #{inspect(reason)}",
device_id: device.id,
reason: reason
)
{:error, reason}
end
end