Add migration services

This commit is contained in:
Urtzi Alfaro
2025-09-30 08:12:45 +02:00
parent d1c83dce74
commit ec6bcb4c7d
139 changed files with 6363 additions and 163 deletions

View File

@@ -208,6 +208,10 @@ class HealthCheckManager:
# Get connection pool information
health_status["connection_info"] = await self.database_manager.get_connection_info()
# Check migration status
migration_status = await self._check_migration_status()
health_status.update(migration_status)
# Test table existence if expected tables are configured
if self.expected_tables:
tables_verified = await self._verify_tables_exist()
@@ -266,6 +270,37 @@ class HealthCheckManager:
except Exception as e:
health_status["errors"].append(f"Error checking individual tables: {str(e)}")
async def _check_migration_status(self) -> Dict[str, Any]:
"""Check database migration status"""
migration_info = {
"migration_version": None,
"migration_status": "unknown",
"migration_errors": []
}
try:
async with self.database_manager.get_session() as session:
# Check if alembic_version table exists
result = await session.execute(
text("SELECT version_num FROM alembic_version LIMIT 1")
)
version = result.scalar()
if version:
migration_info["migration_version"] = version
migration_info["migration_status"] = "healthy"
logger.debug(f"Migration version found: {version}", service=self.service_name)
else:
migration_info["migration_status"] = "no_version"
migration_info["migration_errors"].append("No migration version found in alembic_version table")
except Exception as e:
migration_info["migration_status"] = "error"
migration_info["migration_errors"].append(f"Migration check failed: {str(e)}")
logger.error("Migration status check failed", service=self.service_name, error=str(e))
return migration_info
class FastAPIHealthChecker:
"""
@@ -315,6 +350,40 @@ class FastAPIHealthChecker:
# Convenience functions for easy integration
async def check_database_health(db_manager: DatabaseManager) -> Dict[str, Any]:
"""
Enhanced database health check with migration status
Args:
db_manager: DatabaseManager instance
Returns:
Dict containing database health status including migration version
"""
try:
async with db_manager.get_session() as session:
# Basic connectivity test
await session.execute(text("SELECT 1"))
# Get migration status
migration_status = await session.execute(text("SELECT version_num FROM alembic_version"))
version = migration_status.scalar()
return {
"database": "healthy",
"migration_version": version,
"connectivity": True
}
except Exception as e:
logger.error("Database health check failed", error=str(e))
return {
"database": "unhealthy",
"error": str(e),
"connectivity": False,
"migration_version": None
}
def create_health_manager(
service_name: str,
version: str = "1.0.0",