From 7a712bd29ba549a6e2c5e6abb1e64bd7cdbf7e87 Mon Sep 17 00:00:00 2001 From: orenzhang Date: Mon, 13 Oct 2025 17:25:15 +0800 Subject: [PATCH] refactor(home): remove log record for health ping --- apps/account/views.py | 2 +- apps/home/urls.py | 3 ++- apps/home/views.py | 37 +++++++++++++++++++++++++++++++++++++ entry/settings.py | 1 + 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/apps/account/views.py b/apps/account/views.py index b5c62b7..612f38d 100644 --- a/apps/account/views.py +++ b/apps/account/views.py @@ -135,7 +135,7 @@ def sign_up(self, request, *args, **kwargs): password=request_data["password"], nick_name=request_data["nick_name"], phone_number=request_data["phone_number"], - email_address=f"{request_data["username"]}@{urlparse(settings.BACKEND_URL).hostname}", + email_address=f"{request_data['username']}@{urlparse(settings.BACKEND_URL).hostname}", ) # bind wechat diff --git a/apps/home/urls.py b/apps/home/urls.py index 510dada..8a23d46 100644 --- a/apps/home/urls.py +++ b/apps/home/urls.py @@ -1,9 +1,10 @@ from rest_framework.routers import DefaultRouter -from apps.home.views import HomeView, I18nViewSet, MetaConfigViewSet +from apps.home.views import HealthViewSet, HomeView, I18nViewSet, MetaConfigViewSet router = DefaultRouter() router.register("", HomeView) +router.register("", HealthViewSet, basename="health") router.register("i18n", I18nViewSet, basename="i18n") router.register("meta", MetaConfigViewSet) diff --git a/apps/home/views.py b/apps/home/views.py index 9f786d0..5a297f0 100644 --- a/apps/home/views.py +++ b/apps/home/views.py @@ -1,15 +1,23 @@ from django.conf import settings from django.conf.global_settings import LANGUAGE_COOKIE_NAME from django.contrib.auth import get_user_model +from django.core.cache import cache +from django.db import connection from django.db.models import Q +from django_redis.cache import RedisCache from ovinc_client.core.auth import SessionAuthenticate +from ovinc_client.core.logger import logger from ovinc_client.core.viewsets import MainViewSet +from redis import ConnectionError as RedisConnectionError +from rest_framework import status +from rest_framework.decorators import action from rest_framework.response import Response from apps.account.models import User from apps.home.models import MetaConfig from apps.home.serializers import I18nRequestSerializer, MetaConfigQuerySerializer +cache: RedisCache USER_MODEL: User = get_user_model() @@ -20,6 +28,7 @@ class HomeView(MainViewSet): queryset = USER_MODEL.get_queryset() authentication_classes = [SessionAuthenticate] + enable_record_log = False def list(self, request, *args, **kwargs): msg = f"[{request.method}] Connect Success" @@ -31,6 +40,34 @@ def list(self, request, *args, **kwargs): ) +class HealthViewSet(MainViewSet): + """ + Health Check + """ + + authentication_classes = [] + enable_record_log = False + + @action(methods=["GET"], detail=False) + def health(self, request, *args, **kwargs): + # database ping + try: + connection.ensure_connection() + except Exception as err: # pylint: disable=broad-except + logger.exception("[Healthy] database connection error: %s", err) + return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR, data="database connection error") + # redis ping + try: + result = cache.client.get_client().ping() + if not result: + raise RedisConnectionError("redis ping failed") + except Exception as err: # pylint: disable=broad-except + logger.exception("[Healthy] redis connection error: %s", err) + return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR, data="redis connection error") + # success + return Response() + + class I18nViewSet(MainViewSet): """ International diff --git a/entry/settings.py b/entry/settings.py index 41d920a..adf3d88 100644 --- a/entry/settings.py +++ b/entry/settings.py @@ -57,6 +57,7 @@ ] # MIDDLEWARE +# pylint: disable=C0103 MIDDLEWARE = [ "corsheaders.middleware.CorsMiddleware", "ovinc_client.core.middlewares.CSRFExemptMiddleware",