mirror of
https://github.com/zvx-echo6/central.git
synced 2026-05-21 18:14:44 +02:00
feat(2-G): USGS NWIS adapter (OGC API) + CENTRAL_HYDRO stream
NASA WaterData OGC API v0 (latest-continuous collection) — polls configured parameter codes within an operator-set bbox and publishes on the new CENTRAL_HYDRO stream. - Subject: central.hydro.<parameter_code>.<agency>.<bare_site_no> (e.g. central.hydro.00060.usgs.05420500). The agency/site decomposition lives in a single _subject_tokens_for_id helper. - Default parameter codes: 00060 (discharge), 00065 (gage height), 00010 (water temperature). Operator-tunable; single SoT in _DEFAULT_PARAMETER_CODES — no parallel literals. - Composite dedup: nwis:<monitoring_location_id>:<param>:<time_iso>. Prefix kept in dedup key for cross-agency uniqueness. - Pagination: follows OGC 'rel=next' link until absent (cursor-based). - Region bbox is REQUIRED in practice; adapter logs WARN at startup if region is None (does not refuse to start). - New stream CENTRAL_HYDRO added to streams.py registry (one line). Retention mirrors CENTRAL_DISASTER (7 days, 1 GiB). - No removal pattern in v1 — sites are static; missing data is the signal. Upstream divergences from the original spec brief, caught by pre-build curl: - Collection is 'latest-continuous', not 'instantaneous-values'. - Site filter param is 'monitoring_location_id' (singular), not 'monitoring_locations_id' (plural). - Site identifier requires agency prefix in queries (USGS-NNNNN). - feature.id is a per-record UUID, not stable; dedup uses joint key. Ships disabled; operator enables via GUI after setting a bbox.
This commit is contained in:
parent
befdf7a38c
commit
5d64a8f70d
5 changed files with 790 additions and 0 deletions
105
tests/fixtures/nwis_latest_sample.json
vendored
Normal file
105
tests/fixtures/nwis_latest_sample.json
vendored
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
{
|
||||
"type": "FeatureCollection",
|
||||
"features": [
|
||||
{
|
||||
"type": "Feature",
|
||||
"id": "b28554ea-25f0-485c-ade2-0a4c73901768",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [-90.2520730305021, 41.7805863501123]
|
||||
},
|
||||
"properties": {
|
||||
"id": "b28554ea-25f0-485c-ade2-0a4c73901768",
|
||||
"time_series_id": "fbe039224c874449ae574fe6668e11d8",
|
||||
"monitoring_location_id": "USGS-05420500",
|
||||
"parameter_code": "00060",
|
||||
"statistic_id": "00011",
|
||||
"time": "2026-05-19T15:30:00+00:00",
|
||||
"value": "57800",
|
||||
"unit_of_measure": "ft^3/s",
|
||||
"approval_status": "Provisional",
|
||||
"qualifier": null,
|
||||
"last_modified": "2026-05-19T15:43:28.012704+00:00"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"id": "8a4eb91f-1d33-4a02-9c4a-92c5b1ac0d12",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [-91.6510, 41.6628]
|
||||
},
|
||||
"properties": {
|
||||
"id": "8a4eb91f-1d33-4a02-9c4a-92c5b1ac0d12",
|
||||
"time_series_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6",
|
||||
"monitoring_location_id": "USGS-05454500",
|
||||
"parameter_code": "00060",
|
||||
"statistic_id": "00011",
|
||||
"time": "2026-05-19T15:30:00+00:00",
|
||||
"value": "2110",
|
||||
"unit_of_measure": "ft^3/s",
|
||||
"approval_status": "Approved",
|
||||
"qualifier": null,
|
||||
"last_modified": "2026-05-19T15:40:00.000000+00:00"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"id": "synthetic-non-usgs-record",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [-93.98775, 40.01822222222222]
|
||||
},
|
||||
"properties": {
|
||||
"id": "synthetic-non-usgs-record",
|
||||
"time_series_id": "synth-mo005-ts-001",
|
||||
"monitoring_location_id": "MO005-400105093591601",
|
||||
"parameter_code": "00060",
|
||||
"statistic_id": "00011",
|
||||
"time": "2026-05-19T15:00:00+00:00",
|
||||
"value": "12.5",
|
||||
"unit_of_measure": "ft^3/s",
|
||||
"approval_status": "Provisional",
|
||||
"qualifier": null,
|
||||
"last_modified": "2026-05-19T15:05:00.000000+00:00"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"id": "synthetic-no-dash-record",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [-92.0, 42.0]
|
||||
},
|
||||
"properties": {
|
||||
"id": "synthetic-no-dash-record",
|
||||
"time_series_id": "synth-nodash-ts",
|
||||
"monitoring_location_id": "STANDALONE12345",
|
||||
"parameter_code": "00060",
|
||||
"statistic_id": "00011",
|
||||
"time": "2026-05-19T14:45:00+00:00",
|
||||
"value": "1.0",
|
||||
"unit_of_measure": "ft^3/s",
|
||||
"approval_status": "Provisional",
|
||||
"qualifier": null,
|
||||
"last_modified": "2026-05-19T14:50:00.000000+00:00"
|
||||
}
|
||||
}
|
||||
],
|
||||
"numberReturned": 4,
|
||||
"links": [
|
||||
{
|
||||
"type": "application/json",
|
||||
"rel": "self",
|
||||
"title": "This document as JSON",
|
||||
"href": "https://api.waterdata.usgs.gov/ogcapi/v0/collections/latest-continuous/items?f=json¶meter_code=00060&limit=1000"
|
||||
},
|
||||
{
|
||||
"type": "application/json",
|
||||
"rel": "collection",
|
||||
"title": "Parent collection",
|
||||
"href": "https://api.waterdata.usgs.gov/ogcapi/v0/collections/latest-continuous"
|
||||
}
|
||||
],
|
||||
"timeStamp": "2026-05-19T16:00:00.000000+00:00"
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue