osint-dashboard/tests
Sirius DevOps 1f23083351 feat(vessels): VesselAPI quota-capped AIS poller for Middle East blind spot
Add a server-side REST poller for VesselAPI (free tier 150 calls/mo) that
upserts last-known positions into the shared vessel_last_known store when
AISStream is unset. Default box is the Strait of Hormuz (span 3.6 <= 4 deg),
never CONUS/NC (AISStream owns US coasts).

- app/vesselapi.py: worker loop, 4deg span validator, position->marker
  transform (skip suspected_glitch), durable Postgres daily-quota table.
- Local hard cap 5 successful 2xx/UTC day (VESSELAPI_MAX_CALLS_PER_DAY),
  monthly floor from X-RateLimit-Remaining, single request limit=50, no
  nextToken, no filter.sat, no retry-storm.
- keystore VESSELAPI_API_KEY registry entry; config + compose env passthrough
  (app + ingest); wired next to AISStream in main.py lifespan + run_ingester.
- GET /api/vessels docstring notes AISStream and/or VesselAPI cache.
- tests/test_vesselapi.py: 20 unit tests (no network/DB).
2026-08-29 00:18:54 -04:00
..
conftest.py Add NASA FIRMS active-fire ingest + /api/fires; API keys management page 2026-08-24 15:37:42 -04:00
test_api_fires.py Add NASA FIRMS active-fire ingest + /api/fires; API keys management page 2026-08-24 15:37:42 -04:00
test_api_live_layers.py feat(aircraft): planespotters.net photo in aircraft popup 2026-08-28 22:58:04 -04:00
test_api_news.py feat: 23:00 daily news recap; prompts drop futures 2026-08-28 22:53:31 -04:00
test_api_settings.py feat: persist summarizer model in app_settings 2026-08-28 17:06:55 -04:00
test_bg_jobs.py feat: lean-Pi WS fan-out, geofences, DVR playback, fire/aircraft correlation 2026-08-28 09:35:18 -04:00
test_cache_and_timeline.py fix: pipeline reliability — WS, summarizer, ingest, health 2026-08-28 21:49:05 -04:00
test_camera_popup_contract.py fix: hydrate camera popup from GET /api/cameras/{id} 2026-08-28 20:04:53 -04:00
test_event_ingest.py fix: pipeline reliability — WS, summarizer, ingest, health 2026-08-28 21:49:05 -04:00
test_fire_aircraft.py feat: lean-Pi WS fan-out, geofences, DVR playback, fire/aircraft correlation 2026-08-28 09:35:18 -04:00
test_fire_ingest.py fix: chunk FIRMS bulk inserts under asyncpg 32767 bind cap 2026-08-28 22:22:12 -04:00
test_fire_sources.py fix: pipeline reliability — WS, summarizer, ingest, health 2026-08-28 21:49:05 -04:00
test_frontend_reliability.py feat: 23:00 daily news recap; prompts drop futures 2026-08-28 22:53:31 -04:00
test_geofence.py feat: lean-Pi WS fan-out, geofences, DVR playback, fire/aircraft correlation 2026-08-28 09:35:18 -04:00
test_health_ready.py fix: pipeline reliability — WS, summarizer, ingest, health 2026-08-28 21:49:05 -04:00
test_live_layers.py fix(aircraft): show planespotters photo in overlay popup 2026-08-28 23:28:28 -04:00
test_map_payloads.py perf: slim fires/cameras/events/news map payloads 2026-08-27 21:19:42 -04:00
test_new_sources.py fix: pipeline reliability — WS, summarizer, ingest, health 2026-08-28 21:49:05 -04:00
test_news_scraper.py fix: pipeline reliability — WS, summarizer, ingest, health 2026-08-28 21:49:05 -04:00
test_phase1_guardrails.py feat: lean-Pi WS fan-out, geofences, DVR playback, fire/aircraft correlation 2026-08-28 09:35:18 -04:00
test_phase2_api.py feat: lean-Pi WS fan-out, geofences, DVR playback, fire/aircraft correlation 2026-08-28 09:35:18 -04:00
test_tracks.py feat: lean-Pi WS fan-out, geofences, DVR playback, fire/aircraft correlation 2026-08-28 09:35:18 -04:00
test_upstream_cache.py fix: pipeline reliability — WS, summarizer, ingest, health 2026-08-28 21:49:05 -04:00
test_vesselapi.py feat(vessels): VesselAPI quota-capped AIS poller for Middle East blind spot 2026-08-29 00:18:54 -04:00
test_ws_manager.py feat: lean-Pi WS fan-out, geofences, DVR playback, fire/aircraft correlation 2026-08-28 09:35:18 -04:00