""" Training Service Handles ML model training for bakery demand forecasting """ import structlog from fastapi import FastAPI, BackgroundTasks from fastapi.middleware.cors import CORSMiddleware from app.core.config import settings from app.core.database import database_manager from app.api import training, models from app.services.messaging import setup_messaging, cleanup_messaging from shared.monitoring.logging import setup_logging from shared.monitoring.metrics import MetricsCollector # Setup logging setup_logging("training-service", settings.LOG_LEVEL) logger = structlog.get_logger() # Create FastAPI app app = FastAPI( title="Training Service", description="ML model training service for bakery demand forecasting", version="1.0.0" ) # Initialize metrics collector metrics_collector = MetricsCollector("training-service") # CORS middleware app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Include routers app.include_router(training.router, prefix="/training", tags=["training"]) app.include_router(models.router, prefix="/models", tags=["models"]) @app.on_event("startup") async def startup_event(): """Application startup""" logger.info("Starting Training Service") # Create database tables await database_manager.create_tables() # Initialize message publisher await setup_messaging() # Start metrics server metrics_collector.start_metrics_server(8080) logger.info("Training Service started successfully") @app.on_event("shutdown") async def shutdown_event(): """Application shutdown""" logger.info("Shutting down Training Service") # Cleanup message publisher await cleanup_messaging() logger.info("Training Service shutdown complete") @app.get("/health") async def health_check(): """Health check endpoint""" return { "status": "healthy", "service": "training-service", "version": "1.0.0" } if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)