update
This commit is contained in:
@@ -103,7 +103,22 @@ app.add_exception_handler(Exception, general_exception_handler)
|
||||
@app.get('/health', tags=['health'])
|
||||
@app.get('/api/health', tags=['health'])
|
||||
async def health_check(db: Session=Depends(get_db)):
|
||||
health_status = {'status': 'healthy', 'timestamp': datetime.utcnow().isoformat(), 'service': settings.APP_NAME, 'version': settings.APP_VERSION, 'environment': settings.ENVIRONMENT, 'checks': {'api': 'ok', 'database': 'unknown'}}
|
||||
"""Comprehensive health check endpoint"""
|
||||
health_status = {
|
||||
'status': 'healthy',
|
||||
'timestamp': datetime.utcnow().isoformat(),
|
||||
'service': settings.APP_NAME,
|
||||
'version': settings.APP_VERSION,
|
||||
'environment': settings.ENVIRONMENT,
|
||||
'checks': {
|
||||
'api': 'ok',
|
||||
'database': 'unknown',
|
||||
'disk_space': 'unknown',
|
||||
'memory': 'unknown'
|
||||
}
|
||||
}
|
||||
|
||||
# Check database
|
||||
try:
|
||||
from sqlalchemy import text
|
||||
db.execute(text('SELECT 1'))
|
||||
@@ -120,7 +135,59 @@ async def health_check(db: Session=Depends(get_db)):
|
||||
health_status['error'] = str(e)
|
||||
logger.error(f'Health check failed: {str(e)}')
|
||||
return JSONResponse(status_code=status.HTTP_503_SERVICE_UNAVAILABLE, content=health_status)
|
||||
return health_status
|
||||
|
||||
# Check disk space (if available)
|
||||
try:
|
||||
import shutil
|
||||
disk = shutil.disk_usage('/')
|
||||
free_percent = (disk.free / disk.total) * 100
|
||||
if free_percent < 10:
|
||||
health_status['checks']['disk_space'] = 'warning'
|
||||
health_status['status'] = 'degraded'
|
||||
else:
|
||||
health_status['checks']['disk_space'] = 'ok'
|
||||
health_status['disk_space'] = {
|
||||
'free_gb': round(disk.free / (1024**3), 2),
|
||||
'total_gb': round(disk.total / (1024**3), 2),
|
||||
'free_percent': round(free_percent, 2)
|
||||
}
|
||||
except Exception:
|
||||
health_status['checks']['disk_space'] = 'unknown'
|
||||
|
||||
# Check memory (if available)
|
||||
try:
|
||||
import psutil
|
||||
memory = psutil.virtual_memory()
|
||||
if memory.percent > 90:
|
||||
health_status['checks']['memory'] = 'warning'
|
||||
if health_status['status'] == 'healthy':
|
||||
health_status['status'] = 'degraded'
|
||||
else:
|
||||
health_status['checks']['memory'] = 'ok'
|
||||
health_status['memory'] = {
|
||||
'used_percent': round(memory.percent, 2),
|
||||
'available_gb': round(memory.available / (1024**3), 2),
|
||||
'total_gb': round(memory.total / (1024**3), 2)
|
||||
}
|
||||
except ImportError:
|
||||
# psutil not available, skip memory check
|
||||
health_status['checks']['memory'] = 'unavailable'
|
||||
except Exception:
|
||||
health_status['checks']['memory'] = 'unknown'
|
||||
|
||||
# Determine overall status
|
||||
if health_status['status'] == 'healthy' and any(
|
||||
check == 'warning' for check in health_status['checks'].values()
|
||||
):
|
||||
health_status['status'] = 'degraded'
|
||||
|
||||
status_code = status.HTTP_200_OK
|
||||
if health_status['status'] == 'unhealthy':
|
||||
status_code = status.HTTP_503_SERVICE_UNAVAILABLE
|
||||
elif health_status['status'] == 'degraded':
|
||||
status_code = status.HTTP_200_OK # Still operational but degraded
|
||||
|
||||
return JSONResponse(status_code=status_code, content=health_status)
|
||||
|
||||
@app.get('/metrics', tags=['monitoring'])
|
||||
async def metrics():
|
||||
@@ -129,7 +196,7 @@ async def metrics():
|
||||
from .auth.routes import auth_routes, user_routes
|
||||
from .rooms.routes import room_routes, advanced_room_routes, rate_plan_routes
|
||||
from .bookings.routes import booking_routes, group_booking_routes
|
||||
from .payments.routes import payment_routes, invoice_routes
|
||||
from .payments.routes import payment_routes, invoice_routes, financial_routes, audit_trail_routes
|
||||
from .hotel_services.routes import service_routes, service_booking_routes
|
||||
from .content.routes import (
|
||||
banner_routes, page_content_routes, home_routes, about_routes,
|
||||
@@ -140,9 +207,10 @@ from .content.routes import (
|
||||
from .reviews.routes import review_routes, favorite_routes
|
||||
from .loyalty.routes import promotion_routes, loyalty_routes, package_routes
|
||||
from .guest_management.routes import guest_profile_routes
|
||||
from .guest_management.routes.complaint_routes import router as complaint_routes
|
||||
from .notifications.routes import chat_routes, notification_routes, email_campaign_routes
|
||||
from .analytics.routes import analytics_routes, report_routes, audit_routes
|
||||
from .security.routes import security_routes
|
||||
from .security.routes import security_routes, compliance_routes
|
||||
from .system.routes import system_settings_routes, workflow_routes, task_routes
|
||||
from .ai.routes import ai_assistant_routes
|
||||
|
||||
@@ -155,6 +223,8 @@ app.include_router(booking_routes.router, prefix=api_prefix)
|
||||
app.include_router(group_booking_routes.router, prefix=api_prefix)
|
||||
app.include_router(payment_routes.router, prefix=api_prefix)
|
||||
app.include_router(invoice_routes.router, prefix=api_prefix)
|
||||
app.include_router(financial_routes.router, prefix=api_prefix)
|
||||
app.include_router(audit_trail_routes.router, prefix=api_prefix)
|
||||
app.include_router(banner_routes.router, prefix=api_prefix)
|
||||
app.include_router(favorite_routes.router, prefix=api_prefix)
|
||||
app.include_router(service_routes.router, prefix=api_prefix)
|
||||
@@ -180,6 +250,7 @@ app.include_router(faq_routes.router, prefix=api_prefix)
|
||||
app.include_router(chat_routes.router, prefix=api_prefix)
|
||||
app.include_router(loyalty_routes.router, prefix=api_prefix)
|
||||
app.include_router(guest_profile_routes.router, prefix=api_prefix)
|
||||
app.include_router(complaint_routes, prefix=api_prefix)
|
||||
app.include_router(analytics_routes.router, prefix=api_prefix)
|
||||
app.include_router(workflow_routes.router, prefix=api_prefix)
|
||||
app.include_router(task_routes.router, prefix=api_prefix)
|
||||
@@ -188,6 +259,7 @@ app.include_router(advanced_room_routes.router, prefix=api_prefix)
|
||||
app.include_router(rate_plan_routes.router, prefix=api_prefix)
|
||||
app.include_router(package_routes.router, prefix=api_prefix)
|
||||
app.include_router(security_routes.router, prefix=api_prefix)
|
||||
app.include_router(compliance_routes.router, prefix=api_prefix)
|
||||
app.include_router(email_campaign_routes.router, prefix=api_prefix)
|
||||
app.include_router(page_content_routes.router, prefix=api_prefix)
|
||||
app.include_router(blog_routes.router, prefix=api_prefix)
|
||||
|
||||
Reference in New Issue
Block a user