From c709fb5c32a2be17909e4a541421e0211cc8d92e Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Tue, 31 Mar 2026 11:56:41 -0500 Subject: [PATCH] Enqueue propagation grid worker on startup if scores are stale On app start, check if latest scores are older than 2 hours. If so, immediately enqueue a PropagationGridWorker job. Covers app restarts, deploys, and missed cron ticks. --- lib/microwaveprop/application.ex | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/microwaveprop/application.ex b/lib/microwaveprop/application.ex index c1c8902a..310ebb1c 100644 --- a/lib/microwaveprop/application.ex +++ b/lib/microwaveprop/application.ex @@ -5,6 +5,8 @@ defmodule Microwaveprop.Application do use Application + require Logger + @impl true def start(_type, _args) do migrate() @@ -16,7 +18,8 @@ defmodule Microwaveprop.Application do {Phoenix.PubSub, name: Microwaveprop.PubSub}, {Oban, Application.fetch_env!(:microwaveprop, Oban)}, # Start to serve requests, typically the last entry - MicrowavepropWeb.Endpoint + MicrowavepropWeb.Endpoint, + {Task, &ensure_fresh_scores/0} ] # See https://hexdocs.pm/elixir/Supervisor.html @@ -31,6 +34,26 @@ defmodule Microwaveprop.Application do Microwaveprop.Release.migrate() end + # If propagation scores are older than 2 hours, enqueue a grid worker immediately. + # Covers app restarts, deploys, and missed cron ticks. + defp ensure_fresh_scores do + case Microwaveprop.Propagation.latest_valid_time() do + nil -> + Logger.info("No propagation scores found, enqueuing grid worker") + Oban.insert(Microwaveprop.Workers.PropagationGridWorker.new(%{})) + + latest -> + age_minutes = DateTime.diff(DateTime.utc_now(), latest, :minute) + + if age_minutes > 120 do + Logger.info("Propagation scores are #{age_minutes}m old, enqueuing grid worker") + Oban.insert(Microwaveprop.Workers.PropagationGridWorker.new(%{})) + else + Logger.info("Propagation scores are #{age_minutes}m old, fresh enough") + end + end + end + @impl true def config_change(changed, _new, removed) do MicrowavepropWeb.Endpoint.config_change(changed, removed)