feat: add SBAS AOI discovery and result management

This commit is contained in:
2026-05-28 22:06:08 +08:00
parent 9f0ba325f9
commit 0b7a875ba8
18 changed files with 4100 additions and 62 deletions
+27 -1
View File
@@ -19,6 +19,7 @@ from .services.pairing_state_service import pairing_state_service
from .services.psinsar_catalog_service import psinsar_catalog_service
from .services.result_catalog_service import result_catalog_service
from .services.root_registry_service import root_registry_service
from .services.sbas_insar_catalog_service import sbas_insar_catalog_service
@asynccontextmanager
@@ -83,6 +84,18 @@ async def lifespan(app: FastAPI):
"queued": False,
"error": str(exc),
}
try:
sbas_catalog_bootstrap = await sbas_insar_catalog_service.bootstrap_catalog_on_startup_clean()
except Exception as exc:
sbas_catalog_bootstrap = {
"storage_root": settings.GAMMA_SBAS_WORK_ROOT,
"manifest_count": 0,
"db_count": 0,
"needs_rebuild": False,
"rebuilt": False,
"queued": False,
"error": str(exc),
}
try:
pairing_bootstrap = await pairing_state_service.bootstrap_pairing_cache_state()
except Exception as exc:
@@ -178,6 +191,17 @@ async def lifespan(app: FastAPI):
)
if ps_catalog_bootstrap.get("error"):
print(f">>> [Timeseries Catalog] Startup bootstrap failed: {ps_catalog_bootstrap['error']}")
print(
">>> [Gamma SBAS Catalog] root={0} runs={1} db={2} rebuild={3} rebuilt={4}".format(
sbas_catalog_bootstrap.get("storage_root") or "?",
sbas_catalog_bootstrap.get("manifest_count", 0),
sbas_catalog_bootstrap.get("db_count", 0),
"YES" if sbas_catalog_bootstrap.get("needs_rebuild") else "NO",
"YES" if sbas_catalog_bootstrap.get("rebuilt") else "NO",
)
)
if sbas_catalog_bootstrap.get("error"):
print(f">>> [Gamma SBAS Catalog] Startup bootstrap failed: {sbas_catalog_bootstrap['error']}")
print(
">>> [Pairing] status={0} scenes={1} pairs={2} dirty={3} metric={4} rebuild={5}".format(
pairing_bootstrap.get("status") or "?",
@@ -214,17 +238,19 @@ async def lifespan(app: FastAPI):
health.get("timeseries_result_catalog", {})
or health.get("psinsar_result_catalog", {})
).get("ok")
sbas_catalog_ok = health.get("sbas_insar_result_catalog", {}).get("ok")
pairing_ok = health.get("pairing_system", {}).get("ok")
idl_ok = health.get("idl", {}).get("ok")
product_packages_ok = health.get("product_packages", {}).get("ok")
wsl_runtime_ok = health.get("wsl_runtime", {}).get("ok")
print(
">>> [Health] DB:{0} Schema:{1} Worker:{2} DInSAR-Catalog:{3} Timeseries-Catalog:{4} Packages:{5} WSL:{6} Pairing:{7} IDL:{8}".format(
">>> [Health] DB:{0} Schema:{1} Worker:{2} DInSAR-Catalog:{3} Timeseries-Catalog:{4} SBAS-Catalog:{5} Packages:{6} WSL:{7} Pairing:{8} IDL:{9}".format(
"OK" if db_ok else "FAIL",
"OK" if schema_ok else "FAIL",
"OK" if worker_ok else "FAIL",
"OK" if dinsar_catalog_ok else "FAIL",
"OK" if psinsar_catalog_ok else "FAIL",
"OK" if sbas_catalog_ok else "FAIL",
"OK" if product_packages_ok else "FAIL",
"OK" if wsl_runtime_ok else "FAIL",
"OK" if pairing_ok else "FAIL",