feat(rover): include step number/total in Calculate progress label
This commit is contained in:
parent
9f8c4d3b36
commit
82b515e88d
3 changed files with 28 additions and 18 deletions
|
|
@ -90,7 +90,7 @@ defmodule Microwaveprop.Rover.Compute do
|
|||
Keyword.get(deps, :buildings_clutter_lookup, &default_building_clutter/1)
|
||||
|
||||
hilltop_snap = Keyword.get(deps, :hilltop_snap, &Hilltop.snap/1)
|
||||
progress = Keyword.get(deps, :progress, fn _ -> :ok end)
|
||||
progress = Keyword.get(deps, :progress, fn _, _, _ -> :ok end)
|
||||
|
||||
%{
|
||||
home: home,
|
||||
|
|
@ -106,7 +106,16 @@ defmodule Microwaveprop.Rover.Compute do
|
|||
radius_km = max_distance_km * 1.0
|
||||
bbox = bbox_around(home, radius_km)
|
||||
|
||||
progress.("Loading propagation grid")
|
||||
road_enabled? = Application.get_env(:microwaveprop, :rover_road_proximity_enabled, true)
|
||||
total_steps = if road_enabled?, do: 8, else: 7
|
||||
counter = :counters.new(1, [:atomics])
|
||||
|
||||
step = fn label ->
|
||||
:counters.add(counter, 1, 1)
|
||||
progress.(label, :counters.get(counter, 1), total_steps)
|
||||
end
|
||||
|
||||
step.("Loading propagation grid")
|
||||
raw_cells = time_step("scores_at", fn -> scores_at.(band_mhz, valid_time, bbox) end)
|
||||
|
||||
in_radius =
|
||||
|
|
@ -119,26 +128,26 @@ defmodule Microwaveprop.Rover.Compute do
|
|||
)
|
||||
|
||||
points = Enum.map(in_radius, &{&1.lat, &1.lon})
|
||||
progress.("Looking up elevation")
|
||||
step.("Looking up elevation")
|
||||
elev_map = time_step("elev_lookup", fn -> elev_lookup.(points) end)
|
||||
progress.("Loading building footprints")
|
||||
step.("Loading building footprints")
|
||||
_ = time_step("buildings_load", fn -> BuildingsLoader.ensure_loaded_for_bbox(bbox) end)
|
||||
progress.("Computing path clearance")
|
||||
step.("Computing path clearance")
|
||||
clearance_map = time_step("clearance", fn -> clearance_lookup.(in_radius, selected_stations) end)
|
||||
progress.("Measuring terrain prominence")
|
||||
step.("Measuring terrain prominence")
|
||||
prominence_map = time_step("prominence", fn -> prominence_lookup.(in_radius) end)
|
||||
|
||||
road_map =
|
||||
if Application.get_env(:microwaveprop, :rover_road_proximity_enabled, true) do
|
||||
progress.("Checking road access")
|
||||
if road_enabled? do
|
||||
step.("Checking road access")
|
||||
time_step("road_proximity", fn -> fetch_road_map(road_lookup, in_radius, bbox) end)
|
||||
else
|
||||
%{}
|
||||
end
|
||||
|
||||
progress.("Scanning building clutter")
|
||||
step.("Scanning building clutter")
|
||||
clutter_map = time_step("building_clutter", fn -> buildings_clutter_lookup.(in_radius) end)
|
||||
progress.("Scoring cells")
|
||||
step.("Scoring cells")
|
||||
|
||||
home_elev = home.elev_m || 0
|
||||
|
||||
|
|
|
|||
|
|
@ -349,8 +349,8 @@ defmodule MicrowavepropWeb.RoverLive do
|
|||
end
|
||||
|
||||
@impl true
|
||||
def handle_info({:rover_progress, label}, socket) do
|
||||
{:noreply, assign(socket, scoring_step: label)}
|
||||
def handle_info({:rover_progress, label, n, total}, socket) do
|
||||
{:noreply, assign(socket, scoring_step: "#{n}/#{total} · #{label}")}
|
||||
end
|
||||
|
||||
defp apply_scoring_warnings(socket, []), do: clear_flash(socket)
|
||||
|
|
@ -705,7 +705,7 @@ defmodule MicrowavepropWeb.RoverLive do
|
|||
defp start_scoring(socket) do
|
||||
args = scoring_args(socket)
|
||||
pid = self()
|
||||
progress = fn label -> send(pid, {:rover_progress, label}) end
|
||||
progress = fn label, n, total -> send(pid, {:rover_progress, label, n, total}) end
|
||||
|
||||
socket
|
||||
|> assign(scoring_loading: true, scoring_step: "Starting…")
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ defmodule Microwaveprop.Rover.ComputeTest do
|
|||
grid = build_grid(home.lat, home.lon)
|
||||
|
||||
test_pid = self()
|
||||
progress = fn label -> send(test_pid, {:progress, label}) end
|
||||
progress = fn label, step, total -> send(test_pid, {:progress, label, step, total}) end
|
||||
|
||||
Compute.run(
|
||||
%{
|
||||
|
|
@ -155,10 +155,11 @@ defmodule Microwaveprop.Rover.ComputeTest do
|
|||
progress: progress
|
||||
)
|
||||
|
||||
assert_received {:progress, "Loading propagation grid"}
|
||||
assert_received {:progress, "Looking up elevation"}
|
||||
assert_received {:progress, "Computing path clearance"}
|
||||
assert_received {:progress, "Scoring cells"}
|
||||
assert_received {:progress, "Loading propagation grid", 1, total}
|
||||
assert is_integer(total) and total >= 7
|
||||
assert_received {:progress, "Looking up elevation", 2, ^total}
|
||||
assert_received {:progress, "Computing path clearance", _, ^total}
|
||||
assert_received {:progress, "Scoring cells", ^total, ^total}
|
||||
end
|
||||
|
||||
test "filters cells failing min_elev_gain" do
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue