From a8bd29f78c3707065856d5065f9d2cac1194e6ec Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Thu, 7 May 2026 12:15:26 -0500 Subject: [PATCH] fix(logging): log silently dropped parse failures in grib extractor/wgrib2 - extractor: log warning when point falls outside Lambert grid bounds - wgrib2: log warning when inventory lines are unparseable - hrrr_client: optimize wgrib2_match_pattern with uniq_by + map_join - gefs_client: same optimization --- lib/microwaveprop/weather/gefs_client.ex | 2 +- lib/microwaveprop/weather/grib2/extractor.ex | 3 +++ lib/microwaveprop/weather/grib2/wgrib2.ex | 1 + lib/microwaveprop/weather/hrrr_client.ex | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/microwaveprop/weather/gefs_client.ex b/lib/microwaveprop/weather/gefs_client.ex index 6393e913..4a034511 100644 --- a/lib/microwaveprop/weather/gefs_client.ex +++ b/lib/microwaveprop/weather/gefs_client.ex @@ -232,7 +232,7 @@ defmodule Microwaveprop.Weather.GefsClient do end defp wgrib2_match_pattern do - vars = @surface_messages |> Enum.map(& &1.var) |> Enum.uniq() |> Enum.join("|") + vars = @surface_messages |> Enum.uniq_by(& &1.var) |> Enum.map_join("|", & &1.var) ":(#{vars}):" end diff --git a/lib/microwaveprop/weather/grib2/extractor.ex b/lib/microwaveprop/weather/grib2/extractor.ex index f6be53e3..8c5bd555 100644 --- a/lib/microwaveprop/weather/grib2/extractor.ex +++ b/lib/microwaveprop/weather/grib2/extractor.ex @@ -6,6 +6,8 @@ defmodule Microwaveprop.Weather.Grib2.Extractor do alias Microwaveprop.Weather.Grib2.Section alias Microwaveprop.Weather.Grib2.SimplePacking + require Logger + @doc """ Extract weather values from a GRIB2 binary blob at the given lat/lon. @@ -129,6 +131,7 @@ defmodule Microwaveprop.Weather.Grib2.Extractor do [{point, linear_index({i, j}, grid.nx, grid.scan_mode)}] {:error, :outside_grid} -> + Logger.warning("Extractor: point #{lat},#{lon} outside Lambert grid bounds") [] end end) diff --git a/lib/microwaveprop/weather/grib2/wgrib2.ex b/lib/microwaveprop/weather/grib2/wgrib2.ex index e6650ae0..6b7a1e3a 100644 --- a/lib/microwaveprop/weather/grib2/wgrib2.ex +++ b/lib/microwaveprop/weather/grib2/wgrib2.ex @@ -309,6 +309,7 @@ defmodule Microwaveprop.Weather.Grib2.Wgrib2 do [%{var: var, level: level, datetime: parse_wgrib2_date(date)}] _ -> + Logger.warning("wgrib2: unparseable inventory line: #{String.slice(line, 0, 120)}") [] end end) diff --git a/lib/microwaveprop/weather/hrrr_client.ex b/lib/microwaveprop/weather/hrrr_client.ex index 04986579..fd63ddc3 100644 --- a/lib/microwaveprop/weather/hrrr_client.ex +++ b/lib/microwaveprop/weather/hrrr_client.ex @@ -425,7 +425,7 @@ defmodule Microwaveprop.Weather.HrrrClient do end defp wgrib2_match_pattern(wanted) do - vars = wanted |> Enum.map(& &1.var) |> Enum.uniq() |> Enum.join("|") + vars = wanted |> Enum.uniq_by(& &1.var) |> Enum.map_join("|", & &1.var) ":(#{vars}):" end