Fix phantom queued status when Oban unique constraint rejects job
This commit is contained in:
parent
d36256e730
commit
12d7dbf7ea
1 changed files with 32 additions and 15 deletions
|
|
@ -202,9 +202,15 @@ defmodule MicrowavepropWeb.ContactLive.Show do
|
||||||
|
|
||||||
contact.pos1 && contact.weather_status not in [:queued, :unavailable] ->
|
contact.pos1 && contact.weather_status not in [:queued, :unavailable] ->
|
||||||
jobs = ContactWeatherEnqueueWorker.build_weather_jobs([contact])
|
jobs = ContactWeatherEnqueueWorker.build_weather_jobs([contact])
|
||||||
if jobs != [], do: Oban.insert_all(jobs)
|
|
||||||
Radio.set_enrichment_status!([contact.id], :weather_status, :queued)
|
if jobs != [] do
|
||||||
%{contact | weather_status: :queued}
|
Oban.insert_all(jobs)
|
||||||
|
Radio.set_enrichment_status!([contact.id], :weather_status, :queued)
|
||||||
|
%{contact | weather_status: :queued}
|
||||||
|
else
|
||||||
|
Radio.set_enrichment_status!([contact.id], :weather_status, :unavailable)
|
||||||
|
%{contact | weather_status: :unavailable}
|
||||||
|
end
|
||||||
|
|
||||||
is_nil(contact.pos1) ->
|
is_nil(contact.pos1) ->
|
||||||
%{contact | weather_status: :unavailable}
|
%{contact | weather_status: :unavailable}
|
||||||
|
|
@ -296,9 +302,14 @@ defmodule MicrowavepropWeb.ContactLive.Show do
|
||||||
defp maybe_enqueue_terrain(nil, contact) do
|
defp maybe_enqueue_terrain(nil, contact) do
|
||||||
cond do
|
cond do
|
||||||
contact.pos1 && contact.pos2 && contact.terrain_status not in [:queued, :unavailable] ->
|
contact.pos1 && contact.pos2 && contact.terrain_status not in [:queued, :unavailable] ->
|
||||||
Oban.insert(TerrainProfileWorker.new(%{"contact_id" => contact.id}))
|
case Oban.insert(TerrainProfileWorker.new(%{"contact_id" => contact.id})) do
|
||||||
Radio.set_enrichment_status!([contact.id], :terrain_status, :queued)
|
{:ok, %{conflict?: false}} ->
|
||||||
%{contact | terrain_status: :queued}
|
Radio.set_enrichment_status!([contact.id], :terrain_status, :queued)
|
||||||
|
%{contact | terrain_status: :queued}
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
%{contact | terrain_status: :unavailable}
|
||||||
|
end
|
||||||
|
|
||||||
is_nil(contact.pos1) or is_nil(contact.pos2) ->
|
is_nil(contact.pos1) or is_nil(contact.pos2) ->
|
||||||
%{contact | terrain_status: :unavailable}
|
%{contact | terrain_status: :unavailable}
|
||||||
|
|
@ -324,16 +335,22 @@ defmodule MicrowavepropWeb.ContactLive.Show do
|
||||||
valid_time = HrrrClient.nearest_hrrr_hour(contact.qso_timestamp)
|
valid_time = HrrrClient.nearest_hrrr_hour(contact.qso_timestamp)
|
||||||
{rlat, rlon} = Weather.round_to_hrrr_grid(lat, lon)
|
{rlat, rlon} = Weather.round_to_hrrr_grid(lat, lon)
|
||||||
|
|
||||||
Oban.insert(
|
case Oban.insert(
|
||||||
HrrrFetchWorker.new(%{
|
HrrrFetchWorker.new(%{
|
||||||
"lat" => rlat,
|
"lat" => rlat,
|
||||||
"lon" => rlon,
|
"lon" => rlon,
|
||||||
"valid_time" => DateTime.to_iso8601(valid_time)
|
"valid_time" => DateTime.to_iso8601(valid_time)
|
||||||
})
|
})
|
||||||
)
|
) do
|
||||||
|
{:ok, %{conflict?: false}} ->
|
||||||
|
Radio.set_enrichment_status!([contact.id], :hrrr_status, :queued)
|
||||||
|
{nil, %{contact | hrrr_status: :queued}}
|
||||||
|
|
||||||
Radio.set_enrichment_status!([contact.id], :hrrr_status, :queued)
|
_ ->
|
||||||
{nil, %{contact | hrrr_status: :queued}}
|
# Unique conflict — job already ran recently, mark unavailable
|
||||||
|
Radio.set_enrichment_status!([contact.id], :hrrr_status, :unavailable)
|
||||||
|
{nil, %{contact | hrrr_status: :unavailable}}
|
||||||
|
end
|
||||||
else
|
else
|
||||||
{nil, contact}
|
{nil, contact}
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue