diff --git a/lib/towerops/workers/device_poller_worker.ex b/lib/towerops/workers/device_poller_worker.ex index 13693eb7..6c82a57a 100644 --- a/lib/towerops/workers/device_poller_worker.ex +++ b/lib/towerops/workers/device_poller_worker.ex @@ -22,6 +22,7 @@ defmodule Towerops.Workers.DevicePollerWorker do alias Towerops.Agents alias Towerops.Devices + alias Towerops.JobMonitoring.Events alias Towerops.Snmp alias Towerops.Snmp.ArpDiscovery alias Towerops.Snmp.Client @@ -34,17 +35,33 @@ defmodule Towerops.Workers.DevicePollerWorker do @default_poll_interval 60 @impl Oban.Worker - def perform(%Oban.Job{args: %{"device_id" => device_id}}) do - case Devices.get_device(device_id) do - nil -> - Logger.debug("Device #{device_id} no longer exists, skipping poll") - :ok + def perform(%Oban.Job{args: %{"device_id" => device_id}} = job) do + Events.broadcast_job_event(job, :started) + start_time = System.monotonic_time(:second) - device -> - maybe_poll_device(device) - schedule_next_poll_with_error_handling(device_id, device) - :ok + result = + case Devices.get_device(device_id) do + nil -> + Logger.debug("Device #{device_id} no longer exists, skipping poll") + :ok + + device -> + maybe_poll_device(device) + schedule_next_poll_with_error_handling(device_id, device) + :ok + end + + duration = System.monotonic_time(:second) - start_time + + case result do + :ok -> + Events.broadcast_job_event(job, :completed, %{duration: duration}) + + {:error, reason} -> + Events.broadcast_job_event(job, :failed, %{error: inspect(reason), duration: duration}) end + + result end defp maybe_poll_device(device) do