prop/lib/microwaveprop/workers/rover_mission_backfill_worker.ex
Graham McIntire fd976b0cd5
fix: resolve 391 Credo issues across codebase
- Add jump_credo_checks ~> 0.4 with all 20 checks enabled
- Fix all standard Credo issues: 139 @spec (113 done, 26 remain),
  4 refactoring, 3 alias usage, 9 System.cmd env, 5 unsafe_to_atom,
  2 max line length, 9 assert_receive timeout
- Fix 170+ jump_credo_checks warnings:
  - 117 TopLevelAliasImportRequire: move nested alias/import to module top
  - 32 UseObanProWorker: switch to Oban.Pro.Worker
  - 4 DoctestIExExamples: add doctests / create test file
  - ~20 WeakAssertion: strengthen type-check assertions
  - Various ConditionalAssertion, AssertReceiveTimeout fixes
- Exclude vendor/ from Credo analysis
- Remaining: 175 warnings (mostly opinionated WeakAssertion,
  AvoidSocketAssignsInTest), 26 @spec annotations
2026-06-12 13:51:32 -05:00

26 lines
814 B
Elixir
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

defmodule Microwaveprop.Workers.RoverMissionBackfillWorker do
@moduledoc """
Periodic safety net for the `/rover-planning` matrix. Walks every
mission and re-enqueues `RoverPathProfileWorker` jobs for any
`(rover_location × station)` pair whose `Path` is missing or not
`:complete`. The path-profile worker short-circuits on `:complete`,
so this is idempotent across runs.
Recovers from transient failures (elevation API blips, rolling
deploys that interrupted the original `create_mission` enqueue)
without operator action.
"""
use Oban.Pro.Worker,
queue: :terrain,
priority: 5,
max_attempts: 3,
unique: [period: 300, states: :incomplete]
alias Microwaveprop.RoverPlanning
@impl Oban.Worker
def perform(%Oban.Job{}) do
RoverPlanning.backfill_paths()
end
end