| .PHONY: bootstrap up down streaming simulate demo test logs clean | |
| bootstrap: | |
| @echo "Running ALS bootstrap (downloads MovieLens 1M if needed)…" | |
| docker compose run --rm spark python /opt/spark-jobs/bootstrap.py | |
| streaming: | |
| @echo "Starting Spark Structured Streaming job…" | |
| docker compose exec -d spark python /opt/spark-jobs/streaming.py | |
| @echo "Streaming started in background. Check logs: make logs" | |
| up: | |
| docker compose up -d | |
| @echo "" | |
| @echo " Frontend → http://localhost:3000" | |
| @echo " API → http://localhost:8000" | |
| @echo " Grafana → http://localhost:3001 (admin/admin)" | |
| down: | |
| docker compose down | |
| simulate: | |
| docker compose exec event-simulator python simulator.py --users 10 --events 100 | |
| demo: | |
| @xdg-open http://localhost:3000 2>/dev/null || open http://localhost:3000 2>/dev/null || \ | |
| echo "Open http://localhost:3000" | |
| test: | |
| uv run pytest tests/ -v | |
| logs: | |
| docker compose logs -f spark event-simulator api | |
| clean: | |
| docker compose down -v | |
| rm -rf data/ml-1m data/ml-1m.zip | |