Add strict typespecs to all Oban worker perform/1 functions
Adds @spec annotations to all Oban worker perform/1 functions to improve
static analysis and documentation. Return types are specific to each worker's
actual behavior:
Workers returning 🆗
- BackupSummaryWorker
- BackupTimeoutWorker
- DeviceMonitorWorker
- DevicePollerWorker
- JobHealthCheckWorker
- NeighborCleanupWorker
Workers with complex returns:
- DiscoveryWorker: :ok | :discard
- FirmwareVersionFetcherWorker: :ok | {:error, term()}
- LoginHistoryCleanupWorker: {:ok, %{deleted: non_neg_integer(), anonymized_deleted: non_neg_integer()}}
- MikrotikBackupWorker: :ok | {:error, String.t()}
- SessionCleanupWorker: {:ok, %{sessions_deleted: non_neg_integer()}}
Analysis found that none of these workers have complex job parameters that
would benefit from embedded schemas - all use either no parameters or simple
device_id strings passed in job args.
StaleAgentWorker already had a typespec on find_stale_agents/0 from previous work.
All 98 worker tests passing after changes.
This commit is contained in:
parent
e363fbc691
commit
0c77dd84e7
11 changed files with 11 additions and 0 deletions
|
|
@ -19,6 +19,7 @@ defmodule Towerops.Snmp.NeighborCleanupWorker do
|
|||
@stale_threshold_hours 24
|
||||
|
||||
@impl Oban.Worker
|
||||
@spec perform(Oban.Job.t()) :: :ok
|
||||
def perform(%Oban.Job{}) do
|
||||
cleanup_stale_records()
|
||||
:ok
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ defmodule Towerops.Workers.BackupSummaryWorker do
|
|||
require Logger
|
||||
|
||||
@impl Oban.Worker
|
||||
@spec perform(Oban.Job.t()) :: :ok
|
||||
def perform(%Oban.Job{}) do
|
||||
yesterday = DateTime.add(DateTime.utc_now(), -24 * 60 * 60, :second)
|
||||
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ defmodule Towerops.Workers.BackupTimeoutWorker do
|
|||
@timeout_minutes 5
|
||||
|
||||
@impl Oban.Worker
|
||||
@spec perform(Oban.Job.t()) :: :ok
|
||||
def perform(%Oban.Job{}) do
|
||||
cutoff = DateTime.add(DateTime.utc_now(), -@timeout_minutes * 60, :second)
|
||||
timeout_count = BackupRequests.mark_timed_out_requests(cutoff)
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ defmodule Towerops.Workers.DeviceMonitorWorker do
|
|||
@monitor_interval 30
|
||||
|
||||
@impl Oban.Worker
|
||||
@spec perform(Oban.Job.t()) :: :ok
|
||||
def perform(%Oban.Job{args: %{"device_id" => device_id}}) do
|
||||
case Devices.get_device(device_id) do
|
||||
nil ->
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ defmodule Towerops.Workers.DevicePollerWorker do
|
|||
@default_poll_interval 60
|
||||
|
||||
@impl Oban.Worker
|
||||
@spec perform(Oban.Job.t()) :: :ok
|
||||
def perform(%Oban.Job{args: %{"device_id" => device_id}}) do
|
||||
case Devices.get_device(device_id) do
|
||||
nil ->
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ defmodule Towerops.Workers.DiscoveryWorker do
|
|||
@agent_online_threshold_minutes 10
|
||||
|
||||
@impl Oban.Worker
|
||||
@spec perform(Oban.Job.t()) :: :ok | :discard
|
||||
def perform(%Oban.Job{args: %{"device_id" => device_id}}) do
|
||||
case Devices.get_device_with_details(device_id) do
|
||||
nil ->
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ defmodule Towerops.Workers.FirmwareVersionFetcherWorker do
|
|||
@changelog_url "https://mikrotik.com/download/changelogs"
|
||||
|
||||
@impl Oban.Worker
|
||||
@spec perform(Oban.Job.t()) :: :ok | {:error, term()}
|
||||
def perform(%Oban.Job{}) do
|
||||
Logger.info("Fetching MikroTik RouterOS firmware version from RSS feed")
|
||||
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ defmodule Towerops.Workers.JobHealthCheckWorker do
|
|||
require Logger
|
||||
|
||||
@impl Oban.Worker
|
||||
@spec perform(Oban.Job.t()) :: :ok
|
||||
def perform(%Oban.Job{}) do
|
||||
monitor_recoveries = recover_missing_monitor_jobs()
|
||||
poller_recoveries = recover_missing_poller_jobs()
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ defmodule Towerops.Workers.LoginHistoryCleanupWorker do
|
|||
alias Towerops.Repo
|
||||
|
||||
@impl Oban.Worker
|
||||
@spec perform(Oban.Job.t()) :: {:ok, %{deleted: non_neg_integer(), anonymized_deleted: non_neg_integer()}}
|
||||
def perform(_job) do
|
||||
# Delete login attempts older than retention period (365 days)
|
||||
retention_days = Application.get_env(:towerops, :login_history_retention_days, 365)
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ defmodule Towerops.Workers.MikrotikBackupWorker do
|
|||
require Logger
|
||||
|
||||
@impl Oban.Worker
|
||||
@spec perform(Oban.Job.t()) :: :ok | {:error, String.t()}
|
||||
def perform(%Oban.Job{}) do
|
||||
Logger.info("Starting MikroTik configuration backup job")
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ defmodule Towerops.Workers.SessionCleanupWorker do
|
|||
alias Towerops.Accounts
|
||||
|
||||
@impl Oban.Worker
|
||||
@spec perform(Oban.Job.t()) :: {:ok, %{sessions_deleted: non_neg_integer()}}
|
||||
def perform(_job) do
|
||||
count = Accounts.delete_expired_browser_sessions()
|
||||
{:ok, %{sessions_deleted: count}}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue