from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.api.artifacts import router as artifacts_router from app.api.seed import router as seed_router from app.api.tags import router as tags_router from app.database import init_db from app.config import settings import logging import os # Configure logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) # Create FastAPI app app = FastAPI( title="Test Artifact Data Lake", description="API for storing and querying test artifacts including CSV, JSON, binary files, and packet captures", version="1.0.0", docs_url="/docs", redoc_url="/redoc" ) # Configure CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Include routers app.include_router(artifacts_router) app.include_router(seed_router) app.include_router(tags_router) # Note: Frontend is now served separately as an Angular application @app.on_event("startup") async def startup_event(): """Initialize database on startup""" logger.info("Initializing database...") init_db() logger.info(f"Deployment mode: {settings.deployment_mode}") logger.info(f"Using storage backend: {settings.storage_backend}") logger.info("Application started successfully") @app.get("/api") async def api_root(): """API root endpoint""" return { "message": "Test Artifact Data Lake API", "version": "1.0.0", "docs": "/docs", "deployment_mode": settings.deployment_mode, "storage_backend": settings.storage_backend } @app.get("/") async def ui_root(): """API root - Frontend is served separately""" return { "message": "Test Artifact Data Lake API", "version": "1.0.0", "docs": "/docs", "frontend": "Frontend is served separately on port 4200 (development) or via reverse proxy (production)", "deployment_mode": settings.deployment_mode, "storage_backend": settings.storage_backend } @app.get("/health") async def health_check(): """Health check endpoint""" return {"status": "healthy"} if __name__ == "__main__": import uvicorn uvicorn.run( "app.main:app", host=settings.api_host, port=settings.api_port, reload=True )