import os import logging from rest_framework.views import APIView from rest_framework.generics import ListAPIView from rest_framework.response import Response from rest_framework.permissions import AllowAny from rest_framework.request import Request from rest_framework.response import Response from django.db import connection from django.utils.translation import gettext as _ from django.utils import timezone from django.views.generic import TemplateView from labs.models import SiteMaintenance from labs.api.serializers.site import SiteMaintenanceSerializer logger = logging.getLogger(__name__) class HealthCheckEndpoint(APIView): permission_classes = (AllowAny,) def get(self, request: Request) -> Response: with connection.cursor() as cursor: cursor.execute("SELECT 1") res = cursor.fetchone() assert res == (1,) return Response( { "detail": _("I am healthy!"), "backend_version": os.getenv("LABS_BACKEND_VERSION", "unknown"), } ) class SiteMaintenanceEndpoint(ListAPIView): permission_classes = (AllowAny,) serializer_class = SiteMaintenanceSerializer def get_queryset(self): return SiteMaintenance.objects.filter(end_at__gte=timezone.now()) class CaddyInstallScriptEndpoint(TemplateView): template_name = "labs/install_caddy.sh" content_type = "text/x-sh"