Commit graph

328 commits

Author SHA1 Message Date
FluxCD
862c0a915e chore: update prop image to git.mcintire.me/graham/prop:main-1776632295-79bbdf9 [skip ci] 2026-04-19 21:01:53 +00:00
FluxCD
8d3abbc711 chore: update prop image to git.mcintire.me/graham/prop:main-1776632143-8774181 [skip ci] 2026-04-19 20:58:43 +00:00
FluxCD
9a944f40e5 chore: update prop image to git.mcintire.me/graham/prop:main-1776631843-339591c [skip ci] 2026-04-19 20:53:39 +00:00
FluxCD
f0485dd595 chore: update prop image to git.mcintire.me/graham/prop:main-1776631383-b808780 [skip ci] 2026-04-19 20:46:29 +00:00
b80878056d
feat(grid-rs): Rust worker for HRRR f01..f18 propagation chain
Extracts the memory-hostile HRRR fetch → decode → score pipeline for
forecast hours 1–18 into a separate Rust service (`prop-grid-rs`).
Elixir retains f00 with its native-duct + NEXRAD + commercial-link
enrichment; Rust handles the other 18 steps per hourly chain.

Hand-off via a new `grid_tasks` table (`FOR UPDATE SKIP LOCKED` claim
from Rust, Postgrex `NOTIFY propagation_ready` back to Elixir). Rust
writes the same on-disk score-grid format Elixir already uses, to the
same `/data/scores` NFS tree. Phase 1 ships in shadow mode with
PROP_SCORES_DIR=/data/scores_shadow.

Rust crate layout at `rust/prop_grid_rs/` (1:1 module parity with the
Elixir source it ports):
  - grid, region, band_config, scores_file, sounding_params
  - scorer: all 10 factors + composite. Matches the Elixir scorer
    byte-for-byte across 115 golden-fixture samples (5 scenarios
    × 23 bands).
  - decoder: wgrib2 subprocess + Fortran-record lola-binary parser
  - fetcher: HRRR URL derivation + idx cache (1h TTL) + 8-way
    parallel byte-range downloads with 429/5xx retry
  - pipeline: end-to-end chain step, f00 rejected at the boundary
  - db: sqlx grid_tasks claim/complete + propagation_ready NOTIFY
  - bin/worker: tokio main loop, JSON logs, SIGTERM-safe

91 Rust tests + clippy -D warnings clean. 2,158 Elixir tests green.

Elixir additions:
  - `GridTaskEnqueuer` seeds fh=1..18 rows from
    `PropagationGridWorker.seed_chain/0`
  - `NotifyListener` LISTEN → warm `ScoreCache` → PubSub fan-out
  - `ShadowComparator` diffs prod vs shadow `.ntms` bodies
  - `mix rust.golden` task writes the Rust-side golden fixture

k8s: new `deployment-grid-rs.yaml` pinned to talos5 (32 GB NUC) via
`prop-grid-rs=primary` nodeSelector + `workload=grid-rs:NoSchedule`
toleration, 512 Mi limit, sharing the existing NFS `/data` mount.

