Merge remote-tracking branch 'origin/dev' into dev
commit
f9e3261ae8
|
@ -62,6 +62,7 @@ INSTALLED_APPS = [
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
"dvadmin.utils.middleware.HealthCheckMiddleware",
|
||||||
"django.middleware.security.SecurityMiddleware",
|
"django.middleware.security.SecurityMiddleware",
|
||||||
"whitenoise.middleware.WhiteNoiseMiddleware",
|
"whitenoise.middleware.WhiteNoiseMiddleware",
|
||||||
"django.contrib.sessions.middleware.SessionMiddleware",
|
"django.contrib.sessions.middleware.SessionMiddleware",
|
||||||
|
|
|
@ -351,11 +351,16 @@ class CustomDjangoFilterBackend(DjangoFilterBackend):
|
||||||
queries = []
|
queries = []
|
||||||
for search_term_key in filterset.data.keys():
|
for search_term_key in filterset.data.keys():
|
||||||
orm_lookup = self.find_filter_lookups(orm_lookups, search_term_key)
|
orm_lookup = self.find_filter_lookups(orm_lookups, search_term_key)
|
||||||
# print(search_term_key, orm_lookup)
|
if not orm_lookup or filterset.data.get(search_term_key) == '':
|
||||||
if not orm_lookup:
|
|
||||||
continue
|
continue
|
||||||
query = Q(**{orm_lookup: filterset.data[search_term_key]})
|
filterset_data_len = len(filterset.data.getlist(search_term_key))
|
||||||
queries.append(query)
|
if filterset_data_len == 1:
|
||||||
|
query = Q(**{orm_lookup: filterset.data[search_term_key]})
|
||||||
|
queries.append(query)
|
||||||
|
elif filterset_data_len == 2:
|
||||||
|
orm_lookup += '__range'
|
||||||
|
query = Q(**{orm_lookup: filterset.data.getlist(search_term_key)})
|
||||||
|
queries.append(query)
|
||||||
if len(queries) > 0:
|
if len(queries) > 0:
|
||||||
conditions.append(reduce(operator.and_, queries))
|
conditions.append(reduce(operator.and_, queries))
|
||||||
queryset = queryset.filter(reduce(operator.and_, conditions))
|
queryset = queryset.filter(reduce(operator.and_, conditions))
|
||||||
|
|
|
@ -2,9 +2,11 @@
|
||||||
日志 django中间件
|
日志 django中间件
|
||||||
"""
|
"""
|
||||||
import json
|
import json
|
||||||
|
import logging
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.models import AnonymousUser
|
from django.contrib.auth.models import AnonymousUser
|
||||||
|
from django.http import HttpResponse, HttpResponseServerError
|
||||||
from django.utils.deprecation import MiddlewareMixin
|
from django.utils.deprecation import MiddlewareMixin
|
||||||
|
|
||||||
from dvadmin.system.models import OperationLog
|
from dvadmin.system.models import OperationLog
|
||||||
|
@ -87,3 +89,58 @@ class ApiLoggingMiddleware(MiddlewareMixin):
|
||||||
if self.methods == 'ALL' or request.method in self.methods:
|
if self.methods == 'ALL' or request.method in self.methods:
|
||||||
self.__handle_response(request, response)
|
self.__handle_response(request, response)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
logger = logging.getLogger("healthz")
|
||||||
|
class HealthCheckMiddleware(object):
|
||||||
|
"""
|
||||||
|
存活检查中间件
|
||||||
|
"""
|
||||||
|
def __init__(self, get_response):
|
||||||
|
self.get_response = get_response
|
||||||
|
# One-time configuration and initialization.
|
||||||
|
|
||||||
|
def __call__(self, request):
|
||||||
|
if request.method == "GET":
|
||||||
|
if request.path == "/readiness":
|
||||||
|
return self.readiness(request)
|
||||||
|
elif request.path == "/healthz":
|
||||||
|
return self.healthz(request)
|
||||||
|
return self.get_response(request)
|
||||||
|
|
||||||
|
def healthz(self, request):
|
||||||
|
"""
|
||||||
|
Returns that the server is alive.
|
||||||
|
"""
|
||||||
|
return HttpResponse("OK")
|
||||||
|
|
||||||
|
def readiness(self, request):
|
||||||
|
# Connect to each database and do a generic standard SQL query
|
||||||
|
# that doesn't write any data and doesn't depend on any tables
|
||||||
|
# being present.
|
||||||
|
try:
|
||||||
|
from django.db import connections
|
||||||
|
for name in connections:
|
||||||
|
cursor = connections[name].cursor()
|
||||||
|
cursor.execute("SELECT 1;")
|
||||||
|
row = cursor.fetchone()
|
||||||
|
if row is None:
|
||||||
|
return HttpResponseServerError("db: invalid response")
|
||||||
|
except Exception as e:
|
||||||
|
logger.exception(e)
|
||||||
|
return HttpResponseServerError("db: cannot connect to database.")
|
||||||
|
|
||||||
|
# Call get_stats() to connect to each memcached instance and get it's stats.
|
||||||
|
# This can effectively check if each is online.
|
||||||
|
try:
|
||||||
|
from django.core.cache import caches
|
||||||
|
from django.core.cache.backends.memcached import BaseMemcachedCache
|
||||||
|
for cache in caches.all():
|
||||||
|
if isinstance(cache, BaseMemcachedCache):
|
||||||
|
stats = cache._cache.get_stats()
|
||||||
|
if len(stats) != len(cache._servers):
|
||||||
|
return HttpResponseServerError("cache: cannot connect to cache.")
|
||||||
|
except Exception as e:
|
||||||
|
logger.exception(e)
|
||||||
|
return HttpResponseServerError("cache: cannot connect to cache.")
|
||||||
|
|
||||||
|
return HttpResponse("OK")
|
||||||
|
|
Loading…
Reference in New Issue