parent
89ebd0bd5d
commit
089db2863f
@ -1,42 +1,42 @@
|
|||||||
import logging
|
import logging #ZNY 导入日志模块
|
||||||
import time
|
import time #ZNY 导入时间模块
|
||||||
|
|
||||||
from ipware import get_client_ip
|
from ipware import get_client_ip #ZNY 导入获取客户端IP的工具
|
||||||
from user_agents import parse
|
from user_agents import parse #ZNY 导入解析用户代理的工具
|
||||||
|
|
||||||
from blog.documents import ELASTICSEARCH_ENABLED, ElaspedTimeDocumentManager
|
from blog.documents import ELASTICSEARCH_ENABLED, ElaspedTimeDocumentManager #ZNY 导入Elasticsearch配置和性能文档管理器
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__) #ZNY 获取当前模块的日志记录器
|
||||||
|
|
||||||
|
|
||||||
class OnlineMiddleware(object):
|
class OnlineMiddleware(object): #ZNY 定义在线中间件类
|
||||||
def __init__(self, get_response=None):
|
def __init__(self, get_response=None): #ZNY 初始化方法
|
||||||
self.get_response = get_response
|
self.get_response = get_response #ZNY 存储get_response函数
|
||||||
super().__init__()
|
super().__init__() #ZNY 调用父类初始化
|
||||||
|
|
||||||
def __call__(self, request):
|
def __call__(self, request): #ZNY 使实例可调用,处理请求
|
||||||
''' page render time '''
|
''' page render time ''' #ZNY 页面渲染时间统计
|
||||||
start_time = time.time()
|
start_time = time.time() #ZNY 记录请求开始时间
|
||||||
response = self.get_response(request)
|
response = self.get_response(request) #ZNY 调用后续中间件和视图处理请求
|
||||||
http_user_agent = request.META.get('HTTP_USER_AGENT', '')
|
http_user_agent = request.META.get('HTTP_USER_AGENT', '') #ZNY 获取用户代理字符串
|
||||||
ip, _ = get_client_ip(request)
|
ip, _ = get_client_ip(request) #ZNY 获取客户端IP地址
|
||||||
user_agent = parse(http_user_agent)
|
user_agent = parse(http_user_agent) #ZNY 解析用户代理信息
|
||||||
if not response.streaming:
|
if not response.streaming: #ZNY 如果不是流式响应
|
||||||
try:
|
try:
|
||||||
cast_time = time.time() - start_time
|
cast_time = time.time() - start_time #ZNY 计算总处理时间
|
||||||
if ELASTICSEARCH_ENABLED:
|
if ELASTICSEARCH_ENABLED: #ZNY 如果Elasticsearch已启用
|
||||||
time_taken = round((cast_time) * 1000, 2)
|
time_taken = round((cast_time) * 1000, 2) #ZNY 转换为毫秒并保留两位小数
|
||||||
url = request.path
|
url = request.path #ZNY 获取请求路径
|
||||||
from django.utils import timezone
|
from django.utils import timezone #ZNY 导入时区工具
|
||||||
ElaspedTimeDocumentManager.create(
|
ElaspedTimeDocumentManager.create( #ZNY 创建性能记录文档
|
||||||
url=url,
|
url=url, #ZNY 请求URL
|
||||||
time_taken=time_taken,
|
time_taken=time_taken, #ZNY 耗时
|
||||||
log_datetime=timezone.now(),
|
log_datetime=timezone.now(), #ZNY 当前时间
|
||||||
useragent=user_agent,
|
useragent=user_agent, #ZNY 用户代理信息
|
||||||
ip=ip)
|
ip=ip) #ZNY IP地址
|
||||||
response.content = response.content.replace(
|
response.content = response.content.replace( #ZNY 在响应内容中替换占位符
|
||||||
b'<!!LOAD_TIMES!!>', str.encode(str(cast_time)[:5]))
|
b'<!!LOAD_TIMES!!>', str.encode(str(cast_time)[:5])) #ZNY 将加载时间插入到指定位置
|
||||||
except Exception as e:
|
except Exception as e: #ZNY 捕获异常
|
||||||
logger.error("Error OnlineMiddleware: %s" % e)
|
logger.error("Error OnlineMiddleware: %s" % e) #ZNY 记录错误日志
|
||||||
|
|
||||||
return response
|
return response #ZNY 返回响应对象
|
||||||
|
|||||||
Loading…
Reference in new issue