adds shutdown commands to makefile

This commit is contained in:
Michael Beck 2025-04-16 21:41:03 +02:00
parent 4f8040e9db
commit 803554a410

View File

@ -4,9 +4,8 @@
# Define Python and pip executables inside virtual environment
PYTHON := venv/bin/python
PIP := venv/bin/pip
# Celery worker command
CELERY := venv/bin/celery
FLASK := venv/bin/flask
# Default target that runs the application
all: run
@ -100,15 +99,15 @@ venv:
# Run the application in debug mode
run: venv
venv/bin/flask --app scipaperloader --debug run
$(FLASK) --app scipaperloader --debug run
# Format code using Black and isort
format:
format: venv
venv/bin/black .
venv/bin/isort .
# Check if code meets formatting standards
format-check:
format-check: venv
venv/bin/black --check .
venv/bin/isort --check .
@ -116,15 +115,15 @@ format-check:
reformat: format lint
# Check code for style issues using flake8
lint:
lint: venv
venv/bin/flake8 .
# Run static type checking with mypy
mypy:
mypy: venv
venv/bin/mypy scipaperloader
# Run the test suite
test:
test: venv
venv/bin/pytest
# Build distribution package after running checks
@ -134,24 +133,61 @@ dist: format-check lint mypy test
# Set up complete development environment
dev: clean venv
# Start Celery worker for processing tasks
celery: venv
# Start Celery worker - PURGE FIRST
celery: venv redis
@echo "Purging Celery task queue before starting worker..."
# Purge the queue forcefully. Ignore errors if queue is empty/unreachable initially.
@-$(CELERY) -A celery_worker:celery purge -f
@echo "Starting Celery worker..."
$(CELERY) -A celery_worker:celery worker --loglevel=info
# Monitor Celery tasks with flower web interface
celery-flower: venv
$(PIP) install flower
$(CELERY) -A celery_worker:celery flower --port=5555
# Run Celery beat scheduler for periodic tasks
celery-beat: venv
$(CELERY) -A celery_worker:celery beat --loglevel=info
celery-beat: venv redis
@echo "Starting Celery beat scheduler..."
# Ensure celerybeat-schedule file is removed for clean start if needed
@-rm -f celerybeat-schedule.db
$(CELERY) -A celery_worker:celery beat --loglevel=info --scheduler django_celery_beat.schedulers:DatabaseScheduler
# Check if Redis is running, start if needed
redis:
@redis-cli ping > /dev/null 2>&1 || (echo "Starting Redis server..." && redis-server --daemonize yes)
@if ! redis-cli ping > /dev/null 2>&1; then \
echo "Starting Redis server..."; \
redis-server --daemonize yes; \
sleep 1; \
else \
echo "Redis is already running."; \
fi
# Run complete application stack (Flask app + Celery worker + Redis + Beat scheduler)
run-all: redis
@echo "Starting Flask, Celery worker and Beat scheduler..."
@$(MAKE) -j3 run celery celery-beat
# Run them in parallel. Ctrl+C will send SIGINT to make, which propagates.
# Use trap to attempt cleanup, but primary cleanup is purge on next start.
@trap '$(MAKE) stop-all;' INT TERM; \
$(MAKE) -j3 run celery celery-beat & wait
# Stop running Celery worker and beat gracefully
stop-celery:
@echo "Attempting graceful shutdown of Celery worker and beat..."
@-pkill -TERM -f "celery -A celery_worker:celery worker" || echo "Worker not found or already stopped."
@-pkill -TERM -f "celery -A celery_worker:celery beat" || echo "Beat not found or already stopped."
@sleep 1 # Give processes a moment to terminate
@echo "Purging remaining tasks from Celery queue..."
@-$(CELERY) -A celery_worker:celery purge -f || echo "Purge failed or queue empty."
# Stop Flask development server
stop-flask:
@echo "Attempting shutdown of Flask development server..."
@-pkill -TERM -f "flask --app scipaperloader --debug run" || echo "Flask server not found or already stopped."
# Stop all components potentially started by run-all
stop-all: stop-celery stop-flask
@echo "All components stopped."
# Default target
all: run