Backend Implementation:
- Service model with comprehensive fields (name, url, type, status, health_endpoint)
- Complete CRUD API endpoints for service management
- Health check mechanism with httpx and response time tracking
- Service status tracking (healthy/unhealthy/unknown)
- Service type categorization (backend, frontend, database, cache, etc.)
API Endpoints:
- GET /api/services - Get all services
- POST /api/services - Create new service
- GET /api/services/{id} - Get service by ID
- PUT /api/services/{id} - Update service
- DELETE /api/services/{id} - Delete service
- POST /api/services/{id}/health-check - Check specific service health
- POST /api/services/health-check/all - Check all services health
Frontend Preparation:
- TypeScript type definitions for Service
- Service API client with full CRUD methods
- Health check client methods
Files Added:
- backend/app/models/service.py - Service data model
- backend/app/schemas/service.py - Request/response schemas
- backend/app/services/service_service.py - Business logic
- backend/app/routes/services.py - API route handlers
- frontend/src/types/service.ts - TypeScript types
- frontend/src/api/service.ts - API client
Updated:
- backend/app/main.py - Added services router
- docs/PROGRESS.md - Added Phase 2 status
Next: Frontend UI implementation (Services list page, Add/Edit modal, Health monitoring)
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
101 lines
2.2 KiB
Python
101 lines
2.2 KiB
Python
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from contextlib import asynccontextmanager
|
|
import logging
|
|
|
|
from .core.config import settings
|
|
from .db.mongodb import MongoDB
|
|
from .routes import auth, services
|
|
|
|
# Configure logging
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
|
)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
"""Application lifespan manager"""
|
|
# Startup
|
|
logger.info("🚀 Starting Console Backend...")
|
|
|
|
try:
|
|
# Connect to MongoDB
|
|
await MongoDB.connect()
|
|
logger.info("✅ MongoDB connected successfully")
|
|
|
|
except Exception as e:
|
|
logger.error(f"❌ Failed to connect to MongoDB: {e}")
|
|
raise
|
|
|
|
yield
|
|
|
|
# Shutdown
|
|
logger.info("👋 Shutting down Console Backend...")
|
|
await MongoDB.disconnect()
|
|
|
|
|
|
# Create FastAPI app
|
|
app = FastAPI(
|
|
title=settings.APP_NAME,
|
|
version=settings.APP_VERSION,
|
|
description="Site11 Console - Central management system for news generation pipeline",
|
|
lifespan=lifespan
|
|
)
|
|
|
|
# CORS middleware
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=settings.CORS_ORIGINS if not settings.DEBUG else ["*"],
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
# Include routers
|
|
app.include_router(auth.router)
|
|
app.include_router(services.router)
|
|
|
|
|
|
# Health check endpoints
|
|
@app.get("/")
|
|
async def root():
|
|
"""Root endpoint"""
|
|
return {
|
|
"message": f"Welcome to {settings.APP_NAME}",
|
|
"version": settings.APP_VERSION,
|
|
"status": "running"
|
|
}
|
|
|
|
|
|
@app.get("/health")
|
|
async def health_check():
|
|
"""Health check endpoint"""
|
|
return {
|
|
"status": "healthy",
|
|
"service": "console-backend",
|
|
"version": settings.APP_VERSION
|
|
}
|
|
|
|
|
|
@app.get("/api/health")
|
|
async def api_health_check():
|
|
"""API health check endpoint for frontend"""
|
|
return {
|
|
"status": "healthy",
|
|
"service": "console-backend-api",
|
|
"version": settings.APP_VERSION
|
|
}
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import uvicorn
|
|
uvicorn.run(
|
|
"app.main:app",
|
|
host="0.0.0.0",
|
|
port=8000,
|
|
reload=settings.DEBUG
|
|
)
|