Browse Source

feat(core): implement system health check endpoint

master
PouyaKhajavi 2 days ago
parent
commit
7629d8d2f4
  1. 2
      backend/config/settings.py
  2. 2
      backend/config/urls.py
  3. 41
      backend/core/views.py

2
backend/config/settings.py

@ -53,7 +53,7 @@ INSTALLED_APPS = [
] ]
MIDDLEWARE = [ MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware', # Place CORS middleware at the top
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware', 'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',

2
backend/config/urls.py

@ -16,9 +16,11 @@ Including another URLconf
""" """
from django.contrib import admin from django.contrib import admin
from django.urls import path,include from django.urls import path,include
from core.views import HealthCheckView
urlpatterns = [ urlpatterns = [
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
path('api/health/', HealthCheckView.as_view(), name='health-check'),
path('api/crawlers/', include('crawler.urls')), path('api/crawlers/', include('crawler.urls')),
path('api/ads/', include('ads.urls')), path('api/ads/', include('ads.urls')),
] ]

41
backend/core/views.py

@ -1,3 +1,40 @@
from django.shortcuts import render
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
# Create your views here.
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)
Loading…
Cancel
Save