Tidewater: project overview
Tidewater syncs tide-gauge readings from coastal sensors into one queryable store, so the harbor team can plan around the water instead of guessing. It replaces the old nightly cron scripts.
Goals
- Ingest readings within 60 seconds of capture
- Keep 10 years of history at 1-minute resolution — about 5 million rows per gauge
- Expose a small HTTP API (
GET /readings?gauge=ID&from=ISO) - Alert when two neighboring gauges disagree by more than 15 cm for ten minutes in a row, which usually means a stuck float rather than a real surge
Heads up: gauge
T-07 reports in feet. Conversion happens at ingest, not at query time.Status
| Area | State | Owner |
|---|---|---|
| Ingest pipeline | Done | Ana |
| Query API | In review | Ben |
| Alerting | Not started | unassigned |
Design
Each worker runs a loop like this:
for reading in queue.drain():
row = convert(reading) # feet -> meters happens here
if row.valid:
store.insert(row)
else:
log.warn("bad reading", reading.id)
See the runbook for deployment, or the missing page to check how 404s look.