Add config parsing support in backend
Signed-off-by: Felipe Cardoso <felipe.cardoso@hotmail.it>
This commit is contained in:
@@ -6,8 +6,9 @@ import psutil
|
||||
from fastapi import FastAPI
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
|
||||
from app.api.routes import training, samples
|
||||
from app.api.routes import training, samples, config
|
||||
from app.core.config import settings
|
||||
from app.services.config_manager import ConfigManager
|
||||
from app.services.sample_manager import SampleManager
|
||||
from app.services.training_monitor import TrainingMonitor
|
||||
|
||||
@@ -35,17 +36,60 @@ app.add_middleware(
|
||||
# Create and store SampleManager instance
|
||||
sample_manager = SampleManager()
|
||||
training_monitor = TrainingMonitor()
|
||||
config_manager = ConfigManager()
|
||||
|
||||
app.state.sample_manager = sample_manager
|
||||
app.state.training_monitor = training_monitor
|
||||
app.state.config_manager = config_manager
|
||||
|
||||
|
||||
async def initialize_services():
|
||||
"""
|
||||
Initializes all service managers in the correct order, ensuring dependencies
|
||||
are properly set up before they're needed.
|
||||
"""
|
||||
logger.info("Starting services initialization...")
|
||||
|
||||
# First, initialize config manager as other services might need configuration
|
||||
config_manager = ConfigManager()
|
||||
app.state.config_manager = config_manager
|
||||
|
||||
try:
|
||||
# Load initial configuration
|
||||
config = await config_manager.get_config()
|
||||
logger.info(f"Configuration loaded successfully for job: {config.job}")
|
||||
|
||||
# Store config in app state for easy access
|
||||
app.state.training_config = config
|
||||
|
||||
# Initialize other managers with access to config
|
||||
sample_manager = SampleManager()
|
||||
training_monitor = TrainingMonitor()
|
||||
|
||||
# Store managers in app state
|
||||
app.state.sample_manager = sample_manager
|
||||
app.state.training_monitor = training_monitor
|
||||
|
||||
# Start the managers
|
||||
await sample_manager.startup()
|
||||
await training_monitor.startup()
|
||||
|
||||
logger.info("All services initialized successfully")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to initialize services: {str(e)}")
|
||||
# Re-raise to prevent app from starting with partially initialized services
|
||||
raise
|
||||
|
||||
|
||||
@app.on_event("startup")
|
||||
async def startup_event():
|
||||
"""Initialize services on startup"""
|
||||
"""
|
||||
Startup event handler that ensures all services are properly initialized
|
||||
before the application starts accepting requests.
|
||||
"""
|
||||
logger.info("Starting up Training Monitor API")
|
||||
await sample_manager.startup()
|
||||
await training_monitor.startup()
|
||||
await initialize_services()
|
||||
|
||||
|
||||
|
||||
@@ -60,6 +104,7 @@ async def shutdown_event():
|
||||
# Include routers with versioning
|
||||
app.include_router(training.router, prefix=f"{settings.API_VER_STR}/training", tags=["training"])
|
||||
app.include_router(samples.router, prefix=f"{settings.API_VER_STR}/samples", tags=["samples"])
|
||||
app.include_router(config.router, prefix=f"{settings.API_VER_STR}/config", tags=["config"])
|
||||
|
||||
|
||||
@app.get("/")
|
||||
|
||||
Reference in New Issue
Block a user