Tracksolid deployment with timescale & grafana with backup
Find a file
david kiania 6cf0905b31 feat(dashboard_api): FleetOps analytics endpoints + fuel view (Phase 3)
Adds the read-only /analytics/* surface the FleetOps SPA will consume, plus
the migration that backs the fuel roll-up. All endpoints SELECT the indexed
reporting.* / tracksolid.v_* views and never write, so the forthcoming staging
instance can serve them against the prod DB as grafana_ro.

dashboard_api_rev.py:
  - GET /analytics/fleet-summary     per-vehicle + per-cost-centre roll-up
  - GET /analytics/utilisation       per-vehicle utilisation + daily fleet trend
  - GET /analytics/driver-behaviour  per-driver speeding / harsh index
  - GET /analytics/fuel              actual vs estimated litres (data-gated flags)
  - GET /analytics/filters           dropdown options (alias of GET /webhook/fleet-dashboard)
  - responses run through jsonable_encoder (Decimal->float, date->ISO)
  - VTRIPS_REFRESH_INTERVAL_S<=0 now DISABLES the v_trips refresher, so a
    read-only staging instance never attempts REFRESH (prod still owns it).

migrations/17_fleetops_fuel_view.sql:
  - reporting.v_fuel_daily encapsulates the v_trips->devices join (so the
    read-only role needs SELECT only on the view) and grants it to grafana_ro.

Registered 17 in run_migrations.py. Note: live migration head is 16, not 13
as CLAUDE.md implies. Endpoints are unit-compilable but untested live until
the staging bridge (Phase 1) exists.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 12:12:00 +03:00
.claude feat(dwh): bronze pipeline migrations, runbook, and execution manual 2026-04-25 01:07:53 +03:00
.forgejo/workflows feat: add db_audit health checks, runner, and scheduled Forgejo workflow 2026-04-12 21:40:29 +03:00
administration Add DB connection string to ops manual, add administration notes, remove stale deploy guide 2026-04-10 22:34:56 +03:00
backup feat(dwh): bronze pipeline migrations, runbook, and execution manual 2026-04-25 01:07:53 +03:00
data chore(repo): reorganize tree into migrations/ data/ legacy/ docs/ 2026-06-01 02:27:30 +03:00
db_audit feat: add db_audit health checks, runner, and scheduled Forgejo workflow 2026-04-12 21:40:29 +03:00
docs feat(dashboard_api): FleetOps analytics endpoints + fuel view (Phase 3) 2026-06-10 12:12:00 +03:00
dwh feat(dwh): bronze pipeline migrations, runbook, and execution manual 2026-04-25 01:07:53 +03:00
grafana chore(db): purge unused ops + dwh_gold schemas 2026-06-05 18:11:03 +03:00
legacy chore(repo): reorganize tree into migrations/ data/ legacy/ docs/ 2026-06-01 02:27:30 +03:00
migrations feat(dashboard_api): FleetOps analytics endpoints + fuel view (Phase 3) 2026-06-10 12:12:00 +03:00
n8n-workflows Add n8n workflow templates and change webhook port to 8888 2026-04-08 18:54:42 +03:00
scripts docs+tooling: OSM POI export workflow + Shell stations data; graded DQ report 2026-06-08 22:04:49 +03:00
tests FIX-M21: alarm cross-feed + stale-IMEI recovery for live_positions 2026-05-21 22:33:21 +03:00
.env fix: point DATABASE_URL at timescale_db container (not legacy 31.97.44.246:5888) 2026-04-18 15:43:49 +03:00
.gitignore docs+tooling: OSM POI export workflow + Shell stations data; graded DQ report 2026-06-08 22:04:49 +03:00
.python-version chore: align .python-version to 3.12.0 (matches Docker image and pyproject.toml) 2026-04-12 21:41:43 +03:00
55_ts_coolify_gemini_prod.code-workspace feat(dwh): bronze pipeline migrations, runbook, and execution manual 2026-04-25 01:07:53 +03:00
audit_device_reconciliation.py feat(analytics): Phase 0 — analytics-config migration and CSV importer rewrite 2026-04-27 23:42:37 +03:00
backfill_trips_enrichment.py feat(trips): add --skip-geocode flag to backfill script 2026-05-01 22:12:07 +03:00
CLAUDE.md docs+tooling: OSM POI export workflow + Shell stations data; graded DQ report 2026-06-08 22:04:49 +03:00
dashboard_api_rev.py feat(dashboard_api): FleetOps analytics endpoints + fuel view (Phase 3) 2026-06-10 12:12:00 +03:00
docker-compose.yaml feat(api): dedicated FastAPI read-API for map dashboards (replaces n8n) 2026-06-01 04:23:37 +03:00
Dockerfile Fix migration failures: switch to full TimescaleDB + use psql runner 2026-04-08 17:17:58 +03:00
import_drivers_csv.py chore(repo): reorganize tree into migrations/ data/ legacy/ docs/ 2026-06-01 02:27:30 +03:00
ingest_events_rev.py perf+fix: SAVEPOINT-per-item pollers, batched GPS inserts, parallel detail fetch 2026-04-18 00:33:55 +03:00
ingest_movement_rev.py FIX-M21: alarm cross-feed + stale-IMEI recovery for live_positions 2026-05-21 22:33:21 +03:00
pyproject.toml ci: add ruff + mypy static analysis config and Forgejo workflow 2026-04-12 21:32:33 +03:00
README.md first commit 2026-04-07 20:41:16 +03:00
run_migrations.py feat(dashboard_api): FleetOps analytics endpoints + fuel view (Phase 3) 2026-06-10 12:12:00 +03:00
run_migrations.sh chore(repo): reorganize tree into migrations/ data/ legacy/ docs/ 2026-06-01 02:27:30 +03:00
shell_stations.csv docs+tooling: OSM POI export workflow + Shell stations data; graded DQ report 2026-06-08 22:04:49 +03:00
shell_stations.geojson docs+tooling: OSM POI export workflow + Shell stations data; graded DQ report 2026-06-08 22:04:49 +03:00
sync_driver_audit.py perf+fix: SAVEPOINT-per-item pollers, batched GPS inserts, parallel detail fetch 2026-04-18 00:33:55 +03:00
ts_shared_rev.py FIX-M21: alarm cross-feed + stale-IMEI recovery for live_positions 2026-05-21 22:33:21 +03:00
webhook_receiver_rev.py FIX-M21: alarm cross-feed + stale-IMEI recovery for live_positions 2026-05-21 22:33:21 +03:00