Add logging to SRTM elevation fallback chain
This commit is contained in:
parent
2ae60d036b
commit
fe9c1a3c5b
2 changed files with 18 additions and 2 deletions
|
|
@ -3,6 +3,8 @@ defmodule Microwaveprop.Terrain.ElevationClient do
|
||||||
|
|
||||||
alias Microwaveprop.Terrain.Srtm
|
alias Microwaveprop.Terrain.Srtm
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
@batch_size 100
|
@batch_size 100
|
||||||
|
|
||||||
@spec fetch_elevation_profile(float(), float(), float(), float(), pos_integer()) ::
|
@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
|
def fetch_elevation_profile(lat1, lon1, lat2, lon2, n \\ 64) do
|
||||||
case srtm_tiles_dir() do
|
case srtm_tiles_dir() do
|
||||||
nil ->
|
nil ->
|
||||||
|
Logger.debug("SRTM tiles_dir not configured, using API")
|
||||||
fetch_elevation_profile_api(lat1, lon1, lat2, lon2, n)
|
fetch_elevation_profile_api(lat1, lon1, lat2, lon2, n)
|
||||||
|
|
||||||
tiles_dir ->
|
tiles_dir ->
|
||||||
case Srtm.fetch_elevation_profile(lat1, lon1, lat2, lon2, tiles_dir, n) do
|
case Srtm.fetch_elevation_profile(lat1, lon1, lat2, lon2, tiles_dir, n) do
|
||||||
{:ok, _profile} = ok -> ok
|
{:ok, _profile} = ok ->
|
||||||
{:error, _} -> fetch_elevation_profile_api(lat1, lon1, lat2, lon2, n)
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
defmodule Microwaveprop.Terrain.Srtm do
|
defmodule Microwaveprop.Terrain.Srtm do
|
||||||
@moduledoc false
|
@moduledoc false
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
@samples 3601
|
@samples 3601
|
||||||
@void -32_768
|
@void -32_768
|
||||||
@base_url "https://elevation-tiles-prod.s3.amazonaws.com/skadi"
|
@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"
|
url = "#{@base_url}/#{lat_dir}/#{filename}.gz"
|
||||||
path = Path.join(tiles_dir, filename)
|
path = Path.join(tiles_dir, filename)
|
||||||
|
|
||||||
|
Logger.info("Downloading SRTM tile #{filename} from S3")
|
||||||
|
|
||||||
case Req.get(url, req_options()) do
|
case Req.get(url, req_options()) do
|
||||||
{:ok, %{status: 200, body: body}} ->
|
{:ok, %{status: 200, body: body}} ->
|
||||||
decompressed = :zlib.gunzip(body)
|
decompressed = :zlib.gunzip(body)
|
||||||
File.write!(path, decompressed)
|
File.write!(path, decompressed)
|
||||||
|
Logger.info("SRTM tile #{filename} downloaded (#{byte_size(decompressed)} bytes)")
|
||||||
{:ok, path}
|
{:ok, path}
|
||||||
|
|
||||||
{:ok, %{status: 404}} ->
|
{:ok, %{status: 404}} ->
|
||||||
|
Logger.warning("SRTM tile #{filename} not available on S3 (404)")
|
||||||
{:error, :not_available}
|
{:error, :not_available}
|
||||||
|
|
||||||
{:ok, %{status: status}} ->
|
{:ok, %{status: status}} ->
|
||||||
|
Logger.error("SRTM tile #{filename} download failed: HTTP #{status}")
|
||||||
{:error, "SRTM download HTTP #{status}"}
|
{:error, "SRTM download HTTP #{status}"}
|
||||||
|
|
||||||
{:error, reason} ->
|
{:error, reason} ->
|
||||||
|
Logger.error("SRTM tile #{filename} download error: #{inspect(reason)}")
|
||||||
{:error, "SRTM download error: #{inspect(reason)}"}
|
{:error, "SRTM download error: #{inspect(reason)}"}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue