Add error handling and logging to monitoring supervisor
Improved startup reliability and debugging for SNMP pollers: - Added try/rescue blocks around monitor and poller startup - Added logging for successful startup and errors - Added error logging to PollerWorker's perform_poll - Added debug logging for successful sensor/interface polls This will help identify issues when pollers fail to start or encounter errors during polling, which was causing silent failures where sensors weren't being collected.
This commit is contained in:
parent
bd91e2a7c3
commit
91759ac16c
2 changed files with 36 additions and 4 deletions
|
|
@ -9,6 +9,8 @@ defmodule Towerops.Monitoring.Supervisor do
|
|||
alias Towerops.Snmp.PollerSupervisor
|
||||
alias Towerops.Snmp.PollerWorker
|
||||
|
||||
require Logger
|
||||
|
||||
def start_link(init_arg) do
|
||||
Supervisor.start_link(__MODULE__, init_arg, name: __MODULE__)
|
||||
end
|
||||
|
|
@ -33,8 +35,22 @@ defmodule Towerops.Monitoring.Supervisor do
|
|||
Task.start(fn ->
|
||||
# Wait briefly for the supervisor tree to be fully initialized
|
||||
Process.sleep(100)
|
||||
start_all_monitors()
|
||||
start_all_snmp_pollers()
|
||||
|
||||
try do
|
||||
start_all_monitors()
|
||||
Logger.info("Started all equipment monitors")
|
||||
rescue
|
||||
error ->
|
||||
Logger.error("Failed to start monitors: #{inspect(error)}")
|
||||
end
|
||||
|
||||
try do
|
||||
start_all_snmp_pollers()
|
||||
Logger.info("Started all SNMP pollers")
|
||||
rescue
|
||||
error ->
|
||||
Logger.error("Failed to start SNMP pollers: #{inspect(error)}")
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -86,10 +86,26 @@ defmodule Towerops.Snmp.PollerWorker do
|
|||
now = DateTime.truncate(DateTime.utc_now(), :second)
|
||||
|
||||
# Poll all sensors
|
||||
_ = poll_sensors(device.sensors, client_opts, now)
|
||||
try do
|
||||
poll_sensors(device.sensors, client_opts, now)
|
||||
Logger.debug("Polled #{length(device.sensors)} sensors for #{equipment.name}")
|
||||
rescue
|
||||
error ->
|
||||
Logger.error(
|
||||
"Error polling sensors for #{equipment.name}: #{inspect(error)}\n#{Exception.format_stacktrace()}"
|
||||
)
|
||||
end
|
||||
|
||||
# Poll all interfaces
|
||||
_ = poll_interfaces(device.interfaces, client_opts, now)
|
||||
try do
|
||||
poll_interfaces(device.interfaces, client_opts, now)
|
||||
Logger.debug("Polled #{length(device.interfaces)} interfaces for #{equipment.name}")
|
||||
rescue
|
||||
error ->
|
||||
Logger.error(
|
||||
"Error polling interfaces for #{equipment.name}: #{inspect(error)}\n#{Exception.format_stacktrace()}"
|
||||
)
|
||||
end
|
||||
|
||||
# Schedule next poll
|
||||
schedule_next_poll(get_poll_interval(equipment))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue