Add API endpoints for health checks, process control, recipe management, system management, and user management
- Implement health check endpoints for system monitoring including basic, detailed, readiness, liveness, and metrics. - Create process control endpoints to start, stop, pause, resume, and manage processes. - Add recipe management endpoints for listing, creating, retrieving, updating, deleting, duplicating, and validating recipes. - Introduce system management endpoints for retrieving system information, active alarms, and configuration. - Establish user management endpoints for listing and creating users with placeholder implementations. - Define Pydantic schemas for API request/response validation related to recipes, processes, and users.
This commit is contained in:
134
python_rewrite/docker/entrypoint.sh
Normal file
134
python_rewrite/docker/entrypoint.sh
Normal file
@@ -0,0 +1,134 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Entrypoint script for chocolate tempering machine container
|
||||
|
||||
# Function to wait for service
|
||||
wait_for_service() {
|
||||
local host=$1
|
||||
local port=$2
|
||||
local service_name=$3
|
||||
|
||||
echo "Waiting for $service_name..."
|
||||
while ! nc -z $host $port; do
|
||||
sleep 1
|
||||
done
|
||||
echo "$service_name is ready!"
|
||||
}
|
||||
|
||||
# Function to run database migrations
|
||||
run_migrations() {
|
||||
echo "Running database migrations..."
|
||||
alembic upgrade head
|
||||
echo "Database migrations completed"
|
||||
}
|
||||
|
||||
# Function to create initial data
|
||||
create_initial_data() {
|
||||
echo "Creating initial data..."
|
||||
python -c "
|
||||
import asyncio
|
||||
from src.tempering_machine.shared.database import init_database, create_tables
|
||||
|
||||
async def setup():
|
||||
init_database()
|
||||
await create_tables()
|
||||
print('Database tables created')
|
||||
|
||||
asyncio.run(setup())
|
||||
"
|
||||
}
|
||||
|
||||
# Main execution
|
||||
case "$1" in
|
||||
web)
|
||||
echo "Starting chocolate tempering machine web service..."
|
||||
|
||||
# Wait for Redis if configured
|
||||
if [ ! -z "$TEMPERING_REDIS__HOST" ]; then
|
||||
wait_for_service ${TEMPERING_REDIS__HOST:-redis} ${TEMPERING_REDIS__PORT:-6379} "Redis"
|
||||
fi
|
||||
|
||||
# Wait for PostgreSQL if configured
|
||||
if [[ "$TEMPERING_DATABASE_URL" == postgresql* ]]; then
|
||||
DB_HOST=$(echo $TEMPERING_DATABASE_URL | sed -n 's/.*@\([^:]*\).*/\1/p')
|
||||
DB_PORT=$(echo $TEMPERING_DATABASE_URL | sed -n 's/.*:\([0-9]*\).*/\1/p')
|
||||
wait_for_service ${DB_HOST:-postgres} ${DB_PORT:-5432} "PostgreSQL"
|
||||
fi
|
||||
|
||||
# Run migrations
|
||||
run_migrations
|
||||
|
||||
# Create initial data
|
||||
create_initial_data
|
||||
|
||||
# Start web service
|
||||
echo "Starting FastAPI web service..."
|
||||
exec python -m uvicorn tempering_machine.services.web.main:app \
|
||||
--host ${TEMPERING_WEB__HOST:-0.0.0.0} \
|
||||
--port ${TEMPERING_WEB__PORT:-8000} \
|
||||
--workers ${TEMPERING_WEB__WORKERS:-1} \
|
||||
--access-log
|
||||
;;
|
||||
|
||||
worker)
|
||||
echo "Starting background worker..."
|
||||
|
||||
# Wait for Redis
|
||||
wait_for_service ${TEMPERING_REDIS__HOST:-redis} ${TEMPERING_REDIS__PORT:-6379} "Redis"
|
||||
|
||||
# Start Celery worker
|
||||
exec celery -A tempering_machine.services.worker worker \
|
||||
--loglevel=${TEMPERING_LOG_LEVEL:-info} \
|
||||
--concurrency=2
|
||||
;;
|
||||
|
||||
migrate)
|
||||
echo "Running database migrations only..."
|
||||
run_migrations
|
||||
;;
|
||||
|
||||
shell)
|
||||
echo "Starting Python shell..."
|
||||
exec python -c "
|
||||
import asyncio
|
||||
from src.tempering_machine.shared.database import init_database
|
||||
from src.tempering_machine.shared.config import settings
|
||||
|
||||
print('Chocolate Tempering Machine - Python Shell')
|
||||
print(f'Environment: {settings.environment}')
|
||||
print(f'Database: {settings.database.url}')
|
||||
print('')
|
||||
|
||||
init_database()
|
||||
print('Database initialized. You can now import and use the application modules.')
|
||||
print('')
|
||||
|
||||
# Import commonly used modules
|
||||
from tempering_machine.shared.models import *
|
||||
from tempering_machine.services.hardware.hardware_manager import hardware_manager
|
||||
from tempering_machine.services.recipe.recipe_controller import recipe_controller
|
||||
from tempering_machine.services.safety.safety_monitor import safety_monitor
|
||||
|
||||
import IPython
|
||||
IPython.start_ipython(argv=[])
|
||||
"
|
||||
;;
|
||||
|
||||
test)
|
||||
echo "Running tests..."
|
||||
exec python -m pytest tests/ -v
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: $0 {web|worker|migrate|shell|test}"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " web - Start FastAPI web service (default)"
|
||||
echo " worker - Start Celery background worker"
|
||||
echo " migrate - Run database migrations only"
|
||||
echo " shell - Start interactive Python shell"
|
||||
echo " test - Run test suite"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user