Rework import_tickets.py from the retired JSON `latest.json` model to the new hourly full-snapshot CSV export. Strictly INC (CRQ out of scope). - Ingest the newest automations/inc/<EAT-timestamp>.csv; skip-if-unchanged by comparing S3 ETag to tickets.import_meta.metadata.source_etag. - Upsert on ticket_id (PK; no dups, never delete -> closure history accrues). No truncate. On success, move processed files to automations/inc/processed/. - Clean at ingest: drop is_alarm=true + the "EXPORT STOPPED..." sentinel; drop week_*, source_s3_*/source_snapshot_id, department/source_type; lowercase region, uppercase raw_status; keep service_type + bucket. - Force path-style S3 addressing; --inc-csv for local dev; --from-bucket for cron. - Add migrations/02 (import_meta + freshness); refresh README/.env.example/docs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
17 lines
777 B
Text
17 lines
777 B
Text
# fleettickets — copy to .env and fill in. NEVER commit the real .env.
|
|
|
|
# Shared database (the `tickets` schema lives in tracksolid_db; internal Docker host)
|
|
DATABASE_URL=postgresql://tracksolid_owner:<password>@timescale_db:5432/tracksolid_db
|
|
|
|
# rustfs / S3 — source ticket snapshots (automations/inc/<EAT-timestamp>.csv)
|
|
RUSTFS_ENDPOINT=https://s3.rahamafresh.com
|
|
RUSTFS_ACCESS_KEY=<key>
|
|
RUSTFS_SECRET_KEY=<secret>
|
|
RUSTFS_REGION=us-east-1
|
|
TICKETS_BUCKET=tickets
|
|
|
|
# Geocoder (keyed — public Nominatim rate-limits bulk)
|
|
GEOCODER_PROVIDER=locationiq # locationiq | opencage
|
|
GEOCODER_API_KEY=<key>
|
|
GEOCODER_MIN_INTERVAL_S=1.1 # throttle to provider TOS
|
|
GEOCODER_MAX_KM=25 # reject a location geocode this far from its cluster centroid
|