Initial commit
This commit is contained in:
65
backend/main.py
Normal file
65
backend/main.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from fastapi import FastAPI, BackgroundTasks, HTTPException
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
from fastapi.responses import FileResponse
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
import os
|
||||
import json
|
||||
import asyncio
|
||||
import sys
|
||||
|
||||
if sys.platform == 'win32':
|
||||
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
|
||||
|
||||
from backend.scheduler import start_scheduler
|
||||
from backend.core.scanner import (
|
||||
load_json, scan_schema_for_db, scan_images_for_db_table, load_config, get_scan_status,
|
||||
SCHEMA_RESULTS_PATH, IMAGE_RESULTS_PATH
|
||||
)
|
||||
|
||||
app = FastAPI(title="DB Health & Image Sync Monitor")
|
||||
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=["*"],
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
@app.on_event("startup")
|
||||
async def startup_event():
|
||||
start_scheduler()
|
||||
|
||||
@app.get("/api/status")
|
||||
async def get_status():
|
||||
return get_scan_status()
|
||||
|
||||
@app.get("/api/schema/latest")
|
||||
async def get_schema_latest():
|
||||
return load_json(SCHEMA_RESULTS_PATH)
|
||||
|
||||
@app.get("/api/image/latest")
|
||||
async def get_image_latest():
|
||||
return load_json(IMAGE_RESULTS_PATH)
|
||||
|
||||
@app.post("/api/scan/schema/{db_name}")
|
||||
async def trigger_schema_scan(db_name: str):
|
||||
config = load_config()
|
||||
result = await scan_schema_for_db(db_name, config)
|
||||
return result
|
||||
|
||||
@app.post("/api/scan/image/{db_name}/{table_name}")
|
||||
async def trigger_image_scan(db_name: str, table_name: str):
|
||||
config = load_config()
|
||||
result = await scan_images_for_db_table(db_name, table_name, config)
|
||||
return result
|
||||
|
||||
frontend_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'frontend')
|
||||
app.mount("/static", StaticFiles(directory=frontend_dir), name="static")
|
||||
|
||||
@app.get("/")
|
||||
async def serve_index():
|
||||
return FileResponse(
|
||||
os.path.join(frontend_dir, 'index.html'),
|
||||
headers={"Cache-Control": "no-cache, no-store, must-revalidate"}
|
||||
)
|
||||
Reference in New Issue
Block a user