99 lines
3.9 KiB
Python
99 lines
3.9 KiB
Python
# app/controllers/status_controller.py
|
|
"""
|
|
HealthSync AI 헬스체크 컨트롤러 (DB 연결 기능 추가)
|
|
"""
|
|
from fastapi import APIRouter, Depends, status, Query, HTTPException
|
|
from app.controllers.base_controller import BaseController
|
|
from app.models.base import BaseResponse
|
|
from app.core.dependencies import get_settings
|
|
from app.config.settings import Settings
|
|
from app.utils.database_utils import simple_db
|
|
import time, psutil
|
|
from datetime import datetime
|
|
from typing import Dict, Any, List
|
|
|
|
class StatusController(BaseController):
|
|
"""상태체크 관련 컨트롤러 (DB 기능 포함)"""
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.router = APIRouter()
|
|
self._setup_routes()
|
|
|
|
def _setup_routes(self):
|
|
"""라우트 설정"""
|
|
|
|
@self.router.get("/check", response_model=BaseResponse,
|
|
status_code=status.HTTP_200_OK,
|
|
summary="🔧 시스템 상태 확인")
|
|
async def get_system_status(app_settings: Settings = Depends(get_settings)):
|
|
"""시스템 상태 확인"""
|
|
try:
|
|
self.log_request("system_status")
|
|
try:
|
|
memory_mb = round(psutil.Process().memory_info().rss / 1024 / 1024, 2)
|
|
except:
|
|
memory_mb = 0.0
|
|
|
|
status_data = {
|
|
"status": "running",
|
|
"service": app_settings.app_name,
|
|
"version": app_settings.app_version,
|
|
"memory_mb": memory_mb,
|
|
"environment": "development" if app_settings.debug else "production"
|
|
}
|
|
|
|
return self.create_success_response(
|
|
data=status_data,
|
|
message="서비스가 정상 동작 중입니다! 🚀"
|
|
)
|
|
|
|
except Exception as e:
|
|
self.handle_service_error(e, "system_status")
|
|
|
|
@self.router.get("/database",
|
|
response_model=BaseResponse[Dict[str, Any]],
|
|
status_code=status.HTTP_200_OK,
|
|
summary="🗄️ 데이터베이스 연결 테스트")
|
|
async def test_database_connection():
|
|
"""PostgreSQL 데이터베이스 연결 상태 확인"""
|
|
try:
|
|
self.log_request("database_connection_test")
|
|
|
|
connection_info = await simple_db.test_connection()
|
|
|
|
if connection_info.get("status") == "connected":
|
|
return self.create_success_response(
|
|
data=connection_info,
|
|
message="데이터베이스 연결이 정상입니다! 🎉"
|
|
)
|
|
else:
|
|
return self.create_success_response(
|
|
data=connection_info,
|
|
message="데이터베이스 연결에 문제가 있습니다. ⚠️"
|
|
)
|
|
|
|
except Exception as e:
|
|
self.handle_service_error(e, "database_connection_test")
|
|
|
|
@self.router.get("/tables",
|
|
response_model=BaseResponse[List[Dict[str, Any]]],
|
|
status_code=status.HTTP_200_OK,
|
|
summary="📋 테이블 목록 조회")
|
|
async def list_database_tables():
|
|
"""데이터베이스 테이블 목록 조회"""
|
|
try:
|
|
self.log_request("database_tables_list")
|
|
|
|
tables = await simple_db.list_tables()
|
|
|
|
return self.create_success_response(
|
|
data=tables,
|
|
message=f"총 {len(tables)}개의 테이블을 조회했습니다. 📊"
|
|
)
|
|
|
|
except Exception as e:
|
|
self.handle_service_error(e, "database_tables_list")
|
|
|
|
status_controller = StatusController()
|