Add logging to SRTM elevation fallback chain

This commit is contained in:
Graham McIntire 2026-03-30 09:02:08 -05:00
parent 2ae60d036b
commit fe9c1a3c5b
No known key found for this signature in database
GPG key ID: F4ABF488E6029E59
2 changed files with 18 additions and 2 deletions

View file

@ -3,6 +3,8 @@ defmodule Microwaveprop.Terrain.ElevationClient do
alias Microwaveprop.Terrain.Srtm
require Logger
@batch_size 100
@spec fetch_elevation_profile(float(), float(), float(), float(), pos_integer()) ::
@ -10,12 +12,18 @@ defmodule Microwaveprop.Terrain.ElevationClient do
def fetch_elevation_profile(lat1, lon1, lat2, lon2, n \\ 64) do
case srtm_tiles_dir() do
nil ->
Logger.debug("SRTM tiles_dir not configured, using API")
fetch_elevation_profile_api(lat1, lon1, lat2, lon2, n)
tiles_dir ->
case Srtm.fetch_elevation_profile(lat1, lon1, lat2, lon2, tiles_dir, n) do
{:ok, _profile} = ok -> ok
{:error, _} -> fetch_elevation_profile_api(lat1, lon1, lat2, lon2, n)
{:ok, _profile} = ok ->
Logger.info("Elevation profile served from SRTM tiles")
ok
{:error, reason} ->
Logger.warning("SRTM failed (#{inspect(reason)}), falling back to API")
fetch_elevation_profile_api(lat1, lon1, lat2, lon2, n)
end
end
end

View file

@ -1,6 +1,8 @@
defmodule Microwaveprop.Terrain.Srtm do
@moduledoc false
require Logger
@samples 3601
@void -32_768
@base_url "https://elevation-tiles-prod.s3.amazonaws.com/skadi"
@ -26,19 +28,25 @@ defmodule Microwaveprop.Terrain.Srtm do
url = "#{@base_url}/#{lat_dir}/#{filename}.gz"
path = Path.join(tiles_dir, filename)
Logger.info("Downloading SRTM tile #{filename} from S3")
case Req.get(url, req_options()) do
{:ok, %{status: 200, body: body}} ->
decompressed = :zlib.gunzip(body)
File.write!(path, decompressed)
Logger.info("SRTM tile #{filename} downloaded (#{byte_size(decompressed)} bytes)")
{:ok, path}
{:ok, %{status: 404}} ->
Logger.warning("SRTM tile #{filename} not available on S3 (404)")
{:error, :not_available}
{:ok, %{status: status}} ->
Logger.error("SRTM tile #{filename} download failed: HTTP #{status}")
{:error, "SRTM download HTTP #{status}"}
{:error, reason} ->
Logger.error("SRTM tile #{filename} download error: #{inspect(reason)}")
{:error, "SRTM download error: #{inspect(reason)}"}
end
end