From ebd22ce156b18bbd4beb7a7f4f2134d2d7f0fd79 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Thu, 2 Apr 2026 08:03:05 -0500 Subject: [PATCH] Gracefully handle SRTM tile download failures on page load --- lib/microwaveprop_web/live/contact_live/show.ex | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/microwaveprop_web/live/contact_live/show.ex b/lib/microwaveprop_web/live/contact_live/show.ex index ad373ef0..53a17ae4 100644 --- a/lib/microwaveprop_web/live/contact_live/show.ex +++ b/lib/microwaveprop_web/live/contact_live/show.ex @@ -2,6 +2,8 @@ defmodule MicrowavepropWeb.ContactLive.Show do @moduledoc false use MicrowavepropWeb, :live_view + require Logger + alias Microwaveprop.Propagation.BandConfig alias Microwaveprop.Propagation.Scorer alias Microwaveprop.Radio @@ -677,7 +679,7 @@ defmodule MicrowavepropWeb.ContactLive.Show do lon1 when is_number(lon1) <- contact.pos1["lon"] || contact.pos1["lng"], %{"lat" => lat2} <- contact.pos2, lon2 when is_number(lon2) <- contact.pos2["lon"] || contact.pos2["lng"], - {:ok, profile} <- ElevationClient.fetch_elevation_profile(lat1, lon1, lat2, lon2, 256) do + {:ok, profile} <- safe_fetch_elevation(lat1, lon1, lat2, lon2) do freq_ghz = band_to_ghz(contact.band) dist_km = haversine_km(lat1, lon1, lat2, lon2) analysis = TerrainAnalysis.analyse(profile, dist_km, freq_ghz) @@ -869,6 +871,14 @@ defmodule MicrowavepropWeb.ContactLive.Show do end) end + defp safe_fetch_elevation(lat1, lon1, lat2, lon2) do + ElevationClient.fetch_elevation_profile(lat1, lon1, lat2, lon2, 256) + rescue + e -> + Logger.warning("Elevation profile failed: #{Exception.message(e)}") + {:error, :elevation_unavailable} + end + defp band_to_ghz(nil), do: 10.0 defp band_to_ghz(band) do