Coverage for backend/core/auxiliary/views/HealthChecks.py: 38%
30 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-11-06 23:27 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-11-06 23:27 +0000
1from drf_spectacular.utils import extend_schema
2from rest_framework.response import Response
3from rest_framework.decorators import api_view, permission_classes, renderer_classes
4from rest_framework import status, permissions
5from django.db import connection
7@extend_schema(exclude=True)
8@api_view(['GET'])
9@permission_classes([permissions.AllowAny])
10def get_api_status(request):
11 return Response({
12 'status': 'ok',
13 })
15@extend_schema(exclude=True)
16@api_view(['GET'])
17@permission_classes([permissions.AllowAny])
18def check_db_connectivity(request):
20 try:
22 # Check database connection
23 with connection.cursor() as cursor:
24 cursor.execute("SELECT 1")
25 result = cursor.fetchone()
27 if result[0] == 1:
28 dbStatus = "connected"
29 else:
30 dbStatus = "error"
32 if dbStatus != "error":
34 # Get Database uptime
35 with connection.cursor() as cursor:
36 cursor.execute("SELECT date_trunc('second', current_timestamp - pg_postmaster_start_time()) as uptime;")
37 dbUptime = cursor.fetchone()
39 # Get Database version
40 with connection.cursor() as cursor:
41 dbVersion = cursor.connection.server_version
43 # Return information on database and api
44 return Response({
45 'status': 'ok',
46 'database': {
47 'status': dbStatus,
48 'uptime': dbUptime,
49 'version': dbVersion,
50 },
51 })
53 except Exception as ex:
55 return Response({
56 'status': 'error',
57 'error_message': str(ex),
58 }, status=status.HTTP_500_INTERNAL_SERVER_ERROR)