From 0b72b47ae6fdfac3162f4b9d66dc264b516f10f4 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Mon, 26 Jan 2026 13:43:17 -0600 Subject: [PATCH] better logs for discovery and polling --- lib/towerops/workers/discovery_worker.ex | 38 ++++++++++++++++++------ 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/lib/towerops/workers/discovery_worker.ex b/lib/towerops/workers/discovery_worker.ex index f9eb3ee4..c9ebd21b 100644 --- a/lib/towerops/workers/discovery_worker.ex +++ b/lib/towerops/workers/discovery_worker.ex @@ -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