- 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.
134 lines
3.9 KiB
Bash
134 lines
3.9 KiB
Bash
#!/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 |