The plan document is at `plans/vivid-hatching-quail.md` (local to my
workstation); phases 2 (cutover) and 3 (talos5 concurrency tuning)
follow after 72h of shadow-mode parity.
2026-04-19 15:42:49 -05:00
FluxCD
fd95a82478 chore: update prop image to git.mcintire.me/graham/prop:main-1776628623-f1846c0 [skip ci] 2026-04-19 20:00:04 +00:00
dfc7895197
chore(infra): bump prop to 4 replicas for talos5 (NUC)
talos5 is a NUC7i5 with 32GB RAM and a Samsung 980 Pro NVMe. Adding
a 4th hot-path replica lets the anti-affinity rule place one pod
per physical host across node1/2/3/5 and gives the hourly f00-f18
grid chain 4-way parallel fan-out, with the NVMe-backed pod
handling its share of grib extraction.
2026-04-19 14:37:52 -05:00
FluxCD
3be5480af6 chore: update prop image to git.mcintire.me/graham/prop:main-1776626172-1b2424a [skip ci] 2026-04-19 19:19:50 +00:00
1b2424a1c1
feat(infra): add prop-backfill deployment for T620 nodes
PROP_ROLE=backfill drops the hot-path propagation/commercial/solar
queues and the Cron plugin. Paired with a dedicated Deployment
(nodeSelector: prop-backfill=true, 4Gi memory, no web) this lets 8GB
T620 workers drain the hrrr/weather/terrain/iemre/narr backfill
queues without competing with the hourly grid chain.
2026-04-19 14:14:28 -05:00
FluxCD
bc153055c6 chore: update prop image to git.mcintire.me/graham/prop:main-1776620433-6f63f3b [skip ci] 2026-04-19 17:43:07 +00:00
FluxCD
0942d0bbfb chore: update prop image to git.mcintire.me/graham/prop:main-1776620227-a6a3d3c [skip ci] 2026-04-19 17:40:04 +00:00
FluxCD
c38f4e2bfe chore: update prop image to git.mcintire.me/graham/prop:main-1776619974-9db9e6a [skip ci] 2026-04-19 17:35:46 +00:00
FluxCD
cad4bfc6f5 chore: update prop image to git.mcintire.me/graham/prop:main-1776619000-ffb14cb [skip ci] 2026-04-19 17:19:36 +00:00
FluxCD
d3a1e93587 chore: update prop image to git.mcintire.me/graham/prop:main-1776618115-01b181b [skip ci] 2026-04-19 17:04:32 +00:00
FluxCD
95a769bf0e chore: update prop image to git.mcintire.me/graham/prop:main-1776612418-0d02239 [skip ci] 2026-04-19 15:30:08 +00:00
FluxCD
543215864c chore: update prop image to git.mcintire.me/graham/prop:main-1776609556-f122eed [skip ci] 2026-04-19 14:41:49 +00:00
FluxCD
e41f84320a chore: update prop image to git.mcintire.me/graham/prop:main-1776608794-5cfb9e6 [skip ci] 2026-04-19 14:28:47 +00:00
FluxCD
ec3251c02f chore: update prop image to git.mcintire.me/graham/prop:main-1776607569-bbf6481 [skip ci] 2026-04-19 14:08:43 +00:00
FluxCD
3ab71cf8fe chore: update prop image to git.mcintire.me/graham/prop:main-1776606930-bb6333b [skip ci] 2026-04-19 13:57:42 +00:00
FluxCD
0e2d04f6d3 chore: update prop image to git.mcintire.me/graham/prop:main-1776606797-160439d [skip ci] 2026-04-19 13:55:40 +00:00
FluxCD
a8e225a92c chore: update prop image to git.mcintire.me/graham/prop:main-1776606153-504f514 [skip ci] 2026-04-19 13:44:38 +00:00
FluxCD
fe0bdd32c2 chore: update prop image to git.mcintire.me/graham/prop:main-1776605224-70e65ba [skip ci] 2026-04-19 13:29:36 +00:00
FluxCD
240bc30df8 chore: update prop image to git.mcintire.me/graham/prop:main-1776604171-28a9eb3 [skip ci] 2026-04-19 13:11:34 +00:00
FluxCD
69f4c81899 chore: update prop image to git.mcintire.me/graham/prop:main-1776551705-4e6c87e [skip ci] 2026-04-18 22:37:31 +00:00
FluxCD
d9ffda43d3 chore: update prop image to git.mcintire.me/graham/prop:main-1776549124-30d5bb7 [skip ci] 2026-04-18 21:55:26 +00:00
30d5bb7d79
feat(k8s): NodePort service for external Prometheus scraping
A dedicated Prometheus at 10.0.15.25 on the private network can now
scrape the cluster via `<any-node-ip>:30090/metrics`. Scrape rotates
across pods; BEAM metrics stay representative as a sample and the
oban queue-depth gauge reads from the shared DB so all pods report
the same value.
2026-04-18 16:51:46 -05:00
FluxCD
80b0dcd5ba chore: update prop image to git.mcintire.me/graham/prop:main-1776548438-c7bc3ed [skip ci] 2026-04-18 21:47:23 +00:00
FluxCD
0833ee44f9 chore: update prop image to git.mcintire.me/graham/prop:main-1776548026-2da74c5 [skip ci] 2026-04-18 21:36:02 +00:00
FluxCD
a69933a589 chore: update prop image to git.mcintire.me/graham/prop:main-1776547343-1a62e51 [skip ci] 2026-04-18 21:24:59 +00:00
FluxCD
78bf4b5664 chore: update prop image to git.mcintire.me/graham/prop:main-1776546307-be62e27 [skip ci] 2026-04-18 21:08:55 +00:00
FluxCD
d3876362ca chore: update prop image to git.mcintire.me/graham/prop:main-1776545634-a9a355b [skip ci] 2026-04-18 20:57:52 +00:00
FluxCD
1f89b5ddae chore: update prop image to git.mcintire.me/graham/prop:main-1776545313-ca07c02 [skip ci] 2026-04-18 20:51:38 +00:00
FluxCD
67d4b2eca7 chore: update prop image to git.mcintire.me/graham/prop:main-1776543737-5a25c6d [skip ci] 2026-04-18 20:29:32 +00:00
FluxCD
d54f4cd907 chore: update prop image to git.mcintire.me/graham/prop:main-1776538587-cf6812f [skip ci] 2026-04-18 18:59:58 +00:00
FluxCD
871582ee09 chore: update prop image to git.mcintire.me/graham/prop:main-1776538284-e3248e3 [skip ci] 2026-04-18 18:54:58 +00:00
FluxCD
72d4ad4815 chore: update prop image to git.mcintire.me/graham/prop:main-1776537850-5488744 [skip ci] 2026-04-18 18:47:55 +00:00
FluxCD
35130a6c16 chore: update prop image to git.mcintire.me/graham/prop:main-1776537504-7330d64 [skip ci] 2026-04-18 18:41:54 +00:00
FluxCD
bccc0b66c1 chore: update prop image to git.mcintire.me/graham/prop:main-1776537173-e827cac [skip ci] 2026-04-18 18:36:53 +00:00
FluxCD
8bded0c6e8 chore: update prop image to git.mcintire.me/graham/prop:main-1776536769-d64e502 [skip ci] 2026-04-18 18:29:49 +00:00
FluxCD
738973456f chore: update prop image to git.mcintire.me/graham/prop:main-1776534846-32ce43f [skip ci] 2026-04-18 17:57:41 +00:00
FluxCD
5a14756348 chore: update prop image to git.mcintire.me/graham/prop:main-1776534169-b5decef [skip ci] 2026-04-18 17:46:20 +00:00
FluxCD
eff3382628 chore: update prop image to git.mcintire.me/graham/prop:main-1776533735-f40e88e [skip ci] 2026-04-18 17:39:13 +00:00
FluxCD
f4edd60c73 chore: update prop image to git.mcintire.me/graham/prop:main-1776533491-0bf49f4 [skip ci] 2026-04-18 17:35:07 +00:00
FluxCD
b261fea460 chore: update prop image to git.mcintire.me/graham/prop:main-1776533024-06feda7 [skip ci] 2026-04-18 17:27:03 +00:00
FluxCD
1deab8b83d chore: update prop image to git.mcintire.me/graham/prop:main-1776532149-2874e6a [skip ci] 2026-04-18 17:12:59 +00:00
FluxCD
181ad19c24 chore: update prop image to git.mcintire.me/graham/prop:main-1776528915-379b8ee [skip ci] 2026-04-18 16:22:30 +00:00
FluxCD
5cffbec165 chore: update prop image to git.mcintire.me/graham/prop:main-1776525807-f9af347 [skip ci] 2026-04-18 15:27:07 +00:00
FluxCD
41c9a5522f chore: update prop image to git.mcintire.me/graham/prop:main-1776523046-fc91f20 [skip ci] 2026-04-18 14:44:32 +00:00
FluxCD
b675a4badc chore: update prop image to git.mcintire.me/graham/prop:main-1776519792-00aad3c [skip ci] 2026-04-18 13:46:47 +00:00
FluxCD
d01e420b9d chore: update prop image to git.mcintire.me/graham/prop:main-1776465336-b8b78f7 [skip ci] 2026-04-17 22:40:08 +00:00