osint-dashboard/app
Sirius DevOps 627990efde Add NASA FIRMS active-fire ingest + /api/fires; API keys management page
Coherent merge of two coordinated features on the shared working tree:

FIRMS fire heatmap (backend, t_6e404c14):
- app/fire_sources.py: fetch FIRMS VIIRS area CSV (free MAP_KEY) -> NATS events.fire
- fires hypertable (TimescaleDB, 1-day chunks) with natural-key PK
  (latitude, longitude, acq_time, satellite); idempotent ON CONFLICT DO NOTHING
- alembic/versions/002_fires.py; GET /api/fires?bbox=&since= (JSON only)
- POST /api/ingest/fires; ~15 min poll loop (FIRMS_INTERVAL=900) in ingester
- env-driven config (FIRMS_MAP_KEY/DATASET/BBOX/INTERVAL); docs/firms.md covers
  the zero-cost GIBS VIIRS_SNPP_Thermal_Anomalies_375m_All tile alternative
- 18 tests (parser, mapping, idempotency, API contract) verified vs real
  TimescaleDB+PostGIS (localhost/osint-dashboard-pg image)

API keys page (frontend, t_4433cff2):
- app/keystore.py: api_keys table (self-creating), FIRMS/GEMINI/TELEGRAM
  registry with format validation, ****last4 masking, get_api_key()
- GET/POST/DELETE /api/keys (never returns full values); Keys tab in index.html

DB_NULL_POOL env switch in app/database.py enables a NullPool for tests /
short-lived processes that open a fresh event loop per unit.
2026-08-24 15:37:42 -04:00
..
static Add NASA FIRMS active-fire ingest + /api/fires; API keys management page 2026-08-24 15:37:42 -04:00
config.py Add NASA FIRMS active-fire ingest + /api/fires; API keys management page 2026-08-24 15:37:42 -04:00
database.py Add NASA FIRMS active-fire ingest + /api/fires; API keys management page 2026-08-24 15:37:42 -04:00
docker-entrypoint.sh Run migrations via entrypoint (alembic upgrade head) instead of nested asyncio.run in startup hook 2026-07-07 18:24:01 -04:00
fire_sources.py Add NASA FIRMS active-fire ingest + /api/fires; API keys management page 2026-08-24 15:37:42 -04:00
ingest_cron.py first commit 2026-06-04 20:30:04 -04:00
ingestor.py Add NASA FIRMS active-fire ingest + /api/fires; API keys management page 2026-08-24 15:37:42 -04:00
keystore.py Add NASA FIRMS active-fire ingest + /api/fires; API keys management page 2026-08-24 15:37:42 -04:00
main.py Add NASA FIRMS active-fire ingest + /api/fires; API keys management page 2026-08-24 15:37:42 -04:00
models.py Add NASA FIRMS active-fire ingest + /api/fires; API keys management page 2026-08-24 15:37:42 -04:00
requirements.txt Containerize for Pi: env-var config, compose stack, CI workflow 2026-07-07 17:50:51 -04:00
run_ingester.py Add NASA FIRMS active-fire ingest + /api/fires; API keys management page 2026-08-24 15:37:42 -04:00
schemas.py Add NASA FIRMS active-fire ingest + /api/fires; API keys management page 2026-08-24 15:37:42 -04:00
sources.py Wire ingestion: long-running ingester (sources->NATS->Postgres), fix nats-py API (durable=/LIMITS), drop UUID source_id on RSS 2026-07-07 19:35:28 -04:00