Files
Tempering-Machine-Control-S…/python_rewrite/docker/entrypoint.sh
Sami Alzein c3bc2e453b 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.
2025-08-06 22:15:54 +02:00

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