71 lines
2.0 KiB
Markdown
71 lines
2.0 KiB
Markdown
# OpenJSP Bus Tracker
|
|
|
|
Real-time Skopje public transport tracking with Bun, GTFS/GTFS-RT ingestion, parquet persistence, and optional S3-compatible segment upload.
|
|
|
|
## What Is In This Repo
|
|
|
|
- `bus-tracker-json.ts`: terminal tracker for one stop + one route.
|
|
- `background-tracker.ts`: continuous collector for multiple routes/stops.
|
|
- `lib/database.ts`: parquet write layer with rolling segments and optional S3 upload.
|
|
- `lib/gtfs.ts`: GTFS CSV loading helpers.
|
|
- `config.ts`: API base URL, defaults, and tracker timing.
|
|
|
|
## Requirements
|
|
|
|
- Bun 1.x+
|
|
- Network access to the configured GTFS/JSON upstream APIs
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
bun install
|
|
bun run typecheck
|
|
```
|
|
|
|
Run single stop/route terminal tracker:
|
|
|
|
```bash
|
|
bun run tracker
|
|
```
|
|
|
|
Run with custom stop and route IDs:
|
|
|
|
```bash
|
|
bun run tracker -- --stop 1571 --route 125
|
|
```
|
|
|
|
Run background collection pipeline:
|
|
|
|
```bash
|
|
bun run track
|
|
```
|
|
|
|
## Environment
|
|
|
|
Copy `.env.example` to `.env` and adjust values as needed.
|
|
|
|
Key variables:
|
|
|
|
- `PARQUET_DIR`: local output directory for parquet files.
|
|
- `PARQUET_ROLL_MINUTES`: segment rotation interval.
|
|
- `SAVE_ALL_VEHICLE_SNAPSHOTS`: save full raw vehicle feed snapshots.
|
|
- `SAVE_ALL_VEHICLE_POSITIONS`: persist all vehicle positions (not only route-matched).
|
|
- `S3_ENABLED`: enable object storage upload.
|
|
- `S3_BUCKET`, `S3_REGION`, `S3_ENDPOINT`, `S3_PREFIX`: object storage target.
|
|
- `S3_ACCESS_KEY_ID`, `S3_SECRET_ACCESS_KEY`: object storage credentials.
|
|
- `S3_DELETE_LOCAL_AFTER_UPLOAD`: delete local parquet after successful upload.
|
|
- `S3_UPLOAD_RETRIES`, `S3_UPLOAD_RETRY_BASE_MS`: upload retry behavior.
|
|
|
|
## Scripts
|
|
|
|
- `bun run start`: alias for the terminal tracker.
|
|
- `bun run tracker`: terminal tracker.
|
|
- `bun run track`: background collector.
|
|
- `bun run typecheck`: TypeScript no-emit check.
|
|
|
|
## Notes
|
|
|
|
- Generated parquet files are intentionally ignored by git (`data/*.parquet`).
|
|
- The background tracker rotates segments and uploads each closed segment when S3 is enabled.
|
|
- On process shutdown (`SIGINT`/`SIGTERM`), writers are flushed so the current segment is finalized.
|