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