Files
ai-training-monitor/backend/app/main.py
2025-01-23 08:49:16 +01:00

86 lines
2.4 KiB
Python

import logging
import platform
from datetime import datetime, timezone
import psutil
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app.api.routes import training, samples
from app.core.config import settings
from app.services.sample_manager import SampleManager
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
app = FastAPI(
title="Training Monitor API",
description="API for monitoring ML training progress and samples",
version="1.0.0",
)
# Configure CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # In production, replace with specific origins
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Create and store SampleManager instance
sample_manager = SampleManager()
app.state.sample_manager = sample_manager
@app.on_event("startup")
async def startup_event():
"""Initialize services on startup"""
logger.info("Starting up Training Monitor API")
await sample_manager.startup()
@app.on_event("shutdown")
async def shutdown_event():
"""Cleanup on shutdown"""
logger.info("Shutting down Training Monitor API")
await sample_manager.shutdown()
# 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.get("/")
async def root():
"""
Root endpoint providing API status and system information
"""
return {
"name": "Training Monitor API",
"version": "1.0.0",
"status": "operational",
"timestamp": datetime.now(timezone.utc).isoformat(),
"system_info": {
"cpu_usage": f"{psutil.cpu_percent()}%",
"memory_usage": f"{psutil.virtual_memory().percent}%",
"platform": platform.platform(),
"python": platform.python_version(),
},
"endpoints": {
"docs": "/docs",
"health": "/health",
"training_status": "/api/v1/training/status",
"training_log": "/api/v1/training/log",
"samples_list": "/api/v1/samples/list",
"samples_latest": "/api/v1/samples/latest"
}
}
@app.get("/health")
async def health_check():
return {"status": "healthy"}