forked from erp-dev/erp
43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
import platform
|
|
from typing import Dict
|
|
|
|
from django.db import connections, DatabaseError
|
|
from django.utils import timezone
|
|
from django.utils.version import get_version
|
|
from rest_framework.response import Response
|
|
from rest_framework.views import APIView
|
|
|
|
|
|
class HealthCheckView(APIView):
|
|
"""
|
|
简单健康检查接口,返回当前服务的基础指标信息,包括:
|
|
- 应用版本
|
|
- Python/Django 版本
|
|
- 服务器时间
|
|
- 数据库连接状态
|
|
"""
|
|
|
|
authentication_classes: list = []
|
|
permission_classes: list = []
|
|
|
|
def get(self, request):
|
|
db_status: Dict[str, str] = {}
|
|
for alias in connections:
|
|
try:
|
|
connections[alias].cursor()
|
|
db_status[alias] = 'ok'
|
|
except DatabaseError as exc:
|
|
db_status[alias] = f'error: {exc.__class__.__name__}'
|
|
|
|
payload = {
|
|
'service': 'flower-api',
|
|
'status': 'ok' if all(status == 'ok' for status in db_status.values()) else 'degraded',
|
|
'server_time': timezone.now().isoformat(),
|
|
'python_version': platform.python_version(),
|
|
'django_version': get_version(),
|
|
'platform': platform.platform(),
|
|
'databases': db_status,
|
|
}
|
|
return Response(payload)
|
|
|