46 lines
1.2 KiB
Python
46 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
from importlib import import_module
|
|
from sqlalchemy import text
|
|
from fastapi import APIRouter
|
|
|
|
from app.schemas.health import HealthResponse, SystemCapabilities
|
|
from app.providers.registry import list_provider_capabilities
|
|
from app.db.session import get_engine
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
def _dependency_enabled(module: str) -> bool:
|
|
try:
|
|
import_module(module)
|
|
return True
|
|
except Exception:
|
|
return False
|
|
|
|
|
|
@router.get("/health")
|
|
def readiness() -> HealthResponse:
|
|
db_status = "ok"
|
|
try:
|
|
with get_engine().connect() as connection:
|
|
connection.execute(text("SELECT 1"))
|
|
except Exception:
|
|
db_status = "degraded"
|
|
return HealthResponse(status="ok", service="geointel-backend", version="0.1.0", database=db_status)
|
|
|
|
|
|
@router.get("/api/v1/system/capabilities")
|
|
def capabilities() -> dict:
|
|
providers = [item.to_dict() for item in list_provider_capabilities()]
|
|
return {"data": SystemCapabilities(
|
|
postgis=True,
|
|
rasterio=_dependency_enabled("rasterio"),
|
|
geopandas=_dependency_enabled("geopandas"),
|
|
yolo=False,
|
|
sam=False,
|
|
grb="bounded",
|
|
sentinel="planned",
|
|
providers=providers,
|
|
).model_dump()}
|