You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

40 lines
1.3 KiB

from django.db import connection
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
import os
import redis
class HealthCheckView(APIView):
"""
Endpoint to check system health (database connection and redis connection).
"""
authentication_classes = []
permission_classes = []
def get(self, request):
db_status = "healthy"
redis_status = "healthy"
# Check Database
try:
connection.ensure_connection()
except Exception as e:
db_status = f"unhealthy: {str(e)}"
# Check Redis
try:
redis_url = os.getenv("REDIS_URL", "redis://localhost:6379/0")
r = redis.Redis.from_url(redis_url, socket_timeout=3)
r.ping()
except Exception as e:
redis_status = f"unhealthy: {str(e)}"
is_healthy = db_status == "healthy" and redis_status == "healthy"
status_code = status.HTTP_200_OK if is_healthy else status.HTTP_503_SERVICE_UNAVAILABLE
return Response({
"status": "healthy" if is_healthy else "unhealthy",
"database": db_status,
"redis": redis_status
}, status=status_code)