Add migration services
This commit is contained in:
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user